帮助命令
docker version:版本信息
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker version Client: Docker Engine - Community Version: 20.10.0 API version: 1.41 Go version: go1.13.15 Git commit: 7287ab3 Built: Tue Dec 8 18:57:35 2020 OS/Arch: linux/amd64 Context: default Experimental: true
docker info:详细信息(可以看到配置的镜像加速器)
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker info Client: Context: default Debug Mode: false Plugins: app: Docker App (Docker Inc., v0.9.1-beta3) buildx: Build with BuildKit (Docker Inc., v0.4.2-docker) Server: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 2 Server Version: 20.10.0 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs 。。。。。。。。。。
Registry Mirrors:
https://x3anyg4w.mirror.aliyuncs.com/
docker --help :帮助命令(很重要)
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker --help Usage: docker [OPTIONS] COMMAND A self-sufficient runtime for containers Options: --config string Location of client config files (default "/root/.docker") -c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use") -D, --debug Enable debug mode -H, --host list Daemon socket(s) to connect to -l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info") --tls Use TLS; implied by --tlsverify --tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem") --tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem") --tlskey string Path to TLS key file (default "/root/.docker/key.pem") --tlsverify Use TLS and verify the remote -v, --version Print version information and quit Management Commands: app* Docker App (Docker Inc., v0.9.1-beta3) builder Manage builds buildx* Build with BuildKit (Docker Inc., v0.4.2-docker) 。。。。。。
镜像命令
docker images(列出本地主机上的镜像)
# 各个选项说明: REPOSITORY:表示镜像的仓库源 TAG:镜像的标签 IMAGE ID:镜像ID CREATED:镜像创建时间 SIZE:镜像大小 [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat latest feba8d001e3f 11 days ago 649MB centos latest 300e315adb2f 3 weeks ago 209MB
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像,默认TAG为latest 。
选项说明:
-a :列出本地所有的镜像(含中间映像层) -q :只显示镜像ID。 --digests :显示镜像的摘要信息 --no-trunc :显示完整的镜像信息
docker search (在远程仓库查找某个镜像)
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker search tomcat NAME DESCRIPTION STARS OFFICIAL AUTOMATED tomcat Apache Tomcat is an open source implementati… 2909 [OK] tomee Apache TomEE is an all-Apache Java EE certif… 85 [OK] dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base… 55 [OK] bitnami/tomcat Bitnami Tomcat Docker Image 37 [OK] kubeguide/tomcat-app Tomcat image for Chapter 1 29 consol/tomcat-7.0 Tomcat 7.0.57, 8080, "admin/admin" 17 [OK] cloudesire/tomcat Tomcat server, 6/7/8 15 [OK] aallam/tomcat-mysql Debian, Oracle JDK, Tomcat & MySQL 13 [OK] arm32v7/tomcat Apache Tomcat is an open source implementati… 10 maluuba/tomcat7-java8 Tomcat7 with java8. 6 。。。。。。
选项说明:
--no-trunc : 显示完整的镜像描述
docker pull (拉取镜像)
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat latest feba8d001e3f 11 days ago 649MB centos latest 300e315adb2f 3 weeks ago 209MB [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker pull nginx Using default tag: latest latest: Pulling from library/nginx 6ec7b7d162b2: Pull complete cb420a90068e: Pull complete 2766c0bf2b07: Pull complete e05167b6a99d: Pull complete 70ac9d795e79: Pull complete Digest: sha256:4cf620a5c81390ee209398ecc18e5fb9dd0f5155cd82adcbae532fec94006fb9 Status: Downloaded newer image for nginx:latest docker.io/library/nginx:latest [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat latest feba8d001e3f 11 days ago 649MB nginx latest ae2feff98a0c 2 weeks ago 133MB centos latest 300e315adb2f 3 weeks ago 209MB
docker pull nginx 即 docker pull nginx:latest,如有指定标签需要写明。
在pull镜像时,由于镜像会基于其他的父镜像(镜像是一层套一层),所以需要一并下载依赖的其他镜像。
docker rmi(删除镜像)
- 删除单个镜像
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker rmi hello-world Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container 6403e01e2e57 is using its referenced image bf756fb1ae65
无法删除,出现这个问题的原因是删除的这个images被容器依赖,通过docker ps -a查询容器(-a :列出当前所有正在运行的容器+历史上运行过的):
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6403e01e2e57 hello-world "/hello" 19 hours ago Exited (0) 19 hours ago vigorous_mcnulty
这时有两种方式:
1、先删除这个容器,再删除镜像
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker rm 6403e01e2e57 6403e01e2e57 [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker rmi hello-world Untagged: hello-world:latest Untagged: hello-world@sha256:1a523af650137b8accdaed439c17d684df61ee4d74feac151b5b337bd29e7eec Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b Deleted: sha256:9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63
2、-f 强制删除
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker rmi -f hello-world
- 删除多个镜像
docker rmi -f 镜像名1:TAG 镜像名2:TAG
- 删除所有镜像
docker rmi -f $(docker images -qa)
#docker images -qa # 查询过往的和全部的镜像ID
容器命令(一)
docker run(新建并启动容器)
选项说明:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...] --name="容器新名字": 为容器指定一个名称; -d: 后台运行容器,并返回容器ID,也即启动守护式容器; -i:以交互模式运行容器,通常与 -t 同时使用; -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用; -P: 随机端口映射; -p: 指定端口映射,有以下四种格式 ip:hostPort:containerPort ip::containerPort hostPort:containerPort containerPort
交互式容器
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat latest feba8d001e3f 2 weeks ago 649MB centos latest 300e315adb2f 4 weeks ago 209MB [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker run -it centos [root@a71c63f25d64 /]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 03:19 pts/0 00:00:00 /bin/bash root 15 1 0 03:19 pts/0 00:00:00 ps -ef
docker run -it centos:
使用镜像centos:latest以交互模式启动一个容器,并进入容器。
提示符root@a71c63f25d64的变化,说明已进入容器,进入容器后,可以用其他linux命令(比如ps、ls等等)正常操作这个centos容器。
为什么docker run -it centos会进入容器,因为docker run -it centos缺省了后面的默认shell种类,即/bin/bash(其他还有csh、sh等),就是说如果不写就默认为/bin/bash。
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker run -it centos ls bin etc lib lost+found mnt proc run srv tmp var dev home lib64 media opt root sbin sys usr [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c80bf3e520cc centos "ls" 7 seconds ago Exited (0) 6 seconds ago beautiful_shaw 0c6bffe45002 centos "ls" 20 minutes ago Exited (0) 20 minutes ago magical_dubinsky a71c63f25d64 centos "/bin/bash" 26 minutes ago Exited (127) 21 minutes ago xenodochial_morse
加上COMMAND参数ls后,并没有进入容器,而是直接把运行结果(ls)返回,并马上退出了容器。
指定容器名称
docker run -it --name mycentos0922 centos:
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b86226808d2b centos "/bin/bash" About a minute ago Up About a minute mycentos0922
docker ps(查看容器)
选项说明
docker ps [OPTIONS] OPTIONS说明(常用): -a :列出当前所有正在运行的容器+历史上运行过的 -l :显示最近创建的容器。 -n:显示最近n个创建的容器。 -q :静默模式,只显示容器编号。 --no-trunc :不截断输出
#当前运行 [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b86226808d2b centos "/bin/bash" About a minute ago Up About a minute mycentos0922 #上一个 [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b86226808d2b centos "/bin/bash" 19 minutes ago Up 19 minutes mycentos0922 #上3个 [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker ps -n 3 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b86226808d2b centos "/bin/bash" 19 minutes ago Up 19 minutes mycentos0922 c80bf3e520cc centos "ls" 3 hours ago Exited (0) 3 hours ago beautiful_shaw 0c6bffe45002 centos "ls" 3 hours ago Exited (0) 3 hours ago magical_dubinsky #只显示容器号 [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker ps -q b86226808d2b #全部的 [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b86226808d2b centos "/bin/bash" 20 minutes ago Up 20 minutes mycentos0922 c80bf3e520cc centos "ls" 3 hours ago Exited (0) 3 hours ago beautiful_shaw 0c6bffe45002 centos "ls" 3 hours ago Exited (0) 3 hours ago magical_dubinsky a71c63f25d64 centos "/bin/bash" 3 hours ago Exited (127) 3 hours ago xenodochial_morse
退出容器
对于交互式容器,默认不使用command参数的话,run -it 后会进入容器内,此时退出容器有两种方式:
- exit,容器停止并退出
- ctrl + p + q(先按p再按q),容器不停止,只是退出,容器在后台运行,这时用docker ps查看的话,容器状态为up
启动/重启/停止/强制停止容器
docker start/restart/stop/kill
docker rm(删除已停止的容器)
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b86226808d2b centos "/bin/bash" 39 minutes ago Up 38 minutes mycentos0922 c80bf3e520cc centos "ls" 3 hours ago Exited (0) 3 hours ago beautiful_shaw 0c6bffe45002 centos "ls" 4 hours ago Exited (0) 4 hours ago magical_dubinsky a71c63f25d64 centos "/bin/bash" 4 hours ago Exited (127) 4 hours ago xenodochial_morse [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker rm b86226808d2b Error response from daemon: You cannot remove a running container b86226808d2b42d1a2dd4060e01fbfdc3186b107647742052c633bf1810f6da6. Stop the container before attempting removal or force remove [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker rm -f b86226808d2b b86226808d2b
对于正在运行的容器,无法用rm删除,可以用rm -f强制删除,但不建议这么做,最好是先stop,再rm。
一次性删除多个容器:
docker rm $(docker ps -a -q) 或者 docker ps -a -q|xargs docker rm
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker rm $(docker ps -a -q) c80bf3e520cc 0c6bffe45002 a71c63f25d64
容器命令(二)
启动守护式容器
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker run -d centos 5eb9f9ce25fd6321e66494f744a4c22d2cdeb375a5bf81356f47c6ea770eb7f6 [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5eb9f9ce25fd centos "/bin/bash" 14 seconds ago Exited (0) 13 seconds ago focused_almeida [root@iZbp1dnapcnoxqoyi0jwqaZ ~]#
发现docker run -d启动守护式容器后,docker ps查看并没有正在运行的容器。
但根据返回的容器id,确实是启动了一个容器,再根据docker ps -l 确定此容器在13秒之前已退出了。
这里有一个docker很重要的机制:Docker容器后台运行的话,就必须有一个前台进程。
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。
docker logs(查看容器日志)
选项说明
docker logs -f -t --tail 容器ID * -t 是加入时间戳 * -f 跟随最新的日志打印 * --tail 数字 显示最后多少条
先执行一个守护式容器:
docker run -d centos /bin/sh -c "while true;do echo hello zzy;sleep 2;done"
此时用docker ps查看,会发现有容器在up,因为容器中shell执行的是循环脚本。
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker run -d centos /bin/sh -c "while true;do echo hello zzy;sleep 2;done" e0711f532a9a33c672754f5efb261eead894f3c75249dae21ff7e98d303dfb32 [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e0711f532a9a centos "/bin/sh -c 'while t…" 5 seconds ago Up 4 seconds competent_burnell
用docker logs 查看这个容器的日志:
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker logs -t -f --tail 3 e0711f532a9a 2021-01-05T09:03:00.923246482Z hello zzy 2021-01-05T09:03:02.925240633Z hello zzy 2021-01-05T09:03:04.927207553Z hello zzy 2021-01-05T09:03:06.929193959Z hello zzy 2021-01-05T09:03:08.931253460Z hello zzy 2021-01-05T09:03:10.933214269Z hello zzy 2021-01-05T09:03:12.935182144Z hello zzy
docker top (查看容器内运行的进程)
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e0711f532a9a centos "/bin/sh -c 'while t…" 11 minutes ago Up 11 minutes competent_burnell [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker top e0711f532a9a UID PID PPID C STIME TTY TIME CMD root 26729 26709 0 17:01 ? 00:00:00 /bin/sh -c while true;do echo hello zzy;sleep 2;done root 27232 26729 0 17:13 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 2
docker inspect (查看容器内部细节)
docker容器是层层继承的关系,以json字符串的形式返回结果
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker inspect e0711f532a9a [ { "Id": "e0711f532a9a33c672754f5efb261eead894f3c75249dae21ff7e98d303dfb32", "Created": "2021-01-05T09:01:30.54195429Z", "Path": "/bin/sh", "Args": [ "-c", "while true;do echo hello zzy;sleep 2;done" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 26729, "ExitCode": 0, "Error": "", "StartedAt": "2021-01-05T09:01:30.835940473Z", "FinishedAt": "0001-01-01T00:00:00Z" 。。。。。。
进入正在运行的容器并以命令行交互
上面有讲到用docker run -it 启动交互式容器后,会进入容器,用ctrl + p + q退出但并不停止容器,这时如果想重新进入容器的话有两种方式:
1.docker attach 容器ID 2.docker exec -it 容器ID /bin/bash
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d317ba66016d centos "/bin/bash" 10 seconds ago Up 9 seconds friendly_diffie #用attach重新进入 [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker attach d317ba66016d #ctrl+p+q退出 [root@d317ba66016d /]# read escape sequence #用exec重新进入 [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker exec -it d317ba66016d /bin/bash [root@d317ba66016d /]#
两种方式的区别:
attach 直接进入容器启动命令的终端,不会启动新的进程
exec 是在容器中打开新的终端,并且可以启动新的进程
exec功能比attach更强大,还可以不进入容器,直接执行命令然后返回结果:
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker exec -it d317ba66016d ls /tmp ks-script-esd4my7v ks-script-eusq_sc5
总结:attach必须进入容器后才能干活,exec在容器内和容器外都可以干活
docker cp (从容器内拷贝文件到主机上)
docker cp 容器ID:容器内路径 目的主机路径(注意有个冒号)
[root@iZbp1dnapcnoxqoyi0jwqaZ ~]# pwd /root #查看容器/tmp目录 [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker exec -it d317ba66016d ls -l /tmp total 8 -rwx------ 1 root root 701 Dec 4 17:37 ks-script-esd4my7v -rwx------ 1 root root 671 Dec 4 17:37 ks-script-eusq_sc5 #把容器/tmp目录下的ks-script-esd4my7v拷贝到宿主机/root下 [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# docker cp d317ba66016d:/tmp/ks-script-esd4my7v /root [root@iZbp1dnapcnoxqoyi0jwqaZ ~]# ll total 4 -rwx------ 1 root root 701 Dec 5 01:37 ks-script-esd4my7v
小结
docker命令大全:
attach Attach to a running container # 当前 shell 下 attach 连接指定运行镜像 build Build an image from a Dockerfile # 通过 Dockerfile 定制镜像 commit Create a new image from a container changes # 提交当前容器为新的镜像 cp Copy files/folders from the containers filesystem to the host path #从容器中拷贝指定文件或者目录到宿主机中 create Create a new container # 创建一个新的容器,同 run,但不启动容器 diff Inspect changes on a container's filesystem # 查看 docker 容器变化 events Get real time events from the server # 从 docker 服务获取容器实时事件 exec Run a command in an existing container # 在已存在的容器上运行命令 export Stream the contents of a container as a tar archive # 导出容器的内容流作为一个 tar 归档文件[对应 import ] history Show the history of an image # 展示一个镜像形成历史 images List images # 列出系统当前镜像 import Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export] info Display system-wide information # 显示系统相关信息 inspect Return low-level information on a container # 查看容器详细信息 kill Kill a running container # kill 指定 docker 容器 load Load an image from a tar archive # 从一个 tar 包中加载一个镜像[对应 save] login Register or Login to the docker registry server # 注册或者登陆一个 docker 源服务器 logout Log out from a Docker registry server # 从当前 Docker registry 退出 logs Fetch the logs of a container # 输出当前容器日志信息 port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT # 查看映射端口对应的容器内部源端口 pause Pause all processes within a container # 暂停容器 ps List containers # 列出容器列表 pull Pull an image or a repository from the docker registry server # 从docker镜像源服务器拉取指定镜像或者库镜像 push Push an image or a repository to the docker registry server # 推送指定镜像或者库镜像至docker源服务器 restart Restart a running container # 重启运行的容器 rm Remove one or more containers # 移除一个或者多个容器 rmi Remove one or more images # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除] run Run a command in a new container # 创建一个新的容器并运行一个命令 save Save an image to a tar archive # 保存一个镜像为一个 tar 包[对应 load] search Search for an image on the Docker Hub # 在 docker hub 中搜索镜像 start Start a stopped containers # 启动容器 stop Stop a running containers # 停止容器 tag Tag an image into a repository # 给源中镜像打标签 top Lookup the running processes of a container # 查看容器中运行的进程信息 unpause Unpause a paused container # 取消暂停容器 version Show the docker version information # 查看 docker 版本号 wait Block until a container stops, then print its exit code # 截取容器停止时的退出状态值
参考:https://www.cnblogs.com/venicid/p/11870332.html#auto-id-26