容器是镜像的一个运行实例。
镜像是静态的只读文件,而容器带有运行时需要的可写文件层。
4.1 创建容器
1. 新建容器
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
选项:
https://docs.docker.com/engine/reference/commandline/create/
选项主要分为以下几类:
- 与容器运行模式相关
- 与容器和环境配置相关
- 与容器资源限制和安全保护相关
使用 docker create 命令新建的容器初始时处于停止状态,可使用 docker start 命令来启动它。
2. 启动容器
docker start [OPTIONS] CONTAINER [CONTAINER...]
选项:
| Name, shorthand | Default | Description |
|---|---|---|
--attach , -a |
Attach STDOUT/STDERR and forward signals | |
--checkpoint |
experimental (daemon) Restore from this checkpoint |
|
--checkpoint-dir |
experimental (daemon) Use a custom checkpoint storage directory |
|
--detach-keys |
Override the key sequence for detaching a container | |
--interactive , -i |
Attach container’s STDIN |
3. 新建并启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
等价于 docker create + docker start 。因此其选项也是两者的结合体。
当执行 docker run 时,Docker后台运行的操作包括:
- 检查本地是否存在指定的镜像,如果不存在就下载。
- 利用镜像创建一个容器,并启动该容器。
- 分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读可写层(?)。
- 从宿主主机配置的网桥接口中桥接一个虚拟接口道容器中。
- 从网桥的地址池配置一个IP地址给容器。
- 执行用户指定的应用程序。
- 执行完毕后容器被自动终止。
例1:启动容器,执行命令,然后关闭容器:
docker run ubuntu /bin/echo 'Hello World'
例2:启动容器,进入交互模式:
docker run -it ubuntu /bin/bash
其中, -i 表示让容器的标准输入保持打开。 -t 表示让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上。
交互模式下,退出容器:按 Ctrl + d 或输入 exit 命令。退出后容器自动处于退出( Exited )状态。
4. 守护态运行
以守护态(Daemonized)运行于后台。添加 -d 参数。
例:
docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
守护态运行的容器状态是 up 。
4.2 终止容器
渐进终止:docker stop
先向容器发送SIGTERM信号,等待一段时间(默认10秒)后,再发送SIGKILL信号。
docker stop [OPTIONS] CONTAINER [CONTAINER...]
选项:
| Name, shorthand | Default | Description |
|---|---|---|
--time , -t |
10 |
Seconds to wait for stop before killing it |
直接终止:docker kill
直接向容器发送SIGKILL信号。
docker kill [OPTIONS] CONTAINER [CONTAINER...]
选项:
| Name, shorthand | Default | Description |
|---|---|---|
--signal , -s |
KILL |
Signal to send to the container |
重启
处于终止(退出)状态的容器,可以通过 docker start 命令来重新启动。
另外, docker restart 命令可作用与运行中的容器,先终止,再启动。
4.3 进入容器
在使用 -d 参数以守护态启动容器时,用户无法看到容器中的信息,也无法进行操作。如果想要进入容器进行操作,有以下方式。
1. attach命令
功能:将本地标准输入、标准输出、标准错误流与一个运行中的容器关联。
docker attach [OPTIONS] CONTAINER
选项:
| Name, shorthand | Default | Description |
|---|---|---|
--detach-keys |
指定推出attach模式的快捷键序列。默认是CTRL+p。注意是推出attach模式,不是终止容器。 | |
--no-stdin |
false |
是否不关联标准输入。默认是false。用于一些只读场景。 |
--sig-proxy |
true |
是否代理所有收到的系统信号给应用进程。 |
2. exec命令
功能:在容器中执行一条命令。
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
选项:
| Name, shorthand | Default | Description |
|---|---|---|
--detach , -d |
Detached mode: run command in the background | |
--detach-keys |
Override the key sequence for detaching a container | |
--env , -e |
API 1.25+ Set environment variables |
|
--interactive , -i |
Keep STDIN open even if not attached | |
--privileged |
Give extended privileges to the command | |
--tty , -t |
Allocate a pseudo-TTY | |
--user , -u |
Username or UID (format: |
|
--workdir , -w |
API 1.35+ Working directory inside the container |
例:执行打开终端命令:
docker exec -it my-container /bin/bash
3. nsente工具
4.4 删除容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
选项:
| Name, shorthand | Default | Description |
|---|---|---|
--force , -f |
false | 强制终止一个运行中的容器 (uses SIGKILL) |
--link , -l |
false | 删除容器的连接,但保留容器 |
--volumes , -v |
false | 删除容器关联的数据卷 |
4.5 导入和导出容器
某些时候,需要将容器从一个系统迁移到另外一个系统,此时可以使用Dockerde导入和导出功能。
1. 导出容器
功能:将一个容器(无论容器处于什么状态)导出为一个tar文件。
docker export [OPTIONS] CONTAINER
选项:
| Name, shorthand | Default | Description |
|---|---|---|
--output , -o |
Write to a file, instead of STDOUT |
注意,该命令不会导出容器关联的Volume的内容。https://docs.docker.com/v17.12/engine/reference/commandline/export/#parent-command
2. 导入容器
功能:从一个文件导入一个镜像。
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
选项:
| Name, shorthand | Default | Description |
|---|---|---|
--change , -c |
Apply Dockerfile instruction to the created image | |
--message , -m |
Set commit message for imported image |
注意区别 docker save/load 和 docker export/import 。前者操作的目标是镜像,后者操作的目标是容器。不过 docker import 通过容器快照导入的依然是镜像,而非直接启动一个容器。
