状态查询

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 可以简单的查看当前的使用资源
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
#上面的命令中我们只输出了 Name, CPUPerc 和 Memusage 三列。下面是自定义的格式中可以使用的所有占位符:
# .Container    根据用户指定的名称显示容器的名称或 ID。
# .Name           容器名称。
# .ID                 容器 ID。
# .CPUPerc       CPU 使用率。
# .MemUsage  内存使用量。
# .NetIO           网络 I/O。       
# .BlockIO        磁盘 I/O。
# .MemPerc     内存使用率。
# .PIDs             PID 号。
# 根据自己的需要,自定义查询语句

基本命令

 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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 查看docker的版本
docker version

# 查看镜像
docker images

# 删除镜像
docker rmi 镜像ID或者镜像名称

# 删除过滤的镜像,例如:none
docker rmi -f $(docker images | grep "none" | awk '{print $3}')

# 删除所有的镜像
docker rmi $(docker images -q)

# 保存镜像
# anaconda_sqlserver.tar 保存的文件名称
# conda 保存的镜像
# sqlserver 保存的镜像
docker save -o anaconda_sqlserver.tar conda sqlserver

# 加载镜像
docker load -i anaconda_sqlserver.tar

# 查看运行的容器
docker ps

# 查看所有的容器包括停止的
docker ps -a

# 删除容器
docker rm 容器ID或者容器名称

# 删除所有的容器
docker rm $(docker ps -aq)

# 强制删除容器
docker rm -f conda

# 停止所有的容器
docker stop $(docker ps -aq)

# 进入容器终端
docker exec -it 容器ID或者容器名称  /bin/bash

# 查看容器日志
docker logs 容器ID或者容器名称

# 拷贝文件
docker cp 文件路径 容器ID或者容器名称:容器内的路径

# 构建容器
docker build -t xxx:1.0 .

# 容器构建镜像
$ docker commit \
    --author "tangfeizz@outlook.com" \
    --message "修改了默认网页" \
    webserver \
    nginx:v2
# 临时跑容器,结束后删除,--rm 和 -d 不能同时使用
# -d 后台运行
docker run -it --rm org.pzy/base_os:1.0 /bin/bash

批量打包

1
2
3
4
5
# 镜像批量打包
docker save $(docker images | grep -v REPOSITORY | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o haha.tar

# 加载镜像
docker load -i haha.tar

构建镜像

 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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 名词解释

# 第一条指令必须为 FROM 指令。并且,如果在同一个Dockerfile中创建多个镜像时,可以使用多个 FROM 指令(每个镜像一次)。
FROM

# 格式为 ENV <key> <value>。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持
ENV

# 前者将在 shell 终端中运行命令,即 /bin/sh -c;后者则使用 exec 执行。指定使用其它终端可以通过第二种方式实现,例如 RUN ["/bin/bash", "-c", "echo hello"]
RUN

# 支持三种格式
# CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;
# CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
# CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;
# 指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。
# 如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。
CMD

# 格式为 ADD <src> <dest>。
# 该命令将复制指定的 <src> 到容器中的 <dest>。 其中 <src> 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)。
ADD

# 格式为 COPY <src> <dest>。
# 复制本地主机的 <src>(为 Dockerfile 所在目录的相对路径)到容器中的 <dest>。
# 当使用本地目录为源目录时,推荐使用 COPY
COPY

# 告诉 Docker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口
EXPOSE

# 两种格式:
# ENTRYPOINT ["executable", "param1", "param2"]
# ENTRYPOINT command param1 param2(shell中执行)。
# 配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
# 每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效
ENTRYPOINT

# 格式为 VOLUME ["/data"]。
# 创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
VOLUME

# 格式为 USER daemon。
# 指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。
# 当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如:RUN groupadd -r postgres && useradd -r -g postgres postgres。要临时获取管理员权限可以使用 gosu,而不推荐 sudo。
USER

# 格式为 WORKDIR /path/to/workdir。
# 为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。
# 可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径
WORKDIR

构建pm2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 安装pm2,同目录下下载git源码
# git clone https://github.com/nvm-sh/nvm.git
ADD nvm /opt/nvm
RUN chmod +x /opt/nvm/nvm.sh

ENV NVM_DIR /opt/nvm
# 这里指定的nodejs版本是14.18
ENV NODE_VERSION 14.18

# Install nvm with node and npm
RUN /opt/nvm/install.sh \
    && source $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default \
    && npm install pm2 -g

# 注意,这里配置环境变量,主要是为了在docker run 后面的命令可使用一些命令,包括一些执行脚本
ENV PATH="/opt/nvm/versions/node/v14.18.0/bin:${PATH}"

FAQ

持续更新