docker学习笔记(1)
1. docker run / docker create / docker start 三个命令有何区别
1.1 docker run <image-id>
docker run就是docker create和docker start两个命令的组合。
1.2 docker create <image-id>
docker create命令为指定的镜像image添加了一个可读写层,构成了一个新的容器。注意,这个容器并没有运行。
1.3 docker start <container-id>
Docker start命令为容器文件系统创建了一个进程隔离空间。每一个容器只能够有一个进程隔离空间。
2. docker rm / docker kill 有何区别
2.1 docker rm <container-id>
docker rm命令会移除构成容器的可读写层。注意,这个命令只能对非运行态容器执行。
2.2 docker kill <container-id>
docker kill 命令向运行在容器中的指定进程发送了一个不友好的SIGKILL信号。
3. Dockerfile 中的 ENTRYPOINT 和 CMD 有何区别
可用两种方式指定 ENTRYPOINT 和 CMD 要运行的命令:Shell 格式和 Exec 格式,推荐使用 Exec 格式,因为可读性更强。
3.1 ENTRYPOINT
ENTRYPOINT 指令可让容器以应用程序或者服务的形式运行。
ENTRYPOINT 不会被忽略,一定会被执行,即使运行 docker run 时指定了其他命令。
ENTRYPOINT 中的参数始终会被使用,而 CMD 的额外参数可以在容器启动时动态替换掉。
3.2 CMD
CMD 指令允许用户指定容器的默认执行的命令。
- 此命令会在容器启动且 docker run 没有指定其他命令时运行。
- 如果 docker run 指定了其他命令,CMD 指定的默认命令将被忽略。
例如 docker run -it [image] /bin/bash,CMD 会被忽略掉,命令 bash 将被执行。
- 如果 Dockerfile 中有多个 CMD 指令,只有最后一个 CMD 有效。
3.3 最佳实践
- 使用 RUN 指令安装应用和软件包,构建镜像。
- 如果 Docker 镜像的用途是运行应用程序或服务,比如运行一个 MySQL,应该优先使用 Exec 格式的 ENTRYPOINT 指令。CMD 可为 ENTRYPOINT 提供额外的默认参数,同时可利用 docker run 命令行替换默认参数。
- 如果想为容器设置默认的启动命令,可使用 CMD 指令。用户可在 docker run 命令行中替换此默认命令。