Docker简要

介绍Docker基本使用方法,附带实现在Docker中运行前端项目开发环境的方法。

下载

新手推荐下载桌面版,可视化操作更简单,很多指令可以通过可视化进行。下载地址

Docker命令

建议通过docker 指令名称 --help查看详细的指令信息。这里简单列举大概有哪些。

简单示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 下载 redis 镜像
docker pull redis
# 根据 reids 镜像生成端口从内部6378映射到外部6379的容器,其名为 myredis
docker run -itd --name myredis -p 6378:6379 redis
# 查看当前的容器,获取CONTAINER ID
docker ps
# 根据容器id,进入容器内部
docker exec -it CONTAINERID bash/sh
# 重启/停止容器
docker restart/stop CONTAINERID
# 根据容器id,删除容器
docker rm -f CONTAINERID
# 删除本地redis镜像
docker rmi redis

容器生命周期

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 创建一个新的容器并运行一个命令  
# -t: 在新容器内指定一个伪终端或终端。
# -i: 允许你对容器内的标准输入 (STDIN) 进行交互
# -d: 后台运行
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run -itd --name customName -p 3000:3000 nginx:latest

# 启动一个或多个已经被停止的容器
docker start [OPTIONS] CONTAINER [CONTAINER...]

# 停止一个运行中的容器
docker stop [OPTIONS] CONTAINER [CONTAINER...]

# 重启容器
docker restart [OPTIONS] CONTAINER [CONTAINER...]

# 杀掉一个运行中的容器
docker kill [OPTIONS] CONTAINER [CONTAINER...]
docker kill mynginx

# 删除一个或多个容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]

# 暂停容器中所有的进程
docker pause CONTAINER [CONTAINER...]

# 恢复容器中所有的进程
docker unpause CONTAINER [CONTAINER...]

# 创建一个新的容器但不启动它,语法同run
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

# 在运行的容器中执行命令
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec -it xxxid bash/sh

容器操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 列出容器  
docker ps [OPTIONS]
docker ps -a

# 获取容器/镜像的元数据
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
docker inspect mysql:5.6

# 查看容器中运行的进程信息,支持 ps 命令参数
docker top [OPTIONS] CONTAINER [ps OPTIONS]

# 连接到正在运行中的容器
docker attach [OPTIONS] CONTAINER

# 从服务器获取实时事件
docker events [OPTIONS]

# 获取容器的日志
docker logs [OPTIONS] CONTAINER

# 阻塞运行直到容器停止,然后打印出它的退出代码
docker wait [OPTIONS] CONTAINER [CONTAINER...]

# 将文件系统作为一个tar归档文件导出到STDOUT
docker export [OPTIONS] CONTAINER

# 用于列出指定的容器的端口映射,或者查找将 PRIVATE_PORT NAT 到面向公众的端口
docker port [OPTIONS] CONTAINER [PRIVATE_PORT/PROTO]

# 显示容器资源的使用情况,包括:CPU、内存、网络 I/O等
docker stats [OPTIONS] [CONTAINER...]

容器rootfs命令

1
2
3
4
5
6
7
8
# 从容器创建一个新的镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

# 用于容器与主机之间的数据拷贝
docker cp

# 检查容器里文件结构的更改
docker diff [OPTIONS] CONTAINER

镜像仓库

1
2
3
4
5
6
7
8
9
10
11
12
13
# 登陆/登出到一个Docker镜像仓库
docker login/logout [OPTIONS] [SERVER]

# 从镜像仓库中拉取或者更新指定镜像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
docker pull ngnix

# 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
docker push [OPTIONS] NAME[:TAG]
docker push myimage:v1

# 从Docker Hub查找镜像
docker search [OPTIONS] TERM

镜像指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 列出本地镜像
docker images [OPTIONS] [REPOSITORY[:TAG]]

# 删除本地一个或多个镜像
docker rmi [OPTIONS] IMAGE [IMAGE...]

# 标记本地镜像,将其归入某一仓库
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

# 命令用于使用 Dockerfile 创建镜像
docker build [OPTIONS] PATH | URL | -
docker build -t imgageName .

# 查看指定镜像的创建历史
docker history [OPTIONS] IMAGE

# 将指定镜像保存成 tar 归档文件
docker save [OPTIONS] IMAGE [IMAGE...]

# 导入使用 docker save 命令导出的镜像
docker load [OPTIONS]

# 从归档文件中创建镜像
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

# 显示 Docker 系统信息,包括镜像和容器数
docker info [OPTIONS]

# 显示 Docker 版本信息
docker version [OPTIONS]

Dockerfile

创建一个名字为Dockerfile的文件。

简单示例

一个依赖node的应用在docker中运行。其中的很多运行命令需要根据项目调整。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 拉取最新的node版本,可以指定版本
FROM node:alpine
# 创建一个app文件夹
RUN mkdir -p /app
# 设置工作目录为app
WORKDIR /app
# 拷贝当前项目到该文件夹下
COPY . /app
# 可以设置淘宝镜像
RUN npm i --registry=https://registry.npm.taobao.org
# 安装依赖
RUN npm install
# 运行前端打包指令
RUN npm run build
# 运行项目
CMD ["npm","start"]

指令

1
2
3
4
5
6
7
8
FROM:定制的镜像都是基于 FROM 的镜像,等同于 docker pull 
RUN:用于执行后面跟着的命令行命令。eg:RUN yarn(执行yarn依赖下载) 换行链接符 \
COPY:将文件或目录复制到镜像中
CMD:指定容器创建时的默认命令
ENV:在容器内部设置环境变量
WORKDIR:设置后续指令的工作目录
VOLUME:为容器创建挂载点或声明卷
ARG:定义在构建过程中传递给构建器的变量,可使用 "docker build" 命令设置

docker compose

docker-compose.yml文件类似与Dockerfile文件,是另一种更快捷的配置文件。可以参考官网详情

举例

下面举例一种vue项目在docker环境中进行开发,本地文件改变时项目会热更新。

配置docker-compose

项目根目录放置docker-compose.yaml文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
version: '3'
services:
vueapp:
restart: always
image: vueapp:0.0.1
container_name: vueapp
environment:
# - NODE_ENV=production
- NODE_ENV=development
build:
context: ./
ports:
# 映射容器的8080端口到本地的8080端口
- 8080:8080
volumes:
- ./src:/app/src
#- ./node_modules:/app/node_modules
command: "npm run serve"

配置Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
# 使用官方的Node.js镜像作为基础镜像
FROM node:latest
# 创建app文件夹
RUN mkdir -p /app
# 设置工作目录为/app
WORKDIR /app
# 拷贝文件到该目录
COPY . /app
# 安装项目依赖
RUN npm install
# 启动开发服务器
CMD ["npm", "run", "serve"]

启动命令

1
2
3
4
5
6
7
8
9
# 根据当前根目录项目构建项目,加-d可后台运行,如果没有镜像会构建镜像同时启动容器
docker-compose up -d
docker-compose up --force-recreate # 强制清空启动

# 关闭正在运行的容器
docker-compose down

# 重启容器
docker-compose restart

补充

.dockerignore文件和.gitignore类似,用来处理docker要忽略的文件。

------本文结束 感谢阅读------