Docker学习笔记
一、Docker镜像管理
常用基础命令
1. 登录镜像仓库:
docker login
1 [root@host-yht ~]# docker login docker.io 2 Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. 3 Username: yht148665 4 Password: 5 WARNING! Your password will be stored unencrypted in /root/.docker/config.json. 6 Configure a credential helper to remove this warning. See 7 https://docs.docker.com/engine/reference/commandline/login/#credentials-store 8 9 Login Succeeded
2. 查看所有本地的主机上的镜像:
docker images

3. 搜索镜像:
docker search 镜像名

4. 下载镜像:
直接下载:
dockers pull 镜像名

指定下载:
1 [root@host-yht ~]# docker pull alpine:3.10.1 2 3.10.1: Pulling from library/alpine 3 050382585609: Pull complete 4 Digest: sha256:6a92cd1fcdc8d8cdec60f33dda4db2cb1fcdcacf3410a8e05b3741f44a9b5998 5 Status: Downloaded newer image for alpine:3.10.1 6 docker.io/library/alpine:3.10.1
镜像结构:registry_name/repository_name/image_name:tag_name
例如:docker.io/library/alpine
5. 给镜像打标签:
docker tag 容器id 新标签
1 [root@host-yht ~]# docker images 2 REPOSITORY TAG IMAGE ID CREATED SIZE 3 alpine latest 14119a10abf4 2 weeks ago 5.6MB 4 centos latest 300e315adb2f 9 months ago 209MB 5 [root@host-yht ~]# docker tag 14119a10abf4 docker.io/library/alpine:new_latest 6 [root@host-yht ~]# docker images 7 REPOSITORY TAG IMAGE ID CREATED SIZE 8 alpine latest 14119a10abf4 2 weeks ago 5.6MB 9 alpine new_latest 14119a10abf4 2 weeks ago 5.6MB 10 centos latest 300e315adb2f 9 months ago 209MB
6. 删除镜像:
docker rmi 镜像id

二、Docker容器基本操作
1. 查看容器
1.1 查看运行中的容器
docker ps
1.2 查看运行所有容器
docker ps -a
[root@host-yht ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d7aac98d290d centos "/bin/bash" 10 days ago Exited (0) 10 days ago romantic_antonelli
2. 启动容器(运行镜像)
docker run
命令格式: docker run [OPTIONS] image [COMMAND] [ARG...]
-i :表示启动一个可以交互的容器,并持续打开标准输入
-p:宿主机端口与容器中端口进行映射
-d:后台启动容器
--name:指定容器名称
2.1 交互式启动一个容器
[root@host-yht ~]# docker run -ti centos /bin/sh
sh-4.4#
已经启动,换一个终端查看:
[root@host-yht ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5629c321f516 centos "/bin/sh" 52 seconds ago Up 50 seconds kind_dijkstra
然后就可以在启动的容器进行交互:例如查看当前路径,ip,文件夹等等
1 sh-4.4# ls -a 2 . .. .dockerenv bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var 3 sh-4.4# ip add 4 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 5 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 6 inet 127.0.0.1/8 scope host lo 7 valid_lft forever preferred_lft forever 8 8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 9 link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 10 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 11 valid_lft forever preferred_lft forever
2.2 非交互式启动一个容器
1 [root@host-yht ~]# docker run --rm centos /bin/echo hello 2 hello 3 [root@host-yht ~]# docker ps -a 4 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5 5629c321f516 centos "/bin/sh" 22 minutes ago Exited (0) 15 minutes ago kind_dijkstra 6 61c3342c7b0f centos "/bin/sh" 29 minutes ago Exited (0) 26 minutes ago sweet_napier 7 d7aac98d290d centos "/bin/bash" 10 days ago Exited (0) 10 days ago romantic_antonelli 8 9 直接输出hello并关闭,--rm : 不会出现在启动历史中
2.3非交互启动一个后台容器
这儿有一个小坑
1 [root@host-yht ~]# docker run -d --name mycentos centos 2 04094b1f1f6770a4a1f5a30ed2f2852f608abba09f8b406fdb770b8eeaff10c1 3 [root@host-yht ~]# docker ps -a 4 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5 04094b1f1f67 centos "/bin/bash" 7 seconds ago Exited (0) 5 seconds ago mycentos
你会发现明明是启动后挂在后台,却被马上关闭。这是因为这个容器要是没有提供服务就会马上停止运行
如果我写一个循环输出让其一直运行:
1 [root@host-yht ~]# docker run -d centos /bin/sh -c "while true;do echo host;sleep 2;done" 2 09ba623140bbbc8ccb89ead4613b682367538fb3c18c65377c3bc3a61caa30af 3 [root@host-yht ~]# docker ps -a 4 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5 09ba623140bb centos "/bin/sh -c 'while t…" 11 seconds ago Up 10 seconds romantic_jones
这个容器就在后台运行着。
3. 在宿主机查看寄生机进程
1 [root@host-yht ~]# docker run -d centos /bin/sh -c "while true;do echo host;sleep 2;done" 2 faf874eb3b131523056897d467f82b5c951b1b07e26d50d3ffd49dcec575246b 3 [root@host-yht ~]# ps aux|grep while|grep -v grep 4 root 3530 0.0 0.1 11880 1536 ? Ss 18:27 0:00 /bin/sh -c while true;do echo host;sleep 2;done
4. 进入当前正在运行的容器
4.1 进入容器后开启一个新的终端
docker exec -it 容器id /bin/bash
1 [root@host-yht ~]# docker exec -it 55a2c9b30dfd /bin/bash 2 [root@55a2c9b30dfd /]#
4.2 进入容器正在执行的终端
docker attach 容器id
1 [root@host-yht ~]# docker attach 55a2c9b30dfd 2 host 3 host 4 host 5 host 6 host 7 host 8 host 9 host 10 host 11 host 12 host 13 正在不停的输出字符串host
5.启动,重启,停止容器
1 # 启动,重启,停止容器 2 docker start/restart/stop 容器id 3 # 强制停止当前容器 4 docker kill 容器id
6. 删除容器
# 删除指定容器,不能删除正在运行的容器
docker rm 容器id
1 [root@host-yht ~]# docker ps -a 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3 55a2c9b30dfd centos "/bin/sh -c 'while t…" 22 minutes ago Exited (137) 10 minutes ago suspicious_chaum 4 faf874eb3b13 centos "/bin/sh -c 'while t…" 28 minutes ago Exited (137) 24 minutes ago beautiful_golick 5 09ba623140bb centos "/bin/sh -c 'while t…" 40 minutes ago Exited (137) 38 minutes ago romantic_jones 6 04094b1f1f67 centos "/bin/bash" 2 hours ago Exited (0) 2 hours ago mycentos 7 5629c321f516 centos "/bin/sh" 2 hours ago Exited (0) 2 hours ago kind_dijkstra 8 61c3342c7b0f centos "/bin/sh" 3 hours ago Exited (0) 3 hours ago sweet_napier 9 d7aac98d290d centos "/bin/bash" 10 days ago Exited (0) 10 days ago romantic_antonelli 10 [root@host-yht ~]# docker rm 55a2c9b30dfd 11 55a2c9b30dfd 12 [root@host-yht ~]# docker ps -a 13 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 14 faf874eb3b13 centos "/bin/sh -c 'while t…" 28 minutes ago Exited (137) 25 minutes ago beautiful_golick 15 09ba623140bb centos "/bin/sh -c 'while t…" 41 minutes ago Exited (137) 39 minutes ago romantic_jones 16 04094b1f1f67 centos "/bin/bash" 2 hours ago Exited (0) 2 hours ago mycentos 17 5629c321f516 centos "/bin/sh" 2 hours ago Exited (0) 2 hours ago kind_dijkstra 18 61c3342c7b0f centos "/bin/sh" 3 hours ago Exited (0) 3 hours ago sweet_napier 19 d7aac98d290d centos "/bin/bash" 10 days ago Exited (0) 10 days ago romantic_antonelli
6.1 删除运行中的容器
docker rm -f 容器id
1 [root@host-yht ~]# docker run -d centos /bin/sh -c "while true;do echo host;sleep 2;done" 2 8818135fb077657082201706859436ca4430072ba36c27514befb72d9060637a 3 [root@host-yht ~]# docker ps -a 4 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5 8818135fb077 centos "/bin/sh -c 'while t…" 3 seconds ago Up 2 seconds dazzling_satoshi 6 faf874eb3b13 centos "/bin/sh -c 'while t…" 30 minutes ago Exited (137) 27 minutes ago beautiful_golick 7 09ba623140bb centos "/bin/sh -c 'while t…" 43 minutes ago Exited (137) 41 minutes ago romantic_jones 8 04094b1f1f67 centos "/bin/bash" 2 hours ago Exited (0) 2 hours ago mycentos 9 5629c321f516 centos "/bin/sh" 2 hours ago Exited (0) 2 hours ago kind_dijkstra 10 61c3342c7b0f centos "/bin/sh" 3 hours ago Exited (0) 3 hours ago sweet_napier 11 d7aac98d290d centos "/bin/bash" 10 days ago Exited (0) 10 days ago romantic_antonelli 12 [root@host-yht ~]# docker rm -f 8818135fb077 13 8818135fb077 14 [root@host-yht ~]# docker ps -a 15 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 16 faf874eb3b13 centos "/bin/sh -c 'while t…" 31 minutes ago Exited (137) 28 minutes ago beautiful_golick 17 09ba623140bb centos "/bin/sh -c 'while t…" 44 minutes ago Exited (137) 42 minutes ago romantic_jones 18 04094b1f1f67 centos "/bin/bash" 2 hours ago Exited (0) 2 hours ago mycentos 19 5629c321f516 centos "/bin/sh" 2 hours ago Exited (0) 2 hours ago kind_dijkstra 20 61c3342c7b0f centos "/bin/sh" 3 hours ago Exited (0) 3 hours ago sweet_napier 21 d7aac98d290d centos "/bin/bash" 10 days ago Exited (0) 10 days ago romantic_antonelli
6.2 常用的一个命令,删除所有停止的容器
for i in `docker ps -a|grep -i exit|sed '1d'|awk '{print $1}'`;do docker rm -f $i;done
1 [root@host-yht ~]# docker ps -a 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3 faf874eb3b13 centos "/bin/sh -c 'while t…" 35 minutes ago Exited (137) 31 minutes ago beautiful_golick 4 09ba623140bb centos "/bin/sh -c 'while t…" 47 minutes ago Exited (137) 45 minutes ago romantic_jones 5 04094b1f1f67 centos "/bin/bash" 2 hours ago Exited (0) 2 hours ago mycentos 6 5629c321f516 centos "/bin/sh" 3 hours ago Exited (0) 2 hours ago kind_dijkstra 7 61c3342c7b0f centos "/bin/sh" 3 hours ago Exited (0) 3 hours ago sweet_napier 8 d7aac98d290d centos "/bin/bash" 10 days ago Exited (0) 10 days ago romantic_antonelli 9 [root@host-yht ~]# for i in `docker ps -a|grep -i exit|sed '1d'|awk '{print $1}'`;do docker rm -f $i;done 10 09ba623140bb 11 04094b1f1f67 12 5629c321f516 13 61c3342c7b0f 14 d7aac98d290d
6.3 删除所有容器
1 docker rm -f $(docker ps -qa)
7. 修改/提交容器
7.1 修改容器
1 [root@host-yht ~]# docker run -it --name centos20219181029 centos /bin/sh 2 sh-4.4# ls / 3 bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var 4 sh-4.4# echo hello > test.txt 5 sh-4.4# ls / 6 bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys test.txt tmp usr var 7 sh-4.4# cat test.txt 8 hello
注意:这种修改只会保存在本容器,并不会保存到镜像
1 [root@host-yht ~]# docker run -it centos /bin/sh 2 sh-4.4# ls / 3 bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
7.2 提交容器
1 docker commit -p [你要提交的容器名] [镜像名字]
1 [root@host-yht ~]# docker commit -p centos20219181029 new_centos_test.txt 2 sha256:d6ec9fd15562cbe6317a19d8214e6accf6e3a74148b57800aabfbf6f40b9e16f 3 [root@host-yht ~]# docker images 4 REPOSITORY TAG IMAGE ID CREATED SIZE 5 new_centos_test.txt latest d6ec9fd15562 8 seconds ago 209MB 6 alpine latest 14119a10abf4 3 weeks ago 5.6MB 7 alpine new_latest 14119a10abf4 3 weeks ago 5.6MB 8 centos latest 300e315adb2f 9 months ago 209MB 9 alpine 3.10.1 b7b28af77ffe 2 years ago 5.58MB
此时容器已经被提交成了一个镜像,去看一下这个镜像里面有没有test.txt文件
1 [root@host-yht ~]# docker run -it new_centos_test.txt /bin/sh 2 sh-4.4# ls / 3 bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys test.txt tmp usr var 4 sh-4.4# cat test.txt 5 hello
有!说明之前的centos镜像被修改并保存为一个新的镜像
8. 查看容器详细信息
1 docker inspect 容器名
1 [root@host-yht ~]# docker inspect centos 2 [ 3 { 4 "Id": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55", 5 "RepoTags": [ 6 "centos:latest" 7 ], 8 "RepoDigests": [ 9 "centos@sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1" 10 ], 11 "Parent": "", 12 "Comment": "", 13 "Created": "2020-12-08T00:22:53.076477777Z", 14 "Container": "395e0bfa7301f73bc994efe15099ea56b8836c608dd32614ac5ae279976d33e4", 15 "ContainerConfig": { 16 "Hostname": "395e0bfa7301", 17 "Domainname": "", 18 "User": "", 19 "AttachStdin": false, 20 "AttachStdout": false, 21 "AttachStderr": false, 22 "Tty": false, 23 "OpenStdin": false, 24 "StdinOnce": false, 25 "Env": [ 26 "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 27 ], 28 "Cmd": [ 29 "/bin/sh", 30 "-c", 31 "#(nop) ", 32 "CMD [\"/bin/bash\"]" 33 ], 34 "Image": "sha256:6de05bdfbf9a9d403458d10de9e088b6d93d971dd5d48d18b4b6758f4554f451", 35 "Volumes": null, 36 "WorkingDir": "", 37 "Entrypoint": null, 38 "OnBuild": null, 39 "Labels": { 40 "org.label-schema.build-date": "20201204", 41 "org.label-schema.license": "GPLv2", 42 "org.label-schema.name": "CentOS Base Image", 43 "org.label-schema.schema-version": "1.0", 44 "org.label-schema.vendor": "CentOS" 45 } 46 }, 47 "DockerVersion": "19.03.12", 48 "Author": "", 49 "Config": { 50 "Hostname": "", 51 "Domainname": "", 52 "User": "", 53 "AttachStdin": false, 54 "AttachStdout": false, 55 "AttachStderr": false, 56 "Tty": false, 57 "OpenStdin": false, 58 "StdinOnce": false, 59 "Env": [ 60 "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 61 ], 62 "Cmd": [ 63 "/bin/bash" 64 ], 65 "Image": "sha256:6de05bdfbf9a9d403458d10de9e088b6d93d971dd5d48d18b4b6758f4554f451", 66 "Volumes": null, 67 "WorkingDir": "", 68 "Entrypoint": null, 69 "OnBuild": null, 70 "Labels": { 71 "org.label-schema.build-date": "20201204", 72 "org.label-schema.license": "GPLv2", 73 "org.label-schema.name": "CentOS Base Image", 74 "org.label-schema.schema-version": "1.0", 75 "org.label-schema.vendor": "CentOS" 76 } 77 }, 78 "Architecture": "amd64", 79 "Os": "linux", 80 "Size": 209348104, 81 "VirtualSize": 209348104, 82 "GraphDriver": { 83 "Data": { 84 "MergedDir": "/var/lib/docker/overlay2/cf1b3d5cc4ce7ee242b28d148e9ffba6ecf68d9bc2e3b3ffda5055e8724b9e0f/merged", 85 "UpperDir": "/var/lib/docker/overlay2/cf1b3d5cc4ce7ee242b28d148e9ffba6ecf68d9bc2e3b3ffda5055e8724b9e0f/diff", 86 "WorkDir": "/var/lib/docker/overlay2/cf1b3d5cc4ce7ee242b28d148e9ffba6ecf68d9bc2e3b3ffda5055e8724b9e0f/work" 87 }, 88 "Name": "overlay2" 89 }, 90 "RootFS": { 91 "Type": "layers", 92 "Layers": [ 93 "sha256:2653d992f4ef2bfd27f94db643815aa567240c37732cae1405ad1c1309ee9859" 94 ] 95 }, 96 "Metadata": { 97 "LastTagTime": "0001-01-01T00:00:00Z" 98 } 99 } 100 ]
9. 查看容器内服务运行日志
1 docker logs [参数] [容器id或者容器名称] 2 -t 加入时间戳 3 -f 跟随最新的日志打印 4 --tail [数字] 显示日志最后多少条
9.1非实时展示日志
1 //先运行一个容器 2 [root@host-yht ~]# docker run -ti --name centoslog centos /bin/bash
1 //这是我启动一个容器后随便运行的一些命令 2 [root@host-yht ~]# docker run -ti --name centoslog centos /bin/bash 3 [root@3866f954ba31 /]# pwd 4 / 5 [root@3866f954ba31 /]# ls 6 bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var 7 //然后我再开了一个终端查看该容器的日志,然后我上面的操作被全部打印了出来 8 [root@host-yht ~]# docker logs 3866f954ba31 9 [root@3866f954ba31 /]# pwd 10 / 11 [root@3866f954ba31 /]# ls 12 bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var 13 [root@host-yht ~]#
9.2 实时展示日志
1 //我先运行一个在后台不断循环输出“host”的容器,然后查看实时日志 2 [root@host-yht ~]# docker run -d --name centoslog03 centos /bin/sh -c "while true;do echo host;sleep 2;done" 3 45e871be80cf977b5a0f3daf41eae327f4c06e316f13a6a1e38182d1c3e9ad1d 4 [root@host-yht ~]# docker logs -ft 45e871be80cf9 5 2021-09-28T13:17:49.904892508Z host 6 2021-09-28T13:17:51.908188217Z host 7 2021-09-28T13:17:53.910492251Z host 8 2021-09-28T13:17:55.913371613Z host 9 2021-09-28T13:17:57.916666061Z host 10 2021-09-28T13:17:59.919452129Z host 11 2021-09-28T13:18:01.923888149Z host 12 2021-09-28T13:18:03.929818221Z host 13 2021-09-28T13:18:05.935444080Z host 14 2021-09-28T13:18:07.938024834Z host 15 2021-09-28T13:18:09.940612659Z host 16 2021-09-28T13:18:11.942971704Z host 17 2021-09-28T13:18:13.946641989Z host 18 2021-09-28T13:18:15.951187453Z host 19 2021-09-28T13:18:17.953812936Z host 20 2021-09-28T13:18:19.957559482Z host 21 2021-09-28T13:18:21.963196108Z host
10. 查看容器内进程
1 docker top 容器id或者容器名
1 [root@host-yht ~]# docker start mycentos 2 mycentos 3 [root@host-yht ~]# docker top mycentos 4 UID PID PPID C STIME TTY TIME CMD 5 root 3800 3780 0 21:28 pts/0 00:00:00 /bin/bash
11. 在宿主机与容器之间传输文件
11.1 将宿主机文件传入容器内:
1 docker cp [宿主机文件路径] [容器名或者id]:[容器文件路径]
1、我在宿主机上下载一个jdk
2、然后将其传到centos中
1 wget https://repo.huaweicloud.com/java/jdk/8u181-b13/jdk-8u181-linux-x64.tar.gz 2 [root@host-yht yht]# ls -a 3 . .. .bash_logout .bash_profile .bashrc jdk-8u181-linux-x64.tar.gz .mozilla
1 1 //启动一个容器 2 2 docker run -ti --name mycentos centos /bin/bash 3 [root@a4bd7e9d9f4a /]# ls -a 4 . .. .dockerenv bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
1 //传输 2 [root@host-yht yht]# docker cp /home/yht/jdk-8u181-linux-x64.tar.gz mycentos:/
//容器中查看,传输成功
1 [root@a4bd7e9d9f4a /]# ls -a 2 . .. .dockerenv bin dev etc home jdk-8u181-linux-x64.tar.gz lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
11.2 将容器中的文件传入宿主机:
1 docker cp [容器名或者id]:[容器文件路径] [宿主机文件路径]
1 //进入一个正在运行的容器并创建一个txt文件 2 [root@host-yht ~]# docker exec -ti mycentos bash 3 [root@a4bd7e9d9f4a usr]# touch test.txt 4 [root@a4bd7e9d9f4a usr]# ls 5 bin games include lib lib64 libexec local rongqi- sbin share src test.txt tmp 6 //退出容器(不停止并退出方式见上面代码)并在宿主机输入代码,将这个文件传入到宿主机中 7 [root@host-yht yht]# docker cp mycentos:/usr/test.txt /home/yht 8 //查看 9 [root@host-yht yht]# ls 10 jdk-8u181-linux-x64.tar.gz test.txt
12. 数据卷使用
作用:实现宿主机系统与容器之间的文件共享
例如我可以通过宿主机直接对容器做出改变
必须要在启动容器前或者启动容器中绑定数据卷
12.1 第一种数据卷使用方式:
自定义数据卷目录:
1 docker run -v [宿主机目录:容器目录] [镜像名] //注意:目录必须是绝对路径
1 //首先,我提前在宿主机上创建了一个volume_test的目录 /home/yht/volume_test
1 [root@host-yht yht]# docker run -ti --name centosVol -v /home/yht/volume_test:/home centos bash 2 [root@cf2fdad44934 /]# cd /home 3 [root@cf2fdad44934 home]# ls -a 4 . ..
绑定之后且已经进到容器中,进入/home中查看此时没有任何东西,
现在开始对宿主机目录/home/yht/volume_test进行修改:
1 [root@host-yht /]# cd /home/yht/volume_test 2 [root@host-yht volume_test]# touch test.txt 3 [root@host-yht volume_test]# vim test.txt 4 //进入test.txt文件编辑了“hello world”,此处省略了
再看看容器内目录/home会发生什么改变:
1 [root@cf2fdad44934 home]# ls 2 test.txt 3 [root@cf2fdad44934 home]# cat test.txt 4 hello world!!!
直接文件共享!!!!
注意:这种方式会把你容器中的文件清空,因为它和你宿主机文件是同步的,你在宿主机中指定了一个新的空文件夹,同步过去肯定会将你指定容器中的目录同步为空
12.2 第二种数据卷使用方术:
自动数据卷目录:
1 docker run -v [随便名:容器目录] [镜像名] 2 例如:docker run -ti -v aa:[容器目录] centos bash
注意:
1、 aa代表一个数据卷的名字,名称可以随便写,docker在不存在这个目录时会自动创建这个数据卷并会同时映射宿主机某个目录
2、优点:这个方式会在你启动容器的时候会将aa对应容器目录中全部内容备份到aa中
1 [root@host-yht yht]# docker run -d --name centosVol02 -v aa:/bin centos 2 1b6a2e1fb5ddbd042572728fe0806dfb96002ccc518f70f83f60ed61e3bfd395 3 //找到aa目录 4 [root@host-yht yht]# find / -name aa 5 /var/lib/docker/overlay2/cf1b3d5cc4ce7ee242b28d148e9ffba6ecf68d9bc2e3b3ffda5055e8724b9e0f/diff/usr/lib/.build-id/aa 6 /var/lib/docker/volumes/aa 7 /usr/share/locale/aa 8 [root@host-yht yht]# cd /var/lib/docker/volumes/aa 9 [root@host-yht aa]# ls 10 _data 11 [root@host-yht aa]# cd _data 12 [root@host-yht _data]# ls -a 13 . colrm df g13 gzexe lesspipe.sh namei pyvenv-3.6 sha224hmac systemd-firstboot ul xmlcatalog 14 .. column dir gapplication gzip link newgidmap ranlib sha224sum systemd-hwdb ulimit xmllint 15 [ comm dircolors gawk hash linux32 newgrp raw sha256hmac systemd-inhibit umask xmlwf 16 addr2line command dirmngr gdbm_dump head linux64 newuidmap read sha256sum systemd-machine-id-setup umount xz 17 alias coredumpctl dirmngr-client gdbm_load hexdump ln nice readelf sha384hmac systemd-mount unalias xzcat 18 ar coreutils dirname gdbmtool hostid locale nisdomainname readlink sha384sum systemd-notify uname xzcmp 19 arch cp dmesg gdbus hostname localectl nl realpath sha512hmac systemd-path uname26 xzdec 20 as cpio dnf gencat hostnamectl localedef nm rename sha512sum systemd-resolve unexpand xzdiff 21 awk csplit dnf-3 getconf i386 logger nohup renice shred systemd-run uniq xzegrep 22 b2sum curl dnsdomainname getent iconv login nproc resolvectl shuf systemd-socket-activate unlink xzfgrep 23 base32 cut domainname getfacl id loginctl nsenter rev size systemd-stdio-bridge unshare xzgrep 24 base64 date dracut getopt info logname numfmt rm skill systemd-sysusers unversioned-python xzless 25 basename db_archive du getopts install look objcopy rmdir slabtop systemd-tmpfiles unxz xzmore 26 bash db_checkpoint dwp gio ionice ls objdump rpm sleep systemd-tty-ask-password-agent update-ca-trust yes 27 bashbug db_deadlock echo gio-querymodules-64 ipcalc lsblk od rpm2archive snice systemd-umount uptime ypdomainname 28 bashbug-64 db_dump egrep glib-compile-schemas ipcmk lscpu p11-kit rpm2cpio sort tac users yum 29 bg db_dump185 eject gpasswd ipcrm lsinitrd paste rpmdb sotruss tail utmpdump zcat 30 bootctl db_hotbackup elfedit gpg ipcs lsipc pathchk rpmkeys split tar uuidgen zcmp 31 busctl db_load env gpg2 isosize lslocks pgrep rpmquery sprof taskset uuidparse zdiff 32 cal db_log_verify evmctl gpg-agent jobs lslogins pidof rpmverify stat tee vdir zegrep 33 ca-legacy db_printlog ex gpgconf join lsmem ping runcon stdbuf test vi zfgrep 34 cat db_recover expand gpg-connect-agent journalctl lsns pinky rvi strings timedatectl view zforce 35 catchsegv db_replicate expr gpg-error kdumpctl makedb pkill rview strip timeout vmstat zgrep 36 cd db_stat factor gpgme-json kernel-install mcookie pldd script stty tload w zless 37 c++filt db_tuner fallocate gpgparsemail kill md5sum pmap scriptreplay su top wait zmore 38 chacl db_upgrade false gpgsplit kmod mesg pr sed sum touch wall znew 39 chage dbus-cleanup-sockets fc gpgv last mkdir printenv seq sync tr watch 40 chcon dbus-daemon fg gpgv2 lastb mkfifo printf setarch systemctl tracepath watchgnupg 41 chgrp dbus-monitor fgrep gpg-wks-server lastlog mkinitrd prlimit setfacl systemd-analyze true wc 42 chmem dbus-run-session fincore gpg-zip ld mknod ps setpriv systemd-ask-password truncate wdctl 43 chmod dbus-send find gprof ld.bfd mktemp ptx setsid systemd-cat trust whereis 44 chown dbus-test-tool findmnt grep ldd modulemd-validator pwd setterm systemd-cgls tsort who 45 chrt dbus-update-activation-environment flock groups ld.gold more pwdx sg systemd-cgtop tty whoami 46 cksum dbus-uuidgen fmt gsettings less mount pwmake sh systemd-delta type write 47 col db_verify fold gtar lessecho mountpoint pwscore sha1hmac systemd-detect-virt tzselect x86_64 48 colcrt dd free gunzip lesskey mv pydoc3.6 sha1sum systemd-escape udevadm xargs
自动的将容器中/bin目录下所有的文件都拷贝到宿主机的aa目录下
12.3 查看数据卷
docker volume ls
12.4 查看某个数据卷的细节
docker volume inspect 卷名
12.5 创建数据卷
docker volume create 卷名
12.6 删除没有使用的数据卷
docker volume prune
删除指定的数据卷:
docker volume rm 卷名
三.、docker中容器之间网络配置
1. docker容器与宿主机操作系统通信机制
https://www.bilibili.com/video/BV1ZT4y1K75K?p=12
2. docker 网络使用
注意:一般在使用docker网桥(bridge)实现容器与容器通信时,都是站在一个应用角度进行容器进行通信
2.1 查看docker网桥配置
1 docker network ls
2.2 创建自定义网桥
1 docker network create [网桥名称]
1 [root@host-yht _data]# docker network create test 2 9e286d33856cb44b47df13b67f7fcb89417c0bffe4ff920757413206564b4689 3 [root@host-yht _data]# docker network ls 4 NETWORK ID NAME DRIVER SCOPE 5 f789455f60ca bridge bridge local 6 90b971a1079a host host local 7 34aebc6940b3 none null local 8 9e286d33856c test bridge local
2.3 启动容器的时候指定网桥
1 docker run --network [网桥名称] [容器名]
1 [root@host-yht _data]# docker run -it --network test --name centosNet centos /bin/bash 2 // 查看该容器细节 3 [root@host-yht _data]# docker inspect centosNet 4 . 5 . 6 . 7 . 8 . 9 "Networks": { 10 "test": { 11 "IPAMConfig": null, 12 "Links": null, 13 "Aliases": [ 14 "7ca35c70ab61" 15 ], 16 "NetworkID": "9e286d33856cb44b47df13b67f7fcb89417c0bffe4ff920757413206564b4689", 17 "EndpointID": "afe9e788182575bf5b6d36b0a213efc251d8a65d1771f4893dfebd3d121a5f8f", 18 "Gateway": "172.18.0.1", 19 "IPAddress": "172.18.0.2", 20 "IPPrefixLen": 16, 21 "IPv6Gateway": "", 22 "GlobalIPv6Address": "", 23 "GlobalIPv6PrefixLen": 0, 24 "MacAddress": "02:42:ac:12:00:02", 25 "DriverOpts": null
注意:1、指定网桥后就只能与在这个网桥上的服务连接,且不能连接到默认网桥了
2、一旦在启动容器时制定了网桥,日后可以在任何这个网桥关联的容器中使用容器名字进行与其他容器进行通信(名字==ip)
2.4 删除网桥
docker network rm 网桥名称
2.5 查看网桥详细信息
docker inspect 网桥名称
四、Docker安装mysql
MySQL官方文档:https://hub.docker.com/_/mysql?tab=description&page=1&ordering=last_updated&name=5.7
1. 拉取镜像
(我这儿使用的是版本mysql:5.7.35)
1 docker pull mysql:5.7.35
2. 启动镜像
2.1 基本启动mysql服务
1 docker run -e MYSQL_ROOT_PASSWORD=root mysql:5.7.35
1 2 // 必需参数 3 // -e MYSQL_ROOT_PASSWORD=root 代表给root用户指定密码 4 [root@host-yht yht]# docker run -e MYSQL_ROOT_PASSWORD=root mysql:5.7.35 5 2021-09-29 05:29:33+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.35-1debian10 started. 6 2021-09-29 05:29:33+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' 7 2021-09-29 05:29:33+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.35-1debian10 started. 8 2021-09-29 05:29:33+00:00 [Note] [Entrypoint]: Initializing database files 9 . 10 . 11 . 12 . 13 . 14 2021-09-29T05:29:41.651967Z 0 [Note] mysqld: ready for connections. 15 Version: '5.7.35' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL)
1 [root@host-yht ~]# docker ps 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3 3a711cb06320 mysql:5.7.35 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 3306/tcp, 33060/tcp blissful_nobel
2.2 启动一个mysql服务01
(要有后台运行,指定root用户密码,指定容器名字,指定端口号)
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql01 mysql:5.7.35
1 [root@host-yht ~]# docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123 --name mysql01 mysql:5.7.35 2 320b1f2b183b4ea5a04b86228e4211401da8d66ce1be715c84cd685b9663ec29 3 [root@host-yht ~]# docker ps 4 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5 320b1f2b183b mysql:5.7.35 "docker-entrypoint.s…" 10 seconds ago Up 8 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql01
打开你的Navicat,然后去连接测试该mysql服务
主机:是你宿主机的任意ip地址
端口号:你要是没有指定,一般默认就是3306
用户名:root
密码:你启动容器的时候指定的密码
然后左下角测试连接

2.3 启动一个mysql服务02
(指定root用户密码,指定容器名字,使用数据卷将数据持久化到宿主机系统,指定名字)
注意:通过dockerhub官方文档我们得知这个mysql服务的存储数据文件目录放置在容器这个目录中:
/var/lib/mysql挂在后的好处就是,你以后将容器中的数据删除,不必担心数据是否消失,然后还可以将数据继承给你下一个创建的容器
1 docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=111 --name mysql02 -v mysqldata:/var/lib/mysql mysql:5.7.35
1 [root@host-yht ~]# docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=111 --name mysql02 -v mysqldata:/var/lib/mysql mysql:5.7.35 2 46dcfe143e8a8be75c1748b63417825c49804c37ab6c65b76057f27585522f72 3 [root@host-yht ~]# docker ps 4 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5 46dcfe143e8a mysql:5.7.35 "docker-entrypoint.s…" 7 seconds ago Up 5 seconds 33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp mysql02 6 // 查看所有数据卷 7 [root@host-yht ~]# docker volume ls 8 DRIVER VOLUME NAME 9 local 268e10216877a5a586a2e5fbb9580887a69d77f2eb08b8abe6613615aeb0cb38 10 local f6cd81607ffb817615d8ca4ca8bf60842f80bb6b271e4910cc8e1de29e003126 11 local mysqldata 12 // 查看指定数据卷的详细信息 13 [root@host-yht ~]# docker volume inspect mysqldata 14 [ 15 { 16 "CreatedAt": "2021-09-29T14:03:21+08:00", 17 "Driver": "local", 18 "Labels": null, 19 "Mountpoint": "/var/lib/docker/volumes/mysqldata/_data", 20 "Name": "mysqldata", 21 "Options": null, 22 "Scope": "local" 23 } 24 ] 25 // 进入数据卷目录 26 [root@host-yht ~]# cd /var/lib/docker/volumes/mysqldata/_data 27 [root@host-yht _data]# ls 28 auto.cnf ca.pem client-key.pem ibdata1 ib_logfile1 mysql private_key.pem server-cert.pem sys 29 ca-key.pem client-cert.pem ib_buffer_pool ib_logfile0 ibtmp1 performance_schema public_key.pem server-key.pem
2.4 启动一个mysql服务03
(后台运行,指定root用户密码, 指定用户名,使用数据卷进行数据持久化,以已修改之后的配置文件启动)
1 [root@host-yht ~]# docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=111 --name mysql03 -v mysqldata:/var/lib/mysql -v mysqlconfig:/etc/mysql mysql:5.7.35 2 19f5bfdbfbd1c9550479924618ef6d47397ac1a955278c5db0a434577ed30415 3 [root@host-yht ~]# docker volume ls 4 DRIVER VOLUME NAME 5 local 268e10216877a5a586a2e5fbb9580887a69d77f2eb08b8abe6613615aeb0cb38 6 local f6cd81607ffb817615d8ca4ca8bf60842f80bb6b271e4910cc8e1de29e003126 7 local mysqlconfig 8 local mysqldata 9 [root@host-yht ~]# docker volume inspect mysqlconfig 10 [ 11 { 12 "CreatedAt": "2021-09-29T16:45:39+08:00", 13 "Driver": "local", 14 "Labels": null, 15 "Mountpoint": "/var/lib/docker/volumes/mysqlconfig/_data", 16 "Name": "mysqlconfig", 17 "Options": null, 18 "Scope": "local" 19 } 20 ] 21 [root@host-yht ~]# cd /var/lib/docker/volumes/mysqlconfig/_data 22 [root@host-yht _data]# ls 23 conf.d my.cnf my.cnf.fallback mysql.cnf mysql.conf.d
注意:不能两个正在运行的容器同时映射同一个目录,不然你启动服务的时候会报错!!!


浙公网安备 33010602011771号