docker容器命令详解

故事扮演 提交于 2019-12-02 11:13:13

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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!