从疯狂中学习Docker(精华)

您所在的位置:网站首页 docker网站丢失文件 从疯狂中学习Docker(精华)

从疯狂中学习Docker(精华)

2023-03-22 14:22| 来源: 网络整理| 查看: 265

容器数据量 什么是容器数据量

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,需要配置密码,要注意!

参考官网hub

docker 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,就说明这条路径只能通过宿主机操作,不能在容器内部操作! 初始 Dockerfile

Dockerfile 是用于构建 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

2.写dockerfile

正式名称是 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

6.发布项目

(由于卷挂载,我们可以在本地编写项目并发布它!)

[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 Hub

1\。地址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 网络 了解Docker0

学习前清除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

2.包运行

本地测试

找到文件地址

启动成功

安装插件

您也可以在此处链接到远程仓库

3.写dockerfile

来自 java:8

复制 *.jar /app.jar

CMD ["--server.portu003d8080"]

暴露8080

入口点["java","-jar","app.jar"]

linux操作

停止所有容器

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之后,就可以把它作为镜像交付给其他人了!

狂神UP

https://space.bilibili.com/95256449/video?keywordu003dDocker



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3