参考和引用:容器常用命令
新建并启动容器[重要]
一些常用的选项
- -d:表示后台运行
- -P:随机映射一个容器的端口(如果EXPOSE有声明,就是声明的端口)
- -p:指定端口映射
- ip:hostPort:containerPort
- ip::containerPort
- hostPort:containerPort
- containerPort
- –network选项:指定网络模式,该选项有以下可选参数:
- –network=bridge: 默认选项,表示连接到默认的网桥。
- –network=host:容器使用宿主机的网络。
- –network=container:NAME_or_ID:告诉Docker让新建的容器使用已有容器的网络配置。
- –network=none:不配置该容器的网络,用户可自定义网络配置。
- –name: 指定启动容器的名称
- -v 挂载主机的目录到容器
-v /usr:/abc
将主机的/abc目录挂载到容器的/usr
eg:注:1
docker run -d -p 91:80 nginx
需要注意的是,使用docker run命令创建容器时,会先检查本地是否存在指定镜像。如果本地不存在该名称的镜像,Docker就会自动从Docker Hub下载镜像并启动一个Docker容器。
列出容器[重要]
使用docker ps 命令即可列出运行中的容器。执行该命令后,可看到类似于如下的表格。
1 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
如需列出所有容器(包括已停止的容器),可使用-a参数。
该表格包含了七列,含义如下:
① CONTAINER_ID:表示容器ID。
② IMAGE:表示镜像名称。
③ COMMAND:表示启动容器时运行的命令。
④ CREATED:表示容器的创建时间。
⑤ STATUS:表示容器运行的状态。Up表示运行中,Exited表示已停止。
⑥ PORTS:表示容器对外的端口号。
⑦ NAMES:表示容器名称。该名称默认由Docker自动生成,也可使用docker run命令的–name选项自行指定。
命令格式:
1 | docker ps [OPTIONS] |
参数:
Name, shorthand | Default | Description |
---|---|---|
--all, -a |
false |
列出所有容器,包括未运行的容器,默认只展示运行的容器 |
--filter, -f |
根据条件过滤显示内容 | |
--format |
通过Go语言模板文件展示镜像 | |
--last, -n |
-1 |
显示最近创建n个容器(包含所有状态) |
--latest, -l |
false |
显示最近创建的容器(包含所有状态) |
--no-trunc |
false |
不截断输出 |
--quiet, -q |
false |
静默模式,只展示容器的编号 |
--size, -s |
false |
显示总文件大小 |
停止容器[重要]
使用docker stop
命令,即可停止容器
命令格式:
1 | docker stop [OPTIONS] CONTAINER [CONTAINER...] |
参数:
Name, shorthand | Default | Description |
---|---|---|
--time, -t |
10 |
强制杀死容器前等待的时间,单位是秒 |
eg:
1 | docker stop 784fd3b294d7 |
其中784fd3b294d7 是容器ID,当然也可使用docker stop 容器名称 来停止指定容器
强制停止容器[重要]
可使用docker kill
命令停止一个或更多运行着的容器
命令格式:
1 | docker kill [OPTIONS] CONTAINER [CONTAINER...] |
参数:
Name, shorthand | Default | Description |
---|---|---|
--signal, -s |
KILL |
向容器发送一个信号 |
启动已停止的容器[重要]
使用docker run
命令,即可新建并启动一个容器。对于已停止的容器,可使用docker start
命令来启动。
命令格式:
1 | docker start [OPTIONS] CONTAINER [CONTAINER...] |
参数:
Name, shorthand | Default | Description |
---|---|---|
--attach, -a |
false |
连接STDOUT/STDERR并转发信号 |
--checkpoint |
从该检查点还原 | |
--checkpoint-dir |
使用自定义的检查点存储目录 | |
--detach-keys |
覆盖断开容器的关键顺序 | |
--interactive, -i |
false |
连接容器的STDIN |
重启容器[重要]
可使用docker restart
命令来重启容器。该命令实际上是先执行了docker stop
命令,然后执行了docker start
命令。
命令格式:
1 | docker restart [OPTIONS] CONTAINER [CONTAINER...] |
参数:
Name, shorthand | Default | Description |
---|---|---|
--time, -t |
10 |
关闭容器前等待的时间,单位是秒 |
进入容器[重要]
某场景下,我们可能需要进入运行中的容器。
① 使用docker attach 命令进入容器。
例如:
1 | docker attach 784fd3b294d7 |
很多场景下,使用docker attach
命令并不方便。当多个窗口同时attach到同一个容器时,所有窗口都会同步显示。同理,如果某个窗口发生阻塞,其他窗口也无法执行操作。
② 使用nsenter
进入容器
nsenter工具包含在util-linux 2.23或更高版本中。为了连接到容器,我们需要找到容器第一个进程的PID,可通过以下命令获取
1 | docker inspect --format "{{.State.Pid}}" $CONTAINER_ID |
获得PID后,就可使用nsenter命令进入容器了:
1 | nsenter --target "$PID" --mount --uts --ipc --net --pid |
读者也可将以上两条命令封装成一个Shell,从而简化进入容器的过程
③ docker exec
1 | docker exec -it 容器id /bin/bash |
退出容器
①在容器中输入exit;
②ctrl+p+q
删除容器[重要]
使用docker rm
命令即可删除指定容器。
命令格式
1 | docker rm [OPTIONS] CONTAINER [CONTAINER...] |
参数:
Name, shorthand | Default | Description |
---|---|---|
--force, -f |
false |
通过SIGKILL信号强制删除正在运行中的容器 |
--link, -l |
false |
删除容器间的网络连接 |
--volumes, -v |
false |
删除与容器关联的卷 |
例1:删除指定容器。
1 | docker rm 784fd3b294d7 |
该命令只能删除已停止的容器,如需删除正在运行的容器,可使用-f参数。
例2:删除所有的容器。
1 | docker rm -f $(docker ps -a -q) |
导出容器
将容器导出成一个压缩包文件。
命令格式:
1 | docker export [OPTIONS] CONTAINER |
参数:
Name, shorthand | Default | Description |
---|---|---|
--output, -o |
将内容写到文件而非STDOUT |
示例:
1 | docker export red_panda > latest.tar |
导入容器
使用docker import
命令即可从归档文件导入内容并创建镜像。
命令格式:
1 | docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]] |
参数:
Name, shorthand | Default | Description |
---|---|---|
--change, -c |
将Dockerfile指令应用到创建的镜像 | |
--message, -m |
为导入的镜像设置提交信息 |
示例:
1 | docker import nginx2.tar nginx |
拓展阅读