docker学习笔记(1)

docker学习笔记(1)

1. docker run / docker create / docker start 三个命令有何区别

1.1 docker run

docker run就是docker create和docker start两个命令的组合。

image

1.2 docker create

docker create命令为指定的镜像image添加了一个可读写层,构成了一个新的容器。注意,这个容器并没有运行。

image


image

1.3 docker start

Docker start命令为容器文件系统创建了一个进程隔离空间。每一个容器只能够有一个进程隔离空间。

image

2. docker rm / docker kill 有何区别

2.1 docker rm

docker rm命令会移除构成容器的可读写层。注意,这个命令只能对非运行态容器执行。

image

2.2 docker kill

docker kill 命令向运行在容器中的指定进程发送了一个不友好的SIGKILL信号。

image

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 命令行中替换此默认命令。

你可能感兴趣的:(docker学习笔记(1))