从疯狂中学习Docker(精华) |
您所在的位置:网站首页 › docker网站丢失文件 › 从疯狂中学习Docker(精华) |
容器数据量
什么是容器数据量
docker概念回顾 将应用程序和环境打包成镜像! data 如果数据在容器中,我们将删除容器并丢失数据!要求:数据可以持久化 mysql,容器被删除,删除数据库运行!要求:MySQL数据可以本地存储! 容器之间可以有数据共享技术!将Docker容器中生成的数据同步到本地! 这就是体积技术!目录挂载,将我们容器中的目录挂载到Linux上! 总结一下:容器持久化和同步!数据也可以在容器之间共享! 使用数据卷 方法一:直接使用命令挂载-v-v, --volume list 绑定挂载卷 docker run -it -v 主机目录:容器目录中 -p 主机端口:容器中的端口 /home/ceshi:主机主目录下的ceshi文件夹;映射:centos 容器/home[root@localhost home]# docker run -it -v /home/ceshi:/home centos /bin/bash #此时宿主机的/home/ceshi文件夹与容器的/home文件夹关联,两者可以同步文件或数据 #这是同一个物理分区吗 #新窗口 #通过docker检查容器id查看 [root@localhost home]# docker 检查 5b1e64d8bbc0 这是答案。这不是同步。这是使用磁盘上的相同分区。物理地址为1 再次测试! 1\。停止容器 2\。主机修改文件 3\。启动容器 4\。容器中的数据仍然是同步的 好处:我们以后只需要在本地修改,容器会自动同步! 实战:安装MySQL Docker 商店https://hub.docker.com/ 思考:MySQL的数据持久化# 获取mysql镜像 [root@localhost home]# docker pull mysql:5.7 #运行容器,需要挂载数据 #安装启动mysql,需要配置密码,要注意! 参考官网hubdocker run --name some-mysql -e MYSQL_ROOT_PASSWORDu003dmy-secret-pw -d mysql:tag #开始,我们必须 -d 后台操作 -p 端口映射 -v 卷挂载 -e 环境配置 -- name 容器名称 [root@localhost home]# docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/ mysql -e MYSQL_ROOT_PASSWORDu003d123456 --name mysql01 mysql:5.7 启动成功后,我们在本地用sqlyog测试一下#sqlyog - 3306 连接到服务器 -- 以及3306在容器中的映射 在本地测试创建数据库,查看映射路径是否ok![root@localhost home]# ls 测试黄.Java黄嘉琳皇.txt没有Linux MySQL test.Java test tmp [root@localhost home]# cd mysql [root@localhost mysql]# ls 配置数据 [root@localhost mysql]# cd 数据/ [root@localhost 数据]# ls auto.cnf 客户端-cert.pem ibdata1 ibtmp1 私有_key.pem 服务器-key.pem ca-key.pem 客户端-key.pem ib_logfile0 mysql public_key.pem sys ca.pem ib_buffer_pool ib_logfile1 性能_schema server-cert.pem 新数据库 更多测试文件 [root@localhost 数据]# ls auto.cnf 客户端-cert.pem ibdata1 ibtmp1 私有_key.pem 服务器-key.pem ca-key.pem 客户端-key.pem ib_logfile0 mysql public_key.pem sys ca.pem ib_buffer_pool ib_logfile1 性能_schema server-cert.pem 测试 假设我们删除容器 [root@localhost 数据]# docker rm -f mysql01 mysql01 [root@localhost 数据]# docker ps 容器 ID 图像命令创建状态端口名称 5b1e64d8bbc0 centos "/bin/bash" 56 分钟前 Up 39 分钟热衷_leavitt [root@localhost 数据]# docker ps -a ! zwz 100101 zwz 100102 zwz 100100 [root@localhost home]# ls 测试黄.Java黄嘉琳皇.txt没有Linux MySQL test.Java test tmp [root@localhost home]# cd mysql [root@localhost mysql]# ls 配置数据 [root@localhost mysql]# cd 数据/ [root@localhost 数据]# ls auto.cnf 客户端-cert.pem ibdata1 ibtmp1 私有_key.pem 服务器-key.pem ca-key.pem 客户端-key.pem ib_logfile0 mysql public_key.pem sys ca.pem ib_buffer_pool ib_logfile1 性能_schema server-cert.pem 发现我们本地挂载的数据卷依然没有丢失,实现了容器数据持久化功能。 命名和匿名挂载# 匿名挂载 -v 容器中的路径! [root@localhost home]# docker run -d -P --name nginx01 -v /etc/nginx nginx 查看所有卷[root@localhost home]# docker 卷 ls DRIVER VOLUME NAME # 容器中的卷名(匿名卷挂载) 本地 21159a8518abd468728cdbe8594a75b204a10c26be6c36090cde1ee88965f0d0 本地 b17f52d38f528893dd5720899f555caf22b31bf50b0680e7c6d5431dbda2802c 这里发现这是匿名挂载。在-v中,我们只写容器内的路径,不写容器外的路径! 命名挂载-P:表示随机映射端口[root@localhost home]# docker run -d -P --name nginx01 -v /etc/nginx nginx 情况 查看所有卷[root@localhost home]# docker 卷 ls 驱动器音量名称 本地 8bef6b16668574673c31978a4d05c212609add5b4ca5ea2f09ff8680bdd304a6 本地 a564a190808af4cdca228f6a0ea3664dd14e34fee81811ed7fbae39158337141 命名挂载[root@localhost home]# ls 测试黄.Java黄嘉琳皇.txt没有Linux MySQL test.Java test tmp [root@localhost home]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx #命名挂载 330 陷阱 [root@localhost home]# docker 卷 ls 驱动器音量名称 本地 8bef6b16668574673c31978a4d05c212609add5b4ca5ea2f09ff8680bdd304a6 本地 a564a190808af4cdca228f6a0ea3664dd14e34fee81811ed7fbae39158337141 local juming-nginx # 命名挂载 #通过-v卷名:查看容器中的路径 看看这个卷[root@localhost home]# docker 卷检查 juming-nginx [ { “创建时间”:“2021-04-12T06:53:09-07:00”, “驱动程序”:“本地”, “标签”:空, “挂载点”:“/var/lib/docker/volumes/juming-nginx/_data”, "名称": "juming-nginx", “选项”:空, “范围”:“本地” } ] ! swz 100104 swz 100105 swz 100103 docker容器中的所有卷都是用户自定义的卷名在**/var/lib/docker/volumes/如果没有指定目录/_data**下, 我们可以通过命名挂载轻松找到我们的一个卷,大多数情况下都会用到 [root@localhost home]# cd /var/lib/docker [root@localhost 码头工人]# ls buildkit 容器图像网络 overlay2 插件运行时群 tmp 信任卷 [root@localhost docker]# cd 卷/ [root@localhost 卷]# ls 8bef6b16668574673c31978a4d05c212609add5b4ca5ea2f09ff8680bdd304a6 支持FsBlockDev metadata.db a564a190808af4cdca228f6a0ea3664dd14e34fee81811ed7fbae39158337141 juming-nginx [root@localhost 卷]# cd juming-nginx/ [root@localhost juming-nginx]# ls _数据 [root@localhost juming-nginx]# cd _data/ [root@localhost _data]# ls conf.d fastcgi_params koi-utf koi-win mime.types 模块 nginx.conf scgi_params uwsgi_params win-utf [root@localhost _data]# cat nginx.conf 用户 nginx; worker_processes 1; 错误_log /var/log/nginx/error.log 警告; pid /var/run/nginx.pid; 事件 { worker_connections 1024; } http { 包括 /etc/nginx/mime.types; 默认_type 应用程序/八位字节流; 日志_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http\user\agent" "$http_ x_ 转发\for"'; 访问_log /var/log/nginx/access.log 主; 发送文件; #tcp_nopush 开启; 保活_超时 65; #gzip 开启; 包括/etc/nginx/conf.d/*.conf; } 如果指定了目录,则无法查看 docker volume ls。 区分三种安装方式# 共有三种挂载:匿名挂载、命名挂载和指定路径挂载 -v 容器中的路径 #匿名挂载 -v 卷名:容器内的路径 #Named mount -v /Host path: path within container #无法查看指定路径下的docker卷ls 展开:# 通过容器中的-v路径改变读写权限:ro rw ro #readonly 只读 rw #readwrite 可读可写 一旦设置了容器权限,容器就会限制我们挂载的内容![root@localhost home]# docker run -d -P --name nginx05 -v juming:/etc/nginx:ro nginx [root@localhost home]# docker run -d -P --name nginx05 -v juming:/etc/nginx:rw nginx 只要 ro 看到 ro,就说明这条路径只能通过宿主机操作,不能在容器内部操作! 初始 DockerfileDockerfile 是用于构建 docker 镜像的构建文件!命令脚本!先体验一下吧! 通过此脚本,您可以生成图像。图像是一层一层的。脚本是一个一个的命令,每个命令就是一层! [root@localhost /]# cd /home [root@localhost home]# ls 测试黄.Java黄嘉琳皇.txt没有Linux MySQL test.Java test tmp [root@localhost home]# mkdir docker-test-volume [root@localhost home]# ls 测试docker-test-volume黄.Java黄嘉琳皇.txt没有Linux MySQL test.Java test tmp [root@localhost home]# cd docker-test-volume/ [root@localhost docker-test-volume]# pwd /home/docker-test-volume #通过这个脚本,可以生成图片 [root@localhost docker-test-volume]# vim dockerfile1 # 创建一个 dockerfile 文件。该名称可以建议为 dockerfile 文件内容:指令(大写)+参数[root@localhost docker-test-volume]# vim dockerfile1 FROM centos # 目前这个镜像是基于centos的 VOLUME ["volume01","volume02"] # 挂载卷的卷目录列表(多个目录) CMD echo "-----end-----" # 输出测试 CMD /bin/bash # 默认是bash控制台 [root@localhost docker-test-volume]# cat dockerfile1 来自centos 音量 ["volume01","volume02"] CMD 回显“-----end-----” CMD /bin/bash 这里的每一个命令都是一层图像! 构建这个镜像-f dockerfile1 #f代表file,指的是当前文件的地址(这里是当前目录下的dockerfile1) -t caoshipeng/centos # 注意“target/”前面的“target/”表示目录 。 # 表示在当前目录生成 [root@localhost docker-test-volume]# docker build -f dockerfile1 -t huangjialin/centos:1.0 . 将构建上下文发送到 Docker 守护进程 2.048kB 第 1/4 步:来自 centos ---> 300 y 15 bd Step 2/4 : VOLUME ["volume01","volume02"] # 卷名列表 ---> 在 2d8ae11d9994 中运行 移除中间容器 2d8ae11d9994 ---> Step 3/4 : CMD echo "-----end-----" # 输出脚本命令 ---> 在 2483f0e77b68 中运行 卸下中间容器 2483f0e77b68 ---> 30bf0ad14072 步骤 4/4:CMD /bin/bash ---> 在 8fee073c961b 中运行 移除中间容器 8fee073c961b ---> 74f0e59c6da4 成功搭建74f0e59c6da4 成功标记 huangjialin/centos:1.0 查看自建图片[root@localhost docker-test-volume]# docker 镜像 存储库标签图像 ID 创建大小 huangjialin/centos 1.0 74f0e59c6da4 大约一分钟前 209MB ! swz 100107 swz 100108 swz 100106 [root@localhost docker-test-volume]# docker run -it 74f0e59c6da4 /bin/bash [root@0be9ef3e0f75 /]# ls -l 总计 0 lrwxrwxrwx。 1 根 11 月 3 日 7 日 15:22 bin -> usr/bin drwxr-xr-x。 5 根根 360 Apr 12 14:38 dev drwxr-xr-x。 1 根 66 Apr 12 14:38 等 drwxr-xr-x。 2根根 6 Nov 3 15:22 home lrwxrwxrwx。 1 根 11 月 3 日 7 日 15:22 lib -> usr/lib lrwxrwxrwx。 1 根 11 月 3 日 9 日 15:22 lib64 -> usr/lib64 drwx-----。 2 根根 6 Dec 4 17:37 lost+found drwxr-xr-x。 2根根 6 Nov 3 15:22 media drwxr-xr-x。 2 根 6 Nov 3 15:22 mnt drwxr-xr-x。 2 根根 6 Nov 3 15:22 opt 博士-xr-xr-x。 253 根根 0 Apr 12 14:38 proc 博士-xr-x---。 2 根 162 12 月 4 日 17:37 根 drwxr-xr-x。 11 根根 163 12 月 4 日 17:37 运行 lrwxrwxrwx。 1 根 11 月 3 日 8 日 15:22 sbin -> usr/sbin drwxr-xr-x。 2 根 6 Nov 3 15:22 srv 博士-xr-xr-x。 13 根根 0 Apr 7 10:09 系统 drwxrwxrwt。 7 根 145 12 月 4 日 17:37 tmp drwxr-xr-x。 12 根根 144 12 月 4 日 17:37 usr drwxr-xr-x。 20 根 262 12 月 4 日 17:37 var drwxr-xr-x。 2 根根 6 Apr 12 14:38 volume01 drwxr-xr-x。 2 根根 6 Apr 12 14:38 volume02 ! swz 100110 swz 100111 swz 100109 这个卷和外面必须有一个同步的目录! [root@0be9ef3e0f75 /]# 退出 退出 [root@localhost docker-test-volume]# docker ps 容器 ID 图像命令创建状态端口名称 330f5a75c399 nginx "/docker-entrypoint...." 54 分钟前 54 分钟前 0.0.0.0:49154->80/tcp nginx02 a35688cedc66 nginx "/docker-entrypoint...." 大约一个小时前 Up 大约一个小时 0.0.0.0:49153->80/tcp nginx01 [root@localhost docker-test-volume]# docker run -it 74f0e59c6da4 /bin/bash [root@f8bd9a180286 /]# cd volume01 [root@f8bd9a180286 volume01]# touch container.txt [root@f8bd9a180286 volume01]# ls 容器.txt 检查卷挂载的路径 # docker 检查容器 ID $ 码头工人检查 ca3b45913df5 # 另一个窗口 [root@localhost home]# docker 镜像 存储库标签图像 ID 创建大小 黄加临/CentOS 1.0 74发0哦59从6大4 18 minutes ago 209MB tomcat02.1.0 最新 f5946bde7e99 5 小时前 672MB tomcat 8 926c7fd4777e 35 小时前 533MB tomcat 最新 bd431ca8553c 35 小时前 667MB nginx 最新 519e12e2a84a 2 天前 133MB mysql 5.7 450379344707 2 天前 449MB portainer/portainer 最新 580c0e4e98b0 3 周前 79.1MB hello-world 最新 d1165f221234 5 周前 13.3kB centos 最新 300e315adb2f 4 个月前 209MB elasticsearch 7.6.2 f29a1ee41030 12 个月前 791MB [root@localhost home]# docker ps 容器 ID 图像命令创建状态端口名称 f8bd9a180286 74f0e59c6da4 "/bin/bash" 3 分钟前 3 分钟前有天赋_mccarthy 330f5a75c399 nginx "/docker-entrypoint...." 59 分钟前 Up 59 分钟 0.0.0.0:49154->80/tcp nginx02 a35688cedc66 nginx "/docker-entrypoint...." 大约一个小时前 Up 大约一个小时 0.0.0.0:49153->80/tcp nginx01 [root@localhost home]# docker 检查 f8bd9a180286 测试文件是否刚刚同步出来! [root@localhost home]# cd /var/lib/docker/volumes/52912f4f30befa6a7039dc04b92de15a32ec5de39d3a9db3521f58212e85543d/_data [root@localhost _data]# ls 容器.txt 这种方法用的比较多,因为我们一般都是自己搭建镜像的! 假设构建镜像时没有挂载的卷,手动挂载 -v 卷名:容器中的路径! 数据卷容器 多台MySQL同步数据!在命名容器中挂载数据卷! # 通过刚才写的镜像测试启动三个容器 [root@localhost _data]# 泊坞窗图像 存储库标签图像 ID 创建大小 黄加临/CentOS 1.0 74发0哦59从6大4 2 hours ago 209MB tomcat02.1.0 最新 f5946bde7e99 6 小时前 672MB tomcat 8 926c7fd4777e 37 小时前 533MB tomcat 最新 bd431ca8553c 37 小时前 667MB nginx 最新 519e12e2a84a 2 天前 133MB mysql 5.7 450379344707 2 天前 449MB portainer/portainer 最新 580c0e4e98b0 3 周前 79.1MB hello-world 最新 d1165f221234 5 周前 13.3kB centos 最新 300e315adb2f 4 个月前 209MB elasticsearch 7.6.2 f29a1ee41030 12 个月前 791MB 创建docker01:因为我的电脑是最新版本,所以这里使用latest。疯老师使用1.0,如下图[root@localhost _data]# docker run -it --name docker01 huangjialin/centos:1.0 查看容器 docekr01 内容[root@8e2660858dca /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02 退出而不关闭容器CTRL + Q + P 创建 docker02: 并让 docker02 继承 docker01[root@localhost /]# docker run -it --name docker02 --volumes-from docker01 huangjialin/centos:1.0 查看容器docker02的内容[root@465894e34af8 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02 # 输入docker01 [root@localhost /]# docker ps 容器 ID 图像命令创建状态端口名称 465894e34af8 huangjialin/centos:1.0 "/bin/sh -c/bin/bash" 2分钟前 2分钟 docker02 8e2660858dca huangjialin/centos:1.0 "/bin/sh -c/bin/bash" 3 分钟前 3 分钟 docker01 [root@localhost /]# docker attach 8e2660858dca [root@8e2660858dca /]# ls -l 总计 0 lrwxrwxrwx。 1 根 11 月 3 日 7 日 15:22 bin -> usr/bin drwxr-xr-x。 5 根根 360 Apr 13 05:47 dev drwxr-xr-x。 1 根 66 Apr 13 05:47 等 drwxr-xr-x。 2根根 6 Nov 3 15:22 home lrwxrwxrwx。 1 根 11 月 3 日 7 日 15:22 lib -> usr/lib lrwxrwxrwx。 1 根 11 月 3 日 9 日 15:22 lib64 -> usr/lib64 drwx-----。 2 根根 6 Dec 4 17:37 lost+found drwxr-xr-x。 2根根 6 Nov 3 15:22 media drwxr-xr-x。 2 根 6 Nov 3 15:22 mnt drwxr-xr-x。 2 根根 6 Nov 3 15:22 opt 博士-xr-xr-x。 242 根根 0 Apr 13 05:47 过程 博士-xr-x---。 2 根 162 12 月 4 日 17:37 根 drwxr-xr-x。 11 根根 163 12 月 4 日 17:37 运行 lrwxrwxrwx。 1 根 11 月 3 日 8 日 15:22 sbin -> usr/sbin drwxr-xr-x。 2 根 6 Nov 3 15:22 srv 博士-xr-xr-x。 13 根根 0 Apr 13 05:27 sys drwxrwxrwt。 7 根 145 12 月 4 日 17:37 tmp drwxr-xr-x。 12 根根 144 12 月 4 日 17:37 usr drwxr-xr-x。 20 根 262 12 月 4 日 17:37 var drwxr-xr-x。 2 根根 6 Apr 13 05:47 volume01 drwxr-xr-x。 2 根根 6 Apr 13 05:47 volume02 创建一个文件[root@8e2660858dca /]# cd volume01 [root@8e2660858dca volume01]# ls [root@8e2660858dca volume01]# touch docker01 # 输入docker02 [root@localhost /]# docker attach 465894e34af8 [root@465894e34af8 /]# ls -l 总计 0 lrwxrwxrwx。 1 根 11 月 3 日 7 日 15:22 bin -> usr/bin drwxr-xr-x。 5 根根 360 Apr 13 05:48 dev drwxr-xr-x。 1 根 66 Apr 13 05:48 等 drwxr-xr-x。 2根根 6 Nov 3 15:22 home lrwxrwxrwx。 1 根 11 月 3 日 7 日 15:22 lib -> usr/lib lrwxrwxrwx。 1 根 11 月 3 日 9 日 15:22 lib64 -> usr/lib64 drwx-----。 2 根根 6 Dec 4 17:37 lost+found drwxr-xr-x。 2根根 6 Nov 3 15:22 media drwxr-xr-x。 2 根 6 Nov 3 15:22 mnt drwxr-xr-x。 2 根根 6 Nov 3 15:22 opt 博士-xr-xr-x。 241 根根 0 Apr 13 05:48 proc 博士-xr-x---。 2 根 162 12 月 4 日 17:37 根 drwxr-xr-x。 11 根根 163 12 月 4 日 17:37 运行 lrwxrwxrwx。 1 根 11 月 3 日 8 日 15:22 sbin -> usr/sbin drwxr-xr-x。 2 根 6 Nov 3 15:22 srv 博士-xr-xr-x。 13 根根 0 Apr 13 05:27 sys drwxrwxrwt。 7 根 145 12 月 4 日 17:37 tmp drwxr-xr-x。 12 根根 144 12 月 4 日 17:37 usr drwxr-xr-x。 20 根 262 12 月 4 日 17:37 var drwxr-xr-x。 2 根根 22 Apr 13 05:55 volume01 drwxr-xr-x。 2 根根 6 Apr 13 05:47 volume02 找到 docker01 创建的文件[root@465894e34af8 /]# cd volume01 [root@465894e34af8 volume01]# ls 码头01 容器之间的数据共享 亲测删除也会同步 #创建另一个docker03并继承docker01 $ docker run -it --name docker03 --volumes-from docker01 caoshipeng/centos:latest $ cd volume01 #进入volume01查看docker01的数据是否也同步 $ ls docker01.txt 测试:可以删除docker01,检查docker02和docker03是否可以访问这个文件 测试发现数据保留在docker02和docker03并没有被删除! swz 100128 swz 100129 swz 100127 与多个mysql共享数据 $ docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD u003d123456 --name mysql01 mysql:5.7 $ docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORDu003d123456 --name mysql02 --volumes-from mysql01 mysql:5.7 这时候就可以实现两个容器之间的数据同步了! 结论对于容器之间的配置信息传递,数据卷容器的生命周期一直持续到没有容器被使用。 但是一旦持久化到本地,此时本地数据不会被删除! DockerFile DockerFile介绍dockerfile 是用于构建 docker 镜像的文件!命令参数脚本! 施工步骤: 1\。写一个dockerfile文件 2\。 docker build 被称为镜像 3\。 docker run 运行镜像 4\。 docker push 发布镜像(DockerHub,阿里云仓库) ! zwz 100131 zwz 100132 zwz 100130 点击链接跳转到 GitHub 很多官方镜像都是基础包,没有很多功能。我们通常构建自己的图像! 既然官方可以做图片,我们也可以! DockerFile构建过程基础知识: 1\。每个保留关键字(指令)必须为大写 2\。执行自上而下的序列 3\。 # 表示注释 4\。每条指令都会创建一个新的镜像层并提交! ! zwz 100137 zwz 100138 zwz 100136 Dockerfile 是面向开发的。如果我们以后要发布项目和制作镜像,我们需要编写一个 dockerfile 文件。这个文件很简单! Docker镜像已经逐渐成为企业交付的标准,必须掌握! 步骤:开发、部署、运维缺一不可 DockerFile:构建一个定义所有步骤和源代码的文件 DockerImages:通过DockerFile构建生成的镜像,最终发布并运行产品。 Docker容器:容器是运行以提供服务的镜像。 DockerFile指令FROM # From:基本图像。一切从这里开始 MAINTAINER #维护者:谁写了图像,姓名+电子邮件 RUN #run:构建镜像时需要运行的命令 ADD #添加:step,tomcat镜像,这个tomcat压缩包!添加内容添加相同目录 WORKDIR #workdir:镜像的工作目录 VOLUME # 卷:挂载目录 EXPOSE #expose:保留端口配置 CMD #cmd:指定容器启动时要运行的命令。只有最后一个生效,可以更换 ENTRYPOINT #entrypoint:指定容器启动时要运行的命令。您可以附加命令 ONBUILD # onbuild:构建继承的DockerFile时,会运行onbuild的指令来触发指令 COPY #复制:类似于ADD,将我们的文件复制到镜像中 ENV#env:在构建过程中设置环境变量! ! zwz 100140 zwz 100141 zwz 100139 实际测试 划痕图片从头开始 添加 centos-7-x86_64-docker.tar.xz / 标签 \ org.label-schema.schema-versionu003d"1.0" \ org.label-schema.nameu003d"CentOS 基础映像" \ org.label-schema.vendoru003d"CentOS" \ org.label-schema.licenseu003d"GPLv2" \ org.label-schema.build-dateu003d"20200504" \ org.opencontainers.image.titleu003d"CentOS 基础镜像" \ org.opencontainers.image.vendoru003d"CentOS" \ org.opencontainers.image.licensesu003d"GPL-2.0-only" \ org.opencontainers.image.createdu003d"2020-05-04 00:00:00+01:00" CMD ["/bin/bash"] Docker Hub 中 99% 的镜像都是从这个基础镜像从头开始,然后配置所需的软件和配置来构建的。 创建自己的centos# 1.在/home下新建dockerfile目录 [root@localhost /]# cd 主页 [root@localhost home]# mkdir dockerfile 2.在dockerfile目录下新建mydockerfile CentOS文件[root@localhost home]# cd dockerfile/ [root@localhost dockerfile]# vim mydockerfile-centos 3. 编写Dockerfile配置文件FROM centos # 基础镜像为官方原生centos MAINTAINER 黄家林[email protected] #作者 ENV MYPATH /usr/local # 配置环境变量的目录 WORKDIR $MYPATH # 设置工作目录为 MYPATH RUN yum -y install vim #官方原生centos添加vim指令 RUN yum -y install net-tools # 官方原生centos添加ifconfig命令 EXPOSE 80 #暴露的端口号为80 CMD echo $MYPATH #输出下的MYPATH路径 CMD 回显“-----end----” cmd /bin/bash #启动后输入/bin/bash 4. 通过这个文件构建镜像 命令:docker build -f 文件路径 -t 镜像名称:[tag][root@localhost dockerfile]# docker build -f mydockerfile-centos -t mysentos:0.1 。 5.出现下图后,构建成功成功搭建2315251fefdd 成功标记 mysentos:0.1 ! swz 100143 swz 100144 swz 100142 [root@localhost home]# docker 镜像 存储库标签图像 ID 创建大小 mysentos 0.1 2315251fefdd 52 秒前 291MB 黄加临/CentOS 1.0 74发0哦59从6大4 18 hours ago 209MB tomcat02.1.0 最新 f5946bde7e99 22 小时前 672MB tomcat 8 926c7fd4777e 2 天前 533MB tomcat最新bd431ca8553c 2天前667MB nginx 最新 519e12e2a84a 3 天前 133MB mysql 5.7 450379344707 3 天前 449MB portainer/portainer 最新 580c0e4e98b0 3 周前 79.1MB hello-world 最新 d1165f221234 5 周前 13.3kB centos 最新 300e315adb2f 4 个月前 209MB elasticsearch 7.6.2 f29a1ee41030 12 个月前 791MB 6. 试运行[root@localhost home]# docker run -it mysentos:0.1 #注意带上版本号,不然每次回去找最新版本 [root@468db5f02628 本地]# pwd /usr/local # 与Dockerfile文件中WORKDIR设置的MYPATH一致 [root@468db5f02628 local]# vim #可以使用vim指令 [root@468db5f02628 local]# ifconfig #可以使用ifconfig指令 docker history image id 查看镜像构建历史步骤[root@localhost home]# docker 历史 2315251fefdd 图像由尺寸评论创建 2315251fefdd 6 分钟前 /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin... 0B be99d496b25c 6 分钟前 /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo... 0B 34fd97cceb13 6 分钟前 /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo... 0B baa95b2530ae 6 分钟前 /bin/sh -c #(nop) EXPOSE 80 0B ef9b50de0b5b 6 分钟前 /bin/sh -c yum -y install net-tools 23.4MB 071ef8153ad4 6 分钟前 /bin/sh -c yum -y install vim 58.1MB d6a38a2948f3 7 分钟前 /bin/sh -c #(nop) WORKDIR /usr/local 0B 98bd16198bff 7 分钟前 /bin/sh -c #(nop) ENV MYPATHu003d/usr/local 0B 53816b10cd26 7 分钟前 /bin/sh -c #(nop) MAINTAINER huangjialin 300 y 15 bd 步骤 2/2 : CMD ["ls","-a"] ---> 在 3d990f51fd5a 中运行 移除中间容器 3d990f51fd5a ---> 0 成功构建0e927777d383 成功标记 cmd-test:0.1 运行镜像[root@localhost dockerfile]# docker run 0e927777d383 # 从结果来看,运行后执行ls -a命令 。 .. .dockerenv 垃圾桶 开发 等 首页 库 lib64 丢失+找到 媒体 mnt 选择 过程 根 运行 斯宾 服务 系统 温度 用户 是 想添加一个命令 -l 到 ls -al: 显示列表的详细数据[root@localhost dockerfile]# docker run cmd-test:0.1 -l docker:来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:349:启动容器进程导致“exec:\”-l\”: 在 $PATH 中找不到可执行文件”:未知。 ERRO[0000] 错误等待容器:上下文已取消 cmd, -l 替换 CMD["ls","-l"] 但是 -l 不是命令,所以报错[root@localhost dockerfile]# docker run 0e927777d383 ls -al 总计 0 drwxr-xr-x。 1 根 6 Apr 13 08:38 。 drwxr-xr-x。 1 根 6 Apr 13 08:38 .. -rwxr-xr-x。 1 根 0 Apr 13 08:38 .dockerenv lrwxrwxrwx。 1 根 11 月 3 日 7 日 15:22 bin -> usr/bin drwxr-xr-x。 5 根根 340 Apr 13 08:38 dev drwxr-xr-x。 1 根 66 Apr 13 08:38 等 drwxr-xr-x。 2根根 6 Nov 3 15:22 home lrwxrwxrwx。 1 根 11 月 3 日 7 日 15:22 lib -> usr/lib lrwxrwxrwx。 1 根 11 月 3 日 9 日 15:22 lib64 -> usr/lib64 drwx-----。 2 根根 6 Dec 4 17:37 lost+found drwxr-xr-x。 2根根 6 Nov 3 15:22 media drwxr-xr-x。 2 根 6 Nov 3 15:22 mnt drwxr-xr-x。 2 根根 6 Nov 3 15:22 opt 博士-xr-xr-x。 247 根根 0 Apr 13 08:38 proc 博士-xr-x---。 2 根 162 12 月 4 日 17:37 根 drwxr-xr-x。 11 根根 163 12 月 4 日 17:37 运行 lrwxrwxrwx。 1 根 11 月 3 日 8 日 15:22 sbin -> usr/sbin drwxr-xr-x。 2 根 6 Nov 3 15:22 srv 博士-xr-xr-x。 13 根根 0 Apr 13 05:27 sys drwxrwxrwt。 7 根 145 12 月 4 日 17:37 tmp drwxr-xr-x。 12 根根 144 12 月 4 日 17:37 usr drwxr-xr-x。 20 根 262 12 月 4 日 17:37 var 测试入口点# 写入dockerfile文件 $ vim dockerfile-test-入口点 来自centos 入口点["ls","-a"] 构建镜像$ docker build -f dockerfile-test-entrypoint -t cmd-test:0.1 。 运行镜像$ docker run 入口点测试:0.1 。 .. .dockerenv 垃圾桶 开发 等 首页 库 lib64 丢失+找到... 我们的命令直接拼接在我们的ENTRYPOINT命令之后$ docker run 入口点测试:0.1 -l 共 56 个 drwxr-xr-x 1 根 4096 5 月 16 日 06:32。 drwxr-xr-x 1 根 4096 5 月 16 日 06:32 .. -rwxr-xr-x 1 根 0 5 月 16 日 06:32 .dockerenv lrwxrwxrwx 1 root root 7 2019 年 5 月 11 日 bin -> usr/bin drwxr-xr-x 5 根根 340 5 月 16 日 06:32 开发 drwxr-xr-x 1 根 4096 5 月 16 日 06:32 等 drwxr-xr-x 2 root root 4096 2019 年 5 月 11 日主页 lrwxrwxrwx 1 root root 7 2019 年 5 月 11 日 lib -> usr/lib lrwxrwxrwx 1 root root 9 2019 年 5 月 11 日 lib64 -> usr/lib64 .... Dockerfile 中的许多命令非常相似。我们需要了解他们的不同之处。我们最好的学习是比较它们并测试效果! 实战:Tomcat镜像 1.准备图像文件准备tomcat和jdk到当前目录并写README [root@localhost /]# cd /home [root@localhost home]# ls 测试dock而file docker-test-volume黄.Java黄嘉琳皇.txt没有Linux MySQL test.Java test tmp [root@localhost home]# cd huangjialin [root@localhost 黄家林]# ls datas 桌面文档 下载 音乐 图片 公共模板 视频 创建目录[root@localhost huangjialin]# mkdir -vp build/tomcat mkdir:创建目录'build' mkdir: 创建目录 'build/tomcat' [root@localhost 黄家林]# ls 构建数据桌面文档下载音乐图片公共模板视频 [root@localhost huangjialin]# cd build [root@localhost build]# cd tomcat 按照下图导入数据包[root@localhost tomcat]# ls apache-tomcat-9.0.45.tar.gz jdk-8u221-linux-x64.tar.gz ! swz 100152 swz 100153 swz 100151 正式名称是 dockerfile。 Build会自动找到这个文件,所以不需要指定-f! [root@localhost tomcat]# ls apache-tomcat-9.0.45.tar.gz jdk-8u221-linux-x64.tar.gz [root@localhost tomcat]# touch readme.txt [root@localhost tomcat]# vim Dockerfile FROM centos # 基本镜像 centos MAINTAINER 黄家林[email protected] #作者 COPY readme.txt /usr/local/readme.txt # 复制 README 文件 ADD jdk-8u221-linux-x64.tar.gz /usr/local/ # ADD jdk和ADD命令会自动解压 ADD apache-tomcat-9.0.45.tar.gz /usr/local/ # 添加tomcat,添加命令会自动解压 运行 yum -y install vim # 安装 vim 命令 ENV MYPATH /usr/local #环境变量设置工作目录 工作目录 $MYPATH ENV JAVA_HOME /usr/local/jdk1.8.0_221 # 环境变量:JAVA_HOME 环境变量 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.45 #环境变量:tomcat环境变量 ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.45 设置环境变量分隔符为:环境路径 $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 #设置暴露端口 cmd /usr/local/apache-tomcat-9.0.45/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.45/logs/catalina.out #设置默认命令 ! swz 100158 swz 100159 swz 100157 3.构建镜像# 因为Dockerfile命名使用默认命名,所以不需要使用-f来指定文件 [root@localhost tomcat]# docker build -t diytomcat 。 运行成功 [root@localhost tomcat]# docker build -t diytomcat 。 将构建上下文发送到 Docker 守护进程 206.6MB 步骤 1/15:来自 centos ---> 300 y 15 bd step 2/15 : maintainer黄加临[email protected] ---> 使用缓存 ---> 53816b10cd26 步骤 3/15:复制 readme.txt /usr/local/readme.txt ---> B17,277 A1 A4 步骤 4/15:添加 jdk-8u221-linux-x64.tar.gz /usr/local/ ---> bf206090dd5b 步骤 5/15:添加 apache-tomcat-9.0.45.tar.gz /usr/local/ ---> 步骤 6/15:运行 yum -y install vim ---> 在 7984f5e786a8 中运行 CentOS Linux 8 - AppStream 791 kB/s | 6.3 MB 00:08 CentOS Linux 8 - BaseOS 1.2 MB/s | 2.3 MB 00:0 CentOS Linux 8 - 额外 18 kB/s | 9.6 KB 00:00 上次元数据过期检查:2021 年 4 月 13 日星期二 0:00:01 前 11:41:15。 依赖关系已解决。 u003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003d u003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003d 包 Arch 版本库大小 u003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003d u003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003d 安装: vim 增强 x86_64 2:8.0.1763-15.el8 appstream 1.4 M 安装依赖: gpm-libs x86_64 1.20.7-15.el8 应用流 39 k vim-common x86_64 2:8.0.1763-15.el8 appstream 6.3 M vim 文件系统 noarch 2:8.0.1763-15.el8 appstream 48 k 其中 x86_64 2.21-12.el8 baseos 49 k 交易摘要 u003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003d u003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003d 安装 5 个软件包 总下载大小:7.8 M 安装尺寸:30M 下载包: (1/5):gpm-libs-1.20.7-15.el8.x86_64.rpm 187 kB/s | 39 KB 00:00 (2/5): vim-filesystem-8.0.1763-15.el8.noarch.rp 402 kB/s | 48 KB 00:00 (3/5): which-2.21-12.el8.x86_64.rpm 106 kB/s | 49 KB 00:00 (4/5): vim-enhanced-8.0.1763-15.el8.x86_64.rpm 500 kB/s | 1.4 MB 00:02 (5/5): vim-common-8.0.1763-15.el8.x86_64.rpm 599 kB/s | 6.3 MB 00:10 总计 672 kB/s | 7.8 MB 00:11 警告:/var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm:标头 V3 RSA/SHA256 签名,密钥 ID 8483c65d:NOKEY CentOS Linux 8 - AppStream 107 kB/s | 1.6 KB 00:0 导入 GPG 密钥 0x8483C65D: Userid : "CentOS (CentOS 官方签名密钥) [email protected]" 指纹:99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D 来自:/etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial 密钥导入成功 运行事务检查 事务检查成功。 运行事务测试 事务测试成功。 运行事务 准备:1/1 安装:which-2.21-12.el8.x86_64 1/5 安装:vim-filesystem-2:8.0.1763-15.el8.noarch 2/5 安装:vim-common-2:8.0.1763-15.el8.x86_64 3/5 安装:gpm-libs-1.20.7-15.el8.x86_64 4/5 运行小脚本:gpm-libs-1.20.7-15.el8.x86_64 4/5 安装:vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5 运行 scriptlet:vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5 运行小脚本:vim-common-2:8.0.1763-15.el8.x86_64 5/5 验证:gpm-libs-1.20.7-15.el8.x86_64 1/5 验证:vim-common-2:8.0.1763-15.el8.x86_64 2/5 验证:vim-enhanced-2:8.0.1763-15.el8.x86_64 3/5 验证:vim-filesystem-2:8.0.1763-15.el8.noarch 4/5 验证:which-2.21-12.el8.x86_64 5/5 安装: gpm-libs-1.20.7-15.el8.x86_64 vim-common-2:8.0.1763-15.el8.x86_64 vim-enhanced-2:8.0.1763-15.el8.x86_64 vim-filesystem-2:8.0.1763-15.el8.noarch 其中-2.21-12.el8.x86_64 完成! 卸下中间容器 7984f5e786a8 ---> 5 主题 4 a 1698 步骤 7/15:ENV MYPATH /usr/local ---> 在 1c27b1556650 中运行 卸下中间容器 1c27b1556650 ---> Bfahhtas 461 BAH 步骤 8/15:WORKDIR $MYPATH ---> 在 ea7b376828ee 中运行 移除中间容器 ea7b376828ee ---> 829 J13 B0 启动 步骤 9/15:ENV JAVA_HOME /usr/local/jdk1.8.0_221 ---> 在 e870347689db 中运行 删除中间容器 e870347689db ---> 遇到一个石板 步骤 10/15:ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ---> 运行在 35be0d0d1e87 移除中间容器 35be0d0d1e87 ---> 2 几个颠簸 457 步骤 11/15:ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.45 ---> 运行在 6268510dbb10 卸下中间容器 6268510dbb10 ---> 步骤 12/15:ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.45 ---> 运行在 584842f44cb2 卸下中间容器 584842f44cb2 ---> 9352 B4 咬 00 步骤 13/15:环境路径 $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin ---> 在 3882c79944b1 中运行 卸下中间容器 3882c79944b1 ---> 2189 يض09A16 步骤 14/15:暴露 8080 ---> 在 2fdcc0bb062d 中运行 移除中间容器 2fdcc0bb062d ---> 性能 12 行 步骤 15/15:CMD /usr/local/apache-tomcat-9.0.45/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.45/logs/catalina.out ---> 在 b5253d274a87 中运行 移除中间容器 b5253d274a87 ---> 62c96b0fe815 成功搭建62c96b0fe815 成功标记 diytomcat:latest 4.运行图像# -d:后台操作 -p:暴露端口 -name:别名 -v:绑定路径 [root@localhost tomcat]# docker run -d -p 9090:8080 --name diytomcat -v /home/huangjialin/build/tomcat/test:/usr/local/apache-tomcat-9.0.45/webapps /test -v /home/huangjialin/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.45/logs diytomcat [root@localhost tomcat]# docker exec -it eefdce2320da80a2 /bin/bash [root@eefdce2320da 本地]# ls apache-tomcat-9.0.45 bin etc games include jdk1.8.0_221 lib lib64 libexec readme.txt sbin share src [root@eefdce2320da 本地]# pwd /usr/本地 [root@eefdce2320da 本地]# ls -l 总计 0 drwxr-xr-x。 1 根 45 Apr 13 11:40 apache-tomcat-9.0.45 drwxr-xr-x。 2 根根 6 Nov 3 15:22 bin drwxr-xr-x。 2 根 6 Nov 3 15:22 等 drwxr-xr-x。 2 根根 6 Nov 3 15:22 games drwxr-xr-x。 2 根 6 Nov 3 15:22 包括 drwxr-xr-x。 7 10 143 245 2019 年 7 月 4 日 jdk1.8.0_221 drwxr-xr-x。 2 根根 6 Nov 3 15:22 lib drwxr-xr-x。 3 根根 17 Dec 4 17:37 lib64 drwxr-xr-x。 2 根 11 月 3 日 6 日 15:22 libexec -rw-r--r--。 1 根根 0 Apr 13 11:24 readme.txt drwxr-xr-x。 2 根根 6 Nov 3 15:22 sbin drwxr-xr-x。 5 根根 49 Dec 4 17:37 分享 drwxr-xr-x。 2 根根 6 Nov 3 15:22 src [root@eefdce2320da local]# cd apache-tomcat-9.0.45/ [root@eefdce2320da apache-tomcat-9.0.45]# ls BUILDING.txt CONTRIBUTING.md 许可证通知 README.md RELEASE-NOTES RUNNING.txt bin conf lib 日志临时 webapps 工作 [root@eefdce2320da apache-tomcat-9.0.45]# ls -l 总计 128 -rw-r-----。 1 根根 18984 Mar 30 10:29 BUILDING.txt -rw-r-----。 1 根 5587 Mar 30 10:29 CONTRIBUTING.md -rw-r-----。 1 根 57092 Mar 30 10:29 许可证 -rw-r-----。 1 根 2333 Mar 30 10:29 通知 -rw-r-----。 1 根 3257 3 月 30 日 10:29 README.md -rw-r-----。 1 根 6898 Mar 30 10:29 发布说明 -rw-r-----。 1 根根 16507 Mar 30 10:29 RUNNING.txt drwxr-x---。 2根根4096 Mar 30 10:29 bin drwx-----。 1 根根 13 年 4 月 22 日 12:34 conf drwxr-x---。 2 根 4096 3 月 30 日 10:29 lib drwxr-xr-x。 2 根根 197 Apr 13 12:34 日志 drwxr-x---。 2 根 30 Mar 30 10:29 temp drwxr-x---。 1 根根 18 Apr 13 12:34 webapps drwxr-x---。 1 根 22 Apr 13 12:34 工作 # 另一个窗口 [root@localhost tomcat]# curl localhost:9090 Apache Tomcat/9.0.45 ... 5.访问测试[root@localhost tomcat]# docker exec -it 自定义容器id /bin/bash [root@localhost tomcat]# cul localhost:9090 (由于卷挂载,我们可以在本地编写项目并发布它!) [root@localhost tomcat]# ls apache-tomcat-9.0.45.tar.gz Dockerfile jdk-8u221-linux-x64.tar.gz readme.txt 测试 tomcatlogs [root@localhost tomcat]# cd 测试/ [root@localhost 测试]# 密码 /home/黄家林/build/tomcat/test [root@localhost 测试]# mkdir WEB-INF [root@localhost 测试]# ls 网络信息 [root@localhost 测试]# cd WEB-INF/ [root@localhost WEB-INF]# vim web.xml [root@localhost WEB-INF]# cd ../ [root@localhost test]# vim index.jsp 参考链接https://segmentfault.com/a/1190000011404088 web.xml 参考链接https://www.runoob.com/jsp/jsp-syntax.html 索引.jsp 黄家林-菜鸟教程(runoob.com) 世界你好! ! zwz 100170 zwz 100171 zwz 100169 发现:项目部署成功,可以直接访问! 我们接下来的开发步骤:我们需要掌握Dockerfile的编写!之后,我们使用docker镜像来发布运行! 发布自己的镜像 发布到 Docker Hub1\。地址https://hub.docker.com/ 2\。确保此帐户可以登录 3\。登录 ! swz 100176 swz 100177 swz 100175 ! swz 100179 swz 100180 swz 100178 [root@localhost tomcat]# docker login --help 用法:docker login [OPTIONS] [SERVER] 登录到 Docker 注册表。 如果未指定服务器,则默认由守护程序定义。 选项: -p, --password 字符串密码 --password-stdin 从标准输入中获取密码 -u, --username 字符串用户名 [root@localhost tomcat]# docker login -u 你的用户名 -p 你的密码 [root@localhost tomcat]# docker login -u yanghuihui520 密码: 警告!您的密码将不加密地存储在 /root/.docker/config.json 中。 配置凭据帮助程序以删除此警告。看 https://docs.docker.com/engine/reference/commandline/login/#credentials-store 登录成功 4\。提交推送图片 ! zwz 100185 zwz 100186 zwz 100184 #你会发现推送上不去,因为如果没有前缀,默认推送到官方库 解决方案: 在第一次构建中,添加你的dockerhub用户名,然后推送到你的仓库[root@localhost tomcat]# docker build -t kuangshen/mytomcat:0.1 。 #第二次使用docker tag #然后再次push [root@localhost tomcat]# docker tag container id kuangshen/mytomcat:1.0 #然后再推 [root@localhost tomcat]# docker push kuangshen/mytomcat:1.0 需要对应账户名的正确解法 [root@localhost tomcat]# docker tag 62c96b0fe815 yanghuihui520/tomcat:1.0 [root@localhost tomcat]# docker 镜像 存储库标签图像 ID 创建大小 huangjialin/tomcat 1.0 62c96b0fe815 3小时前 690MB 。 . . [root@localhost tomcat]# docker push yanghuihui520/tomcat:1.0 推送是指仓库[docker.io/yanghuihui520/tomcat] a7b8bb209ca2: 推[u003du003du003du003du003du003du003du003du003du003d> ] 12.47MB/58.05MB 5ba6c0e6c8ff: 推[u003du003du003du003du003du003du003du003du003du003d> ] 3.186MB/15.9MB b3f3595d4705:推[>] 3.277MB/406.7MB 50c4c2648dca: 层已经存在 2653d992f4ef: 推[u003d> ] 7.676MB/209.3MB ! swz 100188 swz 100189 swz 100187 发布镜像到阿里云服务官网很详细https://cr.console.aliyun.com/repository/ $ sudo docker login --usernameu003dzchengx registry.cn-shenzhen.aliyuncs.com $ sudo docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/dsadxzc/cheng:[镜像版本号] 修改id和版本sudo docker tag a5ef1f32aaae registry.cn-shenzhen.aliyuncs.com/dsadxzc/cheng:1.0 修改版$ sudo docker push registry.cn-shenzhen.aliyuncs.com/dsadxzc/cheng:[镜像版本号] 总结学习前清除docker镜像和容器 # 删除所有容器 $ docker rm -f $(docker ps -aq) 删除所有镜像$ docker rmi -f $(docker images -aq) 测试 [root@localhost tomcat]# ip 地址 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 链接/环回 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 范围主机 lo 有效_lft 永远首选_lft 永远 inet6 ::1/128 范围主机 有效_lft 永远首选_lft 永远 2: ens33: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 链接/以太 00:0c:29:1a:80:de brd ff:ff:ff:ff:ff:ff inet 192.168.254.133/24 brd 192.168.254.255 范围全局 noprefixroute 动态 ens33 有效_lft 1365sec 首选_lft 1365sec inet6 fe80::78ba:483e:9794:f6c2/64 范围链接 noprefixroute 有效_lft 永远首选_lft 永远 3: virbr0: mtu 1500 qdisc noqueue state DOWN group default qlen 1000 链接/以太 52:54:00:a2:05:5a brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 范围全局 virbr0 有效_lft 永远首选_lft 永远 4: virbr0-nic: mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000 链接/以太 52:54:00:a2:05:5a brd ff:ff:ff:ff:ff:ff 5: docker0: mtu 1500 qdisc noqueue state DOWN group default 链接/以太 02:42:2a:09:31:67 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 范围全局 docker0 有效_lft 永远首选_lft 永远 inet6 fe80::42:2aff:fe09:3167/64 范围链接 有效_lft 永远首选_lft 永远 三网问题:docker如何处理容器网络访问? # 测试运行一个tomcat [root@localhost tomcat]# docker run -d -P --name tomcat01 tomcat 查看容器内网地址[root@localhost tomcat]# docker exec -it container id ip add 找到容器启动后,会得到一个eth0@if91 ip地址,docker分配![root@localhost tomcat]# docker exec -it tomcat01 ip addr 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 链接/环回 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 范围主机 lo 有效_lft 永远首选_lft 永远 36: eth0@if37: mtu 1500 qdisc noqueue state UP group default 链接/以太 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff 链接-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 范围全局 eth0 有效_lft 永远首选_lft 永远 反射? linux可以ping通容器吗!我可以 ping 容器内部到外部吗?当然![root@localhost tomcat]# ping 172.17.0.2 PING 172.17.0.2 (172.17.0.2) 56(84) 字节数据。 来自 172.17.0.2 的 64 个字节:icmp_sequ003d1 ttlu003d64 timeu003d19.5 ms 来自 172.17.0.2 的 64 个字节:icmp_sequ003d2 ttlu003d64 timeu003d0.105 ms 来自 172.17.0.2 的 64 个字节:icmp_sequ003d3 ttlu003d64 timeu003d0.051 ms 来自 172.17.0.2 的 64 个字节:icmp_sequ003d4 ttlu003d64 timeu003d0.071 ms 来自 172.17.0.2 的 64 个字节:icmp_sequ003d5 ttlu003d64 timeu003d0.124 ms 来自 172.17.0.2 的 64 个字节:icmp_sequ003d6 ttlu003d64 timeu003d0.052 ms 。 . . 原理1\。每次我们启动一个docker容器,docker都会给docker容器分配一个ip。只要我们跟着docker,就会有docker0桥接模式,使用Veth pair技术! https://translate.google.com/translate?hl=en&sl=auto&tl=zh&u=https://www.cnblogs.com/bakari/p/10613710.html 再次测试ip地址 # 多一张网卡 [root@localhost tomcat]# ip 地址 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 链接/环回 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 范围主机 lo 有效_lft 永远首选_lft 永远 inet6 ::1/128 范围主机 有效_lft 永远首选_lft 永远 2: ens33: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 链接/以太 00:0c:29:1a:80:de brd ff:ff:ff:ff:ff:ff inet 192.168.254.133/24 brd 192.168.254.255 范围全局 noprefixroute 动态 ens33 有效_lft 1499 秒首选_lft 1499 秒 inet6 fe80::78ba:483e:9794:f6c2/64 范围链接 noprefixroute 有效_lft 永远首选_lft 永远 3: virbr0: mtu 1500 qdisc noqueue state DOWN group default qlen 1000 链接/以太 52:54:00:a2:05:5a brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 范围全局 virbr0 有效_lft 永远首选_lft 永远 4: virbr0-nic: mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000 链接/以太 52:54:00:a2:05:5a brd ff:ff:ff:ff:ff:ff 5: docker0: mtu 1500 qdisc noqueue state UP group default 链接/以太 02:42:2a:09:31:67 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 范围全局 docker0 有效_lft 永远首选_lft 永远 inet6 fe80::42:2aff:fe09:3167/64 范围链接 有效_lft 永远首选_lft 永远 37: veth8f89171@if36: mtu 1500 qdisc noqueue master docker0 state UP group default 链接/以太 f2:72:f8:7d:6e:7b brd ff:ff:ff:ff:ff:ff 链接-netnsid 0 inet6 fe80::f072:f8ff:fe7d:6e7b/64 范围链接 有效_lft 永远首选_lft 永远 2\。开始另一个容器测试并找到另一对网络 [root@localhost tomcat]# docker run -d -P --name tomcat02 tomcat 78,1895, 439, 489, 489, 1316, 0, 47, 4, 14, 656 [root@localhost tomcat]# ip 地址 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 链接/环回 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 范围主机 lo 有效_lft 永远首选_lft 永远 inet6 ::1/128 范围主机 有效_lft 永远首选_lft 永远 2: ens33: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 链接/以太 00:0c:29:1a:80:de brd ff:ff:ff:ff:ff:ff inet 192.168.254.133/24 brd 192.168.254.255 范围全局 noprefixroute 动态 ens33 有效_lft 1299sec 首选_lft 1299sec inet6 fe80::78ba:483e:9794:f6c2/64 范围链接 noprefixroute 有效_lft 永远首选_lft 永远 3: virbr0: mtu 1500 qdisc noqueue state DOWN group default qlen 1000 链接/以太 52:54:00:a2:05:5a brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 范围全局 virbr0 有效_lft 永远首选_lft 永远 4: virbr0-nic: mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000 链接/以太 52:54:00:a2:05:5a brd ff:ff:ff:ff:ff:ff 5: docker0: mtu 1500 qdisc noqueue state UP group default 链接/以太 02:42:2a:09:31:67 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 范围全局 docker0 有效_lft 永远首选_lft 永远 inet6 fe80::42:2aff:fe09:3167/64 范围链接 有效_lft 永远首选_lft 永远 37: veth8f89171@if36: mtu 1500 qdisc noqueue master docker0 state UP group default 链接/以太 f2:72:f8:7d:6e:7b brd ff:ff:ff:ff:ff:ff 链接-netnsid 0 inet6 fe80::f072:f8ff:fe7d:6e7b/64 范围链接 有效_lft 永远首选_lft 永远 39: veth701a9f4@if38: mtu 1500 qdisc noqueue master docker0 state UP group default 链接/以太 0a:c9:02:a1:57:a9 brd ff:ff:ff:ff:ff:ff 链接-netnsid 1 inet6 fe80::8c9:2ff:fea1:57a9/64 范围链接 有效_lft 永远首选_lft 永远 #查看tomcat02容器地址 [root@localhost tomcat]# docker exec -it tomcat02 ip addr 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 链接/环回 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 范围主机 lo 有效_lft 永远首选_lft 永远 38: eth0@if39: mtu 1500 qdisc noqueue state UP group default 链接/以太 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff 链接-netnsid 0 inet 172.17.0.3/16 brd 172.17.255.255 范围全局 eth0 有效_lft 永远首选_lft 永远 #我们发现这个容器带来的网卡是一对 Veth pair 是一对虚拟设备接口。它们都成对出现。一端连接协议,另一端相互连接 因为这个特性,Veth pair 充当了连接各种虚拟网络设备的桥梁 OpenStac、Docker 容器和 OVS 之间的连接都使用了 Veth pair 技术3\。我们来测试一下tomcat01和tomcat02是否能ping通 # 获取tomcat01的ip 172.17.0.2 [root@localhost tomcat]# docker exec -it tomcat01 ip addr 550: eth0@if551: mtu 1500 qdisc noqueue state UP group default 链接/以太 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff 链接-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 范围全局 eth0 有效_lft 永远首选_lft 永远 让 tomcat02 ping tomcat01[root@localhost tomcat]# docker exec -it tomcat02 ping 172.17.0.2 PING 172.17.0.2 (172.17.0.2) 56(84) 字节数据。 来自 172.17.0.2 的 64 个字节:icmp_sequ003d1 ttlu003d64 timeu003d9.07 ms 来自 172.17.0.2 的 64 个字节:icmp_sequ003d2 ttlu003d64 timeu003d0.145 ms 来自 172.17.0.2 的 64 个字节:icmp_sequ003d3 ttlu003d64 timeu003d0.153 ms 来自 172.17.0.2 的 64 个字节:icmp_sequ003d4 ttlu003d64 timeu003d0.104 ms 结论:容器和容器可以互相ping通 网络模型图结论:tomcat01和tomcat02共用一个路由器docker0。 当所有容器不指定网络时,由docker0路由。 Docker 将为我们的容器分配一个默认的可用 ip。 总结Docker使用Linux的网桥,宿主机是一个docker容器网桥docker0 Docker中所有网络接口都是虚拟的,虚拟转发效率高(通过内网传输文件) 只要删除容器,对应的桥对就没有了! 想一个场景:我们写一个微服务,数据库urlu003dip:项目没有重启,数据ip变了。我们希望处理这个问题并通过名称访问容器? [root@localhost tomcat]# docker exec -it tomcat02 ping tomca01 # ping 失败 ping: tomca01: 名称或服务未知 运行一个 tomcat03 --link tomcat02[root@localhost tomcat]# docker run -d -P --name tomcat03 --link tomcat02 tomcat docker run -d -P --name tomcat01 --net bridge tomcat docker0, features: 默认无法访问域名--link 可以打通连接,但是很麻烦! 我们可以自定义一个网络[root@localhost tomcat]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet >>>>>>>>>>>>>>>>>>>>>u003d> [root@localhost tomcat]# docker network ls 网络 ID 名称 驱动范围 4b16ee2d6925 桥桥本地 edd07789e82 主机主机本地 嗡嗡声 48629cdb554a 无 null 本地 创建自己的网络 [root@localhost tomcat]# docker network inspect mynet [ { “名称”:“我的网”, “因为”:“9 s.a.s. “创建”:“2021-04-13T22:11:59.671350133-07:00”, “范围”:“本地”, “司机”:“桥”, “启用 IPv6”:假, “IPAM”:{ “驱动程序”:“默认”, “选项”:{}, “配置”:\ [ { “子网”:“192.168.0.0/16”, “网关”:“192.168.0.1” } ] }, “内部”:假, “可附加”:假, “入口”:假, “配置来源”:{ “网络”:“” }, “仅配置”:假, “容器”:{}, “选项”:{}, “标签”:{} } ] 启动两个tomcat,再次检查网络 [root@localhost tomcat]# docker run -d -P --name tomcat-net-01 --net mynet tomcat 5天 [root@localhost tomcat]# docker run -d -P --name tomcat-net-02 --net mynet tomcat 编辑 再次检查您的网络 [root@localhost tomcat]# docker network inspect mynet [ { “名称”:“我的网”, “因为”:“9 s.a.s. “创建”:“2021-04-13T22:11:59.671350133-07:00”, “范围”:“本地”, “司机”:“桥”, “启用 IPv6”:假, “IPAM”:{ “驱动程序”:“默认”, “选项”:{}, “配置”:\ [ { “子网”:“192.168.0.0/16”, “网关”:“192.168.0.1” } ] }, “内部”:假, “可附加”:假, “入口”:假, “配置来源”:{ “网络”:“” }, “仅配置”:假, “容器”:{ “5d0fdad2b907b147c75a10420c172c43f87896db0b82bf9d4b34c889ea43647d”:{ "名称": "tomcat-net-01", “端点ID”:“0cde983fd3f3d3fee2630379d0f149c6e9bd851bd1623f64d08a441e3372606e”, "MacAddress": "02:42:c0:a8:00:02", "IPv4 地址": "192.168.0.2/16", "IPv6 地址": "" }, “ac6b288e62f1a8cc764bbdc312b3811936b34fd465a70974d24b67fab7a11566”:{ "名称": "tomcat-net-02", “端点 ID”:“6119e2fb7bf569b8790af0158710d0bd4db9a2ec4fe63c927c2e28d06c5a4b3c”, "MacAddress": "02:42:c0:a8:00:03", "IPv4地址": "192.168.0.3/16", "IPv6 地址": "" } }, “选项”:{}, “标签”:{} } ] 再次测试 ping 链接 [root@localhost tomcat]# docker exec -it tomcat-net-01 ping 192.168.0.3 PING 192.168.0.3 (192.168.0.3) 56(84) 字节数据。 来自 192.168.0.3 的 64 个字节:icmp_sequ003d1 ttlu003d64 timeu003d0.177 ms 来自 192.168.0.3 的 64 个字节:icmp_sequ003d2 ttlu003d64 timeu003d0.071 ms 来自 192.168.0.3 的 64 个字节:icmp_sequ003d3 ttlu003d64 timeu003d0.084 ms 来自 192.168.0.3 的 64 个字节:icmp_sequ003d4 ttlu003d64 timeu003d0.080 ms 来自 192.168.0.3 的 64 个字节:icmp_sequ003d5 ttlu003d64 timeu003d0.089 ms ^C --- 192.168.0.3 ping 统计 --- 发送 5 个数据包,接收 5 个数据包,0% 数据包丢失,时间 20ms rtt 最小值/平均值/最大值/mdev u003d 0.071/0.100/0.177/0.039 毫秒 [root@localhost tomcat]# docker exec -it tomcat-net-01 ping tomcat-net-02 PING tomcat-net-02 (192.168.0.3) 56(84) 字节数据。 来自 tomcat-net-02.mynet (192.168.0.3) 的 64 个字节:icmp_sequ003d1 ttlu003d64 timeu003d0.235 ms 来自 tomcat-net-02.mynet (192.168.0.3) 的 64 个字节:icmp_sequ003d2 ttlu003d64 timeu003d0.117 ms 来自 tomcat-net-02.mynet (192.168.0.3) 的 64 个字节:icmp_sequ003d3 ttlu003d64 timeu003d0.066 ms 来自 tomcat-net-02.mynet (192.168.0.3) 的 64 个字节:icmp_sequ003d4 ttlu003d64 timeu003d0.111 ms ^C --- tomcat-net-02 ping 统计 --- 4 个数据包传输,4 个数据包接收,0% 丢包,时间 5ms rtt 最小值/平均值/最大值/mdev u003d 0.066/0.132/0.235/0.063 毫秒 我们自定义网络 docker。我们在维护对应关系的时候,建议大家这样使用网络! 优点:redis - 不同的集群使用不同的网络,保证集群安全健康 mysql——不同的集群使用不同的网络,保证集群安全健康 [root@localhost tomcat]# docker ps 容器 ID 图像命令创建状态端口名称 ac6b288e62f1 tomcat "catalina.sh run" 16 分钟前 Up 16 分钟 0.0.0.0:49156->8080/tcp tomcat-net-02 5d0fdad2b907 tomcat "catalina.sh run" 16 分钟前 Up 16 分钟 0.0.0.0:49155->8080/tcp tomcat-net-01 2f3a758730ba tomcat "catalina.sh run" 大约一小时前 Up 大约一小时 0.0.0.0:49154->8080/tcp tomcat03 781895f439c2 tomcat "catalina.sh run" 大约一小时前 Up 大约一小时 0.0.0.0:49153->8080/tcp tomcat02 4b0e289d67e1 tomcat "catalina.sh run" 2 天前 Up 2 hours 0.0.0.0:3355->8080/tcp tomcat01 [root@localhost tomcat]# docker network --help 用法:docker network 命令 管理网络 命令: connect 将容器连接到网络 创建 创建网络 disconnect 断开容器与网络的连接 检查显示一个或多个网络的详细信息 ls 列出网络 prune 删除所有未使用的网络 rm 删除一个或多个网络 运行“docker network COMMAND --help”以获取有关命令的更多信息。 [root@localhost tomcat]# docker network connect --help 用法:docker network connect [OPTIONS] NETWORK CONTAINER 将容器连接到网络 选项: --alias strings 为容器添加网络范围的别名 --driver-opt 字符串网络的驱动程序选项 --ip 字符串 IPv4 地址(例如,172.30.100.104) --ip6 字符串 IPv6 地址(例如,2001:db8::33) --link list 添加到另一个容器的链接 --link-local-ip strings 为容器添加链接本地地址 测试打通tomcat01和mynet[root@localhost tomcat]# docker network connect mynet tomcat01 [root@localhost tomcat]# docker network inspect mynet [ { “名称”:“我的网”, “因为”:“9 s.a.s. “创建”:“2021-04-13T22:11:59.671350133-07:00”, “范围”:“本地”, “司机”:“桥”, “启用 IPv6”:假, “IPAM”:{ “驱动程序”:“默认”, “选项”:{}, “配置”:\ [ { “子网”:“192.168.0.0/16”, “网关”:“192.168.0.1” } ] }, “内部”:假, “可附加”:假, “入口”:假, “配置来源”:{ “网络”:“” }, “仅配置”:假, “容器”:{ “4b0e289d67e1837e9d0b0ee5d0c021cd5ec0c857883773bab5be9591979fd316”:{ "名称": "tomcat01", “端点ID”:“c5dc34f5cb12ce267461147c41a358c286c5ad231fe4557d7bd4c4276779e4be”, "MacAddress": "02:42:c0:a8:00:04", "IPv4 地址": "192.168.0.4/16", "IPv6 地址": "" }, “5d0fdad2b907b147c75a10420c172c43f87896db0b82bf9d4b34c889ea43647d”:{ "名称": "tomcat-net-01", “端点ID”:“0cde983fd3f3d3fee2630379d0f149c6e9bd851bd1623f64d08a441e3372606e”, "MacAddress": "02:42:c0:a8:00:02", "IPv4 地址": "192.168.0.2/16", "IPv6 地址": "" }, “ac6b288e62f1a8cc764bbdc312b3811936b34fd465a70974d24b67fab7a11566”:{ "名称": "tomcat-net-02", “端点 ID”:“6119e2fb7bf569b8790af0158710d0bd4db9a2ec4fe63c927c2e28d06c5a4b3c”, "MacAddress": "02:42:c0:a8:00:03", "IPv4地址": "192.168.0.3/16", "IPv6 地址": "" } }, “选项”:{}, “标签”:{} } ] 连接后,将tomcat01放到mynet下 一个容器两个ip地址 测试成功 [root@localhost tomcat]# docker exec -it tomcat01 ping tomcat-net-01 PING tomcat-net-01 (192.168.0.2) 56(84) 字节数据。 来自 tomcat-net-01.mynet (192.168.0.2) 的 64 个字节:icmp_sequ003d1 ttlu003d64 timeu003d0.368 ms 来自 tomcat-net-01.mynet (192.168.0.2) 的 64 个字节:icmp_sequ003d2 ttlu003d64 timeu003d0.261 ms 来自 tomcat-net-01.mynet (192.168.0.2) 的 64 字节:icmp_sequ003d3 ttlu003d64 timeu003d0.097 ms 来自 tomcat-net-01.mynet (192.168.0.2) 的 64 个字节:icmp_sequ003d4 ttlu003d64 timeu003d0.070 ms tomcat01已经打开,tomcat02没有打开 结论:如果要跨网络操作别人,需要使用docker network connect来连接! 实战:部署Redis集群首先停止所有容器 [root@localhost tomcat]# docker ps 容器 ID 图像命令创建状态端口名称 ac6b288e62f1 tomcat "catalina.sh run" 2 小时前 Up 2 hours 0.0.0.0:49156->8080/tcp tomcat-net-02 5d0fdad2b907 tomcat "catalina.sh run" 2 小时前 Up 2 hours 0.0.0.0:49155->8080/tcp tomcat-net-01 2f3a758730ba tomcat "catalina.sh run" 3 小时前 Up 3 hours 0.0.0.0:49154->8080/tcp tomcat03 781895f439c2 tomcat "catalina.sh run" 3 小时前 Up 3 hours 0.0.0.0:49153->8080/tcp tomcat02 4b0e289d67e1 tomcat "catalina.sh run" 2 天前 Up 3 hours 0.0.0.0:3355->8080/tcp tomcat01 [root@localhost tomcat]# docker rm -f $(docker ps -aq) ac6b288e62f1 5 分钟 赎金 07 2 781895F439B cc4db8053534 4 位 084 我觉得 0 打嗝 468db5f02628 8 a02 在热点 465,894 4 银 8哦2660858多擦 FBDSA180,286 0 330 个陷阱 5b1e64d8bbc0 7589b4 dssa1 efbb2086dd82 9 d 019832 成员 57700 调整 4 04 小时 127 d 159 46 SPH 3 000 BDD 0 4b0e289d67e1 FV 130 AH 42 天 872 写 024 1682649bdcf0 497 反驳 43 x 19,736 英尺 56 F47 [root@localhost tomcat]# docker 镜像 存储库标签图像 ID 创建大小 yanghuihui520/tomcat 1.0 62c96b0fe815 19 小时前 690MB huangjialin/tomcat 1.0 62c96b0fe815 19小时前 690MB diytomcat 最新 62c96b0fe815 19 小时前 690MB cmd-test 0.1 0e927777d383 22 小时前 209MB mysentos 0.1 2315251fefdd 23 小时前 291MB 黄加临/CentOS 1.0 74发0哦59从6大4 40 hours ago 209MB tomcat02.1.0 最新 f5946bde7e99 45 小时前 672MB tomcat 8 926c7fd4777e 3 天前 533MB tomcat最新bd431ca8553c 3天前667MB nginx 最新 519e12e2a84a 3 天前 133MB mysql 5.7 450379344707 4 天前 449MB portainer/portainer 最新 580c0e4e98b0 3 周前 79.1MB hello-world 最新 d1165f221234 5 周前 13.3kB centos 最新 300e315adb2f 4 个月前 209MB elasticsearch 7.6.2 f29a1ee41030 12 个月前 791MB [root@localhost tomcat]# docker ps 容器 ID 图像命令创建状态端口名称 设置和查看redis集群网卡docker 网络创建 redis --subnet 172.38.0.0/16 码头工人网络 ls 码头工人网络检查 redis redis节点创建与设置用于 $(seq 1 6) 中的端口; 做 mkdir -p /mydata/redis/node-${port}/conf 触摸 /mydata/redis/node-${port}/conf/redis.conf cat /mydata/redis/node-${port}/conf/redis.conf 端口 6379 绑定 0.0.0.0 启用集群是 集群配置文件 nodes.conf 集群节点超时 5000 集群公告-ip 172.38.0.1${port} 集群公告端口 6379 集群公告总线端口 16379 仅附加是 EOF 完成 拉取redis镜像并启动redis节点# 通过脚本运行六个redis 用于 $(seq 1 6) 中的端口;\ 搬运工运行 -p 637${port}:6379 -p 1667${port}:16379 --name redis-${port}\ -v /mydata/redis/node-${port}/data:/data \ -v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf docker exec -it redis-1 /bin/sh #redis 默认没有bash redis-cli --cluster 创建 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1 //模板 搬运工运行 -p 637${port}:6379 -p 1667${port}:16379 --name redis-${port}\ -v /mydata/redis/node-${port}/data:/data \ -v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf //节点1 码头运行 -p 6371:6379 -p 16371:16379 --name redis-1 \ -v /mydata/redis/node-1/data:/data \ -v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf //节点2 码头运行 -p 6372:6379 -p 16372:16379 --name redis-2 \ -v /mydata/redis/node-2/data:/data \ -v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf //节点 3 码头运行 -p 6373:6379 -p 16373:16379 --name redis-3 \ -v /mydata/redis/node-3/data:/data \ -v /mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf //节点 4 搬运工运行 -p 6374:6379 -p 16374:16379 --name redis-4 \ -v /mydata/redis/node-4data:/数据\ -v /mydata/redis/node-4/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.14 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf //节点 5 码头运行 -p 6375:6379 -p 16375:16379 --name redis-5 \ -v /mydata/redis/node-5/data:/data \ -v /mydata/redis/node-5/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.15 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf //节点 6 搬运工运行 -p 6376:6379 -p 16376:16379 --name redis-6 \ -v /mydata/redis/node-6/data:/data \ -v /mydata/redis/node-6/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.16 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf 交互方式进入redis节点docker exec -it redis-1 /bin/sh 创建redis集群redis-cli --cluster 创建 172.38.0.11:6379 172.38.0.12:6379 \ 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 \ 172.38.0.16:6379 --cluster-replicas 1 成功操作界面如下:(主从复制)集群创建成功/data # redis-cli --cluster 创建 172.38.0.11:6379 172.38.0.12:6379 \ 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 \ 172.38.0.16:6379 --cluster-replicas 1 在 6 个节点上执行哈希槽分配... 主[0] -> 插槽 0 - 5460 主[1] -> 插槽 5461 - 10922 主[2] -> 插槽 10923 - 16383 将副本 172.38.0.15:6379 添加到 172.38.0.11:6379 将副本 172.38.0.16:6379 添加到 172.38.0.12:6379 将副本 172.38.0.14:6379 添加到 172.38.0.13:6379 男:af21836f327964924ddfd99eadd0f86c4be2b998 172.38.0.11:6379 插槽:[0-5460](5461 个插槽)主控 M: b0cf655ea86ff16e2c6f9a82f3d9f1a3d7dc7c62 172.38.0.12:6379 插槽:[5461-10922](5462 个插槽)主控 M: c040bae27420e3fe503d79cad47816123462262a 172.38.0.13:6379 插槽:[10923-16383](5461 个插槽)主控 p:24bf6f3296119d93f82232555784bbdb1a72697e 172.bit.0.14:6379 复制 c040bae27420e3fe503d79cad47816123462262a S: 20a534198c68dd48b5a533b0ee4b1d447cc6b1f6 172.38.0.15:6379 复制 af21836f327964924ddfd99eadd0f86c4be2b998 p:65d83f48f4884e26dc986a60cc03aa33e22dd48a 172.bite.0.16:6379 复制 b0cf655ea86ff16e2c6f9a82f3d9f1a3d7dc7c62 可以设置上面的配置吗? (输入“是”接受):是 节点配置更新 为每个节点分配不同的 config epoch 发送 CLUSTER MEET 消息加入集群 等待集群加入 ... 执行集群检查(使用节点 172.38.0.11:6379) 男:af21836f327964924ddfd99eadd0f86c4be2b998 172.38.0.11:6379 插槽:[0-5460](5461 个插槽)主控 1 个额外的副本 S: 20a534198c68dd48b5a533b0ee4b1d447cc6b1f6 172.38.0.15:6379 插槽:(0 个插槽)从属 复制 af21836f327964924ddfd99eadd0f86c4be2b998 p:65d83f48f4884e26dc986a60cc03aa33e22dd48a 172.bite.0.16:6379 插槽:(0 个插槽)从属 复制 b0cf655ea86ff16e2c6f9a82f3d9f1a3d7dc7c62 p:24bf6f3296119d93f82232555784bbdb1a72697e 172.bit.0.14:6379 插槽:(0 个插槽)从属 复制 c040bae27420e3fe503d79cad47816123462262a M: b0cf655ea86ff16e2c6f9a82f3d9f1a3d7dc7c62 172.38.0.12:6379 插槽:[5461-10922](5462 个插槽)主控 1 个额外的副本 M: c040bae27420e3fe503d79cad47816123462262a 172.38.0.13:6379 插槽:[10923-16383](5461 个插槽)主控 1 个额外的副本 [OK] 所有节点都同意插槽配置。 检查开放的插槽... 检查插槽覆盖率... [OK] 覆盖所有 16384 个插槽。 集群创建成功后,可以进一步查看集群配置并进行测试/data #redis cli -c // -c 表示集群 127.0.0.1:6379> cluster info //集群配置 集群_状态:好的 集群_slots_assigned:16384 集群_slots_ok:16384 集群_slots_pfail:0 集群_slots_fail:0 集群_已知_节点:6 集群_size:3 集群_current_epoch:6 集群_my_epoch:1 集群_stats_messages_ping_sent:613 集群_stats_messages_pong_sent:614 集群_stats_messages_sent:1227 集群_stats_messages_ping_received:609 集群_stats_messages_pong_received:613 集群_stats_messages_meet_received:5 集群_stats_messages_received:1227 127.0.0.1:6379> cluster nodes //集群节点信息 887c5ded66d075b6d29602f89a6adc7d1471d22c 172.38.0.11:6379@16379 我自己,主人 - 0 1598439359000 1 已连接 0-5460 e6b5521d86abc96fe2e51e40be8fbb1f23da9fe7 172.38.0.15:6379@16379 从机 887c5ded66d075b6d29602f89a6adc7d1471d22c 0 1598439359580 5 已连接 d75a9db032f13d9484909b2d0d4724f44e3f1c23 172.38.0.14:6379@16379 从属 db3caa7ba307a27a8ef30bf0b26ba91bfb89e932 0 1598439358578 4 已连接 b6add5e06fd958045f90f29bcbbf219753798ef6 172.38.0.16:6379@16379 从机 7684dfd02929085817de59f334d241e6cbcd1e99 0 1598439358578 6 已连接 7684dfd02929085817de59f334d241e6cbcd1e99 172.38.0.12:6379@16379 主 - 0 1598439360082 2 已连接 5461-10922 db3caa7ba307a27a8ef30bf0b26ba91bfb89e932 172.38.0.13:6379@16379 主 - 0 1598439359079 3 已连接 10923-16383 redis集群高可用简单测试127.0.0.1:6379> set msg "I Love YHH" //设置值 -> 重定向到位于 172.38.0.12:6379 的插槽 [6257] 好的 172.38.0.12:6379> 获取消息 //值 “我爱YHH” //新窗口 //使用docker stop模拟redis主机存储msg值的宕机时间 [root@localhost /]# docker ps 容器 ID 图像命令创建状态端口名称 430f29b7fdd2 redis:5.0.9-alpine3.11 "docker-entrypoint.s..." 12 分钟前 Up 12 分钟 0.0.0.0:6376->6379/tcp, 0.0.0.0:16376->16379/tcp redis- 6 343b4d098652 redis:5.0.9-alpine3.11 "docker-entrypoint.s..." 12 分钟前 Up 12 分钟 0.0.0.0:6375->6379/tcp, 0.0.0.0:16375->16379/tcp redis- 5 f2ce7d2db9ba redis:5.0.9-alpine3.11 "docker-entrypoint.s..." 12 分钟前 Up 12 分钟 0.0.0.0:6374->6379/tcp, 0.0.0.0:16374->16379/tcp redis- 4 7411b8f6c7d5 redis:5.0.9-alpine3.11 "docker-entrypoint.s..." 12 分钟前 Up 12 分钟 0.0.0.0:6373->6379/tcp, 0.0.0.0:16373->16379/tcp redis- 3 b7a12d144758 redis:5.0.9-alpine3.11 "docker-entrypoint.s..." 12 分钟前 Up 12 分钟 0.0.0.0:6372->6379/tcp, 0.0.0.0:16372->16379/tcp redis- 2 d7ce020b171e redis:5.0.9-alpine3.11 "docker-entrypoint.s..." 13 分钟前 Up 13 分钟 0.0.0.0:6371->6379/tcp, 0.0.0.0:16371->16379/tcp redis- 1 [root@localhost /]# docker stop redis-2 redis-2 //从集群接口获取消息并重试 172.38.0.12:6379> 获取消息 无法在 172.38.0.12:6379 连接到 Redis:主机无法访问 (7.10s) 未连接 > 退出 /数据#退出 [root@localhost conf]# docker exec -it redis-1 /bin/sh /data # redis-cli -c 127.0.0.1:6379> get msg //此时备机返回msg -> 重定向到位于 172.38.0.16:6379 的插槽 [6257] “我爱YHH” 节点信息172.38.0.16:6379> 集群节点 c040bae27420e3fe503d79cad47816123462262a 172.38.0.13:6379@16379 主 - 0 1618385704146 3 已连接 10923-16383 b0cf655ea86ff16e2c6f9a82f3d9f1a3d7dc7c62 172.38.0.12:6379@16379 主,失败 - 1618385356051 1618385354000 2 个已连接 20a534198c68dd48b5a533b0ee4b1d447cc6b1f6 172.38.0.15:6379@16379 从机 af21836f327964924ddfd99eadd0f86c4be2b998 0 1618385703038 5 已连接 24bf6f3296119d93f82232555784bbdb1a72697e 172.38.0.14:6379@16379 从机 c040bae27420e3fe503d79cad47816123462262a 0 1618385703139 4 已连接 65d83f48f4884e26dc986a60cc03aa33e22dd48a 172.38.0.16:6379@16379 我自己,主人 - 0 1618385702000 8 已连接 5461-10922 af21836f327964924ddfd99eadd0f86c4be2b998 172.38.0.11:6379@16379 主 - 0 1618385702000 1 已连接 0-5460 docker搭建redis集群! 我们使用docker之后,所有的技术都会逐渐变得简单! 实际操作[root@localhost tomcat]# docker network create redis --subnet 172.38.0.0/16 1607 年 8 月 [root@localhost tomcat]# docker network ls 网络 ID 名称 驱动范围 4b16ee2d6925 桥桥本地 edd07789e82 主机主机本地 嗡嗡声 48629cdb554a 无 null 本地 ab1607a9953d redis 桥本地 [root@localhost tomcat]# for port in $(seq 1 6);\ 做\ mkdir -p /mydata/redis/node-${port}/conf touch /mydata/redis/node-${port}/conf/redis.conf cat > /mydata/redis/node-${port}/conf/redis.conf 端口 6379 绑定 0.0.0.0 集群启用是 集群配置文件 nodes.conf 集群节点超时 5000 cluster-announce-ip 172.38.0.1${port} 集群公告端口 6379 集群公告总线端口 16379 仅附加是 EOF 完成 [root@localhost tomcat]# cd /mydata/ [root@localhost 我的数据]# ls 雷迪斯 [root@localhost mydata]# cd redis/ [root@localhost redis]# ls 节点 1 节点 2 节点 3 节点 4 节点 5 节点 6 [root@localhost redis]# cd node-1 [root@localhost node-1]# ls 会议 [root@localhost node-1]# cd conf/ [root@localhost 配置]# ls redis.conf [root@localhost conf]# cat redis.conf 端口 6379 绑定 0.0.0.0 启用集群是 集群配置文件 nodes.conf 集群节点超时 5000 集群公告-ip 172.38.0.11 集群公告端口 6379 集群公告总线端口 16379 仅附加是 [root@localhost conf]# docker run -p 6371:6379 -p 16371:16379 --name redis-1 \ -v /mydata/redis/node-1/data:/data \ -v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf 无法在本地找到图像“redis:5.0.9-alpine3.11” 5.0.9-alpine3.11:从库/redis 中拉取 cbdbe7a5bc2a:拉取完成 dc0373118a0d:拉动完成 cfd369fe6256:拉取完成 3e45770272d9:拉取完成 558de8ea3153:拉取完成 a2c652551612:拉取完成 Daghsa:破碎:83 状态:为 redis 下载了更新的镜像:5.0.9-alpine3.11 Dhsi 020b 171 sqh 48948 h 14871 dds [root@localhost conf]# docker run -p 6372:6379 -p 16372:16379 --name redis-2 \ -v /mydata/redis/node-2/data:/data \ -v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf 巴哈 12 D 144758968 D 124 Dhs 42 BASET 1264 F 428 Fahd Dhs 42 D 48273737 D 1 D 4 Bd [root@localhost conf]# docker run -p 6373:6379 -p 16373:16379 --name redis-3 \ -v /mydata/redis/node-3/data:/data \ -v /mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf 7411 [root@localhost conf]# docker run -p 6374:6379 -p 16374:16379 --name redis-4 \ -v /mydata/redis/node-4data:/data \ -v /mydata/redis/node-4/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.14 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf fais sahed 民建联早线 121715672 fifakhsfd4dvdssbq4sb1b1798ds1db0ayb15jj [root@localhost conf]# docker run -p 6375:6379 -p 16375:16379 --name redis-5 \ -v /mydata/redis/node-5/data:/data \ -v /mydata/redis/node-5/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.15 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf 343b4d0986529851 sdhhhhhhhhhhhhdb0 喜欢 line09js4440746sdh49211 [root@localhost conf]# docker run -p 6376:6379 -p 16376:16379 --name redis-6 \ -v /mydata/redis/node-6/data:/data \ -v /mydata/redis/node-6/conf/redis.conf:/etc/redis/redis.conf \ -d --net redis --ip 172.38.0.16 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf 430 英尺 [root@localhost conf]# docker ps 容器 ID 图像命令创建状态端口名称 430f29b7fdd2 redis:5.0.9-alpine3.11 "docker-entrypoint.s..." 大约一分钟前 Up 大约一分钟 0.0.0.0:6376->6379/tcp, 0.0.0.0:16376->16379/tcp redis-6 343b4d098652 redis:5.0.9-alpine3.11 "docker-entrypoint.s..." 大约一分钟前 Up 大约一分钟 0.0.0.0:6375->6379/tcp, 0.0.0.0:16375->16379/tcp redis-5 f2ce7d2db9ba redis:5.0.9-alpine3.11 "docker-entrypoint.s..." 大约一分钟前 Up 大约一分钟 0.0.0.0:6374->6379/tcp, 0.0.0.0:16374->16379/tcp redis-4 7411b8f6c7d5 redis:5.0.9-alpine3.11 "docker-entrypoint.s..." 大约一分钟前 Up 大约一分钟 0.0.0.0:6373->6379/tcp, 0.0.0.0:16373->16379/tcp redis-3 b7a12d144758 redis:5.0.9-alpine3.11 "docker-entrypoint.s..." 大约一分钟前 Up 大约一分钟 0.0.0.0:6372->6379/tcp, 0.0.0.0:16372->16379/tcp redis-2 d7ce020b171e redis:5.0.9-alpine3.11 "docker-entrypoint.s..." 2 分钟前 Up 大约一分钟 0.0.0.0:6371->6379/tcp, 0.0.0.0:16371->16379/tcp redis -1 [root@localhost conf]# docker exec -it redis-1 /bin/sh /数据#ls appendonly.aof 节点.conf /data # redis-cli --cluster 创建 172.38.0.11:6379 172.38.0.12:6379 \ 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 \ 172.38.0.16:6379 --cluster-replicas 1 在 6 个节点上执行哈希槽分配... 主[0] -> 插槽 0 - 5460 主[1] -> 插槽 5461 - 10922 主[2] -> 插槽 10923 - 16383 将副本 172.38.0.15:6379 添加到 172.38.0.11:6379 将副本 172.38.0.16:6379 添加到 172.38.0.12:6379 将副本 172.38.0.14:6379 添加到 172.38.0.13:6379 男:af21836f327964924ddfd99eadd0f86c4be2b998 172.38.0.11:6379 插槽:[0-5460](5461 个插槽)主控 M: b0cf655ea86ff16e2c6f9a82f3d9f1a3d7dc7c62 172.38.0.12:6379 插槽:[5461-10922](5462 个插槽)主控 M: c040bae27420e3fe503d79cad47816123462262a 172.38.0.13:6379 插槽:[10923-16383](5461 个插槽)主控 p:24bf6f3296119d93f82232555784bbdb1a72697e 172.bit.0.14:6379 复制 c040bae27420e3fe503d79cad47816123462262a S: 20a534198c68dd48b5a533b0ee4b1d447cc6b1f6 172.38.0.15:6379 复制 af21836f327964924ddfd99eadd0f86c4be2b998 p:65d83f48f4884e26dc986a60cc03aa33e22dd48a 172.bite.0.16:6379 复制 b0cf655ea86ff16e2c6f9a82f3d9f1a3d7dc7c62 可以设置上面的配置吗? (输入“是”接受):是 节点配置更新 为每个节点分配不同的 config epoch 发送 CLUSTER MEET 消息加入集群 等待集群加入 ... 执行集群检查(使用节点 172.38.0.11:6379) 男:af21836f327964924ddfd99eadd0f86c4be2b998 172.38.0.11:6379 插槽:[0-5460](5461 个插槽)主控 1 个额外的副本 S: 20a534198c68dd48b5a533b0ee4b1d447cc6b1f6 172.38.0.15:6379 插槽:(0 个插槽)从属 复制 af21836f327964924ddfd99eadd0f86c4be2b998 p:65d83f48f4884e26dc986a60cc03aa33e22dd48a 172.bite.0.16:6379 插槽:(0 个插槽)从属 复制 b0cf655ea86ff16e2c6f9a82f3d9f1a3d7dc7c62 p:24bf6f3296119d93f82232555784bbdb1a72697e 172.bit.0.14:6379 插槽:(0 个插槽)从属 复制 c040bae27420e3fe503d79cad47816123462262a M: b0cf655ea86ff16e2c6f9a82f3d9f1a3d7dc7c62 172.38.0.12:6379 插槽:[5461-10922](5462 个插槽)主控 1 个额外的副本 M: c040bae27420e3fe503d79cad47816123462262a 172.38.0.13:6379 插槽:[10923-16383](5461 个插槽)主控 1 个额外的副本 [OK] 所有节点都同意插槽配置。 检查开放的插槽... 检查插槽覆盖率... [OK] 覆盖所有 16384 个插槽。 /data # redis-cli -c 127.0.0.1:6379> 集群信息 集群_状态:好的 集群_slots_assigned:16384 集群_slots_ok:16384 集群_slots_pfail:0 集群_slots_fail:0 集群_已知_节点:6 集群_size:3 集群_current_epoch:6 集群_my_epoch:1 集群_stats_messages_ping_sent:382 集群_stats_messages_pong_sent:382 集群_stats_messages_sent:764 集群_stats_messages_ping_received:377 集群_stats_messages_pong_received:382 集群_stats_messages_meet_received:5 集群_stats_messages_received:764 127.0.0.1:6379> 集群节点 20a534198c68dd48b5a533b0ee4b1d447cc6b1f6 172.38.0.15:6379@16379 从机 af21836f327964924ddfd99eadd0f86c4be2b998 0 1618384814088 5 已连接 65d83f48f4884e26dc986a60cc03aa33e22dd48a 172.38.0.16:6379@16379 从机 b0cf655ea86ff16e2c6f9a82f3d9f1a3d7dc7c62 0 1618384814589 6 个已连接 af21836f327964924ddfd99eadd0f86c4be2b998 172.38.0.11:6379@16379 我自己,主人 - 0 1618384814000 1 已连接 0-5460 24bf6f3296119d93f82232555784bbdb1a72697e 172.38.0.14:6379@16379 从机 c040bae27420e3fe503d79cad47816123462262a 0 1618384814000 4 已连接 b0cf655ea86ff16e2c6f9a82f3d9f1a3d7dc7c62 172.38.0.12:6379@16379 主 - 0 1618384815096 2 已连接 5461-10922 c040bae27420e3fe503d79cad47816123462262a 172.38.0.13:6379@16379 主 - 0 1618384814589 3 已连接 10923-16383 下面简单总结一下redis集群的高可用测试 SpringBoot微服务打包Docker镜像 1.构建一个 SpringBoot 项目包 com.example.demo.controller; 导入 org.springframework.web.bind.annotation.RequestMapping; 导入 org.springframework.web.bind.annotation.RestController; @RestController 公共类 HelloController { @RequestMapping("/你好") 公共字符串你好(){ 返回“你好,黄家林”; } } 开始测试http://127.0.0.1:8080/hello 找到文件地址 启动成功 您也可以在此处链接到远程仓库 来自 java:8 复制 *.jar /app.jar CMD ["--server.portu003d8080"] 暴露8080 入口点["java","-jar","app.jar"] 停止所有容器 172.38.0.16:6379> 退出 /数据#退出 [root@localhost conf]# docker rm -f $(docker ps -qa) 430 所以早上很冷 343b4d098652 这么多 7411 按 巴哈 12 d 144758 d7ce020b171e [root@localhost 配置]# 新目录理念 [root@localhost conf]# cd /home [root@localhost home]# ls 测试dock而file docker-test-volume黄.Java黄嘉琳皇.txt没有Linux MySQL test.Java test tmp [root@localhost home]# mkdir 想法 [root@localhost home]# ls 测试dock而file docker-test-volume黄.Java黄嘉琳皇.txt idea没有Linux MySQL test.Java test tmp [root@localhost home]# cd idea/ [root@localhost 想法]# ls 文件传输上传成功 [root@localhost 想法]# ls demo-0.0.1-SNAPSHOT.jar Dockerfile [root@localhost 想法]# ll 总计 16672 -rw-r--r--。 1 根 17064575 Apr 14 01:54 demo-0.0.1-SNAPSHOT.jar -rw-r--r--。 1 根 111 Apr 14 01:54 Dockerfile 4.构建镜像[root@localhost idea]# docker build -t huangjialin666 . 将构建上下文发送到 Docker 守护进程 17.07MB 步骤 1/5:来自 java:8 8: 从库/java 中拉取 5040bd298390:拉取完成 fce5728aad85:拉取完成 76610ec20bf5:拉取完成 60170fec2151:拉取完成 e98f73de8f0d:拉取完成 11f7af24ed9c:拉取完成 49e2d6393f32:拉取完成 bb9cdec9c7f3:拉取完成 摘要:sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d 状态:为 java:8 下载了更新的图像 ---> D'Abed Fakhb1b1b 步骤 2/5:复制 *.jar /app.jar ---> 步骤 3/5 : CMD ["--server.portu003d8080"] ---> 在 a62e4ab48902 中运行 移除中间容器 a62e4ab48902 ---> 法 41490 米 步骤 4/5:暴露 8080 ---> 在 1fbd25817932 中运行 移除中间容器 1fbd25817932 ---> 1aba2bcfb483 第 5/5 步:入口点 ["java","-jar","app.jar"] ---> 运行在 980468eb1893 卸下中间容器 980468eb1893 ---> 成功打造5285ac7f6cbc 成功标记 huangjialin666:latest [root@localhost idea]# docker 镜像 存储库标签图像 ID 创建大小 huangjialin666 最新5285ac7f6cbc 52秒前660MB 5.发布运行[root@localhost idea]# docker run -d -P --name huangjialin-springboot-web huangjialin666 7621 sab sabfz0shs44362897f11ss4dssbvfvs493852 ddsds190848exasperation008 [root@localhost 想法]# docker ps 容器 ID 图像命令创建状态端口名称 7621b33ce6b8 huangjialin666 "java -jar app.jar -..." 57 秒前 Up 49 seconds 0.0.0.0:49157->8080/tcp huangjialin-springboot-web [root@localhost idea]# curl 127.0.0.1:49157 {"timestamp":"2021-04-14T09:09:35.052+00:00","status":404,"error":"Not Found","message":"","path":"/ "}[root@localhost 想法]# [root@localhost idea]# curl 127.0.0.1:49157/hello 你好,黄家林[root@localhost 想法]# 测试成功 以后我们用了Docker之后,就可以把它作为镜像交付给其他人了! 狂神UPhttps://space.bilibili.com/95256449/video?keywordu003dDocker |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |