跳转至

Docker

1 容器命令

# search镜像
docter search centos
# images 查看镜像
docker images
# pull镜像
docker pull centos:centos7
# run镜像
docker run --name centos7 -it centos:centos7
# 退出镜像,在容器内部退出
exit
# ps查询容器信息 ,容器id=f0cbcec9bdce
docker ps -a
# stop镜像
docker stop f0cbcec9bdce
# start镜像
docker start f0cbcec9bdce
# attach镜像
docker attach f0cbcec9bdce
# rm容器
docker rm f0cbcec9bdce
# rmi镜像
docker rmi centos:centos7

1.1 ps

  • 功能:显示容器信息
  • 语法:docker ps [OPTIONS]
    • -a:显示所有容器包括 Exited 状态的
    • -q:仅仅显示容器 id
    • -n num:限制显示的数量
    • -l:显示最晚创建的一个容器

1.2 rm

  • 语法:docker rm [OPTIONS] CONTAINER [CONTAINER...]
  • -f: 强制删除(比如,当容器正在运行时会拒绝删除)
  • 功能:删除一个或多个容器
  • 示例
$ docker rm  centos7
centos7

1.3 run

  • 语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • -a: 附加到 STDIN, STDOUTSTDERR 上,默认全部附加
  • -i-t:-i 保持跟容器的交互(stdin),-t 分配终端 tty;通常一起使用,使容器在前台运行
  • -d: 让容器后台运行,并打印容器 id,与 -it 前台运行相反
  • -e: 给容器设置环境变量
  • --env-file [file-path]: 将指定文件内的环境变量给容器
  • --name [string]: 给容器分配名字,如不指定,会自动生成一个
  • --rm: 退出容器时自动删除容器,默认从容器内部退出,容器是 exited 状态且不会被删除
  • --cidfile [string]: 打印容器 id 到本地指定文件中
  • -w [path]: 设置容器内工作目录
  • -v [本地目录]:[容器目录]: 将本地目录与容器目录绑定,容器和本地中的此目录数据共享
  • --read-only: 除了 -v 挂载的目录,容器内其它目录都不可以写,只能读
  • -p [ip]:[本地端口]:[容器端口]: 将容器端口暴露在指定的本地端口上,ip 可以省略
  • --ulimit ulimit :设置 Ulimit 选项 (default [])
  • 示例 1: -it 前台运行,-a 指定附加 stdin、stdout
$ docker run -a stdin -a stdout -it ubuntu:20.04 /bin/bash
root@bc922be36071:/# ls
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@bc922be36071:/# exit
exit
  • 示例 2:-e 给容器传环境变量
~$ docker run -it --rm -e BB=hello ubuntu:20.04 /bin/bash
root@33c1c21f1f11:/# echo $BB
hello
  • 示例 3:--cidfile 打印容器 id 到指定文件
$ docker run --cidfile docker_id.txt ubuntu:20.04 echo "test"
test
$ cat docker_id.txt
e8a53390efd5f0420317468f64657f503e3e3e7e20387f8ca19a3d07d96ca4df
  • 示例 4:-w 设置工作目录
$ docker run -it --rm -w /dev ubuntu:20.04
root@9956dd002094:/dev#

1.3.1 卷挂载 -v

  • 示例:-v 挂载数据卷,可以看到,xxx 目录有了 code 目录下内容
~$ docker run -it -v /home/shw/code:/home/xxx ubuntu:20.04 /bin/bash
root@49087e5880b0:/# cd /home
root@49087e5880b0:/home# ls
xxx
root@49087e5880b0:/home# cd xxx
root@49087e5880b0:/home/xxx# ls
a.out  fun.bin  fun.sh  fun.sh.x.c  levelDB  test1.cc  test_nice.cc

1.3.2 映射宿主机端口 -p 和 -P

title: 容器端口映射宿主机端口作用?
通过宿主机端口映射,可以通过宿主机ip+映射port来访问容器。这样在docker所在主机之外,就能通过宿主机来访问容器。
  • 语法形式:
  • -p [ip]:[本地端口]:[容器端口]
  • -P: 自动映射容器内所有网络端口,需要在 dockerfile 里面 EXPOSE 声明
1.3.2.1 自动映射容器内所有网络端口
  • 这会随机的选择本地一个端口与容器内端口关联
$ docker run -d -P nginx
d76bb3bec303f06cd5480f11342f4e920f67b30d2af5e35c14660bd8f18447b5
$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                   NAMES
d76bb3bec303   nginx     "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes   0.0.0.0:49153->80/tcp   magical_austin
1.3.2.2 指定 ip 和端口
  • ip 可以忽略
$ docker run -d -p 127.0.0.1:8080:80 nginx
ac0173b4fe93d40cfe127fa72a7f58465d205900abfcfc080e141ea89613a657
$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                    NAMES
ac0173b4fe93   nginx     "/docker-entrypoint.…"   5 seconds ago   Up 2 seconds   127.0.0.1:8080->80/tcp   heuristic_elbakyan

1.3.3 系统限制资源

  • 示例
$ docker run --ulimit nofile=1024:1024 --rm alpine sh -c "ulimit -n"
1024
1.3.3.1 设置系统 capabilities
  • --cap-add list :添加 linux capabilities
  • --cap-drop list :移除 linux capabilities

1.3.4 网络类型 --network

  • host:容器使用和宿主机相同的网络。(ip 相同,hostname、hostid 相同)
  • bridge(open):容器网络和宿主机不同。(ip 不同,hostname、hostid 不同)
  • Container(join) :联合挂载式网络模式,和其他容器共享网络
  • None(Close) :封闭式网络模式,不为容器配置网络
docker network create my-net
docker run -itd --network=my-net busybox

1.4 exec

  • 功能:在 running 状态的容器上执行命令
  • 语法:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    • -e variable=value:设置环境变量
    • -w dir:设置工作目录
    • -it:分配 tty 已经附加到标准输入,通常用于进入容器
    • --privileged:给予额外权限
  • 示例
[root@centos7 ~]# docker exec -it nginx01 /bin/bash
root@53e252620494:/# pwd
/
[root@centos7 ~]# docker exec -e dir=/root nginx01 sh -c "echo \$dir"
/root
[root@centos7 ~]# docker exec -w /root nginx01 sh -c "pwd"
/root

1.5 start

  • 功能:将 Exited 状态的容器启动
  • 语法:docker start [OPTIONS] CONTAINER [CONTAINER...]
  • 示例
[root@centos7 ~]# docker start nginx01
nginx01

1.6 restart

  • 功能:重启容器
  • 语法:docker restart [OPTIONS] CONTAINER [CONTAINER...
  • 示例
[root@centos7 ~]# docker restart nginx01
nginx01

1.7 logs

title: logs的实现原理?
docker logs会采集容器内所有进程输出到stdout上的内容。通过这种方式,在开发的镜像时,可以通过打印信息到stdout来达到获取容器运行状态的目的
  • 示例
$ docker logs 镜像id

1.8 rename

  • 功能:重命名容器名
  • 语法:docker rename CONTAINER NEW_NAME
  • 示例
[root@centos7 ~]# docker rename nginx02 nginx01
[root@centos7 ~]# docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED        STATUS          PORTS                                       NAMES
53e252620494   nginx:1.23   "/docker-entrypoint.…"   19 hours ago   Up 28 seconds   0.0.0.0:49153->80/tcp, :::49153->80/tcp     nginx01

1.9 cp

  • 功能:在宿主机和容器间拷贝文件
  • 语法:
    • docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH:从容器拷贝到宿主机
    • docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH:从宿主机拷贝到容器
  • 示例
[root@centos7 ~]# docker cp  nginx01:/docker-entrypoint.sh ./
[root@centos7 ~]# ls
anaconda-ks.cfg  docker-entrypoint.sh
[root@centos7 ~]# docker cp file1 nginx01:/
[root@centos7 ~]# docker exec -it nginx01  cat /file1
hello

1.10 attach

title: attach容器后怎么退出?
1. 当run容器时指定了`-it`参数时,可以使用`ctrl+p+q`detach
2. 其它情况,只能`ctrl+c`stop容器
  • 功能:附加宿主机的标准 input, output, and error streams t 到运行的容器
  • 语法:docker attach [OPTIONS] CONTAINER
  • 示例
# attach后,通过curl 命令访问nginx,将会打印下面的信息
[root@centos7 ~]# docker attach nginx01
172.17.0.1 - - [19/Jul/2022:10:45:21 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
2022/07/19 10:45:23 [notice] 1#1: signal 28 (SIGWINCH) received
2022/07/19 10:45:23 [notice] 1#1: signal 28 (SIGWINCH) received

1.11 port

  • 功能:显示容器端口映射
  • 语法:docker port CONTAINER [PRIVATE_PORT[/PROTO]]
  • 示例
[root@centos7 cheat]# docker port nginx01
80/tcp -> 0.0.0.0:49153
80/tcp -> :::49153

1.12 top

  • 功能:显示容器里面正在运行的进程
  • 示例
[root@centos7 ~]# docker top nginx01
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                4771                4750                0                   15:14               ?                   00:00:00            nginx: master process nginx -g daemon off;
101                 4814                4771                0                   15:14               ?                   00:00:00            nginx: worker process
101                 4815                4771                0                   15:14               ?                   00:00:00            nginx: worker process

2 network 命令

  • 功能:容器的网络操作,包括网络创建、容器间网络联通
  • 语法:docker network COMMAND
  • ls: 显示网络
  • rm: 删除网络
  • create:创建一个网络
  • connect:容器连接到某个网络上
  • disconnect:容器停止连接到某个网络
  • 示例:显示网络信息
$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
5166c0a84f04   bridge    bridge    local
afb60ed16654   host      host      local
b4c95b7a7147   none      null      local

2.1 create 创建网络

  • 语法:docker network create [OPTIONS] NETWORK
  • -d[--driver] string: 指定网络类型,默认 bridge
  • --subnet:网络段
  • --gateway:网关
  • --ip-range :指定自动分配 ip 区间(通过 --ip 指定的不受此限制)
  • --ipv6 :启用 ipv6 网络
  • 示例
$ docker network create   --driver=bridge   --subnet=172.28.0.0/16   --ip-range=172.28.5.0/24   --gateway=172.28.5.254   br0
ad60091eff86af00c4a8587f73b467a835f2a03c9cb48e5fba49067d7b98d5ab
$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
ad60091eff86   br0       bridge    local
621ad2d99007   bridge    bridge    local
935a4c698f1d   host      host      local
9fa841249a88   none      null      local

2.2 connect 容器连接网络

  • 语法:docker network connect [OPTIONS] NETWORK CONTAINER
  • --ip : 指定 IPv4 address (e.g., 172.30.100.104),不指定则默认分配
  • --ip6 :指定 IPv6 address (e.g., 2001:db8::33),不指定则默认分配
  • 示例 1:将容器 alpine-01 连接到网络 br0 中
$ docker network connect br0  alpine-01
## 进入容器,查看ip,新增了ip 172.28.5.0 
$ ip a
12: eth1@if13: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:1c:05:00 brd ff:ff:ff:ff:ff:ff
    inet 172.28.5.0/16 brd 172.28.255.255 scope global eth1
       valid_lft forever preferred_lft forever
  • 示例 2:指定 ip
$ docker network connect  br0  --ip 172.28.5.3 alpine-01
## 进入容器,查看ip,新增了ip 172.28.5.3
$ ip a
14: eth2@if15: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:1c:05:03 brd ff:ff:ff:ff:ff:ff
    inet 172.28.5.3/16 brd 172.28.255.255 scope global eth2
       valid_lft forever preferred_lft forever

2.3 disconnect 移除容器内网络

  • docker network disconnect [OPTIONS] NETWORK CONTAINER
    • -f :强制断开连接
  • 示例
$ docker network disconnect  br0 alpine-01
### 进入容器,ip a命令显示原网络已被删除

2.4 inspect 显示网络信息

  • 功能:显示网络详细信息,已分配给容器的网络信息也会显示。
# docker network inspect br0
[
    {
        "Name": "br0",
        "Id": "7b5dec1b5256822c3a55fccc8315cbf8182fe482f037b5b360ad512483515563",
        "Created": "2023-05-22T14:43:18.223797939+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.28.0.0/16",
                    "IPRange": "172.28.5.0/24",
                    "Gateway": "172.28.5.254"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "e47b942ee9be54c01147d2db7866e49aa78b58622387e6d874d6b48d3162ae88": {
                "Name": "xenodochial_bhabha",
                "EndpointID": "44130a296e04c1b6145342ebb07a6fcf8a88444b9b4991cc19afa1899394ff73",
                "MacAddress": "02:42:ac:1c:05:03",
                "IPv4Address": "172.28.5.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

3 卷命令

  • 语法:docker volume COMMAND COMMAND
    • create :创建卷
    • update :更新卷 (cluster volumes only)
    • rm :删除卷
    • ls :显示卷列表
    • inspect :显示卷的详细信息
    • prune :删除所有未使用的本地卷(被容器占用的不会删除)

3.1 create 创建卷

  • 语法:docker volume create [OPTIONS] [VOLUME]
    • --driver :卷驱动名,默认 local
    • --opt :设置 driver 程序特定选项
  • 示例
$ docker volume create hello
hello
### hello卷已经创建了
$ docker volume ls
DRIVER    VOLUME NAME
local     36ba5b107876509602d962507b2c35b52bad9c282ea75c4bca5803dcf7e0b81e
local     hello
### 容器使用hello卷,容器内挂载目录是/world
$ docker run --rm -it -v hello:/world  --name='alpine-01'  alpine
### 进入容器
$ df -h |grep world
/dev/mapper/centos-root
                         17.0G      2.2G     14.8G  13% /world
  • 示例 2:创建 tmpfs
docker volume create --driver local \
    --opt type=tmpfs \
    --opt device=tmpfs \
    --opt o=size=100m,uid=1000 \
    foo
  • 示例 3:创建 nfs 使用 nfs 卷需要 nfs 共享目录存在(修改/etc/exports 文件添加共享目录)
docker volume create --driver local \
    --opt type=nfs \
    --opt o=addr=192.168.211.10,rw \
    --opt device=:/root/nfs \
    nfs

3.2 inspect 查看卷信息

  • 示例:
$ docker volume inspect hello
[
    {
        "CreatedAt": "2023-05-22T16:20:14+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/hello/_data",
        "Name": "hello",
        "Options": {},
        "Scope": "local"
    }
]
  • Mountpoint :卷在主机上的存储路径

4 镜像命令

  • 语法:docker search [OPTIONS] TERM
  • --limit int:限制查询结果数量,默认最多显示 25 条
  • 功能:从 Docker Hub 上查找镜像 1
  • 示例
$ docker search --limit 3 centos
NAME                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                    The official build of CentOS.                   6802      [OK] 
ansible/centos7-ansible   Ansible on Centos7                              135                  [OK]
jdeathe/centos-ssh        OpenSSH / Supervisor / EPEL/IUS/SCL Repos -    121                  [OK]

4.2 images

  • 语法:docker images [OPTIONS] [REPOSITORY[:TAG]]
  • -a:显示所有镜像(默认)
  • -q:只显示镜像 id
  • 功能:显示镜像列表
  • 示例
# 默认显示
 --all
REPOSITORY          TAG                     IMAGE ID       CREATED        SIZE
centos              centos7                 eeb6ee3f44bd   4 weeks ago    204MB
# 显示镜像id
$ docker images -q
eeb6ee3f44bd

4.3 image

  • 语法:docker image COMMAND
  • ls:显示镜像,和 docker imasges 类似
  • build:从 Dockerfile 中构建镜像
  • pull:从镜像库拉取镜像
  • push:提交镜像到镜像库
  • rm:删除镜像
  • load:从 tar 包中加载镜像
  • save:保存镜像到 tar 包中
  • tag:创建个新镜像并打个标签
  • 功能:执行镜像相关操作

4.4 pull

  • 语法:docker pull [OPTIONS] [镜像仓库地址[:端口号]/]仓库名[:TAG|@DIGEST]
  • Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[: 端口号]。默认地址是 Docker Hub(docker.io)。
  • 仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像
  • -a:下载镜像的所有 tag 版本(谨慎使用)
  • -q:禁止详细输出(一般不用)
  • 功能:从镜像仓库下载镜像到本地
  • 如果不指定标签,默认会下载 tag 未 latest 版本
  • 如果不知道仓库地址,默认从 docker.io/library/
  • 示例
# 指定tag为centos7版本
$ docker pull centos:centos7
# 默认latest版本
$ docker pull centos
Using default tag: latest
$ docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
92dc2a97ff99: Pull complete
be13a9d27eb8: Pull complete
c8299583700a: Pull complete
Digest: sha256:4bc3ae6596938cb0d9e5ac51a1152ec9dcac2a1c50829c74abd9c4361e321b26
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04

4.5 rmi

  • 语法:docker rmi [OPTIONS] IMAGE [IMAGE...]
  • -f:强制删除镜像(比如当镜像的容器还存在会拒绝执行)
  • 功能:删除一个或多个本地镜像
  • 示例
$ docker rmi  eeb6ee3f44bd
Error response from daemon: conflict: unable to delete eeb6ee3f44bd (must be forced) - image is being used by stopped container f0cbcec9bdce
$ docker rmi  -f eeb6ee3f44bd
Untagged: centos:centos7
Untagged: centos@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987
Deleted: sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9

4.6 build

  • 功能:从容器构建镜像
  • 语法:docker build [OPTIONS] PATH | URL | -

4.7 save

  • 功能:将镜像保存为 tar 包(通常用于镜像迁移)
  • 语法:常用以下 2 种语法
    • docker save -o image.tar IMAGE
    • docker save IMAGE > image.tar
  • 示例
[root@centos7 ~]# docker image ls nginx
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        1.23      41b0e86104ba   8 days ago   142MB
[root@centos7 ~]# docker save nginx:1.23 >nginx.tar
[root@centos7 ~]# ls nginx.tar 
nginx.tar

4.8 load

  • 功能:从 tar 文件中加载镜像
  • 语法:常用以下 2 种语法
    • docker load -i image.tar
    • docker load < image.tar

4.9 tag

tag不仅可以修改tag,也可以修改镜像名
  • 功能:给镜像打上 tag 标签
  • 语法:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
  • 示例
[root@centos7 ~]# docker tag nginx:1.23 mynginx:1.0
[root@centos7 ~]# docker images
REPOSITORY                     TAG       IMAGE ID       CREATED        SIZE
mynginx                        1.0       41b0e86104ba   8 days ago     142MB
nginx                          1.23      41b0e86104ba   8 days ago     142MB

4.10 history

  • 功能:查看镜像各层信息
  • 语法:docker history [OPTIONS] IMAGE
  • 示例
[root@centos7 ~]# docker history  nginx:1.23
IMAGE          CREATED      CREATED BY                                      SIZE      COMMENT
41b0e86104ba   6 days ago   /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B        
<missing>      6 days ago   /bin/sh -c #(nop)  STOPSIGNAL SIGQUIT           0B        
<missing>      6 days ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
<missing>      6 days ago   /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entr…   0B        
<missing>      6 days ago   /bin/sh -c #(nop) COPY file:09a214a3e07c919a…   4.61kB    
<missing>      6 days ago   /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7…   1.04kB    
<missing>      6 days ago   /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b0…   1.96kB    
<missing>      6 days ago   /bin/sh -c #(nop) COPY file:65504f71f5855ca0…   1.2kB     
<missing>      6 days ago   /bin/sh -c set -x     && addgroup --system -…   61.1MB    
<missing>      6 days ago   /bin/sh -c #(nop)  ENV PKG_RELEASE=1~bullseye   0B        
<missing>      6 days ago   /bin/sh -c #(nop)  ENV NJS_VERSION=0.7.5        0B        
<missing>      6 days ago   /bin/sh -c #(nop)  ENV NGINX_VERSION=1.23.0     0B        
<missing>      6 days ago   /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B        
<missing>      6 days ago   /bin/sh -c #(nop)  CMD ["bash"]                 0B        
<missing>      6 days ago   /bin/sh -c #(nop) ADD file:d978f6d3025a06f51…   80.4MB

5 system 相关命令

5.1 inspect

  • 功能:显示容器、镜像、网络...的详细信息
  • 语法:docker inspect [OPTIONS] NAME|ID [NAME|ID...]
  • 示例
[root@centos7 ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
036629fb8781   bridge    bridge    local
935a4c698f1d   host      host      local
9fa841249a88   none      null      local
[root@centos7 ~]# docker inspect 036629fb8781
[
    {
        "Name": "bridge",
        "Id": "036629fb87819c40a16afa0cd3d31f0616f6b6059f16179c444b7bc1ebf07df3",
        "Created": "2022-07-20T11:32:19.846894222+08:00",
...省略...

5.2 system

5.2.1 docker system df

  • 功能:显示磁盘使用情况
  • 语法:docker system df [OPTIONS]
    • -v:显示详细信息
  • 示例
[root@centos7 ~]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          2         2         167.8MB   0B (0%)
Containers      2         2         1.122kB   0B (0%)
Local Volumes   1         1         0B        0B
Build Cache     0         0         0B        0B

5.2.2 docker system info

  • 作用同 docker info

5.2.3 docker system prune

5.2.4 docker system prune

  • 功能:清理未使用的数据
  • 语法:docker system prune [OPTIONS]
    • -a:清理所有未使用的镜像,而不仅仅是悬空镜像(镜像列表字段 REPOSITORY、TAG 为<none>)
    • --volumes:删除不再使用的卷(默认不删除)
  • 示例
[root@centos7 ~]# docker system prune --volume
unknown flag: --volume
See 'docker system prune --help'.
[root@centos7 ~]# docker system prune --volumes
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all volumes not used by at least one container
  - all dangling images
  - all dangling build cache

Are you sure you want to continue? [y/N] y
Deleted Volumes:
6cd5104992124d2a6de106ef8b9fc46fd3e2034bc9502859c950c446b583b3dd
11ab59d5af901f6cf2747cb689fb8a6997e988ef61a1bd637a6685cac95c58ac

Total reclaimed space: 19.89MB

5.3 info

  • 功能:显示 docker 信息
  • 语法:docker info
  • 示例
[root@centos7 ~]# docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Docker Buildx (Docker Inc., v0.8.2-docker)
  scan: Docker Scan (Docker Inc., v0.17.0)

Server:
 Containers: 2
  Running: 2
  Paused: 0
  Stopped: 0
 Images: 2

...省略...

5.4 stats

  • 功能:显示容器资源使用统计数据的实时流
  • 语法:docker stats [OPTIONS] [CONTAINER...]
    • -a:显示所有容器(默认只显示 running 状态容器)
  • 示例
[root@centos7 cheat]# docker stats nginx01
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O     BLOCK I/O         PIDS
53e252620494   nginx01   0.00%     3.156MiB / 972.4MiB   0.32%     656B / 0B   23.6MB / 8.19kB   3

5.5 version

  • 功能:显示 docker 版本信息
  • 示例
[root@centos7 ~]# docker version 
Client: Docker Engine - Community
 Version:           20.10.17
 API version:       1.41
 Go version:        go1.17.11
 Git commit:        100c701
 Built:             Mon Jun  6 23:05:12 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.17
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.17.11
  Git commit:       a89b842
  Built:            Mon Jun  6 23:03:33 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.6
  GitCommit:        10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
 runc:
  Version:          1.1.2
  GitCommit:        v1.1.2-0-ga916309
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

疑问汇总

1 退出容器,却不停止容器

在容器内使用 Ctrl+P+Q 退出,容器依然保持 running 状态

2 如何在 run 容器时,不进入容器,但容器保持 running 状态

  • 参考
  • 容器保持运行状态是因为容器内有个前台进程在运行?所以关键是如何在容器内部启一个前台进程一直存在

  1. Docker Hub 是一个官方镜像仓库