3.docker的常用命令
1.版本
docker verison
2.docker常用信息
docker info
3.列出本地的镜像
[root@wmd03 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 8 months ago 13.3kB
镜像的操作命令
1.列出本地所有的镜像(含中间映像层)
[root@wmd03 ~]# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 8 months ago 13.3kB
2.只显示镜像的id
[root@wmd03 ~]# docker images -q
bf756fb1ae65
3.组合使用:查看本地所有镜像的id
[root@wmd03 ~]# docker images -qa
bf756fb1ae65
4.去docker官网查询tomcat的信息
[root@wmd03 ~]# docker search tomcat
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tomcat Apache Tomcat is an open source implementati… 2838 [OK]
tomee Apache TomEE is an all-Apache Java EE certif… 83 [OK]
dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base… 55 [OK]
bitnami/tomcat Bitnami Tomcat Docker Image 36 [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
5.只累出点赞数超过30的tomcat,点赞数越多,下载越多,也就越稳定
root@wmd03 ~]# docker search -s 30 tomcat
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tomcat Apache Tomcat is an open source implementati… 2838 [OK]
tomee Apache TomEE is an all-Apache Java EE certif… 83 [OK]
dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base… 55 [OK]
bitnami/tomcat Bitnami Tomcat Docker Image
6.下载镜像
不指定版本号的话,下载的是最新的tomcat
下载指定版本号的话: docker pull tomcat:版本号
[root@wmd03 ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
57df1a1f1ad8: Pull complete
71e126169501: Pull complete
1af28a55c3f3: Pull complete
03f1c9932170: Pull complete
881ad7aafb13: Pull complete
9c0ffd4062f3: Pull complete
bd62e479351a: Pull complete
48ee8bc64dbc: Pull complete
07cb85cca4f0: Pull complete
6a78fac8d191: Pull complete
Digest: sha256:1bab37d5d97bd8c74a474b2c1a62bbf1f1b4b62f151c8dcc472c7d577eb3479d
Status: Downloaded newer image for tomcat:lates
7.删除镜像:
1.
[root@wmd03 ~]# docker rmi hello-world
Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container ee6aeb6d745b is using its referenced image bf756fb1ae65
2.强制删除
[root@wmd03 ~]# docker rmi -f hello-world
Untagged: hello-world:latest
Untagged: hello-world@sha256:4cf9c47f86df71d48364001ede3a4fcd85ae80ce02ebad74156906caff5378bc
Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
3.批量删除
[root@wmd03 ~]# docker rmi -f hello-world nginx
4.删除所有的镜像
[root@wmd03 ~]# docker rmi -f ${docker images -q}
5.删除包含关键字的镜像
docker rmi --force `docker images | grep doss-api | awk '{print $3}'` //其中doss-api为关键字
容器的操作命令
镜像是容器的前提,有镜像才能有容器:镜像可以理解是类(模板),容器是实例(具体的对象实例)
测试:
1.从阿里云上拉下一个centos系统
[root@wmd03 ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
3c72a8ed6814: Pull complete
Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
Status: Downloaded newer image for centos:latest
[root@wmd03 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest f796d3d2c195 12 days ago 647MB
centos latest 0d120b6ccaa8 6 weeks ago 215MB
发现centos系统的大小和vmware虚拟机的系统大小相差很大,vmware的系统最少4个g,
这是因为docker上的centos镜像是精简版的,并没有硬件的虚拟,是最精简的linux系统
2.启动下载的centos系统
-it的意思是启动并创建一个伪终端,实验如下
[root@wmd03 ~]# docker run -it 0d120b6ccaa8
发现路径在cenos系统的根目录下,是因为现处于docker启动的centos系统的伪终端里
[root@9988123a0072 /]# pwd
/
[root@9988123a0072 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@9988123a0072 /]#
2.2指定名称运行docker的centos
[root@wmd03 ~]# docker run -it --name wmd03 centos
这时,另创建一个连接执行:docker ps:发现names是自己创建的名称
[root@wmd03 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93f13e82a6ba centos "/bin/bash" 22 seconds ago Up 22 seconds wmd03
3.退出容器
3.1 exit 容器停止并退出
3.2 ctrl+p+q 容器不停止退出
4.查询运行的容器
docker ps:查询正在运行的容器
docker ps -a:列出当前所有正在运行的容器+历史上运行过的容器
docker ps -l:显示最近创建的容器
docker ps -n:显示最近几个创建的容器
docker ps -q:静默模式,只显示正在运行的容器的id号
docker ps --no-trunc:不截断输出
5.docker 容器的启动和重启
5.1查询正在运行的docker,发现只有一个
[root@wmd03 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93f13e82a6ba centos "/bin/bash" 14 minutes ago Up 14 minutes wmd03
5.2查询曾经运行的两个容器
[root@wmd03 ~]# docker ps -n 2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93f13e82a6ba centos "/bin/bash" 14 minutes ago Up 14 minutes wmd03
9988123a0072 0d120b6ccaa8 "/bin/bash" 29 minutes ago Exited (127) 15 minutes ago nostalgic_jennings
5.3 启动已停止的docker 容器:docker start id号
[root@wmd03 ~]# docker start 9988123a0072
9988123a0072
5.4 查看当前正在运行的docker容器,发现已经启动
[root@wmd03 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93f13e82a6ba centos "/bin/bash" 14 minutes ago Up 14 minutes wmd03
9988123a0072 0d120b6ccaa8 "/bin/bash" 29 minutes ago Up 6 seconds nostalgic_jennings
5.5重启docker容器
[root@wmd03 ~]# docker restart 9988123a0072
9988123a0072
[root@wmd03 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93f13e82a6ba centos "/bin/bash" 14 minutes ago Up 14 minutes wmd03
9988123a0072 0d120b6ccaa8 "/bin/bash" 29 minutes ago Up 3 seconds nostalgic_jennings
6.docker容器的停止
6.1 docker stop id号
6.2强制关闭;docker kill id号
7.删除docker容器的运行历史
7.1查询当前正在运行的容器:发现没有
[root@wmd03 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
查询历史运行的2个容器
[root@wmd03 ~]# docker ps -n 2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93f13e82a6ba centos "/bin/bash" 23 minutes ago Exited (0) 32 seconds ago wmd03
9988123a0072 0d120b6ccaa8 "/bin/bash" 38 minutes ago Exited (0) 25 seconds ago nostalgic_jennings
7.2 docker rm id号
删除9988123a0072的docker容器运行历史
[root@wmd03 ~]# docker rm 9988123a0072
9988123a0072
查询历史发现已经没有该容器的运行历史
[root@wmd03 ~]# docker ps -n 2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93f13e82a6ba centos "/bin/bash" 25 minutes ago Exited (0) 2 minutes ago wmd03
ee6aeb6d745b bf756fb1ae65 "/hello" 2 hours ago Exited (0) 2 hours ago romantic_thompson
7.3强制删除该容器的运行历史(用于删除没有停止的容器历史)
docker rm -f id号
7.4强制删除所有容器的运行历史(不管运行与否)
docker rm -f $(docker ps -q)
1.启动docker容器
docker run
--name="容器新名字":为容器指定一个名称
-d:后台运行容器,并返回容器ID,也即启动守护式容器
-i:以交互模式运行容器,通常以-t同时使用
-t:为容器重新分配一个伪输入终端,通常与-i同时使用
-P:随机端口映射
-p:指定端口映射,有以下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
这里需要注意的是: docker run -d centos(后台运行)和docker run -it centos(作为交互式运行时的区别)
[root@wmd03 ~]# docker run -d centos(以后台运行进程,并返回一个序列号)
e1599db736fea1ae078d6ee47360163d9cd3e101af4cc1f23971705e967459e8
[root@wmd03 ~]# docker ps-->查询当前正在运行的容器,发现并没有centos的运行
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@wmd03 ~]# docker ps -n 2--->查询容器的运行历史,发现centos有运行过,但是关闭了
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e1599db736fe centos "/bin/bash" 29 seconds ago Exited (0) 27 seconds ago vigilant_ardinghelli
这是什么原因呢:
这里需要一个很重要的点:docker容器后台运行,就必须有一个前台进程
容器运行的命令,如果不是一些挂起的命令(top,tail等),就会自动退出
这是docker的机制问题,例如以web容器,我们以ngix为例,正常情况下,我们启动响应的service即可,例如:service nginx start
但是这样做,nigix为后台进程模式运行,就导致docket前台没有可运行的应用
这样容器后台启动后,就会例即自杀,因为他觉得无事可做
所以最佳的解决方案是:将你要运行的程序以前台进程的方式运行
2.查看容器日志:
docker -logs
-f 跟随最新的时间打印
-t 加入时间戳
--tail 数字,显示最后多少条
容器id
3.解决1遗留的后台运行问题:思路是,因没有前台程序导致容器的自杀,所以可以写个死循环,不停的输出日志到控制台,这就有了一个挂起程序了,也就是有了前台,也就不会断了
不能使用:docker run -d centos
使用:docker run -d centos /bin/sh -c "while true;do echo hello wmd;sleep 5;done"-->后面的意思是每隔5秒打印一次:hello wmd
a4ced0fdefb91d49739f2942a6ece2cce54afbe259813e9aa140147bf8de441a
[root@wmd03 ~]# docker ps--->查询当前正在运行的容器,发现有centos
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a4ced0fdefb9 centos "/bin/sh -c 'while t…" 5 seconds ago Up 4 seconds hardcore_tereshkova
查看日志:
1.-t
[root@wmd03 ~]# docker logs -t a4ced0fdefb9
2020-10-09T20:07:59.646584481Z hello wmd
2020-10-09T20:08:04.847974447Z hello wmd
2020-10-09T20:08:09.851195631Z hello wmd
2020-10-09T20:08:14.862156606Z hello wmd
发现5秒打印一次
2.-f 不停的追加
docker logs -t -f a4ced0fdefb9
2020-10-09T20:07:59.646584481Z hello wmd
2020-10-09T20:08:04.847974447Z hello wmd
2020-10-09T20:08:09.851195631Z hello wmd
2020-10-09T20:08:14.862156606Z hello wmd
...持续追加中
3.--tail 数字:查看最后几条日志
[root@wmd03 ~]# docker logs -f -t --tail 4 a4ced0fdefb9
2020-10-09T20:13:00.129713239Z hello wmd
2020-10-09T20:13:05.132413634Z hello wmd
2020-10-09T20:13:10.135802553Z hello wmd
2020-10-09T20:13:15.146469641Z hello wmd
4.查看docker 容器中的进程
docker top 容器id
[root@wmd03 ~]# docker top a4ced0fdefb9
UID PID PPID C STIME TTY TIME CMD
root 3330 3318 0 04:07 ? 00:00:00 /bin/sh -c while true;do echo hello wmd;sleep 5;
doneroot 3577 3330 0 04:16 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=slee
p /usr/bin/sleep 5
5.查看容器内部细节: docker inspect 容器id 以json串的形式返回容器的详细信息
[root@wmd03 ~]# docker inspect a4ced0fdefb9
[
{
"Id": "a4ced0fdefb91d49739f2942a6ece2cce54afbe259813e9aa140147bf8de441a",
"Created": "2020-10-09T20:07:59.279476217Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo hello wmd;sleep 5;done"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 3330,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-10-09T20:07:59.657832567Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
。。。。
。。。。
6.如何重新进入容器
1.docker attach 容器id(进入交互式页面)
6.1以交互式的形式运行centos
[root@wmd03 ~]# docker run -it --name wmd centos
[root@522e3c77fc0a /]# pwd
/
处于运行的centos容器中
6.2:ctrl+p+q退出交互形式
6.3查询当前正在运行的容器:发现此时已经退到宿主机了,这时如何返回到交互呢
[root@wmd03 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
522e3c77fc0a centos "/bin/bash" 26 seconds ago Up 25 seconds wmd
6.4 docker attach 容器id
[root@wmd03 ~]# docker attach 522e3c77fc0a
[root@522e3c77fc0a /]# pwd
/
发现其进入了运行的centos容器中
2.docker exec -it 容器id bashShell(进入容器中执行脚本并返回,再退出交互,最终结果是退出交互)
[root@wmd03 ~]# docker exec -it 522e3c77fc0a pwd
/
[root@wmd03 ~]#
执行了pwd并返回给宿主机,并且最终退出宿主机
也可以进入:这是进入
[root@wmd03 ~]# docker exec -it 522e3c77fc0a /bin/bash
[root@522e3c77fc0a /]# pwd
/
[root@522e3c77fc0a /]#
7.如何将docker容器中的文件拷贝到宿主机上:docker cp 容器id:容器中文件路径 宿主机路径
[root@wmd03 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
522e3c77fc0a centos "/bin/bash" 25 minutes ago Up 25 minutes wmd
[root@wmd03 ~]# docker cp 522e3c77fc0a:/tmp/yum.log /root
将centos容器中/tmp/yum.log文件拷贝到宿主机的root目录下