Docker 常用命令

Docker 常用命令

帮助命令

  1. docker version # 显示docker的版本信息
  2. docker info # 显示docker的系统信息 包括镜像和容器的数量
  3. docker --help # 帮助命令

可以直接从官网文档上面获取到所有的命令详情,是一个不错的学习途径。

镜像命令

  1. docker images # 查看本地主机上的镜像
[root@VM-87-165-centos ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   6 months ago   13.3kB
[root@VM-87-165-centos ~]# 

REPOSITORY	镜像的仓库名字
TAG			镜像的标签
IMAGE ID    镜像的ID
CREATED     创建的时间
SIZE		大小

-a			# 列出所有镜像
-q			# 只显示镜像的ID


  1. docker search # 搜索仓库中的镜像

    和在网页上搜索是一样的,不过可以在网页上看到更详细的版本信息。

    docker search mysql --filter=STARS=3000 # 搜索出Stars大于3000的
    
  2. docker pull # 下载镜像

    # 下载mysql镜像,default tag,默认最新版latest
    docker pull mysql 
    # 指定版本下载 
    docker pull mysql:5.7
    
  3. docker rmi # 删除镜像

# 删除一个 可以通过名称 也可以指定id -f表示删除所有 强制删除
docker rmi -f 9cfcce23593a
# 删除多个 用空格分隔id
docker rmi -f id id id
# 删除所有 
docker rmi -f $(docker images -aq) # images -aq就是查所有镜像id,从而递归删除

容器命令

下载一个centos

latest: Pulling from library/centos
7a0437f04f83: Pull complete 
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
[root@VM-87-165-centos ~]# 

我们有了镜像才可以创建容器

  1. 新建容器并启动容器
docker run [可选参数] image

## 参数说明
--name="name" 容器名字 用来区分容器 centos1 centos2...
-d		      后台运行
-it			  使用交互方式运行,进入容器查看内容
-p			  随机指定端口
-P            指定容器端口

# 测试
[root@VM-87-165-centos ~]# docker run -it centos /bin/bash # 启动并进入centos
[root@bc219f0f9467 /]# 
[root@bc219f0f9467 /]# 
  1. 列出所有运行的容器
docker -ps
   # 当前正在运行的容器
[root@VM-87-165-centos /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@VM-87-165-centos /]# 

-a # 列出当前正在运行的容器+历史运行过的容器
[root@VM-87-165-centos /]# docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS                            PORTS     NAMES
bc219f0f9467   centos        "/bin/bash"   3 minutes ago    Exited (127) About a minute ago             youthful_khorana
80eef72f1522   hello-world   "/hello"      26 minutes ago   Exited (0) 26 minutes ago                   keen_wright
[root@VM-87-165-centos /]# 

-n=? # 显示最近创建的容器个数
[root@VM-87-165-centos /]# docker ps -n=4
CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS                       PORTS     NAMES
bc219f0f9467   centos        "/bin/bash"   8 minutes ago    Exited (127) 6 minutes ago             youthful_khorana
80eef72f1522   hello-world   "/hello"      32 minutes ago   Exited (0) 32 minutes ago              keen_wright
[root@VM-87-165-centos /]# 

-q # 只显示容器的编号
[root@VM-87-165-centos /]# docker ps -q
287256016c3a
[root@VM-87-165-centos /]# 

  1. 退出容器

    exit # 容器停止并退出
    CTRL+P+Q # 容器退出且不停止
    
  2. 删除容器

docker rm 容器ID  # 删除指定容器 不能删除正在运行的容器 如果要强制删除要加 -rf
docker rm -f $(docker ps -aq) # 删除所有容器


  1. 启动和停止容器
docker start 容器id		# 启动容器
docker restart 容器id		# 重启容器
docker stop 容器id         # 停止当前正在运行的容器
docker kill 容器id		# 强制停止当前正在运行的容器

常用的其他命令

  1. 后台启动容器
# docker run -d 镜像名   
[root@VM-87-165-centos /]# docker run -d centos
360a51e37e1e263c38a93afb0df72f27e5dd94f34c9bd1fc5e7c62c4507936f7

注意: docker容器后台运行,就必须要有一个前台进程,docker发现没有应用就会自动停止

  1. 查看日志

    docker logs -tf --tail numbers 容器ID
    
    # 写一个简单的shell脚本测试一下
    [root@VM-87-165-centos /]# docker run -d centos /bin/bash -c "while true; do echo hello world.; sleep 1 ; done" 
    14a75a12bbb581d35a9371e1c6a02d11abc5f61c3eb7abd0319f04c18e1edea8
    
    # 查看当前正在运行的容器
    [root@VM-87-165-centos /]# docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
    14a75a12bbb5   centos    "/bin/bash -c 'while…"   30 seconds ago   Up 28 seconds             jolly_satoshi
    [root@VM-87-165-centos /]# 
    [root@VM-87-165-centos /]# 
    # 显示日志
    -tf 		# 显示日志 带时间戳
    --tail numbers # 显示日志条数
    [root@VM-87-165-centos /]# docker logs -tf --tail 10 14a75a12bbb5
    2021-09-03T14:10:41.286786706Z hello world.
    2021-09-03T14:10:42.287902900Z hello world.
    2021-09-03T14:10:43.289016061Z hello world.
    2021-09-03T14:10:44.290194615Z hello world.
    2021-09-03T14:10:45.291417030Z hello world.
    2021-09-03T14:10:46.292493843Z hello world.
    2021-09-03T14:10:47.293625678Z hello world.
    2021-09-03T14:10:48.294787058Z hello world.
    2021-09-03T14:10:49.295927291Z hello world.
    2021-09-03T14:10:50.297062082Z hello world.
    2021-09-03T14:10:51.298160263Z hello world.
    2021-09-03T14:10:52.299997841Z hello world.
    2021-09-03T14:10:53.300332483Z hello world.
    2021-09-03T14:10:54.301518379Z hello world.
    ^C
    
    
  2. 查看容器中的进程信息

docker top 容器id

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EsVQFybi-1631416514248)(C:\Users\hubertxxu.TENCENT\AppData\Roaming\Typora\typora-user-images\image-20210903221708450.png)]

  1. 查看镜像的元数据,这个指令也比较重要,后面我们要看docker网络和挂载点都需要用这条指令来查看

    # docker inspect 容器id 
    [root@VM-87-165-centos /]# docker inspect 14a75a12bbb5
    [
        {
            "Id": "14a75a12bbb581d35a9371e1c6a02d11abc5f61c3eb7abd0319f04c18e1edea8", # 正在的容器id
            "Created": "2021-09-03T14:09:55.983628589Z",
            "Path": "/bin/bash",
            "Args": [
                "-c",
                "while true; do echo hello world.; sleep 1 ; done"
            ],
            "State": {
                "Status": "running",	# 状态
                "Running": true,
                "Paused": false,
                "Restarting": false,
                "OOMKilled": false,
                "Dead": false,
                "Pid": 11744,
                "ExitCode": 0,
                "Error": "",
                "StartedAt": "2021-09-03T14:09:56.236141599Z",
                "FinishedAt": "0001-01-01T00:00:00Z"
            },
            "Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55",
            "ResolvConfPath": "/data/docker/containers/14a75a12bbb581d35a9371e1c6a02d11abc5f61c3eb7abd0319f04c18e1edea8/resolv.conf",
            "HostnamePath": "/data/docker/containers/14a75a12bbb581d35a9371e1c6a02d11abc5f61c3eb7abd0319f04c18e1edea8/hostname",
            "HostsPath": "/data/docker/containers/14a75a12bbb581d35a9371e1c6a02d11abc5f61c3eb7abd0319f04c18e1edea8/hosts",
            "LogPath": "/data/docker/containers/14a75a12bbb581d35a9371e1c6a02d11abc5f61c3eb7abd0319f04c18e1edea8/14a75a12bbb581d35a9371e1c6a02d11abc5f61c3eb7abd0319f04c18e1edea8-json.log",
            "Name": "/jolly_satoshi",
            "RestartCount": 0,
            "Driver": "overlay2",
            "Platform": "linux",
            "MountLabel": "",
            "ProcessLabel": "",
            "AppArmorProfile": "",
            "ExecIDs": null,
            "HostConfig": {
                "Binds": null,
                "ContainerIDFile": "",
                "LogConfig": {
                    "Type": "json-file",
                    "Config": {
                        "max-size": "50m"
                    }
                },
                "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": "/data/docker/overlay2/d1294dacf997f38bf66410c94bcce124f73472c403af0e2aadee1f5d940c6043-init/diff:/data/docker/overlay2/e34b025d4270fbcf5a878e4e30644fb327255dbb987e6534d786bcbe931d6937/diff",
                    "MergedDir": "/data/docker/overlay2/d1294dacf997f38bf66410c94bcce124f73472c403af0e2aadee1f5d940c6043/merged",
                    "UpperDir": "/data/docker/overlay2/d1294dacf997f38bf66410c94bcce124f73472c403af0e2aadee1f5d940c6043/diff",
                    "WorkDir": "/data/docker/overlay2/d1294dacf997f38bf66410c94bcce124f73472c403af0e2aadee1f5d940c6043/work"
                },
                "Name": "overlay2"
            },
            "Mounts": [],  # 挂载
            "Config": {
                "Hostname": "14a75a12bbb5",
                "Domainname": "",
                "User": "",
                "AttachStdin": false,
                "AttachStdout": false,
                "AttachStderr": false,
                "Tty": false,
                "OpenStdin": false,
                "StdinOnce": false,
                "Env": [
                    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
                ],
                "Cmd": [
                    "/bin/bash",
                    "-c",
                    "while true; do echo hello world.; sleep 1 ; done"
                ],
                "Image": "centos",
                "Volumes": null,
                "WorkingDir": "",
                "Entrypoint": null,
                "OnBuild": null,
                "Labels": {
                    "org.label-schema.build-date": "20201204",
                    "org.label-schema.license": "GPLv2",
                    "org.label-schema.name": "CentOS Base Image",
                    "org.label-schema.schema-version": "1.0",
                    "org.label-schema.vendor": "CentOS"
                }
            },
            "NetworkSettings": { # 网络
                "Bridge": "",
                "SandboxID": "0be4bfa5c3c46d50403605ea155cabc38130ef72917bb3059c81e0c15430258c",
                "HairpinMode": false,
                "LinkLocalIPv6Address": "",
                "LinkLocalIPv6PrefixLen": 0,
                "Ports": {},
                "SandboxKey": "/var/run/docker/netns/0be4bfa5c3c4",
                "SecondaryIPAddresses": null,
                "SecondaryIPv6Addresses": null,
                "EndpointID": "f871b71603b40d55d97a0ebcf1ed3cd56c7d2c528da350d23593996465c04a42",
                "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": "ca2ac8e50c311cc09ed6245a3cd263214bb91cedbb854b40997ff81600f46754",
                        "EndpointID": "f871b71603b40d55d97a0ebcf1ed3cd56c7d2c528da350d23593996465c04a42",
                        "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
                    }
                }
            }
        }
    ]
    
  2. 进入当前正在运行的容器

# 命令
docker exec -it 容器id bashShell

# 测试
[root@VM-87-165-centos /]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
b468f286a7f0   centos    "/bin/bash"   24 seconds ago   Up 23 seconds             admiring_jennings
[root@VM-87-165-centos /]# docker exec -it b46 /bin/bash
[root@b468f286a7f0 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@b468f286a7f0 /]# 
[root@b468f286a7f0 /]# 
[root@b468f286a7f0 /]# 
[root@b468f286a7f0 /]# 

# 命令
docker attach 容器id

# 测试
[root@VM-87-165-centos /]# docker attach b46
[root@b468f286a7f0 /]# 
[root@b468f286a7f0 /]# 
[root@b468f286a7f0 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@b468f286a7f0 /]#  



# 两个命令的区别
docker exec # 进入容器后开启一个新的终端,可以在里面操作,比较常用
docker attach # 进入容器当前正在执行的终端 不会启动新的进程

  1. 拷贝文件
## 命令
docker cp 容器id:/容器内路径 容器外路径

## 测试
# 查看当前正在运行的容器
[root@VM-87-165-centos /]# docker ps 
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
b468f286a7f0   centos    "/bin/bash"   24 seconds ago   Up 23 seconds             admiring_jennings
[root@VM-87-165-centos /]# docker exec -it b46 /bin/bash
[root@b468f286a7f0 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@b468f286a7f0 /]# read escape sequence
[root@VM-87-165-centos /]# docker attach b46
[root@b468f286a7f0 /]# cd home/
[root@b468f286a7f0 home]# ls
[root@b468f286a7f0 home]# touch a.c # 容器内新建文件
[root@b468f286a7f0 home]# exit  # 退出容器
exit
[root@VM-87-165-centos /]# docker cp b468f286a7f0:/home/a.c /home/ # 拷贝容器内的文件到当前主机
[root@VM-87-165-centos /]# ls /home/
a.c
[root@VM-87-165-centos /]# 

# 拷贝是一个手动的过程, 未来可以使用 -v卷的技术 自动同步
  1. 查看内容占用

    docker stats
    

小结

image-20200617210554147

image-20200617210932306

image-20200617211021003

image-20200617211039508

ot@b468f286a7f0 home]# exit # 退出容器
exit
[root@VM-87-165-centos /]# docker cp b468f286a7f0:/home/a.c /home/ # 拷贝容器内的文件到当前主机
[root@VM-87-165-centos /]# ls /home/
a.c
[root@VM-87-165-centos /]#

拷贝是一个手动的过程, 未来可以使用 -v卷的技术 自动同步


7. 查看内容占用

   ```shell
   docker stats

小结

[外链图片转存中…(img-1MSWOx0l-1631416514251)]

[外链图片转存中…(img-ZCPA4yw2-1631416514253)]

[外链图片转存中…(img-q9tnqjIZ-1631416514257)]

[外链图片转存中…(img-i9IWc8zD-1631416514259)]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值