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删除报错:Error response from daemon: conflict: unable to delete 08b152afcfae (must be forced)(代码片段