docker常用命令

Posted hopeless-dream

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker常用命令相关的知识,希望对你有一定的参考价值。

搜索镜像

指定版本号搜索

[root@apache ~]# docker search centos:7.6
NAME                                           DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
xuwenfeng1225/centos7_jdk8                     build in centos:7.6.1810 and jdk1.8.0_211       0                                       
how2j/centos7_tools                            centos:7.6.1810  + iproute ftp bind-utils ne…   0                                       
how2j/centos7_tools_ftp                        centos:7.6.1810  + iproute ftp bind-utils ne…   0                                       
how2j/centos7_tools_ftp_java_tomcat8           centos:7.6.1810  + iproute ftp bind-utils ne…   0     

不指定版本号

[root@apache ~]# docker search centos
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   6588                [OK]                
ansible/centos7-ansible            Ansible on Centos7                              134                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   129                                     [OK]
jdeathe/centos-ssh                 OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   118                                     [OK]

下载镜像

从镜像参考下载镜像到本地

语法格式:

docker pull [OPTIONS] NAME[:TAG|@DIGEST]        docker pull 仓库地址:端口/项目名/镜像名:tag(版本号)

[root@apache ~]# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
b71f96345d44: Pulling fs layer 

查看本地镜像

[root@apache overlay2]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              69593048aa3a        2 days ago          1.24MB
nginx               latest              d1a364dc548d        2 weeks ago         133MB
busybox             1.33                d3cd072556c2        3 weeks ago         1.24MB
ubuntu              latest              7e0aa2d69a15        6 weeks ago         72.7MB
REPOSITORY 仓库名
TAG        镜像版本号
IMAGE ID   镜像ID
CREATED    镜像创建时间
SIZE      镜像大小

镜像导入/导出

将镜像从本地导出为一个压缩文件,可以在其他服务器导入进行使用

方法1

# docker save nginx -o /opt/nginx_img.tar.gz

# ll /opt/nginx_img.tar.gz
-rw-------. 1 root root 137383424 Jun 10 15:40 /opt/nginx_img.tar.gz

方法2

# docker save nginx > /opt/nginx_img1.tar.gz

# ll /opt/
total 268328
-rw-r--r--.  1 root root 137383424 Jun 10 15:44 nginx_img1.tar.gz
-rw-------.  1 root root 137383424 Jun 10 15:44 nginx_img.tar.gz

查看导出的镜像文件结构

# tar tf /opt/nginx_img.tar.gz 
29b95120fdeb4c1818632797e6d1631399258ac70f80e95bde7c3d7c558a2ccc/
29b95120fdeb4c1818632797e6d1631399258ac70f80e95bde7c3d7c558a2ccc/VERSION
29b95120fdeb4c1818632797e6d1631399258ac70f80e95bde7c3d7c558a2ccc/json
29b95120fdeb4c1818632797e6d1631399258ac70f80e95bde7c3d7c558a2ccc/layer.tar
512c574e43ebdc10af47041862c9afc54880d2569f8ad7641ae426b081cb7ade/
512c574e43ebdc10af47041862c9afc54880d2569f8ad7641ae426b081cb7ade/VERSION
512c574e43ebdc10af47041862c9afc54880d2569f8ad7641ae426b081cb7ade/json
512c574e43ebdc10af47041862c9afc54880d2569f8ad7641ae426b081cb7ade/layer.tar
9c51babab55ad036ab2ca6ce5843b64e78103b9128a7eda80ecb49984fb62446/
9c51babab55ad036ab2ca6ce5843b64e78103b9128a7eda80ecb49984fb62446/VERSION
9c51babab55ad036ab2ca6ce5843b64e78103b9128a7eda80ecb49984fb62446/json
9c51babab55ad036ab2ca6ce5843b64e78103b9128a7eda80ecb49984fb62446/layer.tar
c61c9017ace5135108b617d5ae248ec423604bb1f6b28523eac3658e1c65e0d3/
c61c9017ace5135108b617d5ae248ec423604bb1f6b28523eac3658e1c65e0d3/VERSION
c61c9017ace5135108b617d5ae248ec423604bb1f6b28523eac3658e1c65e0d3/json
c61c9017ace5135108b617d5ae248ec423604bb1f6b28523eac3658e1c65e0d3/layer.tar
ca4553880ac778512954e1ea06fe6cd4d881732eb94016a59f7a8149e06dca63/
ca4553880ac778512954e1ea06fe6cd4d881732eb94016a59f7a8149e06dca63/VERSION
ca4553880ac778512954e1ea06fe6cd4d881732eb94016a59f7a8149e06dca63/json
ca4553880ac778512954e1ea06fe6cd4d881732eb94016a59f7a8149e06dca63/layer.tar
d0e292fa6125269fd4b73109ca0772d21becc66e5f1fc117b927038bfb943560/
d0e292fa6125269fd4b73109ca0772d21becc66e5f1fc117b927038bfb943560/VERSION
d0e292fa6125269fd4b73109ca0772d21becc66e5f1fc117b927038bfb943560/json
d0e292fa6125269fd4b73109ca0772d21becc66e5f1fc117b927038bfb943560/layer.tar
d1a364dc548d5357f0da3268c888e1971bbdb957ee3f028fe7194f1d61c6fdee.json
manifest.json
repositories

# cat manifest.json 
[{"Config":"d1a364dc548d5357f0da3268c888e1971bbdb957ee3f028fe7194f1d61c6fdee.json","RepoTags":["nginx:latest"],"Layers":["29b95120fdeb4c1818632797e6d1631399258ac70f80e95bde7c3d7c558a2ccc/layer.tar","9c51babab55ad036ab2ca6ce5843b64e78103b9128a7eda80ecb49984fb62446/layer.tar","512c574e43ebdc10af47041862c9afc54880d2569f8ad7641ae426b081cb7ade/layer.tar","ca4553880ac778512954e1ea06fe6cd4d881732eb94016a59f7a8149e06dca63/layer.tar","d0e292fa6125269fd4b73109ca0772d21becc66e5f1fc117b927038bfb943560/layer.tar","c61c9017ace5135108b617d5ae248ec423604bb1f6b28523eac3658e1c65e0d3/layer.tar"]}]

导入镜像

# rsync 10.0.0.30:/opt/*.gz /opt

# docker load < /opt/nginx_img.tar.gz 
02c055ef67f5: Loading layer [==================================================>]  72.53MB/72.53MB
766fe2c3fc08: Loading layer [==================================================>]   64.8MB/64.8MB
83634f76e732: Loading layer [==================================================>]  3.072kB/3.072kB
134e19b2fac5: Loading layer [==================================================>]  4.096kB/4.096kB
5c865c78bc96: Loading layer [==================================================>]  3.584kB/3.584kB
075508cf8f04: Loading layer [==================================================>]  7.168kB/7.168kB
Loaded image: nginx:latest


# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    d1a364dc548d   2 weeks ago   133MB

第二种

# docker load -i nginx_img1.tar.gz 
Loaded image: nginx:latest

容器操作基础命令

语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

[root@apache ~]# docker run busybox:1.33 /bin/echo "hello world"
hello world

[root@apache ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
e915b67e5da3        busybox:1.33        "/bin/echo \'hello wo…"   10 seconds ago      Exited (0) 9 seconds ago                       suspicious_hawking

从镜像运行一个容器(ctrl +p+q退出容器不注销)

# docker run -it busybox /bin/sh
/ # 

显示运行中的容器

[root@apache ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
34ae4f7fed24        busybox             "/bin/sh"           2 minutes ago       Up 2 minutes                            reverent_fermat

显示所有容器

[root@apache ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
34ae4f7fed24        busybox             "/bin/sh"                2 minutes ago       Up 2 minutes                                    reverent_fermat
02ed66229a34        busybox             "/bin/bash"              2 minutes ago       Created                                         pedantic_hugle
51c6c41aff64        busybox             "bash"                   3 minutes ago       Created                                         upbeat_davinci
e915b67e5da3        busybox:1.33        "/bin/echo \'hello wo…"   18 minutes ago      Exited (0) 18 minutes ago                       suspicious_hawking

删除运行中的容器

[root@apache ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
34ae4f7fed24        busybox             "/bin/sh"           22 minutes ago      Up 22 minutes                           reverent_fermat
[root@apache
~]# docker rm -f 34ae4f7fed24 34ae4f7fed24

端口映射

随机端口映射

[root@apache ~]# docker run -P nginx

新终端查看端口映射(端口范围从32768-65535)

[root@apache ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
1308f253fda2        nginx               "/docker-entrypoint.…"   26 seconds ago      Up 26 seconds       0.0.0.0:32768->80/tcp   gifted_fermi

访问测试

[root@apache ~]# curl -I 10.0.0.30:32768
HTTP/1.1 200 OK
Server: nginx/1.21.0

指定端口映射

1、宿主机81端口映射到容器的80端口

[root@apache ~]# docker run -itd -p 81:80 --name test nginx
171e2b9e3dbacde0d487b408a5aa245e2945781d6c414814ea7a67ba8e593c5f

[root@apache ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
171e2b9e3dba        nginx               "/docker-entrypoint.…"   4 seconds ago       Up 3 seconds        0.0.0.0:81->80/tcp   test

2、本地IP:本地端口 映射到容器的端口

[root@apache ~]# docker run -itd -p 10.0.0.30:81:80 --name test nginx
62c9c86372d56f40558256ef251953be334fb9177bcfaa0fbc0638880a25ea97

[root@apache ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
62c9c86372d5        nginx               "/docker-entrypoint.…"   4 seconds ago       Up 3 seconds        10.0.0.30:81->80/tcp   test

3、本地IP:本地随机端口映射到容器的端口

[root@apache ~]# docker run -itd -p 10.0.0.30::80 --name test nginx
b4ea559f1707bbea62f46fa1f7414e63c25f8ce4cbe01c636dac4608c32a4764

[root@apache ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
b4ea559f1707        nginx               "/docker-entrypoint.…"   3 seconds ago       Up 3 seconds        10.0.0.30:32768->80/tcp   test

4、本机ip:本地端口:容器端口/协议,默认为tcp协议

[root@apache ~]# docker run -itd -p 10.0.0.30:99:80/udp --name test nginx
158c913022673813a29b80841cab5b79d0abd20e60ad3bc6f148ae15c6a20b23

[root@apache ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                          NAMES
158c91302267        nginx               "/docker-entrypoint.…"   2 seconds ago       Up 2 seconds        80/tcp, 10.0.0.30:99->80/udp   test

5、一次性映射多个端口+协议

[root@apache ~]# docker run -itd -p 86:80/tcp -p 443:443/tcp -p 53:53/udp --name test nginx
0320535af2257db38b66ec64e0eee4f8465f8a88c597700460a3b87f0608a0df

[root@apache ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                          NAMES
0320535af225        nginx               "/docker-entrypoint.…"   4 seconds ago       Up 3 seconds        0.0.0.0:53->53/udp, 0.0.0.0:443->443/tcp, 0.0.0.0:86->80/tcp   test

查看容器访问日志

一次性查看

[root@apache ~]# docker logs test

永久查看

[root@apache ~]# docker logs -f test

[root@apache ~]# docker attach test                ## 使用此命令时,退出需要ctrl+p+q,否则容器也随之退出

查看容器已经映射的端口

# docker port test
53/udp -> 0.0.0.0:53
80/tcp -> 0.0.0.0:86
443/tcp -> 0.0.0.0:443

单次运行容器

[root@apache ~]# docker run -it --rm --name test busybox /bin/sh
/ # exit

[root@apache ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

进入运行中的容器

1、attach命令

 attach 类似于vnc,操作会在各个容器界面显示,所有使用此方式进入容器的操作都是同步显示的且exit后容器将被关闭,且使用exit退出后容器关闭,不推荐使用,需要进入到有shell环境的容器

[root@apache ~]# docker run -it --name test busybox /bin/sh
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var


第二个终端查看
[root@apache ~]# docker attach test
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var

第一个终端退出容器
[root@apache ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                     PORTS               NAMES
0e50812c7ff6        busybox             "/bin/sh"           About a minute ago   Exited (0) 5 seconds ago                       test

2、exec命令

执行单次命令与进入容器,不是很推荐此方式,虽然exit退出容器还在运行

[root@apache ~]# docker run -itd --name test busybox 
951c701f9861a79b417fa7c25dcaa32a856c1654e0c0383e4603e623fa439dee

[root@apache ~]# docker exec -it test sh
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # exit

[root@apache ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
951c701f9861        busybox             "sh"                40 seconds ago      Up 39 seconds                           test

3、nsenter

推荐使用此方式,nsenter命令需要通过PID进入到容器内部,不过可以使用docker inspect获取到容器的PID:

# yum install util-linux -y 

运行容器

[root@apache ~]# docker run -itd --name test busybox 
21dd5d3506f5312b05c2ce922a44d8249e3cc22b6ee0795bf5226de74f36e354
[root@apache ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
21dd5d3506f5        busybox             "sh"                4 seconds ago       Up 3 seconds                            test

查看容器pid

[root@apache ~]# docker inspect -f \'{{.State.Pid}}\' test
2292

进入容器

[root@apache ~]# nsenter -t 2292 -m -u -i -n -p
nsenter: failed to execute /bin/bash: No such file or directory

[root@apache ~]# nsenter -t 2292 -m -u -i -n -p /bin/sh
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # exit

[root@apache ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
21dd5d3506f5        busybox             "sh"                14 minutes ago      Up 14 minutes                           test

使用脚本管理

# vim dckr_ent.sh
#!/bin/bash

docker_in(){
        NAME_ID=$1
        PID=$(docker inspect -f "{{.State.Pid}}" ${NAME_ID})
        nsenter -t ${PID} -m -u -i -n -p  /bin/sh
        } 

docker_in $1


# chmod +x dckr_ent.sh

容器的生命周期

1、批量关闭正在运行的容器(正常关闭)

# docker stop `docker ps -qa`
21dd5d3506f5

2、批量强制关闭正在运行的容器(强制关闭)

# docker kill `docker ps -qa`
21dd5d3506f5

3、批量删除已退出容器

#  docker rm -f `docker ps -aq -f status=exited` 
21dd5d3506f5

4、批量删除所有容器

# docker rm -f $(docker ps -a -q)

启动容器时指定DNS

# docker run -it --name test --dns=223.5.5.5 busybox
 
/ # cat /etc/resolv.conf 
nameserver 223.5.5.5

 

以上是关于docker常用命令的主要内容,如果未能解决你的问题,请参考以下文章

Docker 常用命令

docker常用命令速查

Docker 常用命令

Docker 常用命令

Docker删除报错:Error response from daemon: conflict: unable to delete 08b152afcfae (must be forced)(代码片段

提效小技巧——记录那些不常用的代码片段