1. 创建容器

1.1 新建容器

新建一个容器:

docker [container] create 

例:docker create xxx

参数信息:

  • -l, --label=[]:以键值对方式指定容器的标签信息
  • –label-file=[]:从文件中读取标签信息

使用docker [container] create命令新建的容器处于停止状态,可以使用docker [container]start命令来启动它。

1.2 启动容器

使用docker [container] start命令来启动一个已经创建的容器。

docker start xxx

1.3 新建并启动容器

除了创建容器后通过start命令来启动,也可以用 docker [container] run 直接新建并启动容器。

等价于先执行docker [container] create命令,再执行docker [container] start命令。

当利用docker [container] run来创建并启动容器时,Docker在后台运行的标准操作包括:

  1. 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  2. 利用镜像创建一个容器,并启动该容器
  3. 分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层
  4. 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  5. 从网桥的地址池配置一个IP地址给容器
  6. 执行用户指定的应用程序
  7. 执行完毕后容器被自动终止

1.4 守护态运行

更多的时候,需要让Docker容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加-d参数来实现。

docker [container] run -d xxx

1.5 查看容器输出

要获取容器的输出信息,可以通过docker[container] logs命令。

docker logs xxx

参数:

  • -details:打印详细信息
  • -f, -follow:持续保持输出
  • -since string:输出从某个时间开始的日志
  • -tail string:输出最近的若干日志
  • -t, -timestamps:显示时间戳信息
  • -until string:输出某个时间之前的日志

2. 停止容器

2.1 暂停容器

docker [container] pause CONTAINER [CONTAINER...]

例:docker pause xxx

处于paused状态的容器,可以使用docker[container] unpause CONTAINER [CONTAINER…]命令来恢复到运行状态。

2.2 终止容器

使用docker [container] stop来终止一个运行中的容器。该命令的格式为docker [container]stop [-t|–time[=10]] [CONTAINER…]。

docker stop xxx

该命令会首先向容器发送SIGTERM信号,等待一段超时时间后(默认为10秒),再发送SIGKILL信号来终止容器。

此外,还可以通过docker [container] kill直接发送SIGKILL信号来强行终止容器。

3. 进入容器

在使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作。

3.1 attach命令

docker入门与开发实战 docker技术入门实战_运维

docker attach xxx

参数:

  • –detach-keys[=[]]:指定退出attach模式的快捷键序列,默认是CTRL-p CTRL-q
  • –no-stdin=true|false:是否关闭标准输入,默认是保持打开
  • –sig-proxy=true|false:是否代理收到的系统信号给应用进程,默认为true

注意 : 当多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示;当某个窗口因命令阻塞时,其他窗口也无法执行操作了。

3.2 exec命令

docker入门与开发实战 docker技术入门实战_运维_02

docker exec -it xxx

参数:

  • -d, --detach:在容器中后台执行命令
  • –detach-keys="":指定将容器切回后台的按键
  • -e, --env=[]:指定环境变量列表
  • -i, --interactive=true|false:打开标准输入接受用户输入命令,默认值为false
  • –privileged=true|false:是否给执行命令以高权限,默认值为false
  • -t, --tty=true|false:分配伪终端,默认值为false
  • -u, --user="":执行命令的用户名或ID
  • -it:保持标准输入打开,并且分配一个伪终端。

4. 删除容器

docker[container] rm [-f|--force] [-l|--link] [-v|--volumes] CONTAINER [CONTAINER...]

例:docker rm [-f xxx

参数:

  • -f, --force=false:是否强行终止并删除一个运行中的容器
  • -l, --link=false:删除容器的连接,但保留容器
  • -v, --volumes=false:删除容器挂载的数据卷

默认情况下,docker rm命令只能删除已经处于终止或退出状态的容器,并不能删除还处于运行状态的容器。

如果要直接删除一个运行中的容器,可以添加-f参数。Docker会先发送SIGKILL信号给容器,终止其中的应用,之后强行删除。

5. 导入和导出容器

5.1 导出容器

导出容器是指,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态。可以使用docker [container] export命令,该命令格式为:

docker入门与开发实战 docker技术入门实战_默认值_03

docker export -o xxx.tar xx

参数:

  • -o:指定导出的tar文件名,也可以直接通过重定向来实现

5.2 导入容器

导出的文件又可以使用docker [container]import命令导入变成镜像,该命令格式为:

docker入门与开发实战 docker技术入门实战_运维_04


可以使用docker load命令来导入镜像存储文件到本地镜像库,也可以使用docker[container] import命令来导入一个容器快照到本地镜像库。

这两者的区别在于:容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积更大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

6. 查看容器

6.1 查看容器详情

docker container inspect [OPTIONS] CONTAINER[CONTAINER...]

例:docker container inspect xxx

6.2 查看容器内进程

docker [container] top[OPTIONS] CONTAINER [CONTAINER...]

例:docker top xxx

这个子命令类似于Linux系统中的top命令,会打印出容器内的进程信息,包括PID、用户、时间、命令等。

6.3 查看统计信息

docker [container] stats [OPTIONS] [CONTAINER...]

会显示CPU、内存、存储、网络等使用情况的统计信息。

参数:

  • -a, -all:输出所有容器统计信息,默认仅在运行中
  • -format string:格式化输出信息
  • -no-stream:不持续输出,默认会自动更新持续实时结果
  • -no-trunc:不截断输出信息

7. 其他容器命令

7.1 复制文件

container cp命令支持在容器和主机之间复制文件。命令格式:

docker [container] cp[OPTIONS] CONTAINER:SRC_PATHDEST_PATH|-

参数:

  • -a, -archive:打包模式,复制文件会带有原始的uid/gid信息
  • -L, -follow-link:跟随软连接。当原路径为软连接时,默认只复制链接信息,使用该选项会复制链接的目标内容

例如,将本地的路径data复制到test容器的/tmp路径下:

docker [container] cp data test:/tmp/

7.2 查看变更

container diff查看容器内文件系统的变更。命令格式为docker [container] diff CONTAINER。

例:docker container diff xxx

7.3 查看端口映射

ontainer port命令可以查看容器的端口映射情况。命令格式:

docker container port CONTAINER [PRIVATE_PORT[/PROTO]]

例:docker container port xxx

7.4 更新配置

container update命令可以更新容器的一些运行时配置,主要是一些资源限制份额。命令格式:

docker [container] update [OPTIONS]CONTAINER [CONTAINER...]

参数:

  • -blkio-weight uint16:更新块IO限制,10~1000,默认值为0,代表着无限制
  • -cpu-period int:限制CPU调度器CFS(Completely Fair Scheduler)使用时间,单位为微秒,最小1000
  • -cpu-quota int:限制CPU调度器CFS配额,单位为微秒,最小1000
  • -cpu-rt-period int:限制CPU调度器的实时周期,单位为微秒
  • -cpu-rt-runtime int:限制CPU调度器的实时运行时,单位为微秒