【Docker】四、常用命令

209 阅读10分钟

帮助命令

命令

docker version  # 查看docker版本
docker info     # 查看docker系统信息,包括镜像和容器的数量
docker -h       # 查看帮助命令 --- = docker --help

文档

官方文档

镜像命令

docker iamges 查看所有本地主机上的镜像

root@lsMusKVEqm:~# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   3 months ago   13.3kB

# 解释
REPOSITORY  镜像的仓库员
TAG         镜像的标签
IMAGE ID    镜像的ID
CREATED     镜像的创建时间
SIZE        镜像的大小

# 可选项
root@lsMusKVEqm:~# docker images -h
Options:
  -a, --all             # 列出所有镜像
      --digests         Show digests
  -f, --filter filter   # 过滤条件
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           # 只显示id

docker search 搜索镜像

root@lsMusKVEqm:~# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   11876     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4540      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   888                  [OK]
phpmyadmin                        phpMyAdmin - A web interface for MySQL and M…   407       [OK]       
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   92           


# 可选项
root@lsMusKVEqm:~# docker search -h
Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output


--filter=STARS=3000 # 搜索出来的镜像STARS大于3000

root@lsMusKVEqm:~# docker search mysql -f=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   11876     [OK]       
mariadb   MariaDB Server is a high performing open sou…   4540      [OK]   

docker pull 下载镜像

# 下载镜像:docker pull 镜像名[:tag]
root@lsMusKVEqm:~# docker pull mysql
Using default tag: latest   # 如果不写tag,默认就是latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete    # 分层下载,docker image的核心 联合文件系统
93619dbc5b36: Pull complete 
99da31dd6142: Pull complete 
626033c43d70: Pull complete 
37d5d7efb64e: Pull complete 
ac563158d721: Pull complete 
d2ba16033dad: Pull complete 
688ba7d5c01a: Pull complete 
00e060b6d11d: Pull complete 
1c04857f594f: Pull complete 
4d7cfa90e6ea: Pull complete 
e0431212d27d: Pull complete 
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709  # 签名,防伪
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest  # 镜像真实地址

# docker pull mysql 等价于  docker pull docker.io/library/mysql:latest

# 指定版本下载
docker pull mysql:5.7
root@lsMusKVEqm:~# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Already exists   # 已经存在,则不需要再次下载 (跟上面的镜像公用部分)
93619dbc5b36: Already exists 
99da31dd6142: Already exists 
626033c43d70: Already exists 
37d5d7efb64e: Already exists 
ac563158d721: Already exists 
d2ba16033dad: Already exists 
0ceb82207cd7: Pull complete 
37f2405cae96: Pull complete 
e2482e017e53: Pull complete 
70deed891d42: Pull complete 
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

docker rmi 删除镜像

root@lsMusKVEqm:~# docker rmi -f 3218b38490ce  # 删除制定容器, 后面跟镜像id,多个id用空格分割
Untagged: mysql:8
Untagged: mysql:latest
Untagged: mysql@sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Deleted: sha256:3218b38490cec8d31976a40b92e09d61377359eab878db49f025e5d464367f3b
Deleted: sha256:aa81ca46575069829fe1b3c654d9e8feb43b4373932159fe2cad1ac13524a2f5
Deleted: sha256:0558823b9fbe967ea6d7174999be3cc9250b3423036370dc1a6888168cbd224d
Deleted: sha256:a46013db1d31231a0e1bac7eeda5ad4786dea0b1773927b45f92ea352a6d7ff9
Deleted: sha256:af161a47bb22852e9e3caf39f1dcd590b64bb8fae54315f9c2e7dc35b025e4e3
Deleted: sha256:feff1495e6982a7e91edc59b96ea74fd80e03674d92c7ec8a502b417268822ff

# 删除所有镜像
docker rmi -f $(docker images -aq)

容器命令

说明:我们有了镜像才可以创建容器,linux,下载一个Ubuntu镜像来测试学习

docker pull ubuntu

docker run 新建容器并启动

docker run [可选参数] image

# 参数说明
-- name="Name"   # 容器名字 tomcat01  tomcat02
-d               # 后台方式运行。
-i -t            # 使用交互方式运行,进入容器查看内容
-p               # 制定容器的端口  -p 8080:8080
                    # -p ip:主机端口:容器端口
                    # -p 主机端口:容器端口   (常用)
                    # -p 容器端口
                    # 容器端口
-P               # 随机制定端口


# 测试  启动并进入容器
root@lsMusKVEqm:~# docker run -it ubuntu /bin/bash
root@4ea627b7c255:/#

root@4ea627b7c255:/# ls # 查看容器内的ubuntu,基础版本,很多命令不完善
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

# 退出容器
root@4ea627b7c255:/home# exit
exit
root@lsMusKVEqm:~# 

docker ps 正在运行的容器

root@lsMusKVEqm:~# docker ps  # 正在运行的容器
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@lsMusKVEqm:~#   # 没有正在运行的容器

oot@lsMusKVEqm:~# docker ps -a   # 曾经运行过的容器
CONTAINER ID   IMAGE         COMMAND       CREATED         STATUS                     PORTS     NAMES
4ea627b7c255   ubuntu        "/bin/bash"   5 minutes ago   Exited (0) 3 minutes ago             cranky_bartik
ee63101e476f   hello-world   "/hello"      8 hours ago     Exited (0) 8 hours ago               priceless_maxwell
29d6816aaa47   hello-world   "/hello"      8 hours ago     Exited (0) 8 hours ago               elastic_goldwasser

# 可选参数
            # 空参数,列出当前正在运行的容器
-a          # 列出当前正在运行的容器 + 历史运行过的容器
-n=?        # 显示最近创建的容器   docker ps -a -n=1
-q          # 只显示容器id

退出容器

exit # 退出容器并停止
Ctrl + P + Q # 不停止容器退出

删除容器

docker rm 4b2b57590da3 # 删除制定容器,容器id,不能删除正在运行的容器,要强制删除 带-f
docker rm -f $(docker ps -aq) # 全部删除
docker ps -a -q | xargs docker rm # 删除所有的容器

启动和停止容器

docker start 容器id        # 启动容器
docker restart 容器id      # 重启容器
docker stop 容器id         # 停止容器
docker kill 容器id         # 杀掉容器

常用其他命令

后台启动容器

# 命令 docker run -d 镜像名
docker run -d ubuntu

# 问题 docker ps 查看发现 ubuntu已经停止了

# 常见问题:
#     docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#     nginx容器启动后,发现自己没有提供服务,就会立即停止

docker logs 查看日志

docker logs --help
Options:
      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
  -n, --tail string    Number of lines to show from the end of the logs (default "all")
  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)

docker logs -tf -n=10 255f4b63ef23

查看容器中的进程信息

# 命令:docker top 容器id

root@lsMusKVEqm:~# docker top 255f4b63ef23
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                1191157             1191134             0                   09:34               pts/0               00:00:00            /bin/bash

查看镜像元数据

# 命令:docker inspect 

root@lsMusKVEqm:~# docker inspect --help
Options:
  -f, --format string   Format the output using the given Go template
  -s, --size            Display total file sizes if the type is container
      --type string     Return JSON for specified type
      

# 例子 -- 显示容器的所有信息
root@lsMusKVEqm:~# docker inspect 255f4b63ef23
[
    {
        "Id": "255f4b63ef2309b17603834222706cdf419f7f27db88f528a76137eb4d10ce82",
        "Created": "2021-12-27T16:09:27.949725379Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 1191157,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-12-28T01:34:11.120985515Z",
            "FinishedAt": "2021-12-27T16:10:15.107839115Z"
        },
        "Image": "sha256:ba6acccedd2923aee4c2acc6a23780b14ed4b8a5fa4e14e252a23b846df9b6c1",
        "ResolvConfPath": "/var/lib/docker/containers/255f4b63ef2309b17603834222706cdf419f7f27db88f528a76137eb4d10ce82/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/255f4b63ef2309b17603834222706cdf419f7f27db88f528a76137eb4d10ce82/hostname",
        "HostsPath": "/var/lib/docker/containers/255f4b63ef2309b17603834222706cdf419f7f27db88f528a76137eb4d10ce82/hosts",
        "LogPath": "/var/lib/docker/containers/255f4b63ef2309b17603834222706cdf419f7f27db88f528a76137eb4d10ce82/255f4b63ef2309b17603834222706cdf419f7f27db88f528a76137eb4d10ce82-json.log",
        "Name": "/funny_tharp",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "docker-default",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/91f43371b4ef12d59fa1726f9b050259c5a28d8ad53d69c2562e7a90d353de6e-init/diff:/var/lib/docker/overlay2/b665f84ac478003a910181e73bfd8e0bed2891c671c4ea7a86e3718487044f47/diff",
                "MergedDir": "/var/lib/docker/overlay2/91f43371b4ef12d59fa1726f9b050259c5a28d8ad53d69c2562e7a90d353de6e/merged",
                "UpperDir": "/var/lib/docker/overlay2/91f43371b4ef12d59fa1726f9b050259c5a28d8ad53d69c2562e7a90d353de6e/diff",
                "WorkDir": "/var/lib/docker/overlay2/91f43371b4ef12d59fa1726f9b050259c5a28d8ad53d69c2562e7a90d353de6e/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "255f4b63ef23",
            "Domainname": "",
            "User": "",
            "AttachStdin": true,
            "AttachStdout": true,
            "AttachStderr": true,
            "Tty": true,
            "OpenStdin": true,
            "StdinOnce": true,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "ubuntu",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "e2a30cb0edf85f0dc419787bafcd52b9e142543b99cfb67503da5eceeb206a03",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/e2a30cb0edf8",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "8708f90f5190e907860f4e5f539a36c45f1aaeabd1b0bd9ff4008295ff995173",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "8ec57ea61f637a998ded26822378b01b9573a01dae6b3ecfcf022d159cd00f4c",
                    "EndpointID": "8708f90f5190e907860f4e5f539a36c45f1aaeabd1b0bd9ff4008295ff995173",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

进入当前正在运行的容器

  1. exec
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置

# 命令: docker exec -it 容器id /bin/bash

root@lsMusKVEqm:~# docker exec -it 255f4b63ef23 /bin/bash
root@255f4b63ef23:/# ll

  1. attach
# 命令:docker attach 容器id
root@lsMusKVEqm:~# docker attach 255f4b63ef23
root@255f4b63ef23:/# 

# 正在执行的容器
  1. 区别
# docker exec 进入容器后开启一个新的终端,可以在里面操作(常用)
# docker attach 进入容器正在进行的终端,不会开启新的

从容器拷贝文件到主机上

# 命令:docker cp 容器id:容器内路径  目标主机路径

# 进入docker容器
root@lsMusKVEqm:~# docker attach 255f4b63ef23
root@255f4b63ef23:/# ls
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@255f4b63ef23:/# cd home/
root@255f4b63ef23:/home# ls
# 在容器内/home目录下创建文件
root@255f4b63ef23:/home# touch test.java
root@255f4b63ef23:/home# ls
test.java
# 退出容器    可以不停止
root@255f4b63ef23:/home# exit
exit
root@lsMusKVEqm:~# 
root@lsMusKVEqm:~# 
root@lsMusKVEqm:~# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED        STATUS                     PORTS     NAMES
9f08a73c819f   ubuntu    "bash"        6 hours ago    Exited (0) 6 hours ago               romantic_kowalevski
255f4b63ef23   ubuntu    "/bin/bash"   15 hours ago   Exited (0) 9 seconds ago             funny_tharp
# 拷贝文件到主机/home目录下
root@lsMusKVEqm:~# docker cp 255f4b63ef23:/home/test.java /home
root@lsMusKVEqm:~# cd /home/
# 查看主机home目录
root@lsMusKVEqm:/home# ls
jenkins  test.java
root@lsMusKVEqm:/home#