1.修改虚拟机的主机名为 docker。
[root@admin ~]# hostnamectl set-hostname docker [root@admin ~]# bash [root@docker ~]#
2.修改虚拟机网卡地址,使其可以上外网,能够 ping 通 www.baidu.com
[root@docker ~]# nmcli connection modify ens160 ipv4.addresses 192.168.200.133/24 ipv4.gateway 192.168.200.2 ipv4.dns 114.114.114.114,8.8.8.8 ipv4.method manual connection.autoconnect yes [root@docker ~]# nmcli connection up ens160 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3) [root@docker ~]# [root@docker ~]# [root@docker ~]# ping www.baidu.com PING www.a.shifen.com (153.3.238.110) 56(84) 比特的数据。 64 比特,来自 153.3.238.110 (153.3.238.110): icmp_seq=1 ttl=128 时间=12.0 毫秒 64 比特,来自 153.3.238.110 (153.3.238.110): icmp_seq=2 ttl=128 时间=10.9 毫秒 ^C --- www.a.shifen.com ping 统计 --- 已发送 2 个包, 已接收 2 个包, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 10.913/11.472/12.032/0.559 ms [root@docker ~]#
3.安装 vim 和 tab 键功能软件包,安装完成后并重启虚拟机
[root@docker ~]#vim /etc/yum.repos.d/local.repo [AppStream] name=AppStream baseurl=file:///media/AppStream enabled=1 gpgcheck=0 [BaseOS] name=BaseOS baseurl=file:///media/BaseOS enabled=1 gpgcheck=0 [root@docker ~]# [root@docker ~]# yum -y install vim && yum -y install 正在更新 Subscription Management 软件仓库。 无法读取客户身份 本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。 AppStream 3.1 MB/s | 3.2 kB 00:00 BaseOS 2.7 MB/s | 2.7 kB 00:00 软件包 vim-enhanced-2:8.2.2637-20.el9_1.x86_64 已安装。 依赖关系解决。 无需任何处理。 完毕! [root@docker ~]# reboot
4.安装最新版本 docker 所需依赖的环境软件包
5.安装下载新的 docker 使用的 yum 源
6.查看新下载的 docker 的 yum 源
7.安装 docker-ce 软件包,并启动服务同时设置为开机自启动
[root@docker ~]# yum -y install yum-utils.noarch 正在更新 Subscription Management 软件仓库。 无法读取客户身份 本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。 上次元数据过期检查:0:01:03 前,执行于 2024年04月11日 星期四 08时50分22秒。 依赖关系解决。 ================================================================================================================================================================== 软件包 架构 版本 仓库 大小 ================================================================================================================================================================== 安装: yum-utils noarch 4.3.0-5.el9_2 BaseOS 45 k 事务概要 ================================================================================================================================================================== 安装 1 软件包 总计:45 k 安装大小:23 k 下载软件包: 运行事务检查 事务检查成功。 运行事务测试 事务测试成功。 运行事务 准备中 : 1/1 安装 : yum-utils-4.3.0-5.el9_2.noarch 1/1 运行脚本: yum-utils-4.3.0-5.el9_2.noarch 1/1 验证 : yum-utils-4.3.0-5.el9_2.noarch 1/1 已更新安装的产品。 已安装: yum-utils-4.3.0-5.el9_2.noarch 完毕! [root@docker ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 正在更新 Subscription Management 软件仓库。 无法读取客户身份 本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。 添加仓库自:http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo [root@docker ~]# [root@docker ~]# yum clean all 正在更新 Subscription Management 软件仓库。 无法读取客户身份 本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。 13 个文件已删除 [root@docker ~]# yum makecache 正在更新 Subscription Management 软件仓库。 无法读取客户身份 本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。 Docker CE Stable - x86_64 36 kB/s | 41 kB 00:01 AppStream 136 MB/s | 6.3 MB 00:00 BaseOS 179 MB/s | 1.7 MB 00:00 元数据缓存已建立。 [root@docker ~]# [root@docker ~]# cat /etc/yum.repos.d/docker-ce.repo [docker-ce-stable] name=Docker CE Stable - $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable enabled=1 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-stable-debuginfo] name=Docker CE Stable - Debuginfo $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/stable enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-stable-source] name=Docker CE Stable - Sources baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/stable enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-test] name=Docker CE Test - $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/test enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-test-debuginfo] name=Docker CE Test - Debuginfo $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/test enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-test-source] name=Docker CE Test - Sources baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/test enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-nightly] name=Docker CE Nightly - $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/nightly enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-nightly-debuginfo] name=Docker CE Nightly - Debuginfo $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/nightly enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [docker-ce-nightly-source] name=Docker CE Nightly - Sources baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/nightly enabled=0 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [root@docker ~]# [root@docker ~]# yum -y install docker-ce* 正在更新 Subscription Management 软件仓库。 无法读取客户身份 本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。 Docker CE Stable - x86_64 11 kB/s | 3.5 kB 00:00 依赖关系解决。 ====================================================================================================================================================================================== 软件包 架构 版本 仓库 大小 ====================================================================================================================================================================================== 安装: docker-ce x86_64 3:26.0.0-1.el9 docker-ce-stable 27 M docker-ce-cli x86_64 1:26.0.0-1.el9 docker-ce-stable 7.3 M docker-ce-rootless-extras x86_64 26.0.0-1.el9 docker-ce-stable 4.0 M 安装依赖关系: containerd.io x86_64 1.6.28-3.2.el9 docker-ce-stable 34 M 安装弱的依赖: docker-buildx-plugin x86_64 0.13.1-1.el9 docker-ce-stable 13 M docker-compose-plugin x86_64 2.25.0-1.el9 docker-ce-stable 13 M 事务概要 ====================================================================================================================================================================================== 安装 6 软件包 总计:98 M 总下载:51 M 安装大小:384 M 下载软件包: [SKIPPED] docker-buildx-plugin-0.13.1-1.el9.x86_64.rpm: Already downloaded [SKIPPED] docker-ce-26.0.0-1.el9.x86_64.rpm: Already downloaded [SKIPPED] docker-ce-cli-26.0.0-1.el9.x86_64.rpm: Already downloaded (4/6): docker-ce-rootless-extras-26.0.0-1.el9.x86_64.rpm 272 kB/s | 4.0 MB 00:15 (5/6): docker-compose-plugin-2.25.0-1.el9.x86_64.rpm 352 kB/s | 13 MB 00:37 (6/6): containerd.io-1.6.28-3.2.el9.x86_64.rpm 390 kB/s | 34 MB 01:29 ------------------------------------------------------------------------------------------------------------------------------------------------------------------ 总计 583 kB/s | 51 MB 01:29 Docker CE Stable - x86_64 4.1 kB/s | 1.6 kB 00:00 导入 GPG 公钥 0x621E9F35: Userid: "Docker Release (CE rpm) <docker@docker.com>" 指纹: 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35 来自: https://mirrors.aliyun.com/docker-ce/linux/centos/gpg 导入公钥成功 运行事务检查 事务检查成功。 运行事务测试 事务测试成功。 运行事务 准备中 : 1/1 安装 : docker-compose-plugin-2.25.0-1.el9.x86_64 1/6 运行脚本: docker-compose-plugin-2.25.0-1.el9.x86_64 1/6 安装 : docker-buildx-plugin-0.13.1-1.el9.x86_64 2/6 运行脚本: docker-buildx-plugin-0.13.1-1.el9.x86_64 2/6 安装 : docker-ce-cli-1:26.0.0-1.el9.x86_64 3/6 运行脚本: docker-ce-cli-1:26.0.0-1.el9.x86_64 3/6 安装 : containerd.io-1.6.28-3.2.el9.x86_64 4/6 运行脚本: containerd.io-1.6.28-3.2.el9.x86_64 4/6 安装 : docker-ce-rootless-extras-26.0.0-1.el9.x86_64 5/6 运行脚本: docker-ce-rootless-extras-26.0.0-1.el9.x86_64 5/6 安装 : docker-ce-3:26.0.0-1.el9.x86_64 6/6 运行脚本: docker-ce-3:26.0.0-1.el9.x86_64 6/6 验证 : containerd.io-1.6.28-3.2.el9.x86_64 1/6 验证 : docker-buildx-plugin-0.13.1-1.el9.x86_64 2/6 验证 : docker-ce-3:26.0.0-1.el9.x86_64 3/6 验证 : docker-ce-cli-1:26.0.0-1.el9.x86_64 4/6 验证 : docker-ce-rootless-extras-26.0.0-1.el9.x86_64 5/6 验证 : docker-compose-plugin-2.25.0-1.el9.x86_64 6/6 已更新安装的产品。 已安装: containerd.io-1.6.28-3.2.el9.x86_64 docker-buildx-plugin-0.13.1-1.el9.x86_64 docker-ce-3:26.0.0-1.el9.x86_64 docker-ce-cli-1:26.0.0-1.el9.x86_64 docker-ce-rootless-extras-26.0.0-1.el9.x86_64 docker-compose-plugin-2.25.0-1.el9.x86_64 完毕! [root@docker ~]# systemctl restart docker.service [root@docker ~]# systemctl enable docker.service Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
8.查看 docker 服务的版本信息
[root@docker ~]# docker --version Docker version 26.0.0, build 2ae903e [root@docker ~]#
9.搜索关键字为 lamp 的镜像的命令和结果如下
[root@docker ~]# docker search lamp NAME DESCRIPTION STARS OFFICIAL javanile/lamp Ready to use LAMP stack 2 dockette/devstack My LAMP/Devstack Dockerfile 4 machines/la_p7 Just a ubuntu based lamp server 5 lampson0505/ubuntu-phy An Ubuntu image with teamd for network inter… 4 lampepfl/dotty Dotty testing image 0 lampepfl/moocs 0 lampholder/controlroom-bot 0 lampepfl/moocs-dotty 0 lampepfl/dockerclient 0 mattrayner/lamp A simple LAMP docker image running the prere… 346 lampe/minimal-nginx A minimal image for nginx - created with mak… 3 lampochka/subsonic 0 lampepfl2022/cs206 0 canersimsek/lampbox LAMP Box 0 tutum/lamp Out-of-the-box LAMP image (PHP+MySQL) 155 linode/lamp LAMP on Ubuntu 14.04.1 LTS Container 180 lampnick/doctron Doctron supply html convert to pdf, html con… 3 fauria/lamp Modern, developer friendly LAMP stack. Inclu… 121 lampofgod/docker-php7.0-nodejs-composer 0 greyltc/lamp a super secure, up-to-date and lightweight L… 103 lampdatabase/safa 0 davidsal/lamp-armv7 LAMP image for ARM32v7 (like Raspberry Pi) b… 1 lampofgod/docker-php5.6-nodejs-composer For Gitlab CI 0 geekineers/lamp-laravel-php7 Docker image with LAMP and Laravel installed… 1 bidmcdigitalpsychiatry/lamp-server The LAMP Platform API server. 1 [root@docker ~]#
10.配置阿里云的镜像加速器
[root@docker ~]# sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://7f40piyw.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker { "registry-mirrors": ["https://7f40piyw.mirror.aliyuncs.com"] }
11.下载镜像nickistre/centos-lamp
[root@docker ~]# docker pull nickistre/centos-lamp Using default tag: latest latest: Pulling from nickistre/centos-lamp f9f73d801f05: Pull complete 31a920671517: Pull complete 21c34a1a7bde: Downloading [==========> ] 13.21MB/64.73MB 21c34a1a7bde: Downloading [===========> ] 15.32MB/64.73MB 001edf96df50: Download complete 273de3312284: Download complete 21c34a1a7bde: Pull complete dc05bf237fc1: Pull complete 001edf96df50: Pull complete 273de3312284: Pull complete 09e0c479c5d6: Pull complete 3274b3252b64: Pull complete 8affd66070d7: Pull complete b3d0f4e847ac: Pull complete 1b0c18851735: Pull complete 557b86c40b14: Pull complete bdf3abef29b4: Pull complete 8fab0cd5d21a: Pull complete 4f198432c128: Pull complete Digest: sha256:6012dff0d5f805342d65e8eb3cae4e83e75bce16980915b165ef55d64866e91d Status: Downloaded newer image for nickistre/centos-lamp:latest docker.io/nickistre/centos-lamp:latest
12.查看本地所有镜像的命令和结果如下
[root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nickistre/centos-lamp latest 0b8d572d1c7d 5 years ago 547MB
13.获取镜像 nickistre/centos-lamp 详细信息的命令和结果如下
[root@docker ~]# docker inspect nickistre/centos-lamp:latest [ { "Id": "sha256:0b8d572d1c7d20f8b2e86bb92517dd3a9e8f935194c7f48af5dc84984e7c5f44", "RepoTags": [ "nickistre/centos-lamp:latest" ], "RepoDigests": [ "nickistre/centos-lamp@sha256:6012dff0d5f805342d65e8eb3cae4e83e75bce16980915b165ef55d64866e91d" ], "Parent": "", "Comment": "", "Created": "2018-04-13T21:01:31.472818372Z", "DockerVersion": "17.06.1-ce", "Author": "Nicholas Istre <nicholas.istre@e-hps.com>", "Config": { "Hostname": "", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "ExposedPorts": { "22/tcp": {}, "443/tcp": {}, "80/tcp": {} }, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "supervisord", "-n" ], "ArgsEscaped": true, "Image": "sha256:23865469389846bddf3e091a0484f8e28cad879295c6f8e3a839b05137c079fc", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": [], "Labels": null }, "Architecture": "amd64", "Os": "linux", "Size": 546989824, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/1230d9aca34929e23c6259ef78e8233145c8f050bee1e41c7d0de6324a8f5426/diff:/var/lib/docker/overlay2/9ce187c52ed2d0b1ceb16e359dba69097bc33a7b88c75f59e79b41ac4c3d7cf8/diff:/var/lib/docker/overlay2/7f1ba880d628da68c50921d3859966c977bd2cd8605bbb0a2b8aed1ab1f13bb2/diff:/var/lib/docker/overlay2/bbc0354b482956d4cad9f5275567b7f3cbf3e655099222ad81157c6cc48cb324/diff:/var/lib/docker/overlay2/67da2bf2180e9cac995d5a4f441d0a4d4befa1095d8567bb10984789f6aef35a/diff:/var/lib/docker/overlay2/3f1b04d120995219c5a968e221417657e9dc89f585abf2b9ae231e468c8c1b20/diff:/var/lib/docker/overlay2/99a40862e4326250569a17dedd4b180826903cc6bfa0d0c507824a88f5324a55/diff:/var/lib/docker/overlay2/92b943578c24b3474711b12b1b6725e24cc75343bcf03717b79eb291280eaaee/diff:/var/lib/docker/overlay2/8eb5c83890ba7699dcc673f9f3db5207efa3cc97607957d42a98e2a22373e822/diff:/var/lib/docker/overlay2/9080b1343c1b7aa972f50a979fc997394d0f7ad64202f8049db0270bfb9993b4/diff:/var/lib/docker/overlay2/9a3771270bc4811bf55f74281097706c4967b470081525a236bb3411c0a82bf1/diff:/var/lib/docker/overlay2/45a4569b06f4933ca4adf102f13f761489b949ed821b44cef91fb7f32741361f/diff:/var/lib/docker/overlay2/6425ca191b3bc53bc7f68de13d682c866b9029fe87d41ebbbf90af4e986f0f3b/diff:/var/lib/docker/overlay2/9fbfe500210cae494487910148fe55a976f84866712502902662d952f36308ae/diff", "MergedDir": "/var/lib/docker/overlay2/7945c3da461ca24ab539bb3d06bf02198a10e11d199dd444c7ef0f2f4a769456/merged", "UpperDir": "/var/lib/docker/overlay2/7945c3da461ca24ab539bb3d06bf02198a10e11d199dd444c7ef0f2f4a769456/diff", "WorkDir": "/var/lib/docker/overlay2/7945c3da461ca24ab539bb3d06bf02198a10e11d199dd444c7ef0f2f4a769456/work" }, "Name": "overlay2" }, "RootFS": { "Type": "layers", "Layers": [ "sha256:da6517724f67fd4133a5bf508f7c79e20d8e2741c5b3264790d49db5e97c0e2e", "sha256:244de8069fbc70a188607a8dddab80ad8866a4e0bcb0b24f12aef0130ba307f2", "sha256:988e3cb5a27b1efc0c85c3d9b34b25322de3ce13267d647a869f9150cd3c3f7f", "sha256:38556f5b76216ba7518d1da1f2ea0c7ac147203833976c5a701fb36d71e17ec6", "sha256:e6eea089f108513a9af6006efe53cff5ef762bc4be503ce8eaa1c6c726cae2ed", "sha256:07d45adf0b976b610bfbbc6f9cc30a133d18f69262a9446bc280f542bd17d743", "sha256:a0753067e202b570fa8c70f86ae2e0510f82f2271a0d5c1db5cbb4f9a9210cc3", "sha256:9b9518d71f0ef4b967d786f7f40943658362af00b5e9f91f43053619b75bf07b", "sha256:11ed4ddf1f28ad2857c7b3f17eee8c349fd9011042cf563807493bbddb2f3f46", "sha256:fa3e2c4d1489e48588c4a08443edb471234a481dd52b341b211909d35e5787ca", "sha256:f874a4141753cd042dbdcfc0acb48c8239de9a1d42b4902defe79ea6042cfc62", "sha256:fabd844fa786a84bcd481f617becfbc31b85e927b4b24a56acc5283c1ad5ea76", "sha256:d31fcd4e52cffcbf6c8ff68a19609d4a7ae56e43f7ad41865dd7b1341ca70977", "sha256:2ccc0c68e26e5ac575aa7f7822638d547b5a3c703c73c004a40b19388f582bda", "sha256:385f382ed46ca3e95842ce6074deb140cc11784744882adea64e27a24eeddaa8" ] }, "Metadata": { "LastTagTime": "0001-01-01T00:00:00Z" } } ] [root@docker ~]#
14.为本地镜像 nickistre/centos-lamp 添加新的名词 lamp,新的标签 lamp
[root@docker ~]# docker tag nickistre/centos-lamp:latest lamp:lamp [root@docker ~]#
15.要删除 lamp:lamp 镜像,可以使用如下命令
[root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE lamp lamp 0b8d572d1c7d 5 years ago 547MB [root@docker ~]# docker rmi lamp:lamp Untagged: lamp:lamp Deleted: sha256:0b8d572d1c7d20f8b2e86bb92517dd3a9e8f935194c7f48af5dc84984e7c5f44 Deleted: sha256:ac1f500d470a0d21ed6ed9e2132d86b5d636721d2d3301c9932136dc0d03c18e Deleted: sha256:39595439de2a48c9d23506f76ad810902e3944f2cec2eb730b5a17ba48888bdb Deleted: sha256:ef99b0f2358f87fb0a8d835835a1f15e557257397ca38db499165725d002a221 Deleted: sha256:82c70ac1157f6619be0415859d8d4201c5c7eef31a189214aa9924819d5b9a3a Deleted: sha256:bad51cc6d300486ffcbdfd227eda325e5da3c176fd05d2036f581ec87a24956c Deleted: sha256:09a51d85abc0e82c8ac8d8990fafab6cfedc80c7a2152e6fbac0fea31c9ae550 Deleted: sha256:26ab098c4e7de9c0f5d2bdb84d0e89ff3d8c6693594605dcbb005f93428176a0 Deleted: sha256:5638af005abf6a9991c71e49a784ebc43b606867207c9557fad3eb319e1f5e57 Deleted: sha256:95eabe3b5d839ad6652938d67818f09e6e7a8d1dc94a5da3be5d9fa0726280ce Deleted: sha256:cd4013e7fada12e92334ba2f85618175ce5b8521011146c9bb04209cb6cd4b1a Deleted: sha256:33ebf7adc5511801e6ec775de4b00ff7d54a7e9b01c91969afe139ba460c7659 Deleted: sha256:64b87534723ca654a93a98d53374157d5aa68384f29390676103c46f56af7f44 Deleted: sha256:1f12d6f0a489a1ddc36f2208ec4e1334434cd5f54c7ab3db125ec88f716bdfc6 Deleted: sha256:863dfcf52855b4020e42ffeefb84488ad4e7cb9156f7181310e1aea35e640cc3 Deleted: sha256:da6517724f67fd4133a5bf508f7c79e20d8e2741c5b3264790d49db5e97c0e2e [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE [root@docker ~]#
16.删除 nickistre/centos-lamp 镜像,就会删除整个镜像文件的所有层
[root@docker ~]# docker rmi nickistre/centos-lamp:latest Untagged: nickistre/centos-lamp:latest Untagged: nickistre/centos-lamp@sha256:6012dff0d5f805342d65e8eb3cae4e83e75bce16980915b165ef55d64866e91d
17.由于上题将镜像删除,所以需要重新拉取镜像,并存储本地的nickistre/centos-lamp 镜像文件,储存的新镜像文件名为 lamp
[root@docker ~]# docker pull nickistre/centos-lamp:latest latest: Pulling from nickistre/centos-lamp f9f73d801f05: Pull complete 31a920671517: Pull complete 21c34a1a7bde: Pull complete dc05bf237fc1: Pull complete 001edf96df50: Pull complete 273de3312284: Pull complete 09e0c479c5d6: Pull complete 3274b3252b64: Pull complete 8affd66070d7: Pull complete b3d0f4e847ac: Pull complete 1b0c18851735: Pull complete 557b86c40b14: Pull complete bdf3abef29b4: Pull complete 8fab0cd5d21a: Pull complete 4f198432c128: Pull complete Digest: sha256:6012dff0d5f805342d65e8eb3cae4e83e75bce16980915b165ef55d64866e91d Status: Downloaded newer image for nickistre/centos-lamp:latest docker.io/nickistre/centos-lamp:latest [root@docker ~]# docker save -o lamp nickistre/centos-lamp [root@docker ~]# ls 公共 模板 视频 图片 文档 下载 音乐 桌面 anaconda-ks.cfg lamp
18.从 lamp 中载入镜像到本地镜像库中
[root@docker ~]# docker load < lamp Loaded image: nickistre/centos-lamp:latest [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nickistre/centos-lamp latest 0b8d572d1c7d 5 years ago 547MB [root@docker ~]# docker rmi nickistre/centos-lamp:latest Untagged: nickistre/centos-lamp:latest Untagged: nickistre/centos-lamp@sha256:6012dff0d5f805342d65e8eb3cae4e83e75bce16980915b165ef55d64866e91d Deleted: sha256:0b8d572d1c7d20f8b2e86bb92517dd3a9e8f935194c7f48af5dc84984e7c5f44 Deleted: sha256:ac1f500d470a0d21ed6ed9e2132d86b5d636721d2d3301c9932136dc0d03c18e Deleted: sha256:39595439de2a48c9d23506f76ad810902e3944f2cec2eb730b5a17ba48888bdb Deleted: sha256:ef99b0f2358f87fb0a8d835835a1f15e557257397ca38db499165725d002a221 Deleted: sha256:82c70ac1157f6619be0415859d8d4201c5c7eef31a189214aa9924819d5b9a3a Deleted: sha256:bad51cc6d300486ffcbdfd227eda325e5da3c176fd05d2036f581ec87a24956c Deleted: sha256:09a51d85abc0e82c8ac8d8990fafab6cfedc80c7a2152e6fbac0fea31c9ae550 Deleted: sha256:26ab098c4e7de9c0f5d2bdb84d0e89ff3d8c6693594605dcbb005f93428176a0 Deleted: sha256:5638af005abf6a9991c71e49a784ebc43b606867207c9557fad3eb319e1f5e57 Deleted: sha256:95eabe3b5d839ad6652938d67818f09e6e7a8d1dc94a5da3be5d9fa0726280ce Deleted: sha256:cd4013e7fada12e92334ba2f85618175ce5b8521011146c9bb04209cb6cd4b1a Deleted: sha256:33ebf7adc5511801e6ec775de4b00ff7d54a7e9b01c91969afe139ba460c7659 Deleted: sha256:64b87534723ca654a93a98d53374157d5aa68384f29390676103c46f56af7f44 Deleted: sha256:1f12d6f0a489a1ddc36f2208ec4e1334434cd5f54c7ab3db125ec88f716bdfc6 Deleted: sha256:863dfcf52855b4020e42ffeefb84488ad4e7cb9156f7181310e1aea35e640cc3 Deleted: sha256:da6517724f67fd4133a5bf508f7c79e20d8e2741c5b3264790d49db5e97c0e2e [root@docker ~]# docker load < lamp da6517724f67: Loading layer [==================================================>] 213.2MB/213.2MB 244de8069fbc: Loading layer [==================================================>] 10.37MB/10.37MB 988e3cb5a27b: Loading layer [==================================================>] 179.7MB/179.7MB 38556f5b7621: Loading layer [==================================================>] 47.41MB/47.41MB e6eea089f108: Loading layer [==================================================>] 3.072kB/3.072kB 07d45adf0b97: Loading layer [==================================================>] 21.89MB/21.89MB a0753067e202: Loading layer [==================================================>] 51.79MB/51.79MB 9b9518d71f0e: Loading layer [==================================================>] 18.52MB/18.52MB 11ed4ddf1f28: Loading layer [==================================================>] 2.891MB/2.891MB fa3e2c4d1489: Loading layer [==================================================>] 17.71MB/17.71MB f874a4141753: Loading layer [==================================================>] 8.704kB/8.704kB fabd844fa786: Loading layer [==================================================>] 9.728kB/9.728kB d31fcd4e52cf: Loading layer [==================================================>] 2.56kB/2.56kB 2ccc0c68e26e: Loading layer [==================================================>] 3.584kB/3.584kB 385f382ed46c: Loading layer [==================================================>] 3.584kB/3.584kB Loaded image: nickistre/centos-lamp:latest [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nickistre/centos-lamp latest 0b8d572d1c7d 5 years ago 547MB [root@docker ~]#
19.使用 docker create 命令创建新容器
[root@docker ~]# docker create -it nickistre/centos-lamp 457d7b5a481d9a64a15ca0b8dcc74376f437dc99dfa7f9289080185e8cb9b7c9 [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 457d7b5a481d nickistre/centos-lamp "supervisord -n" 11 seconds ago Created upbeat_joliot [root@docker ~]#
20.使用 docker ps 命令查看所有容器的运行状态,添加-a 选项,可以列出系统最近一次启动的容器
[root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 457d7b5a481d nickistre/centos-lamp "supervisord -n" 11 seconds ago Created upbeat_joliot
21.使用 docker start 命令启动新创建的容器,并查看新建容器是否正常运行
[root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 457d7b5a481d nickistre/centos-lamp "supervisord -n" 53 seconds ago Created upbeat_joliot [root@docker ~]# [root@docker ~]# [root@docker ~]# docker start 457d7b5a481d 457d7b5a481d [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 457d7b5a481d nickistre/centos-lamp "supervisord -n" 4 minutes ago Up 2 seconds 22/tcp, 80/tcp, 443/tcp upbeat_joliot [root@docker ~]#
22.使用 docker exec 命令进入正在运行的容器,并查看当前目录下的信息,同时创建一个 123 的文件
[root@457d7b5a481d /]# ls bin boot dev etc home lib lib64 lost+found media mnt opt proc root sbin selinux srv supervisord.log supervisord.pid sys tmp usr var [root@457d7b5a481d /]# touch 123 [root@457d7b5a481d /]# ls 123 bin boot dev etc home lib lib64 lost+found media mnt opt proc root sbin selinux srv supervisord.log supervisord.pid sys tmp usr var [root@457d7b5a481d /]#
23.使用 docker rm 删除容器,此时会提示报错,因为容器处于运行中,需要停止,停止容器运行后再次执行删除操作,并查看该容器是否被删除
[root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 457d7b5a481d nickistre/centos-lamp "supervisord -n" 7 minutes ago Up 3 minutes 22/tcp, 80/tcp, 443/tcp upbeat_joliot [root@docker ~]# docker rm 457d7b5a481d Error response from daemon: cannot remove container "/upbeat_joliot": container is running: stop the container before removing or force remove [root@docker ~]# docker stop 457d7b5a481d 457d7b5a481d [root@docker ~]# docker rm 457d7b5a481d 457d7b5a481d [root@docker ~]#
24.为本地镜像 nickistre/centos-lamp 添加新的名词 httpd,新的标签 centos,查看是否成功,同时使用 httpd:centos 镜像创建一个名为 web 的容器,并且创建两个数据卷,分别挂载到/date1 和/data2 目录上
[root@docker ~]# docker tag nickistre/centos-lamp:latest httpd:centos [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE httpd centos 0b8d572d1c7d 5 years ago 547MB nickistre/centos-lamp latest 0b8d572d1c7d 5 years ago 547MB [root@docker ~]# docker run -d --name web -v /data1 -v /data2 httpd:centos 1858f880c65788cc109fdce7e4bb9a671971c2c84f5e8f4f46a93126372b1ace
25.进入容器后可以看到两个数据卷已经创建成功,并分别挂载到了/data1 与/data2 目录上
[root@docker ~]# docker exec -it web /bin/bash [root@1858f880c657 /]# [root@1858f880c657 /]# [root@1858f880c657 /]# ls -l total 20 dr-xr-xr-x. 2 root root 4096 Mar 4 2015 bin drwxr-xr-x. 3 root root 18 Apr 13 2018 boot drwxr-xr-x. 2 root root 6 Apr 11 02:09 data1 drwxr-xr-x. 2 root root 6 Apr 11 02:09 data2
26.拉取 hello-world 镜像
[root@docker ~]# docker pull hello-world Using default tag: latest latest: Pulling from library/hello-world 2db29710123e: Pull complete Digest: sha256:2498fce14358aa50ead0cc6c19990fc6ff866ce72aeb5546e1d59caac3d0d60f Status: Downloaded newer image for hello-world:latest docker.io/library/hello-world:latest
27.运行 hello-world
[root@docker ~]# docker run hello-world Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/ [root@docker ~]#
28.查看本地所有镜像
[root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest feb5d9fea6a5 2 years ago 13.3kB httpd centos 0b8d572d1c7d 5 years ago 547MB nickistre/centos-lamp latest 0b8d572d1c7d 5 years ago 547MB [root@docker ~]#
29.拉取 whalesay 镜像
[root@docker ~]# ls 公共 模板 视频 图片 文档 下载 音乐 桌面 anaconda-ks.cfg debian-7.0-x86.tar.gz dockerfile_centos dockerfile_nginx whalesay_latest.tar.gz [root@docker ~]# docker load < whalesay_latest.tar.gz 1154ba695078: Loading layer [==================================================>] 197.2MB/197.2MB 528c8710fd95: Loading layer [==================================================>] 208.9kB/208.9kB 37ee47034d9b: Loading layer [==================================================>] 4.608kB/4.608kB 5f70bf18a086: Loading layer [==================================================>] 1.024kB/1.024kB b26122d57afa: Loading layer [==================================================>] 60.21MB/60.21MB 091abc5148e4: Loading layer [==================================================>] 255.5kB/255.5kB d511ed9e12e1: Loading layer [==================================================>] 92.67kB/92.67kB d061ee1340ec: Loading layer [==================================================>] 75.78kB/75.78kB Loaded image: docker/whalesay:latest
30.运行 whalesay 镜像
[root@docker ~]# docker run docker/whalesay cowsay coo _____ < coo > ----- \ \ \ ## . ## ## ## == ## ## ## ## === /""""""""""""""""___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\______/ [root@docker ~]#
31.查看 docker 网络列表。
[root@docker ~]# docker network list NETWORK ID NAME DRIVER SCOPE 6860e179a639 bridge bridge local 3d84392a7451 host host local aa46aefcf88f none null local [root@docker ~]#
32.查看网络详细信息。
[root@docker ~]# docker inspect bridge [ { "Name": "bridge", "Id": "6860e179a6396786e3d9f4c2e7188b63619f424639d8468d49f80ef4cb203e52", "Created": "2024-04-11T09:13:53.04440405+08:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.17.0.0/16", "Gateway": "172.17.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "1858f880c65788cc109fdce7e4bb9a671971c2c84f5e8f4f46a93126372b1ace": { "Name": "web", "EndpointID": "4e3b189c5eefdb2b9b98ef6a5388a6aae85c00dbb890d0db5cb9a98baec9dc30", "MacAddress": "02:42:ac:11:00:02", "IPv4Address": "172.17.0.2/16", "IPv6Address": "" } }, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "1500" }, "Labels": {} } ] [root@docker ~]#
33.容器连接到默认桥接网络,使用alpine容器进行docker网络配置。
#查看默认 birdge 网络有两个容器连接。
[root@docker ~]# docker network inspect bridge [ { "Name": "bridge", "Id": "6860e179a6396786e3d9f4c2e7188b63619f424639d8468d49f80ef4cb203e52", "Created": "2024-04-11T09:13:53.04440405+08:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.17.0.0/16", "Gateway": "172.17.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "6dbaf4703dd7633377a7dd1f99ab1d90431ebe100dd8414454b688ff494b8cd3": { "Name": "alpine2", "EndpointID": "62b07e8cca1392f6f3e30f01b670689d5c92439b6d11ffc9f1580a10efef3db2", "MacAddress": "02:42:ac:11:00:02", "IPv4Address": "172.17.0.2/16", "IPv6Address": "" }, "86bbc5de355076f69ab53663de670c5c7573d71db8b4e62144adee7675350322": { "Name": "alpine1", "EndpointID": "9bfdcbb347169234eef5b77444c7a7c2677aad0ca6a0029ae77358434a1cf5f7", "MacAddress": "02:42:ac:11:00:03", "IPv4Address": "172.17.0.3/16", "IPv6Address": "" } }, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "1500" }, "Labels": {} } ] [root@docker ~]#
#连接到 alpine1 容器中查看 IP 地址,尝试 ping 公网 baidu.com。
[root@docker ~]# docker exec -it alpine1 /bin/bash [root@86bbc5de3550 /]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 10: eth0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::42:acff:fe11:3/64 scope link valid_lft forever preferred_lft forever [root@86bbc5de3550 /]# ping www.baidu.com PING www.a.shifen.com (153.3.238.110) 56(84) bytes of data. 64 bytes from 153.3.238.110: icmp_seq=1 ttl=127 time=12.0 ms 64 bytes from 153.3.238.110: icmp_seq=2 ttl=127 time=10.8 ms 64 bytes from 153.3.238.110: icmp_seq=3 ttl=127 time=11.6 ms 64 bytes from 153.3.238.110: icmp_seq=4 ttl=127 time=11.5 ms ^C --- www.a.shifen.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3684ms rtt min/avg/max/mdev = 10.884/11.555/12.090/0.432 ms [root@86bbc5de3550 /]#
#尝试 ping 第 2 个容器 alpine2 的 IP 地址,可以 ping 通
#进入容器二 [root@docker ~]# docker run -it --name alpine2 --net=bridge nickistre/centos-lamp /bin/bash [root@8a02915c835e /]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 16: eth0@if17: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::42:acff:fe11:2/64 scope link valid_lft forever preferred_lft forever [root@8a02915c835e /]# #回到容器一 [root@86bbc5de3550 /]# ping 172.17.0.2 PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data. 64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.180 ms 64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.417 ms 64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.108 ms 64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.197 ms
#尝试在 alpine1 使用容器 alpine2 的名称来 ping,发现 ping 不通
[root@86bbc5de3550 /]# ping alpine2 ping: unknown host alpine2 [root@86bbc5de3550 /]#
#退出 alpine1 容器,但不要停止它,使用 ctrl+P 和 ctrl+Q 退出但不停止容器。
[root@86bbc5de3550 /]# read escape sequence [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8a02915c835e nickistre/centos-lamp "/bin/bash" 2 minutes ago Up 2 minutes 22/tcp, 80/tcp, 443/tcp alpine2 86bbc5de3550 nickistre/centos-lamp "supervisord -n" 9 minutes ago Up 9 minutes 22/tcp, 80/tcp, 443/tcp alpine1 [root@docker ~]#
#停止两个容器并删除连个容器
[root@docker ~]# docker stop alpine1 alpine1 [root@docker ~]# docker stop alpine2 alpine2 [root@docker ~]# docker rm alpine2 alpine2 [root@docker ~]# docker rm alpine1 alpine1 [root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aeb54f8a07c9 hello-world "/hello" 33 minutes ago Exited (0) 33 minutes ago eloquent_nobel [root@docker ~]#
34.使用传统的容器连接,运行容器alpine2并添加alpine1容器的连接
[root@docker ~]# docker run -itd --name alpine1 alpine 4bfd9a78739add721e9346fd5886ad7fa5ee0d34433ca389449e054bc4bcafb7 [root@docker ~]# docker run -id --name alpine2 --link=alpine1 alpine 1d8ac8e625cadc0f0f30a794eca90590c40395d360be36ef0af23f21dd8a6ae0
#进入容器alpine2使用容器名称ping alpine1发现可以ping通
[root@docker ~]# docker exec -it alpine2 ash / # / # / # / # ping alpine1 PING alpine1 (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: seq=0 ttl=64 time=1.980 ms 64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.135 ms ^C --- alpine1 ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 0.135/1.057/1.980 ms / #
#进入容器alpine1使用容器名称ping alpine2发现ping不通,使用--link添加的连接仅支持单向通信,接受容器可以通过名称访问源容器,但是源容器不能使用名称访问接受容器。
[root@docker ~]# docker exec -it alpine1 ash / # / # ping alpine2 ping: bad address 'alpine2' / #
35.创建用户自定义桥接网络并连接容器
#查看刚创建的 alpine-net 桥接网络,得到网段地址。
[root@docker ~]# docker network create --driver bridge --subnet 192.168.100.0/24 --gateway 192.168.100.2 alpine-net 7e7639186f8c531b043404709faac47bb514ecabaca1488f89fcafb16578fa85 [root@docker ~]# docker network list NETWORK ID NAME DRIVER SCOPE 7e7639186f8c alpine-net bridge local 77bc69e67b97 bridge bridge local 3d84392a7451 host host local aa46aefcf88f none null local [root@docker ~]#
#使用 alpine 镜像,运行 4 个容器,alpine1-4,alpine3 使用默认桥接网络,1、2、4 使用创建的 alpine-net 网络
[root@docker ~]# docker run -id --name alpine1 --net=alpine-net nickistre/centos-lamp 11ed350c72e6b21a2ee848fc49c310e031c79caa98bd77aeb4911193f48b6ae9 [root@docker ~]# docker run -id --name alpine2 --net=alpine-net nickistre/centos-lamp b75e6be4155be3e0acd6f90bdb2ec1564e5d920d332cf0f2b9a0a414eec36f4c [root@docker ~]# docker run -id --name alpine4 --net=alpine-net nickistre/centos-lamp d60c8bf8d2ea7ecd25a6a2cdbc340e9b05a53b3f4f035eb30023da3b884f45c8 [root@docker ~]# docker run -id --name alpine3 --net=bridge nickistre/centos-lamp 60da04ee21a332066515c0cb57d7cda5f02be0f07eba154ba6521a80b4fde23f [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 60da04ee21a3 nickistre/centos-lamp "supervisord -n" 2 seconds ago Up 2 seconds 22/tcp, 80/tcp, 443/tcp alpine3 d60c8bf8d2ea nickistre/centos-lamp "supervisord -n" 17 seconds ago Up 16 seconds 22/tcp, 80/tcp, 443/tcp alpine4 b75e6be4155b nickistre/centos-lamp "supervisord -n" 25 seconds ago Up 24 seconds 22/tcp, 80/tcp, 443/tcp alpine2 11ed350c72e6 nickistre/centos-lamp "supervisord -n" 58 seconds ago Up 57 seconds 22/tcp, 80/tcp, 443/tcp alpine1 [root@docker ~]#
#再将 alpine4 连接到默认桥接网络
[root@docker ~]# docker network connect bridge alpine4 [root@docker ~]#
#查看所有容器状态
[root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 60da04ee21a3 nickistre/centos-lamp "supervisord -n" 3 minutes ago Up 3 minutes 22/tcp, 80/tcp, 443/tcp alpine3 d60c8bf8d2ea nickistre/centos-lamp "supervisord -n" 4 minutes ago Up 4 minutes 22/tcp, 80/tcp, 443/tcp alpine4 b75e6be4155b nickistre/centos-lamp "supervisord -n" 4 minutes ago Up 4 minutes 22/tcp, 80/tcp, 443/tcp alpine2 11ed350c72e6 nickistre/centos-lamp "supervisord -n" 4 minutes ago Up 4 minutes 22/tcp, 80/tcp, 443/tcp alpine1 [root@docker ~]#
#查看创建的 alpine-net 网络状态和默认的 bridge 网络的详细信息
[root@docker ~]# docker network inspect alpine-net [ { "Name": "alpine-net", "Id": "7e7639186f8c531b043404709faac47bb514ecabaca1488f89fcafb16578fa85", "Created": "2024-04-11T11:11:26.2429519+08:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "192.168.100.0/24", "Gateway": "192.168.100.2" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "11ed350c72e6b21a2ee848fc49c310e031c79caa98bd77aeb4911193f48b6ae9": { "Name": "alpine1", "EndpointID": "1d6e8424d9a3735d31fcacbe06ad5ed0157a1e38f4a9eda61d1e41ab16a117cd", "MacAddress": "02:42:c0:a8:64:01", "IPv4Address": "192.168.100.1/24", "IPv6Address": "" }, "b75e6be4155be3e0acd6f90bdb2ec1564e5d920d332cf0f2b9a0a414eec36f4c": { "Name": "alpine2", "EndpointID": "12303c5355983db69388f3c5bf5410892d70259bc9a2549fb44af461dc832695", "MacAddress": "02:42:c0:a8:64:03", "IPv4Address": "192.168.100.3/24", "IPv6Address": "" }, "d60c8bf8d2ea7ecd25a6a2cdbc340e9b05a53b3f4f035eb30023da3b884f45c8": { "Name": "alpine4", "EndpointID": "da43a18c2cda54d1c02049e000b1574b76ffbdc8f01f4137f7c0c6e7d109dadd", "MacAddress": "02:42:c0:a8:64:04", "IPv4Address": "192.168.100.4/24", "IPv6Address": "" } }, "Options": {}, "Labels": {} } ] [root@docker ~]# [root@docker ~]# docker network inspect bridge [ { "Name": "bridge", "Id": "77bc69e67b97d33b656298793d1a66bb87d4e50ed8dfc9e7f8da7da8d96ad9c1", "Created": "2024-04-11T11:05:33.233033912+08:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.17.0.0/16", "Gateway": "172.17.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "60da04ee21a332066515c0cb57d7cda5f02be0f07eba154ba6521a80b4fde23f": { "Name": "alpine3", "EndpointID": "1f373b8818c2a8e9a5f126e5c9eec7218d0916ca5b0ddb85141606e0086aa7d1", "MacAddress": "02:42:ac:11:00:02", "IPv4Address": "172.17.0.2/16", "IPv6Address": "" }, "d60c8bf8d2ea7ecd25a6a2cdbc340e9b05a53b3f4f035eb30023da3b884f45c8": { "Name": "alpine4", "EndpointID": "296242728baab6b237441fdb5b33d466c6ae31ba89cfa2e18a7a50b5f7220288", "MacAddress": "02:42:ac:11:00:03", "IPv4Address": "172.17.0.3/16", "IPv6Address": "" } }, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "1500" }, "Labels": {} } ] [root@docker ~]#
#alpine1,2,4 都连接至 alpine-net 网络,alpine3,4 连接至默认 bridge 网络;alpine4 既连接 alpine-net 网络也连接 bridge 网络。
[root@docker ~]# docker inspect alpine4 [ { "Id": "d60c8bf8d2ea7ecd25a6a2cdbc340e9b05a53b3f4f035eb30023da3b884f45c8", "Created": "2024-04-11T03:14:01.537162194Z", "Path": "supervisord", "Args": [ "-n" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 4825, "ExitCode": 0, "Error": "", "StartedAt": "2024-04-11T03:14:02.238611452Z", "FinishedAt": "0001-01-01T00:00:00Z" }, "Image": "sha256:0b8d572d1c7d20f8b2e86bb92517dd3a9e8f935194c7f48af5dc84984e7c5f44", "ResolvConfPath": "/var/lib/docker/containers/d60c8bf8d2ea7ecd25a6a2cdbc340e9b05a53b3f4f035eb30023da3b884f45c8/resolv.conf", "HostnamePath": "/var/lib/docker/containers/d60c8bf8d2ea7ecd25a6a2cdbc340e9b05a53b3f4f035eb30023da3b884f45c8/hostname", "HostsPath": "/var/lib/docker/containers/d60c8bf8d2ea7ecd25a6a2cdbc340e9b05a53b3f4f035eb30023da3b884f45c8/hosts", "LogPath": "/var/lib/docker/containers/d60c8bf8d2ea7ecd25a6a2cdbc340e9b05a53b3f4f035eb30023da3b884f45c8/d60c8bf8d2ea7ecd25a6a2cdbc340e9b05a53b3f4f035eb30023da3b884f45c8-json.log", "Name": "/alpine4", "RestartCount": 0, "Driver": "overlay2", "Platform": "linux", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "", "ExecIDs": null, "HostConfig": { "Binds": null, "ContainerIDFile": "", "LogConfig": { "Type": "json-file", "Config": {} }, "NetworkMode": "alpine-net", "PortBindings": {}, "RestartPolicy": { "Name": "no", "MaximumRetryCount": 0 }, "AutoRemove": false, "VolumeDriver": "", "VolumesFrom": null, "ConsoleSize": [ 37, 174 ], "CapAdd": null, "CapDrop": null, "CgroupnsMode": "private", "Dns": [], "DnsOptions": [], "DnsSearch": [], "ExtraHosts": null, "GroupAdd": null, "IpcMode": "private", "Cgroup": "", "Links": null, "OomScoreAdj": 0, "PidMode": "", "Privileged": false, "PublishAllPorts": false, "ReadonlyRootfs": false, "SecurityOpt": null, "UTSMode": "", "UsernsMode": "", "ShmSize": 67108864, "Runtime": "runc", "Isolation": "", "CpuShares": 0, "Memory": 0, "NanoCpus": 0, "CgroupParent": "", "BlkioWeight": 0, "BlkioWeightDevice": [], "BlkioDeviceReadBps": [], "BlkioDeviceWriteBps": [], "BlkioDeviceReadIOps": [], "BlkioDeviceWriteIOps": [], "CpuPeriod": 0, "CpuQuota": 0, "CpuRealtimePeriod": 0, "CpuRealtimeRuntime": 0, "CpusetCpus": "", "CpusetMems": "", "Devices": [], "DeviceCgroupRules": null, "DeviceRequests": null, "MemoryReservation": 0, "MemorySwap": 0, "MemorySwappiness": null, "OomKillDisable": null, "PidsLimit": null, "Ulimits": [], "CpuCount": 0, "CpuPercent": 0, "IOMaximumIOps": 0, "IOMaximumBandwidth": 0, "MaskedPaths": [ "/proc/asound", "/proc/acpi", "/proc/kcore", "/proc/keys", "/proc/latency_stats", "/proc/timer_list", "/proc/timer_stats", "/proc/sched_debug", "/proc/scsi", "/sys/firmware", "/sys/devices/virtual/powercap" ], "ReadonlyPaths": [ "/proc/bus", "/proc/fs", "/proc/irq", "/proc/sys", "/proc/sysrq-trigger" ] }, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/fd33a0215fb6ad28c31024dca99ae84de031ff7a4e24a104923093bf97869630-init/diff:/var/lib/docker/overlay2/fb5aaf1e53c1e0db96919ecbe7f88aff864c1b52a33083a92663f28943a0dac3/diff:/var/lib/docker/overlay2/37f6ebcc438005d578ccbda31fc8ed9ea9d7c827f1564fb22331b35f28cef152/diff:/var/lib/docker/overlay2/f81ad59a6616cc08f34ea5a38b187edf71333d5f8ae0b65502690b08ab62ec24/diff:/var/lib/docker/overlay2/af6bd572f54e732e1521d46b6012c4c011318f4bff4a032153c67b4b04b97a61/diff:/var/lib/docker/overlay2/d5a4e99bcf690a78675a1214425c69ef0dfea1fc0cad265fb5e74c9d398a1b23/diff:/var/lib/docker/overlay2/2872f8b44668b1d3e34692086f4e92d796c16198a7604a350ea221d70c4bd243/diff:/var/lib/docker/overlay2/b82317577b9eff0762e85e46eef553c2d10c7ec17d0f137791aefa3436482255/diff:/var/lib/docker/overlay2/9a0a37ccca4084a6f5d3746eb9e80ac6a107b44cb312620c420bbf5b754d54be/diff:/var/lib/docker/overlay2/85a22e36288c5fe3d163ad6f89a939d8b0fb4e37c4d2f73ec854a41655924bc7/diff:/var/lib/docker/overlay2/badbcc239047cb10db36f2d27c01bc2ee945a8f3e34157aa2e06379337ba91f9/diff:/var/lib/docker/overlay2/bd9008d8dd561072384d7acddef1ff1cd318d2d165e6dbe68ede6a234c775e74/diff:/var/lib/docker/overlay2/e8be009e4bc3cab8d2a76b41fac2e3b88f443d96b75cd02d3b52560d39564a5d/diff:/var/lib/docker/overlay2/05f0c821e72d51f32d414756feaaea3b7779e0d5a4d39fc4118c86d9966fe231/diff:/var/lib/docker/overlay2/24df261c59ea18cf873cfe193a1e509652c72bc0c359efc101af1c8274265e6e/diff:/var/lib/docker/overlay2/52f4d647f033acb17b9f6d6430d3ea62f4bf5bf96f083339aec5524b46256fb4/diff", "MergedDir": "/var/lib/docker/overlay2/fd33a0215fb6ad28c31024dca99ae84de031ff7a4e24a104923093bf97869630/merged", "UpperDir": "/var/lib/docker/overlay2/fd33a0215fb6ad28c31024dca99ae84de031ff7a4e24a104923093bf97869630/diff", "WorkDir": "/var/lib/docker/overlay2/fd33a0215fb6ad28c31024dca99ae84de031ff7a4e24a104923093bf97869630/work" }, "Name": "overlay2" }, "Mounts": [], "Config": { "Hostname": "d60c8bf8d2ea", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "ExposedPorts": { "22/tcp": {}, "443/tcp": {}, "80/tcp": {} }, "Tty": false, "OpenStdin": true, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "supervisord", "-n" ], "Image": "nickistre/centos-lamp", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": {} }, "NetworkSettings": { "Bridge": "", "SandboxID": "e33349c4cc0eb4e795ac4efd38eb01a1b84d646eb4390d1388911c86cf16c590", "SandboxKey": "/var/run/docker/netns/e33349c4cc0e", "Ports": { "22/tcp": null, "443/tcp": null, "80/tcp": null }, "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "296242728baab6b237441fdb5b33d466c6ae31ba89cfa2e18a7a50b5f7220288", "Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.3", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "02:42:ac:11:00:03", "Networks": { "alpine-net": { //网络信息 "IPAMConfig": null, "Links": null, "Aliases": null, "MacAddress": "02:42:c0:a8:64:04", "NetworkID": "7e7639186f8c531b043404709faac47bb514ecabaca1488f89fcafb16578fa85", "EndpointID": "da43a18c2cda54d1c02049e000b1574b76ffbdc8f01f4137f7c0c6e7d109dadd", "Gateway": "192.168.100.2", "IPAddress": "192.168.100.4", "IPPrefixLen": 24, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "DriverOpts": null, "DNSNames": [ "alpine4", "d60c8bf8d2ea" ] }, "bridge": { //网络信息 "IPAMConfig": {}, "Links": null, "Aliases": [], "MacAddress": "02:42:ac:11:00:03", "NetworkID": "77bc69e67b97d33b656298793d1a66bb87d4e50ed8dfc9e7f8da7da8d96ad9c1", "EndpointID": "296242728baab6b237441fdb5b33d466c6ae31ba89cfa2e18a7a50b5f7220288", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.3", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "DriverOpts": {}, "DNSNames": null } } } } ] [root@docker ~]#
#alpine1 可以 ping 通 alpine4 但是不能 ping 通 alpine3
[root@docker ~]# docker exec -it alpine1 /bin/bash [root@11ed350c72e6 /]# [root@11ed350c72e6 /]# [root@11ed350c72e6 /]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 9: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP link/ether 02:42:c0:a8:64:01 brd ff:ff:ff:ff:ff:ff inet 192.168.100.1/24 brd 192.168.100.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::42:c0ff:fea8:6401/64 scope link valid_lft forever preferred_lft forever [root@11ed350c72e6 /]# ping alpine4 PING alpine4 (192.168.100.4) 56(84) bytes of data. 64 bytes from alpine4.alpine-net (192.168.100.4): icmp_seq=1 ttl=64 time=0.086 ms 64 bytes from alpine4.alpine-net (192.168.100.4): icmp_seq=2 ttl=64 time=0.234 ms ^C --- alpine4 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1655ms rtt min/avg/max/mdev = 0.086/0.160/0.234/0.074 ms [root@11ed350c72e6 /]# ping alpine3 ping: unknown host alpine3 [root@11ed350c72e6 /]#
#alpine4 既能 ping 通 alpine3,也能 ping 通 alpine1 并且也能访问公网
[root@d60c8bf8d2ea /]# ping www.baidu.com PING www.a.shifen.com (153.3.238.110) 56(84) bytes of data. 64 bytes from 153.3.238.110: icmp_seq=1 ttl=127 time=11.8 ms 64 bytes from 153.3.238.110: icmp_seq=2 ttl=127 time=12.1 ms ^C --- www.a.shifen.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1786ms rtt min/avg/max/mdev = 11.839/11.990/12.142/0.186 ms [root@d60c8bf8d2ea /]# [root@d60c8bf8d2ea /]# ping alpine1 PING alpine1 (192.168.100.1) 56(84) bytes of data. 64 bytes from alpine1.alpine-net (192.168.100.1): icmp_seq=1 ttl=64 time=0.078 ms 64 bytes from alpine1.alpine-net (192.168.100.1): icmp_seq=2 ttl=64 time=0.115 ms 64 bytes from alpine1.alpine-net (192.168.100.1): icmp_seq=3 ttl=64 time=0.153 ms [root@d60c8bf8d2ea /]# ping 172.17.0.2 //alpine3 PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data. 64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.092 ms 64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.171 ms ^C --- 172.17.0.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1653ms rtt min/avg/max/mdev = 0.092/0.131/0.171/0.041 ms [root@d60c8bf8d2ea /]#
#关闭容器并删除容器
[root@docker ~]# docker stop alpine1 alpine1 [root@docker ~]# docker stop alpine2 alpine2 [root@docker ~]# docker stop alpine{3,4} alpine3 alpine4 [root@docker ~]# docker rm alpine{1,2,3,4} alpine1 alpine2 alpine3 alpine4 [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aeb54f8a07c9 hello-world "/hello" About an hour ago Exited (0) About an hour ago eloquent_nobel [root@docker ~]#
36.拉取 httpd 容器镜像
[root@docker ~]# docker pull httpd Using default tag: latest latest: Pulling from library/httpd Digest: sha256:0954cc1af252d824860b2c5dc0a10720af2b7a3d3435581ca788dff8480c7b32 Status: Image is up to date for httpd:latest docker.io/library/httpd:latest [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE httpd latest dabbfbe0c57b 2 years ago 144MB hello-world latest feb5d9fea6a5 2 years ago 13.3kB httpd centos 0b8d572d1c7d 5 years ago 547MB nickistre/centos-lamp latest 0b8d572d1c7d 5 years ago 547MB [root@docker ~]#
37.运行 httpd 容器,并查看端口
[root@docker ~]# docker run -id --name http httpd:latest 4a4de159e1f6afe7cb338d1953897c9f9788116b603cd0797ba853f0fb1480eb [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4a4de159e1f6 httpd:latest "httpd-foreground" 3 seconds ago Up 2 seconds 80/tcp http
38.再次运行 httpd 容器并将 49280 端口映射到端口为 80,并查看端口是否映射成功
[root@docker ~]# docker run -id --name http -p 49280:80 httpd:latest ed0cccc756d9d7f81d5fcd3e30c66bdc501277a3e110700cee3af7df51dd1487 [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ed0cccc756d9 httpd:latest "httpd-foreground" 4 seconds ago Up 3 seconds 0.0.0.0:49280->80/tcp, :::49280->80/tcp http [root@docker ~]# curl 192.168.200.133:49280 <html><body><h1>It works!</h1></body></html> [root@docker ~]#
39.使用 docker run 命令创建容器,使用--name 指定容器名称为 web1
[root@docker ~]# docker run -id --name web1 nickistre/centos-lamp 1bbf461b793c8bba7a54eee9c03afdd588c69ebfbd419011c0282b97ce05f482 [root@docker ~]
40.使用 docker run 命令创建容器,使用--name 指定容器名称为 web2,使用--link指定连接容器以实现容器互联
[root@docker ~]# docker run -id --name web2 --link=web1 nickistre/centos-lamp aa497728a0099b4049c82912ad93c9cc8e9aa8b7ed7750c9e36de2a80ece9b45 [root@docker ~]#
41.进入 web2 容器,进行 ping 测试,会提示报错找不到命令,使用 apt-get update && apt install iputils-ping 这条命令进行安装,随后在进行测试容器之间是否相互联通
[root@aa497728a009 /]# ping web1 PING web1 (172.17.0.3) 56(84) bytes of data. 64 bytes from web1 (172.17.0.3): icmp_seq=1 ttl=64 time=0.079 ms 64 bytes from web1 (172.17.0.3): icmp_seq=2 ttl=64 time=0.204 ms 64 bytes from web1 (172.17.0.3): icmp_seq=3 ttl=64 time=0.179 ms 64 bytes from web1 (172.17.0.3): icmp_seq=4 ttl=64 time=0.123 ms ^C --- web1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3141ms rtt min/avg/max/mdev = 0.079/0.146/0.204/0.049 ms [root@aa497728a009 /]#
42.创建一个卷并让容器挂载
#启动容器并将创建的 test1 卷挂载至容器的/test 目录
#删除 test1 卷,需要先删除容器才能删除卷
[root@docker ~]# docker volume create test1 test1 [root@docker ~]# docker run -id --name abc -v test1:/test httpd:latest 40beec0de972ddc315cd6eea877a097f2d2a2a2adaa71fe77cb9b1c44a997821 [root@docker ~]# docker stop abc [root@docker ~]# docker volume rm test1 test1 [root@docker ~]# docker rm abc abc [root@docker ~]#
43.启动容器时自动创建卷
#在此用到了- -mount 和-v 都可以挂载,建议更多的使用-v
[root@docker ~]# docker run -d --name abcd --mount source=test2,target=/test2 nickistre/centos-lamp 4c92baefd5871f8508193fad3408861c4719a5556a8cbeed01e70890f8da91c8 [root@docker ~]#
44.使用只读卷
#也可使用-v 选项完成
#查看容器信息,发现 mounts 字段中 readonly 开启
[root@docker ~]# docker run -it --name 12311 --mount source=test3,destination=/test3,readonly centos [root@fbdbb1ee402c /]# [root@docker ~]# [root@docker ~]# [root@docker ~]# docker exec -it 12311 /bin/bash [root@fbdbb1ee402c /]# cd test3 [root@fbdbb1ee402c test3]# ls [root@fbdbb1ee402c test3]# touch a touch: cannot touch 'a': Read-only file system [root@fbdbb1ee402c test3]# [root@docker ~]# docker run -it --name centos2 -v test3:/test3:ro centos:latest [root@5d15b1558ea8 /]# cd /test3 [root@5d15b1558ea8 test3]# ls [root@5d15b1558ea8 test3]# touch w touch: cannot touch 'w': Read-only file system [root@5d15b1558ea8 test3]#
45.使用匿名卷
#使用-v 选项添加匿名卷
#使用匿名卷并不是没有指定明确的卷,而是 docker 自动生成一个名称为随机UUID 的匿名卷
#存储卷中多了两个 uuid 为名称的存储卷
#删除刚才创建的几个容器,存储卷并不会被删除,所以需要再删除存储卷
[root@docker ~]# docker run -it --name centos --mount destination=/world centos:latest [root@f10ca40724e3 /]# [root@f10ca40724e3 /]# cd /world/ [root@f10ca40724e3 world]# ls [root@f10ca40724e3 world]# touch a [root@f10ca40724e3 world]# ls a [root@docker ~]# docker run -it --name centos2 -v /world centos:latest [root@0bb3c91c1a13 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var world [root@0bb3c91c1a13 /]# df -Th Filesystem Type Size Used Avail Use% Mounted on overlay overlay 66G 20G 46G 31% / tmpfs tmpfs 64M 0 64M 0% /dev shm tmpfs 64M 0 64M 0% /dev/shm /dev/mapper/rhel-root xfs 66G 20G 46G 31% /world tmpfs tmpfs 3.8G 0 3.8G 0% /proc/asound tmpfs tmpfs 3.8G 0 3.8G 0% /proc/acpi tmpfs tmpfs 3.8G 0 3.8G 0% /proc/scsi tmpfs tmpfs 3.8G 0 3.8G 0% /sys/firmware [root@0bb3c91c1a13 /]# [root@docker ~]# docker inspect centos2 "Mounts": [ { "Type": "volume", "Name": "821bf4918811caabf965059ff3abcf672934294b4de990c311899bca61e95bef", "Source": "/var/lib/docker/volumes/821bf4918811caabf965059ff3abcf672934294b4de990c311899bca61e95bef/_data", "Destination": "/world", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" [root@docker ~]# docker volume ls DRIVER VOLUME NAME local 5e50f77028029030cc9e9e38c330d4017327071667c0019a234c4058e72893dc local 38e42e97ade34b925cb20391553da7282ac314d57428101178902c7ac8a5fd9a local 228c6e8b8747935fee3573e642533384b63cb4a36ed90ba8a3728dec6d62afd7 local 821bf4918811caabf965059ff3abcf672934294b4de990c311899bca61e95bef local test2 local test3 [root@docker ~]# [root@docker ~]# docker volume rm 228c6e8b8747935fee3573e642533384b63cb4a36ed90ba8a3728dec6d62afd7 821bf4918811caabf965059ff3abcf672934294b4de990c311899bca61e95bef 38e42e97ade34b925cb20391553da7282ac314d57428101178902c7ac8a5fd9a ^C [root@docker ~]# [root@docker ~]# [root@docker ~]# [root@docker ~]# docker volume rm 5e50f77028029030cc9e9e38c330d4017327071667c0019a234c4058e72893dc test3 test2 [root@docker ~]# docker volume rm 5e50f77028029030cc9e9e38c330d4017327071667c0019a234c4058e72893dc test3 test2 5e50f77028029030cc9e9e38c330d4017327071667c0019a234c4058e72893dc test3 test2
46.绑定挂载主机上的目录,前面挂载时使用的是提前创建的存储卷,我们也可以直接将宿主机目录挂载到容器中,那么在宿主机的这个目录中创建文件时容器中也会有这个文件
[root@docker ~]# mkdir test [root@docker ~]# docker run -it --name centos111 --mount type=bind,source=$(pwd)/test,target=/test centos:latest [root@06b687ecdf0d /]# cd /test/ [root@06b687ecdf0d test]# ls [root@06b687ecdf0d test]# touch ac [root@06b687ecdf0d test]# ls ac [root@06b687ecdf0d test]# exit exit [root@docker ~]# cd test/ [root@docker test]# ls ac [root@docker test]#
#-v 选项写法
[root@docker ~]# docker run -it --name centos7 -v $(pwd)/test:/test centos:latest [root@66fed025db07 /]#
#查看虚拟机信息
[root@docker ~]# docker inspect centos7 "Mounts": [ { "Type": "bind", "Source": "/root/test/test", "Destination": "/test", "Mode": "", "RW": true, "Propagation": "rprivate" } [root@docker ~]#
47.绑定挂载主机上的文件,绑定主机上的文件主要用于主机与容器之间共享配置文件。
[root@docker ~]# echo "asdhajs" > sas [root@docker ~]# ls 公共 模板 视频 图片 文档 下载 音乐 桌面 anaconda-ks.cfg lamp sas test [root@docker ~]# docker run -it --name centos123 -v /root/sas:/sas centos:latest [root@f823724ae1dc /]# cat sas asdhajs [root@f823724ae1dc /]#
48.备份、恢复和迁移数据卷
#将容器中/test 的目录备份
[root@docker ~]# docker run --rm --volumes-from centos -v /root/backup:/backup centos tar cvf /backup/backup.tar /test /test/ /test/zbc tar: Removing leading `/' from member names [root@docker ~]# [root@docker ~]# cd backup/ [root@docker backup]# ls backup.tar [root@docker backup]# tar -tvf backup.tar drwxr-xr-x root/root 0 2024-04-11 13:35 test/ -rw-r--r-- root/root 0 2024-04-11 13:35 test/zbc [root@docker backup]#
#将备份恢复至另外一台容器
[root@docker ~]# docker run --rm --volumes-from abc -v /root/backup:/backup centos bash -c "cd /test1 && tar -xvf /backup/backup.tar" test/ test/zbc [root@docker ~]#
49.重新拉取镜像,并存储本地的 nickistre/centos-lamp 镜像文件,储存的新镜像文件名为 lamp,从 lamp 中载入镜像到本地镜像库中
[root@docker ~]# docker pull nickistre/centos-lamp:latest latest: Pulling from nickistre/centos-lamp f9f73d801f05: Pull complete 31a920671517: Pull complete 21c34a1a7bde: Pull complete dc05bf237fc1: Pull complete 001edf96df50: Pull complete 273de3312284: Pull complete 09e0c479c5d6: Pull complete 3274b3252b64: Pull complete 8affd66070d7: Pull complete b3d0f4e847ac: Pull complete 1b0c18851735: Pull complete 557b86c40b14: Pull complete bdf3abef29b4: Pull complete 8fab0cd5d21a: Pull complete 4f198432c128: Pull complete Digest: sha256:6012dff0d5f805342d65e8eb3cae4e83e75bce16980915b165ef55d64866e91d Status: Downloaded newer image for nickistre/centos-lamp:latest docker.io/nickistre/centos-lamp:latest [root@docker ~]# docker save -o lamp nickistre/centos-lamp [root@docker ~]# ls 公共 模板 视频 图片 文档 下载 音乐 桌面 anaconda-ks.cfg lamp [root@docker ~]# docker load < lamp da6517724f67: Loading layer [==================================================>] 213.2MB/213.2MB 244de8069fbc: Loading layer [==================================================>] 10.37MB/10.37MB 988e3cb5a27b: Loading layer [==================================================>] 179.7MB/179.7MB 38556f5b7621: Loading layer [==================================================>] 47.41MB/47.41MB e6eea089f108: Loading layer [==================================================>] 3.072kB/3.072kB 07d45adf0b97: Loading layer [==================================================>] 21.89MB/21.89MB a0753067e202: Loading layer [==================================================>] 51.79MB/51.79MB 9b9518d71f0e: Loading layer [==================================================>] 18.52MB/18.52MB 11ed4ddf1f28: Loading layer [==================================================>] 2.891MB/2.891MB fa3e2c4d1489: Loading layer [==================================================>] 17.71MB/17.71MB f874a4141753: Loading layer [==================================================>] 8.704kB/8.704kB fabd844fa786: Loading layer [==================================================>] 9.728kB/9.728kB d31fcd4e52cf: Loading layer [==================================================>] 2.56kB/2.56kB 2ccc0c68e26e: Loading layer [==================================================>] 3.584kB/3.584kB 385f382ed46c: Loading layer [==================================================>] 3.584kB/3.584kB Loaded image: nickistre/centos-lamp:latest [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nickistre/centos-lamp latest 0b8d572d1c7d 5 years ago 547MB [root@docker ~]#
50.使用 docker create 命令创建新容器,需要记住该容器 ID 号
[root@docker ~]# docker create --name 123 centos:latest b602859d93bdec1158a5916012b4e4c7fa7739b9603f8964056100db3d89f87b [root@docker ~]#
51.之后使用 docker commit,命令创建一个新的镜像、
52.创建完成后,会返回新创建的 ID 信息。查看本地镜像列表时,可以看到新创建的镜像信息。
[root@docker ~]# docker commit 123 sha256:c933c31dcb9640b53f646f9a22187b0e61e3477665f03c4748783d0999c27019 [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> c933c31dcb96 6 seconds ago 231MB
53.通过导入操作系统的模板文件可以生成镜像,模板可以从OPENVZ开源项目下载 http://download.openvz.org/template/precreated/debian-7.0-x86.tar.gz
由于有点大所以可以选择离线下载上传虚拟机。下面我是是使用 docker导入命令将下载的debian模板压缩包导入为本地镜像的例子。前提是先将wget安装。
[root@admin ~]# wget http://download.openvz.org/template/precreated/debian-7.0-x86.tar.gz [root@docker ~]# cat debian-7.0-x86.tar.gz | docker import - debain sha256:e6626cde5ac99ee0f51c3779ce5c905432826ea09d537c8ebedd179c10b5fec9 [root@docker ~]#
54.导入完成后,会返回生成镜像的 ID 信息。查看本地镜像列表时,可以看到新创建的镜像信息。
[root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE debain latest e6626cde5ac9 41 seconds ago 546MB [root@docker ~]#
55.下载一个创建 SSHD 镜像的基础镜像 centos。
56.建立工作目录。
57.创建并编写 Dockerfile 文件。
58.生成镜像。
[root@docker ~]# vim dockerfile_centos [root@docker ~]# cat dockerfile_centos # 指定基础镜像 FROM centos:7 # 更新系统软件包 RUN yum update -y && yum install -y openssh-server sudo # SSH服务需要以root运行 RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config # SSHD服务使用的端口号(默认是22) EXPOSE 22 # 设置容器启动时要执行的命令 CMD ["/usr/sbin/sshd", "-D"] [root@docker ~]# [root@docker ~]# docker build -f dockerfile_centos -t myssh . [+] Building 49.2s (7/7) FINISHED docker:default => [internal] load build definition from dockerfile_centos 0.0s => => transferring dockerfile: 504B 0.0s => [internal] load metadata for docker.io/library/centos:7 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [1/3] FROM docker.io/library/centos:7 0.0s => [2/3] RUN yum update -y && yum install -y openssh-server sudo 46.9s => [3/3] RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config 0.5s => exporting to image 1.8s => => exporting layers 1.7s => => writing image sha256:c5919386520dbc26d9d6f20823313869762819a0f039572658a495439de64011 0.0s => => naming to docker.io/library/myssh 0.0s [root@docker ~]# [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE myssh latest c5919386520d About a minute ago 592MB [root@docker ~]#
59.启动容器并修改 root 密码。
[root@docker ~]# docker run -it --name centos_ssh myssh /bin/bash [root@82567bc0f40b /]# [root@82567bc0f40b /]# ip a bash: ip: command not found [root@82567bc0f40b /]# passwd Changing password for user root. New password: BAD PASSWORD: The password is a palindrome Retype new password: passwd: all authentication tokens updated successfully. [root@82567bc0f40b /]#
60.构建 Nginx 镜像,建立工作目录。
61.创建并编写 Dockfile 文件。
62.编写执行脚本内容。
63.生成镜像。
[root@docker ~]# cat dockerfile_nginx from nginx:latest #指定基础镜像 workdir /www/html/ expose 80 [root@docker ~]# [root@docker ~]# docker build -f dockerfile_nginx -t www_nginx . [+] Building 38.5s (6/6) FINISHED docker:default => [internal] load build definition from dockerfile_nginx 0.0s => => transferring dockerfile: 174B 0.0s => [internal] load metadata for docker.io/library/nginx:latest 15.6s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [1/2] FROM docker.io/library/nginx:latest@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31 22.6s => => resolve docker.io/library/nginx:latest@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31 0.0s => => sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31 1.86kB / 1.86kB 0.0s => => sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3 1.57kB / 1.57kB 0.0s => => sha256:605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85 7.66kB / 7.66kB 0.0s => => sha256:a2abf6c4d29d43a4bf9fbb769f524d0fb36a2edab49819c1bf3e76f409f953ea 31.36MB / 31.36MB 16.8s => => sha256:589b7251471a3d5fe4daccdddfefa02bdc32ffcba0a6d6a2768bf2c401faf115 602B / 602B 0.8s => => sha256:a9edb18cadd1336142d6567ebee31be2a03c0905eeefe26cb150de7b0fbc520b 25.35MB / 25.35MB 21.6s => => sha256:186b1aaa4aa6c480e92fbd982ee7c08037ef85114fbed73dbb62503f24c1dd7d 894B / 894B 1.5s => => sha256:b4df32aa5a72e2a4316aad3414508ccd907d87b4ad177abd7cbd62fa4dab2a2f 666B / 666B 1.9s => => sha256:a0bcbecc962ed2552e817f45127ffb3d14be31642ef3548997f58ae054deb5b2 1.40kB / 1.40kB 2.4s => => extracting sha256:a2abf6c4d29d43a4bf9fbb769f524d0fb36a2edab49819c1bf3e76f409f953ea 2.1s => => extracting sha256:a9edb18cadd1336142d6567ebee31be2a03c0905eeefe26cb150de7b0fbc520b 0.8s => => extracting sha256:589b7251471a3d5fe4daccdddfefa02bdc32ffcba0a6d6a2768bf2c401faf115 0.0s => => extracting sha256:186b1aaa4aa6c480e92fbd982ee7c08037ef85114fbed73dbb62503f24c1dd7d 0.0s => => extracting sha256:b4df32aa5a72e2a4316aad3414508ccd907d87b4ad177abd7cbd62fa4dab2a2f 0.0s => => extracting sha256:a0bcbecc962ed2552e817f45127ffb3d14be31642ef3548997f58ae054deb5b2 0.0s => [2/2] WORKDIR /www/html/ 0.1s => exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:b530274b1ff2f845316f387ecb0db722374ef9adbf71a73e902b4ebbad720778 0.0s => => naming to docker.io/library/www_nginx 0.0s [root@docker ~]# [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE www_nginx latest b530274b1ff2 4 minutes ago 141MB
64.启动容器进行测试。
[root@docker ~]# docker run -d -p 8080:80 www_nginx:latest 3861a5b890175bcf88254cee2d8cbc784f5e5efdbb535d13ca5b4b391bed312d [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3861a5b89017 www_nginx:latest "/docker-entrypoint.…" 4 seconds ago Up 3 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp hopeful_cartwright [root@docker ~]# curl 192.168.200.133:8080 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html> [root@docker ~]#