docker容器命令详解
1.创建容器
docker create [OPTIONS] IMAGE [COMMAND] [ARG…]
注:这个命令选项倒是很多,但是只创建并不启动,一般用于新建一个容器时对它提前进行配置。它的选项和run差不多,这里就不列举了,因为有些选项搭配是看不到效果的,下面用run列举,它们选项相通的很多。详情的话可以看帮助文档(–help)和官方文档。
2.列出容器
docker ps [OPTIONS]
| 参数 | 含义 |
|---|---|
| -a, --all | 显示所有容器(默认显示刚刚运行) |
| -f, --filter filter | 过滤输出内容 |
| –format string | 使用Go模板美化打印输出信息 |
| -n, --last int | 显示最后创建的容器,默认为1 |
| -l, --latest | 显示最新创建的容器 |
| –no-trunc | 不截断输出信息 |
| -q, --quiet | 仅输出容器id |
| -s, --size | 显示总文件大小 |
例:
使用-f选项过滤输出信息,支持过滤的选项挺多这里就列举几个
root@cp:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82b7f93ed1c0 ubuntu:latest "/bin/bash" 25 seconds ago Up 24 seconds ubuntu
3c8cec98e61a centos:latest "/bin/bash" 33 seconds ago Up 32 seconds centos
1e706b40d28c test:0.1 "/bin/bash" 2 minutes ago Exited (0) 6 seconds ago test
使用name匹配容器名称,匹配包含u或者t的容器名称。
root@cp:~# docker ps -f name=u
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82b7f93ed1c0 ubuntu:latest "/bin/bash" 25 seconds ago Up 24 seconds ubuntu
root@cp:~# docker ps -f name=t
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82b7f93ed1c0 ubuntu:latest "/bin/bash" 25 seconds ago Up 24 seconds ubuntu
3c8cec98e61a centos:latest "/bin/bash" 33 seconds ago Up 32 seconds centos
使用status匹配容器状态
root@cp:~# docker ps -f status=running
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82b7f93ed1c0 ubuntu:latest "/bin/bash" 25 seconds ago Up 24 seconds ubuntu
3c8cec98e61a centos:latest "/bin/bash" 33 seconds ago Up 32 seconds centos
root@cp:~# docker ps -f status=exited
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1e706b40d28c test:0.1 "/bin/bash" 2 minutes ago Exited (0) 6 seconds ago test
使用ancestor匹配容器基于的镜像
root@cp:~# docker ps -f ancestor=ubuntu
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82b7f93ed1c0 ubuntu:latest "/bin/bash" 25 seconds ago Up 24 seconds ubuntu
root@cp:~# docker ps -a -f ancestor=test:0.1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1e706b40d28c test:0.1 "/bin/bash" 16 minutes ago Exited (0) 13 minutes ago test
使用–format打印出指定格式
root@cp:~# docker ps --format "{{.ID}} : {{.Image}} : {{.Status}}"
82b7f93ed1c0 : ubuntu:latest : Up 20 minutes
3c8cec98e61a : centos:latest : Up 20 minutes
3.启动容器
docker start [OPTIONS] CONTAINER [CONTAINER…]
| 参数 | 含义 |
|---|---|
| -a, --attach | 绑定到标准输入、输出和错误 |
| -i, --interactive | 保存标准输入打开 |
例:
root@cp:~# docker create -it test:0.1
ca7e654fd7baa0e4d74a0b91901f8679aa50d9dc36d2be9d45bd44b6aa9d6fc9
root@cp:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca7e654fd7ba test:0.1 "/bin/bash" 3 seconds ago Created eloquent_bell
root@cp:~# docker start -ai ca7e
root@ca7e654fd7ba:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
4.新建并启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
(这里列举基本常用的,详细自行–help)
| 参数 | 含义 |
|---|---|
| -a, --attach | 绑定到标准输入、输出和错误 |
| -d, --detach | 在后台运行容器,会返回容器id |
| -i, --interactive | 保存标准输入打开 |
| -t, --tty | 为容器分配一个伪输入终端 |
| –name string | 指定容器别名 |
| –restart string | 容器的重启策略,有always、no、on-failure、on-failure:、nless-stopped |
| -p, --publish list | 把本地主机指定端口映射到容器端口上 |
| -P, --publish-all | 把本地主机随机端口映射到容器端口上 |
| –link list | 链接容器 |
注:一般-it要一起用,单独使用-i是没问题,但是标准输入格式不理想;而单独使用-t会无法识别输入的命令。
例:
创建并运行一个容器,命名为test。
root@cp:~# docker run --name test test:0.1
root@cp:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a15d03f04c8e test:0.1 "/bin/bash" 3 seconds ago Exited (0) 5 seconds ago test
但是发现容器并没有运行,这是因为Docker容器同时只能管理一个进程,如果这个进程退出那么容器也就退出了,除非容器运行的命令是那些一 直挂起的命令(top、watch),不然就是会自动退出。所以要使容器不退出必须有一个前台执行的进程,即Docker容器后台运行,就必须有一个前台进程。
当然可以加-d选项后台运行,同样不会退出,但单独使用-d,因为没用前台进程,容器状态会是退出状态,而且启动不了,一般和-it一起用。
一般是使用ctrl+p和ctrl+q组合键进行退出,这样容器是不会终止,不要用exit和ctrl+d容器就不会终止。
root@cp:~# docker run -it test:0.1 watch uptime
Every 2.0s: uptime 8decccd734ea: Sat Jul 20 12:20:27 2019
12:20:27 up 7:13, 0 users, load average: 0.12, 0.10, 0.08
^C
root@cp:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8decccd734ea test:0.1 "watch uptime" About a minute ago Up About a minute fervent_shaw
root@cp:~# docker run -itd test:0.1
acc7e83edd73a50bb90cb8edaba6d4f440d7b72c027eddae91b780e5058253c4
root@cp:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
acc7e83edd73 test:0.1 "/bin/bash" 4 seconds ago Up 3 seconds laughing_carson
使用--restart选项使docker 容器开机自启。
注:
• no,默认策略,在容器退出时不重启容器
• on-failure,在容器非正常退出时(退出状态非0),才会重启容器
• on-failure:x,在容器非正常退出时重启容器,最多重启x次
• always,在容器退出时总是重启容器
• unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
rot@cp:~# docker run -itd --restart always test:0.1
6d116d04f4dd764e9cf5d32eba455264d679f096a63e0ba7be963acf9e81b783
root@cp:~# docker run -itd test:0.1
72499115bc6259d72ae303966b71d780116d54d2e0585ec251501d7ca43dda36
root@cp:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
72499115bc62 test:0.1 "/bin/bash" 6 seconds ago Up 5 seconds practical_allen
6d116d04f4dd test:0.1 "/bin/bash" About a minute ago Up About a minute reverent_antonelli
root@cp:~# systemctl stop docker
root@cp:~# systemctl restart docker
root@cp:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
72499115bc62 test:0.1 "/bin/bash" 29 seconds ago Exited (0) 7 seconds ago practical_allen
6d116d04f4dd test:0.1 "/bin/bash" About a minute ago Up 2 seconds reverent_antonelli
使用-p选项进行端口映射,把本地5000端口映射到容器5000端口上。
root@cp:~# docker run -itdp --name test 10000:80 ubuntu:latest
f19aff0b1d351a869926405a5c4d97343d42722793614df5c824bca5b3d3563e
root@cp:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f19aff0b1d35 ubuntu:latest "/bin/bash" About a minute ago Up About a minute 0.0.0.0:10000->80/tcp test
还可以将指定地址的端口映射到容器端口上。
root@cp:~# docker run -itdp 192.168.18.25:10000:80 ubuntu:latest
1a79ce17ce8947d7a4ea906d6ff4754764abab182fc71672767ef6dc04298d10
root@cp:~# docker ps -l --format {{.Ports}}
192.168.18.25:10000->80/tcp
不指定端口会随机分配一个端口映射到容器中,可以在后面指定协议。
root@cp:~# docker run -itdp 192.168.18.25::80/udp ubuntu:latest
c62702d74df2b2ebc2aa31c4ae925274f361a7fd03fb63f02e13f032c243ca4f
root@cp:~# docker ps -l --format {{.Ports}}
192.168.18.25:32768->80/udp
使用–link选项将web和mysql两个容器链接。注:–link 容器名字:别名
root@cp:~# docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=000000 mysql:latest
8f9ca208ab54d47b090582933008a6c0447ebc4e7bee49677187b963f9848bea
root@cp:~# docker run -d -P --name web --link mysql:mysql nginx:latest
b297695e12a1ef8a5716892df3c715fc633d7aceab8d843bdb416d43eba6ba37
root@cp:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b297695e12a1 nginx:latest "nginx -g 'daemon of…" 7 seconds ago Up 6 seconds 0.0.0.0:32781->80/tcp web
8f9ca208ab54 mysql:latest "docker-entrypoint.s…" 36 seconds ago Up 35 seconds 3306/tcp, 33060/tcp mysql
root@cp:~# docker inspect -f {{.HostConfig.Links}} web
[/mysql:/web/mysql]
root@cp:~# docker run -d -P --name web1 --link mysql:mysql1 nginx:latest
1c8181cc1aaf5b3e49d08996328d3f73ebd1925f83569c635a9e486ae1b72b31
root@cp:~# docker inspect -f {{.HostConfig.Links}} web1
[/mysql:/web1/mysql1]
5.暂停容器
docker pause CONTAINER [CONTAINER…]
例:
root@cp:~# docker run -itd test:0.1
b75c2940c0ae325bb3910da100dacae885ba20cc8b0550d5349ba39f948723c0
root@cp:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b75c2940c0ae test:0.1 "/bin/bash" 5 seconds ago Up 3 seconds dazzling_bell
root@cp:~# docker pause b
b
root@cp:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b75c2940c0ae test:0.1 "/bin/bash" 14 seconds ago Up 12 seconds (Paused) dazzling_bell
6.终止容器
docker stop [OPTIONS] CONTAINER [CONTAINER…]
注:这个命令首先会向容器发送SIGTERM信号,会默认等待10秒超时时间(这个时间可以用-t参数控制),然后再会发出SIGKILL信号来终止容器。至于SIGTERM和SIGKILL可以理解为正常退出和强制退出。
root@cp:~# docker run -itd test:0.1
b75c2940c0ae325bb3910da100dacae885ba20cc8b0550d5349ba39f948723c0
root@cp:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d7ae1b72657 test:0.1 "/bin/bash" About a minute ago Up 1 second gifted_borg
root@cp:~# docker stop 2
2
root@cp:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d7ae1b72657 test:0.1 "/bin/bash" 14 seconds ago Exited (0) 7 seconds ago gifted_borg
7.进入容器
(1)
docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
| 参数 | 含义 |
|---|---|
| -d, --detach | 容器后台执行命令 |
| -i, --interactive | 保存标准输入打开 |
| -t, --tty | 为容器分配一个伪输入终端 |
| –detach-keys string | 指定将容器后台切回后台的按键 |
| -e, --env list | 指定环境变量列表 |
| -u, --user string | 执行命令的用户或id |
| –privileged | 是否给执行命令以最高权限 |
| -w, --workdir string | 指定命令运行在容器的某个工作目录 |
注:进入的容器要是处于运行状态的,不然会报错。不同于run的是,通过这个命令进入容器,退出容器是不会终止的。
例:
root@cp:~# docker exec -it 2 /bin/bash
root@2d7ae1b72657:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@74f32de23641:/# exit
root@cp:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d7ae1b72657 test:0.1 "/bin/bash" 2 minutes ago Up 41 seconds gifted_borg
指定命令运行在容器的root目录下。
root@cp:~# docker exec -w /root f touch 55
root@cp:~# docker exec -it f bash
root@f3afa14e79e9:/# cd /root
root@f3afa14e79e9:~# ls
55
(2)
docker attach [OPTIONS] CONTAINER
| 参数 | 含义 |
|---|---|
| –detach-keys string | 重写用于分离容器的密钥序列 |
| –no-stdin | 不附加标准输入 |
| –sig-proxy | 代理所有接收到的信号给应用进程 |
注:这个命令进入容器退出会导致容器停止运行。不同于exec命令,多个终端attach到同一个容器,所有终端会同步显示,但是如果一个终端应命令阻塞,其他终端是无法执行操作的。
例:
root@cp:~# docker attach d
root@d46261cdc223:/# exit
exit
root@cp:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d46261cdc223 test:0.1 "/bin/bash" 14 seconds ago Exited (0) 2 seconds ago focused_elion
8.删除容器
docker rm [OPTIONS] CONTAINER [CONTAINER…]
| 参数 | 含义 |
|---|---|
| -f, --force | 强行删除运行的容器 |
| -l, --link | 删除容器的链接 |
| -v, --volumes | 删除容器挂载的卷 |
9.导出容器
docker export [OPTIONS] CONTAINER
| 参数 | 含义 |
|---|---|
| -o, --output string | 强行删除运行的容器 |
例:
root@cp:~# docker export -o test.tar d462
root@cp:~# ls
app perf.data registry_latest.tar test.tar
10.导入容器
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
| 参数 | 含义 |
|---|---|
| -c, --change list | 应用Dockerfile指令到将要创建的镜像。支持的Dockerfile指令为CMD |
| -m, --message string | 提交时的说明文字 |
注:将导出的容器再导入是镜像。
例:
root@cp:~# docker export -o ubuntu-test.tar f64f48e5e7e4
root@cp:~# ls
app perf.data registry_latest.tar test_0.1.tar ubuntu-test.tar
root@cp:~# docker import -m ubuntu-test ubuntu-test.tar ubuntu:test
sha256:e65d543c77fdaf8b6f6f65805ca7af4140c95186b2bc44cba61f2809c44b3671
root@cp:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu test e65d543c77fd 2 seconds ago 64.2MB
root@cp:~# docker inspect ubuntu:test | grep test
"ubuntu:test"
"Comment": "ubuntu-test",
11.查看容器详情
docker container inspect [OPTIONS] CONTAINER [CONTAINER…]
| 参数 | 含义 |
|---|---|
| -f, --format string | 使用给定的Go模板格式化输出 |
| -s, --size | 显示总文件大小 |
例:
查看容器的的创建时间
root@cp:~# docker inspect --format {{.Created}} 5ea2bdb36b
2019-07-26T13:34:20.248043403Z
12.查看容器日志输出
docker logs [OPTIONS] CONTAINER
| 参数 | 含义 |
|---|---|
| –details | 打印详细信息 |
| -f, --follow | 持续保持日志输出 |
| –since string | 输出从某个时间开始的日志 |
| –until string | 输出某个时间之前的日志 |
| –tail string | 输出最近的若干日志 |
| -t, --timestamps | 显示时间戳信息 |
13.查看容器统计信息
docker stats [OPTIONS] [CONTAINER…]
| 参数 | 含义 |
|---|---|
| -a, --all | 打印详细信息 |
| –format string | 使用Go模板美化打印输出信息 |
| –no-stream | 不持续输出,默认会自动更新持续实时结果 |
| –no-trunc | 不截断输出信息 |
例:
root@cp:~# docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
f4da56d4fbcd amazing_cohen 0.01% 3.398MiB / 1.924GiB 0.17% 3.28kB / 0B 13.5MB / 0B 3
14.查看容器内的进程
docker top CONTAINER [ps OPTIONS]
例:
root@cp:~# docker top 7e
UID PID PPID C STIME TTY TIME CMD
root 2917 2900 0 09:52 ? 00:00:00 /usr/bin/s6-svscan /service
root 3001 2917 0 09:52 ? 00:00:00 s6-supervise cattle
root 3002 2917 0 09:52 ? 00:00:00 s6-supervise graphite_exporter
root 3003 2917 0 09:52 ? 00:00:00 s6-supervise mysql
root 3177 3004 0 09:53 ? 00:00:27 websocket-proxy
root 3184 3004 0 09:53 ? 00:00:10 go-machine-service
root 3185 3004 0 09:53 ? 00:00:00 secrets-api server --enc-key-path .
root 3186 3004 0 09:53 ? 00:00:00 telemetry client
root 3187 3004 0 09:53 ? 00:00:00 webhook-service
15.查看容器文件系统上文件或目录的更改
docker diff CONTAINER
注:A——添加了一个文件或目录;B——文件或目录被删除;C——文件或目录已更改
例:
root@cp:~# docker diff 7e
C /etc
C /etc/mysql
C /etc/mysql/my.cnf
C /service
C /service/mysql
A /service/mysql/event
A /service/mysql/supervise
A /service/mysql/supervise/control
A /service/mysql/supervise/lock
A /service/mysql/supervise/status
16.容器和主机间的文件复制
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
| 参数 | 含义 |
|---|---|
| -a, --archive | 复制文件带原始的的uid/gid信息 |
| -L, --follow-link | 复制链接的目标内容,不然只复制链接(软链接)。 |
例:
将root目录下的test文件夹复制到容器内的opt目录下
root@cp:~# docker cp /root/test b4fccf6bc7f4:/opt/
root@cp:~# docker attach b
root@b4fccf6bc7f4:/opt# ls /opt
test
17.更改容器名字
docker rename CONTAINER NEW_NAME
例:
root@cp:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5e4d9a2a2810 centos:latest "/bin/bash" 3 seconds ago Up 2 seconds desperate_cori
root@cp:~# docker rename desperate_cori test
root@cp:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5e4d9a2a2810 centos:latest "/bin/bash" 3 seconds ago Up 2 seconds test
来源:CSDN
作者:啊哈??
链接:https://blog.csdn.net/supahero/article/details/100182581