Docker进阶篇

容器数据卷
什么是容器数据卷
docker的理念回顾

将应用和环境打包成一个镜像!

数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化

MySQL,容器删除了,删库跑路!需求:MySQL数据可以存储在本地!

容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!

这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!

总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的!

使用数据卷
方式一:直接使用命令来挂载

docker run -it -v 主机目录:容器目录

测试

[root@localhost home]# docker run -it -v /home/ceshi:/home centos /bin/bash

启动起来的时候,我们可以通过docker inspect 容器id 来查看挂载情况:(见下图)

测试文件的同步

在容器内指定目录下添加或修改一个文件,会同步到主机指定目录下!反之,在主机目录下做相关操作,也会同步到容器对应的目录下!

再来测试!

1、停止容器

2、宿主机修改文件

3、启动容器

4、容器内的数据依旧是同步的!

好处:我们以后修改只需要在本地修改即可,容器内会自动同步!

实战:安装MySQL
思考:MySQL的数据持久化的问题!

获取镜像

[root@localhost home]# docker pull mysql:5.7

运行容器,需要做数据挂载! # 安装mysql,需要配置密码,这是要注意的点!

官方测试:docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

启动我们的MySQL容器

-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
–name 容器名字
[root@localhost home]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

启动成功之后,我们在本地使用sqlyog 连接测试一下

sqlyog —— 连接到服务器的3310 —— 3310和容器内的3306映射,这个时候我们就可以连接上了!

本地测试创建一个数据库,查看一下我们的映射的路径是否ok!

假设我们将容器删除

发现,我们挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能!

具名和匿名挂载

匿名挂载

-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx

查看所有卷的情况

[root@localhost data]# docker volume ls
DRIVER VOLUME NAME
local 2dd0379216c9ee4441ed56f8ce53461c19abe78b8cfd024ac5fbe07c3b8f09ba

这里发现,这种就是匿名挂载,我们在 -v 后只写了容器内的路径,没有写容器外的路径!

具名挂载

[root@localhost home]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
5ba5708389bf71b2156fdbcedc50a62b16ac27adb2a3dfac42c52e9da5ace79f
[root@localhost home]# docker volume ls
DRIVER VOLUME NAME
local juming-nginx

通过 -v 卷名:容器内路径

查看一下这个卷 # 先找到卷所在路径 docker volume inspect 卷名,如下图:

所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxxx/_data下!
我们通过具名挂载可以方便的找到我们的一个卷,大多数情况使用 具名挂载

如何确定是具名挂载还是匿名挂载,还是指定路径挂载!

-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v /宿主机路径:容器内路径 # 指定路径挂载!
拓展:

通过 -v 容器内路径:ro 或 rw 改变读写权限

ro #readonly 只读
rw #readwrite 可读可写

一旦创建容器时设置了容器权限,容器对我们挂载出来的内容就有限定了!

docker run -d -P --name nginx05 -v juming:/etc/nginx:ro nginx
docker run -d -P --name nginx05 -v juming:/etc/nginx:rw nginx

默认是 rw

ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!

初始Dockerfile
Dockerfile 就是用来构建 docker镜像的构建文件!命令脚本! 先体验一下!

通过这个脚本可以生成镜像,镜像是一层一层的,脚本是一个个的命令,每个命令都是最终镜像的一层!

创建一个dockerfile文件,名字可以随机,建议 dockerfile

[root@localhost docker-test-volume]# vim dockerfile

文件中的内容:指令(大写) 参数

FROM centos

VOLUME [“volume01”,“volume02”]

CMD echo"----end----"

CMD /bin/bash

这里的每个命令,就是镜像的一层!

注意:我们这里的 dockerfile 是我们编写的文件名哦!

这两个卷和外部一定有两个同步的目录!

查看一下卷挂载在主机上的路径

docker inspect 容器id

测试一下刚才的文件是否同步出去了!

这种方式我们未来使用十分的多,因为我们通常会构建自己的镜像!

假设构建镜像的时候没有挂在卷,要手动镜像挂载即可: (参考上文具名和匿名挂载)

-v 卷名:容器内路径
数据卷容器
多个mysql同步数据!

在docker03下创建docker03文件后,进入docker01发现也依旧会同步过来:

测试1:删除docker01后,docker02和docker03是否还可以访问原来docker01下创建的的文件?

测试1的结果为:依旧可以访问!!!

测试2:删除docker01后,docker02和docker03之间是否可以相互同步文件?

测试2的结果为:docket02和docker03之间一九可以完成同步!!! 见下图:

多个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=123456 --name mysql01 mysql:5.7
➜ ~ docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7

这个时候,可以实现两个容器数据同步!

结论:

容器之间的配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。

但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的!

DockerFile
DockerFile介绍
dockerfile是用来构建docker镜像的文件!命令参数脚本!

构建步骤:

1、 编写一个dockerfile文件

2、 docker build 构建称为一个镜像

3、 docker run运行镜像

4、 docker push发布镜像(DockerHub 、阿里云仓库)

查看官方是怎么做的!

很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像!

官方既然可以制作镜像,那我们也可以!

DockerFile构建过程
基础知识:

1、每个保留关键字(指令)都是必须是大写字母

2、执行从上到下顺序

3、# 表示注释

4、每一个指令都会创建提交一个新的镜像曾,并提交!

Dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!

Docker镜像逐渐成企业交付的标准,必须要掌握!

DockerFile:构建文件,定义了一切的步骤,源代码

DockerImages:通过DockerFile构建生成的镜像,最终发布和运行产品。

Docker容器:容器就是镜像运行起来提供服务。

DockerFile的指令
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的,姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤:tomcat镜像,这个tomcat压缩包! 添加内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 暴露端口配置,跟 -p 是一个道理
CMD # 指定这个容器启动时要执行的命令,只有最后一个命令会生效,可悲替代
ENTRYPOINT # 指定这个容器启动的时候要执行的命令,可以追加命令
ONBUILD # 当构建一个被继承DockerFile 这个时候就会运行ONBUILD的指令。触发指令
COPY # 类似ADD,将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量,跟 -e 是一个意思

CMD 和 ENTRYPOINT 的区别说明:(后面也会介绍)

若CMD 和 ENTRYPOINT 后跟的都是 ls -a 这个命令,当docker run 一个容器时,添加了 -l 选项,则CMD里的ls -a 命令就会被替换成-l;而ENTRYPOINT中的 ls -a会追加-l变成 ls -a -l

实战测试
Docker Hub中99%镜像都是从这个基础镜像过来的( FROM scratch ),然后配置需要的软件和配置来构建。

创建一个自己的 centos

1、编写DockerFile文件,内容如下:

[root@localhost dockerfile]# cat mydockerfile-centos
FROM centos
MAINTAINER ztx123456@qq.com

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo “----end----”
CMD /bin/bash

2、通过这个文件构建镜像

命令docker build -f dockerfile文件路径 -t 镜像名:[tag] .

[root@localhost dockerfile]# docker build -f mydockerfile-centos -t mycentos:0.1 .

Successfully built c987078b06cb
Successfully tagged mycentos:0.1

3、测试运行

对比:

之前的原生的centos

我们增加之后的镜像

注:net-tools 包含一系列程序,构成了 Linux 网络的基础。

我们可以列出本地镜像的变更历史:

我们平时拿到一个镜像,可以研究一下它是怎么做的!

CMD 和 ENTRYPOINT 的区别

测试CMD

编写dockerfile文件

$ vim dockerfile-test-cmd
FROM centos
CMD [“ls”,"-a"]

构建镜像

$ docker build -f dockerfile-test-cmd -t cmd-test:0.1 .

运行镜像

$ docker run cmd-test:0.1
.

.dockerenv
bin
dev

想追加一个命令 -l 成为ls -al

$ docker run cmd-test:0.1 -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused “exec: “-l”:
executable file not found in $PATH”: unknown.
ERRO[0000] error waiting for container: context canceled

cmd的情况下 -l 替换了CMD[“ls”,"-l"]。 -l 不是命令,所以报错

测试ENTRYPOINT

编写dockerfile文件

$ vim dockerfile-test-entrypoint
FROM centos
ENTRYPOINT [“ls”,"-a"]
$ docker run entrypoint-test:0.1
.

.dockerenv
bin
dev
etc
home
lib
lib64
lost+found …

我们的命令,是直接拼接在我们的ENTRYPOINT命令后面的

$ docker run entrypoint-test:0.1 -l
total 56
drwxr-xr-x 1 root root 4096 May 16 06:32 .
drwxr-xr-x 1 root root 4096 May 16 06:32 …
-rwxr-xr-x 1 root root 0 May 16 06:32 .dockerenv
lrwxrwxrwx 1 root root 7 May 11 2019 bin -> usr/bin
drwxr-xr-x 5 root root 340 May 16 06:32 dev
drwxr-xr-x 1 root root 4096 May 16 06:32 etc
drwxr-xr-x 2 root root 4096 May 11 2019 home
lrwxrwxrwx 1 root root 7 May 11 2019 lib -> usr/lib
lrwxrwxrwx 1 root root 9 May 11 2019 lib64 -> usr/lib64 …
Dockerfile中很多命令都十分的相似,我们需要了解它们的区别,我们最好的学习就是对比他们然后测试效果!

实战:Tomcat镜像
1、准备镜像文件tomcat压缩包,jdk压缩包!

2、编写Dockerfile文件,官方命名: Dockerfile ,build会自动寻找这个文件,就不要 -f 指定了!

FROM centos
MAINTAINER kuangshen123456@qq.com

COPY readme.txt /usr/local/readme.txt

ADD jdk-8u161-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.0.53.tar.gz /usr/local

RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_161
ENV CLASSPATH J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.0.53
ENV CATALINA_BASH /usr/local/apache-tomcat-8.0.53
ENV PATH P A T H : PATH: PATH:JAVA_HOME/bin: C A T A L I N A H O M E / l i b : CATALINA_HOME/lib: CATALINAHOME/lib:CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-8.0.53/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.0.53/bin/logs/catalina.out

3、构建镜像

docker build -t diytomcat . diytomcat是定义的镜像名

4、启动镜像,创建容器

docker run -d -p 9090:8080 --name kuangshentomcat02 -v /home/kuangshen/build/tomcat/test:/usr/local/apache-tomcat-8.0.53/webapps/test -v /home/kuangshen/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-8.0.53/logs diytomcat

5、访问测试

6、发布项目(由于做了卷挂载,我们就可以直接在本地发布项目了)

在/home/kuangshen/build/tomcat/test目录下创建WEB-INF目录,在里面创建web.xml文件:

<?xml version="1.0" encoding="UTF-8"?>

在回到test目录,添加一个index.jsp页面:

<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>

hello kuangshenvim Hello World!
<% System.out.println("---my test web logs---"); %> 发现:test项目部署成功,可以直接访问!

注意:这时进入/home/kuangshen/build/tomcat/tomcatlogs/目录下就可以看到日志信息了:

[root@localhost tomcatlogs]# cat catalina.out

之前一直访问失败是web.xml配置有问题,最后也是查看该日志提示,才得以解决!!!

我们以后开发的步骤:需要掌握Dockerfile的编写!我们之后的一切都是使用docker镜像来发布运行!

发布自己的镜像
Docker Hub

1、地址 https://hub.docker.com/

2、确定这个账号可以登录

3、在我们服务器上提交自己的镜像

[root@localhost tomcat]# docker login --help

Usage: docker login [OPTIONS] [SERVER]

Log in to a Docker registry.
If no server is specified, the default is defined by the daemon.

Options:
-p, --password string Password
–password-stdin Take the password from stdin
-u, --username string Username

登录dockerhub

[root@localhost tomcat]# docker login -u ztx115
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
4、登录完毕后就可以提交镜像了,就是一步 docker push

push自己的镜像到服务器上!

[root@localhost tomcat]# docker push diytomcat
The push refers to repository [docker.io/library/diytomcat]
c5593011cd68: Preparing
d3ce40b8178e: Preparing
02084c67dcc9: Preparing
2b7c1c6c89c5: Preparing
0683de282177: Preparing
denied: requested access to the resource is denied # 拒绝

push镜像的问题?

解决:增加一个tag docker tag 指定镜像的id dockerhub的用户名/镜像重命名:[tag]

[root@localhost tomcat]# docker tag bb64ab96b432 ztx115/tomcat:1.0

注意:镜像的重命名前一定要加当前的dockerhub的用户名,否则将会push失败!!!!(如:把ztx115改成ztx, push一定失败!)

docekr push上去即可! 自己平时发布的镜像尽量带上版本号

[root@localhost tomcat]# docker push ztx115/tomcat:1.0
The push refers to repository [docker.io/ztx115/tomcat]
c5593011cd68: Pushed
d3ce40b8178e: Pushed
02084c67dcc9: Pushed
2b7c1c6c89c5: Pushed
0683de282177: Pushed
1.0: digest: sha256:b6733deccf85ad66c6f4302215dd9ea63e1579817f15a099b5858785708ed408 size: 1372

发现,提交时也是按照镜像的层级来进行提交的!

发布到阿里云镜像服务上(狂神视频截图)

1、登录阿里云

2、找到容器镜像服务

3、创建命名空间

4、创建容器镜像仓库

5、浏览阿里云

使用阿里云容器镜像的参考官方指南即可!!!(即上图)

小结

Docker网络
理解Docker0
清空所有环境

测试

问题: docker是如何处理容器网络访问的?

[root@localhost /]# docker run -d -P --name tomcat01 tomcat

查看容器的内部网络地址 ip addr, 发现容器启动的时候会得到一个 eth0@if43 ip地址,docker分配的!

[root@localhost /]# docker exec -it tomcat01 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
42: eth0@if43: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever

思考:linux能不能ping通docker容器内部!

[root@localhost /]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.476 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.099 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.105 ms

linux 可以ping通docker容器内部

原理

1、我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要装了docker,就会有一个docker01网卡。

桥接模式,使用的技术是veth-pair技术!

再次测试 ip addr,发现多了一对网卡 :

2、再启动一个容器测试,发现又多了一对网卡!!!

我们发现这个容器带来网卡,都是一对对的

veth-pair 就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连

正因为有这个特性,veth-pair 充当一个桥梁,连接各种虚拟网络设备

OpenStack,Docker容器之间的连接,OVS的连接都是使用veth-pair技术

3、我们来测试下tomcat01和tomcat02是否可以ping通!

[root@localhost /]# docker exec -it tomcat02 ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.556 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.096 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.111 ms

结论:容器与容器之间是可以相互ping通的!!!

绘制一个网络模型图:

结论:tomcat01 和 tomcat02 是公用一个路由器,即 docker0 !

所有的容器不指定网络的情况下,都是经 docker0 路由的,docker 会给我们的容器分配一个默认的可用ip

小结

Docker使用的是Linux的桥接技术,宿主机是一个Docker容器的网桥 docker0

注意:Docker中所有网络接口都是虚拟的,虚拟的转发效率高!(内网传递文件)

只要容器一删除,对应的一对网桥就没有!

–link
思考一个场景:我们编写了一个微服务,database url = ip ,项目不重启,数据库ip换掉了,我们希望可以处理这个问题,可以通过名字来访问容器?

tomcat02 想通过直接ping 容器名(即"tomcat01")来ping通,而不是ip,发现失败了!

[root@localhost /]# docker exec -it tomcat02 ping tomcat01
ping: tomcat01: Name or service not known

如何解决这个问题呢?

通过–link 就可以解决这个网络联通问题了!!! 发现新建的tomcat03可以ping通tomcat02

[root@localhost /]# docker run -d -P --name tomcat03 --link tomcat02 tomcat
87a0e5f5e6da34a7f043ff6210b57f92f40b24d0d4558462e7746b2e19902721
[root@localhost /]# docker exec -it tomcat03 ping tomcat02
PING tomcat02 (172.17.0.3) 56(84) bytes of data.
64 bytes from tomcat02 (172.17.0.3): icmp_seq=1 ttl=64 time=0.132 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=2 ttl=64 time=0.116 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=3 ttl=64 time=0.116 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=4 ttl=64 time=0.116 ms

反向能ping通吗? 发现tomcat02不能oing通tomcat03

[root@localhost /]# docker exec -it tomcat02 ping tomcat03
ping: tomcat03: Name or service not known
探究:inspect !!!

其实这个tomcat03就是在本地配置了到tomcat02的映射:

查看hosts 配置,在这里发现原理!

[root@localhost /]# docker exec -it tomcat03 cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.3 tomcat02 95303c12f6d9 # 就像windows中的 host 文件一样,做了地址绑定
172.17.0.4 87a0e5f5e6da
本质探究:–link 就是我们在hosts 配置中增加了一个 172.17.0.3 tomcat02 95303c12f6d9 (三条信息都是tomcat02 的)

我们现在玩Docker已经不建议使用 --link 了!!!

自定义网络,不使用docker0!

docker0问题:不支持容器名连接访问!

自定义网络
查看所有的docker网络

网络模式

bridge :桥接 (docker默认,自己创建也使用bridge模式!)

none :不配置网络

host :和宿主机共享网络

container :容器网络连通,容器直接互联!(用的少!局限很大!)

测试

我们之前直接启动的命令 (默认是使用–net bridge,可省),这个bridge就是我们的docker0

docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net bridge tomcat

上面两句等价

docker0(即bridge)默认不支持域名访问 ! --link可以打通连接,即支持域名访问!

我们可以自定义一个网络!

–driver bridge 网络模式定义为 :桥接

–subnet 192.168.0.0/16 定义子网 ,范围为:192.168.0.2 ~ 192.168.255.255

–gateway 192.168.0.1 子网网关设为: 192.168.0.1

[root@localhost /]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
7ee3adf259c8c3d86fce6fd2c2c9f85df94e6e57c2dce5449e69a5b024efc28c
[root@localhost /]# docker network ls
NETWORK ID NAME DRIVER SCOPE
461bf576946c bridge bridge local
c501704cf28e host host local
7ee3adf259c8 mynet bridge local #自定义的网络
9354fbcc160f none null local

自己的网络就创建好了:

[root@localhost /]# docker run -d -P --name tomcat-net-01 --net mynet tomcat
b168a37d31fcdc2ff172fd969e4de6de731adf53a2960eeae3dd9c24e14fac67
[root@localhost /]# docker run -d -P --name tomcat-net-02 --net mynet tomcat
c07d634e17152ca27e318c6fcf6c02e937e6d5e7a1631676a39166049a44c03c
[root@localhost /]# docker network inspect mynet
[
{
“Name”: “mynet”,
“Id”: “7ee3adf259c8c3d86fce6fd2c2c9f85df94e6e57c2dce5449e69a5b024efc28c”,
“Created”: “2020-06-14T01:03:53.767960765+08:00”,
“Scope”: “local”,
“Driver”: “bridge”,
“EnableIPv6”: false,
“IPAM”: {
“Driver”: “default”,
“Options”: {},
“Config”: [
{
“Subnet”: “192.168.0.0/16”,
“Gateway”: “192.168.0.1”
}
]
},
“Internal”: false,
“Attachable”: false,
“Ingress”: false,
“ConfigFrom”: {
“Network”: “”
},
“ConfigOnly”: false,
“Containers”: {
“b168a37d31fcdc2ff172fd969e4de6de731adf53a2960eeae3dd9c24e14fac67”: {
“Name”: “tomcat-net-01”,
“EndpointID”: “f0af1c33fc5d47031650d07d5bc769e0333da0989f73f4503140151d0e13f789”,
“MacAddress”: “02:42:c0:a8:00:02”,
“IPv4Address”: “192.168.0.2/16”,
“IPv6Address”: “”
},
“c07d634e17152ca27e318c6fcf6c02e937e6d5e7a1631676a39166049a44c03c”: {
“Name”: “tomcat-net-02”,
“EndpointID”: “ba114b9bd5f3b75983097aa82f71678653619733efc1835db857b3862e744fbc”,
“MacAddress”: “02:42:c0:a8:00:03”,
“IPv4Address”: “192.168.0.3/16”,
“IPv6Address”: “”
}
},
“Options”: {},
“Labels”: {}
}
]

再次测试 ping 连接

[root@localhost /]# docker exec -it tomcat-net-01 ping 192.168.0.3
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.199 ms
64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.121 ms
^C
— 192.168.0.3 ping statistics —
2 packets transmitted, 2 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 0.121/0.160/0.199/0.039 ms

现在不使用 --link,也可以ping 名字了!!!!!!

[root@localhost /]# docker exec -it tomcat-net-01 ping tomcat-net-02
PING tomcat-net-02 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.145 ms
64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.117 ms
^C
— tomcat-net-02 ping statistics —
2 packets transmitted, 2 received, 0% packet loss, time 3ms
rtt min/avg/max/mdev = 0.117/0.131/0.145/0.014 ms

我们在使用自定义的网络时,docker都已经帮我们维护好了对应关系,推荐我们平时这样使用网络!!!

好处:

redis——不同的集群使用不同的网络,保证了集群的安全和健康

mysql——不同的集群使用不同的网络,保证了集群的安全和健康

网络连通

测试打通 tomcat01 — mynet

[root@localhost /]# docker network connect mynet tomcat01

连通之后就是将 tomcat01 放到了 mynet 网络下! (见下图)

这就产生了 一个容器有两个ip地址 ! 参考阿里云的公有ip和私有ip

[root@localhost /]# docker network inspect mynet

tomcat01 连通ok

[root@localhost /]# docker exec -it tomcat01 ping tomcat-net-01
PING tomcat-net-01 (192.168.0.2) 56(84) bytes of data.
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.124 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.162 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=3 ttl=64 time=0.107 ms
^C
— tomcat-net-01 ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 3ms
rtt min/avg/max/mdev = 0.107/0.131/0.162/0.023 ms

tomcat02 是依旧打不通的

[root@localhost /]# docker exec -it tomcat02 ping tomcat-net-01
ping: tomcat-net-01: Name or service not known
结论:假设要跨网络操作别人,就需要使用docker network connect 连通。。。

实战:部署Redis集群

启动6个redis容器,上面三个是主,下面三个是备!

使用shell脚本启动!

创建redis集群网络

docker network create redis --subnet 172.38.0.0/16

通过脚本创建六个redis配置

[root@localhost /]# for port in $(seq 1 6);\

do
mkdir -p /mydata/redis/node- p o r t / c o n f t o u c h / m y d a t a / r e d i s / n o d e − {port}/conf touch /mydata/redis/node- port/conftouch/mydata/redis/node{port}/conf/redis.conf
cat <>/mydata/redis/node- p o r t / c o n f / r e d i s . c o n f p o r t 6379 b i n d 0.0.0.0 c l u s t e r − e n a b l e d y e s c l u s t e r − c o n f i g − f i l e n o d e s . c o n f c l u s t e r − n o d e − t i m e o u t 5000 c l u s t e r − a n n o u n c e − i p 172.38.0.1 {port}/conf/redis.conf port 6379 bind 0.0.0.0 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-announce-ip 172.38.0.1 port/conf/redis.confport6379bind0.0.0.0clusterenabledyesclusterconfigfilenodes.confclusternodetimeout5000clusterannounceip172.38.0.1{port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done

查看创建的六个redis

[root@localhost /]# cd /mydata/
[root@localhost mydata]# \ls
redis
[root@localhost mydata]# cd redis/
[root@localhost redis]# ls
node-1 node-2 node-3 node-4 node-5 node-6

查看redis-1的配置信息

[root@localhost redis]# cd node-1
[root@localhost node-1]# ls
conf
[root@localhost node-1]# cd conf/
[root@localhost conf]# ls
redis.conf
[root@localhost conf]# cat redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.11
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
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

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

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

docker run -p 6374:6379 -p 16374:16379 --name redis-4
-v /mydata/redis/node-4/data:/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

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

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

[root@localhost conf]# docker exec -it redis-1 /bin/sh
/data # ls
appendonly.aof nodes.conf
/data # redis-cli --cluster create 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

Performing hash slots allocation on 6 nodes…
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 172.38.0.15:6379 to 172.38.0.11:6379
Adding replica 172.38.0.16:6379 to 172.38.0.12:6379
Adding replica 172.38.0.14:6379 to 172.38.0.13:6379
M: c5551e2a30c220fc9de9df2e34692f20f3382b32 172.38.0.11:6379
slots:[0-5460] (5461 slots) master
M: d12ebd8c9e12dbbe22e7b9b18f0f143bdc14e94b 172.38.0.12:6379
slots:[5461-10922] (5462 slots) master
M: 825146ce6ab80fbb46ec43fcfec1c6e2dac55157 172.38.0.13:6379
slots:[10923-16383] (5461 slots) master
S: 9f810c0e15ac99af68e114a0ee4e32c4c7067e2b 172.38.0.14:6379
replicates 825146ce6ab80fbb46ec43fcfec1c6e2dac55157
S: e370225bf57d6ef6d54ad8e3d5d745a52b382d1a 172.38.0.15:6379
replicates c5551e2a30c220fc9de9df2e34692f20f3382b32
S: 79428c1d018dd29cf191678658008cbe5100b714 172.38.0.16:6379
replicates d12ebd8c9e12dbbe22e7b9b18f0f143bdc14e94b
Can I set the above configuration? (type ‘yes’ to accept): yes

Nodes configuration updated
Assign a different config epoch to each node
Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join

Performing Cluster Check (using node 172.38.0.11:6379)
M: c5551e2a30c220fc9de9df2e34692f20f3382b32 172.38.0.11:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 79428c1d018dd29cf191678658008cbe5100b714 172.38.0.16:6379
slots: (0 slots) slave
replicates d12ebd8c9e12dbbe22e7b9b18f0f143bdc14e94b
M: d12ebd8c9e12dbbe22e7b9b18f0f143bdc14e94b 172.38.0.12:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: e370225bf57d6ef6d54ad8e3d5d745a52b382d1a 172.38.0.15:6379
slots: (0 slots) slave
replicates c5551e2a30c220fc9de9df2e34692f20f3382b32
S: 9f810c0e15ac99af68e114a0ee4e32c4c7067e2b 172.38.0.14:6379
slots: (0 slots) slave
replicates 825146ce6ab80fbb46ec43fcfec1c6e2dac55157
M: 825146ce6ab80fbb46ec43fcfec1c6e2dac55157 172.38.0.13:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.

Check for open slots…
Check slots coverage…
[OK] All 16384 slots covered.

docker搭建redis集群完成!

我们使用docker之后,所有的技术都会慢慢变得简单起来!

Springboot微服务打包Docker镜像
1、构建springboot项目,打包应用

2、编写Dockerfile,连同项目的jar包一并上传指定目录下

https://url.cn/qUx6FUgA
https://url.cn/Gk7NSsWG
https://url.cn/3UaY81ox
https://url.cn/9cEPYcsF
https://url.cn/pjikgMi0
https://url.cn/pbsCX1Ai
https://url.cn/l6WfYe4s
https://url.cn/eETfTQx3
https://url.cn/zegkkRC9
https://url.cn/onlI0EgF
https://url.cn/LnBfB9cS
https://url.cn/URotL3wT
https://url.cn/0dTfXVRG
https://url.cn/Qjbpm3mn
https://url.cn/znfwqKDk
https://url.cn/9hsEon92
https://url.cn/7oy3E6on
https://url.cn/aOpTKNjt
https://url.cn/UXrzOBks
https://url.cn/N6NB8ChH
https://url.cn/2VfHPWMy
https://url.cn/TIHnDPTk
https://url.cn/C1RBquLO
https://url.cn/5mhNpqCB
https://url.cn/BEi9lNom
https://url.cn/qywXdoaS
https://url.cn/f7OWwIky
https://url.cn/2KM2o3X4
https://url.cn/LQUlYJFR
https://url.cn/WmdOY564
https://url.cn/9ObFCEtC
https://url.cn/QJF18lUW
https://url.cn/jxFXCZVy
https://url.cn/NJecjVet
https://url.cn/wr8PSz1b
https://url.cn/Qamff4SE
https://url.cn/Lms5mLNo
https://url.cn/lXAwv1YU
https://url.cn/FCPUhepF
https://url.cn/lfN8yp4K
https://url.cn/yUtz4xzk
https://url.cn/R1kQBEvq
https://url.cn/qCC7wADQ
https://url.cn/kqgekMkq
https://url.cn/RX37YSwG
https://url.cn/x8pcfpCy
https://url.cn/l6z5ZMKI
https://url.cn/AxJmTnaj
https://url.cn/qxyCddl5
https://url.cn/Yg2l8eZ1
https://url.cn/Vbds93LQ
https://url.cn/sWTxD1MU
https://url.cn/TLKe8Scz
https://url.cn/SaHAGpsW
https://url.cn/76PogU6V
https://url.cn/RghI4Uqi
https://url.cn/00VleWoi
https://url.cn/or6JNHQZ
https://url.cn/GPUg5EEz
https://url.cn/ghzQXzmU
https://url.cn/n2KVo02q
https://url.cn/7O0iRtTg
https://url.cn/PBonoLeI
https://url.cn/9bDpVAvS
https://url.cn/wADs2odb
https://url.cn/q8XkwrKs
https://url.cn/HSTOWXjV
https://url.cn/LqaDwpNI
https://url.cn/G1kgQRQD
https://url.cn/98Y5nKpg
https://url.cn/8Tia7lJv
https://url.cn/RK4aG4vZ
https://url.cn/xyVCDy5d
https://url.cn/VsQK4CJX
https://url.cn/SU9Bso4I
https://url.cn/UpJ5Z8yO
https://url.cn/PX0TBeq6
https://url.cn/4ReCjqKD
https://url.cn/k5Tjk56b
https://url.cn/nehIMXpB
https://url.cn/zre3e7qu
https://url.cn/QJqfgSwo
https://url.cn/kYHyyNK9
https://url.cn/ImoYNmpW
https://url.cn/1osJTUzM
https://url.cn/FcL2vFYn
https://url.cn/U6KT1XT9
https://url.cn/ocvK126l
https://url.cn/1eJfSG5w
https://url.cn/yur7DUb6
https://url.cn/KL2LmcQ7
https://url.cn/gfxbqOFp
https://url.cn/xvRhrn00
https://url.cn/dHcd5SCN
https://url.cn/FWwTF8N7
https://url.cn/GnpGv2VS
https://url.cn/l9N5C2YB
https://url.cn/zy88BT1v
https://url.cn/hAuU3bNn
https://url.cn/WSMFFkSC
https://url.cn/fjNebdr5
https://url.cn/SMolfuIm
https://url.cn/lQD7Pj3y
https://url.cn/VqHGutrq
https://url.cn/ljQI9xop
https://url.cn/c447ZFTD
https://url.cn/ZWADaeEc
https://url.cn/bzsLtdlh
https://url.cn/uD8vKuwf
https://url.cn/phnqijg9
https://url.cn/g5CWgjCv
https://url.cn/SwJ6IBwk
https://url.cn/daB0g0ge
https://url.cn/ahoN6LH9
https://url.cn/7e0gwULs
https://url.cn/bbLKQjoz
https://url.cn/9ARCKnVo
https://url.cn/vB6zXusc
https://url.cn/97lrtlK7
https://url.cn/DxzOGA7T
https://url.cn/qIoPlpXo
https://url.cn/hJZvpdYm
https://url.cn/k9LhlAAM
https://url.cn/79LnmZvZ
https://url.cn/QzKopRbg
https://url.cn/emSEUvlF
https://url.cn/YqhOUl0d
https://url.cn/tDTDSGuj
https://url.cn/Bvq5rz1G
https://url.cn/pJGbmURc
https://url.cn/DW6iz4U3
https://url.cn/rNL2wd2F
https://url.cn/ELFBRoqK
https://url.cn/Zu1z6jyR
https://url.cn/X37nW1dC
https://url.cn/zQxXymBN
https://url.cn/0NxE8yyQ
https://url.cn/qCygWpfI
https://url.cn/eHD3rkme
https://url.cn/SnGNCYqp
https://url.cn/pG6ZBUhm
https://url.cn/9o2JNdmg
https://url.cn/lBJx9MPk
https://url.cn/YkpzwbbS
https://url.cn/r1KGu4Yn
https://url.cn/HSLjU7Wk
https://url.cn/eRLqVWHx
https://url.cn/YxyXDuJB
https://url.cn/XjDGy92m
https://url.cn/YTb4e4A7
https://url.cn/ZY7I7m3U
https://url.cn/0FLaDYbk
https://url.cn/lHGJW0Z9
https://url.cn/SfuUurUe
https://url.cn/hziGqO6I
https://url.cn/E8KhXkwy
https://url.cn/AbjufzOz
https://url.cn/ff0YC6Y7
https://url.cn/7YLHer6I
https://url.cn/OltR3bzo
https://url.cn/y1IGcCFe
https://url.cn/GbSWNUul
https://url.cn/ln13VAbx
https://url.cn/Fa55IQnE
https://url.cn/6ARlhD4S
https://url.cn/fRCG2eYt
https://url.cn/GhOxzd4F
https://url.cn/pSJ9XmAo
https://url.cn/RkItivFo
https://url.cn/WVkzjK1v
https://url.cn/on1Nodes
https://url.cn/12U9kAGq
https://url.cn/P7SkHqvb
https://url.cn/y2uNWMJ6
https://url.cn/HLOBkTg5
https://url.cn/UHDzbZ5N
https://url.cn/co0o1sjW
https://url.cn/bViWjFmR
https://url.cn/AmBhW0MZ
https://url.cn/CjGacFKR
https://url.cn/ANoQmvUd
https://url.cn/aJKtMySa
https://url.cn/N9HN16v5
https://url.cn/C4z0ooXY
https://url.cn/zcw45qm8
https://url.cn/X359Mr1d
https://url.cn/ZkboLHAI
https://url.cn/145y2IOh
https://url.cn/bdybKgRD
https://url.cn/SJF6rwLN
https://url.cn/HQzCsL74
https://url.cn/W7wuNtjm
https://url.cn/uyZd1ViE
https://url.cn/KSzfcuUW
https://url.cn/KMr0leK3
https://url.cn/Kksl8epo
https://url.cn/kCe6HOf9
https://url.cn/oP9E2BxM
https://url.cn/nHoiMbRb
https://url.cn/HsD5Fjnj
https://url.cn/RdqQEVth
https://url.cn/rvhSDbVF
https://url.cn/yjNO9yLb
https://url.cn/z1KNeIvo
https://url.cn/irKNooKL
https://url.cn/w7XFis1O
https://url.cn/F5T3On9p
https://url.cn/v3hzOMg3
https://url.cn/RJV71BEn
https://url.cn/a1YmXHNT
https://url.cn/9PV8ZNTF
https://url.cn/aSKSrdiD
https://url.cn/s5Cpjl4H
https://url.cn/pnlO8pir
https://url.cn/nUm3Wx7r
https://url.cn/xSnAHkP6
https://url.cn/w9oCGq1V
https://url.cn/fsyasLu9
https://url.cn/PH5m1oAB
https://url.cn/tDfUZfnJ
https://url.cn/d8tX6JWR
https://url.cn/SxYBaXzf
https://url.cn/XXjkIdSX
https://url.cn/U0XfDSdA
https://url.cn/9Xv6KjYK
https://url.cn/e3bmHj4e
https://url.cn/AxjzJXbK
https://url.cn/aZV5LwMY
https://url.cn/9tsZpsGH
https://url.cn/0FcLlPsn
https://url.cn/VY1Q2R7H
https://url.cn/zopbHzRA
https://url.cn/N9V0UMRq
https://url.cn/jDI6yllF
https://url.cn/Ihz61eRm
https://url.cn/52ui3zX8
https://url.cn/eKfCOP2Z
https://url.cn/BbVPuKKN
https://url.cn/tlZsUNIQ
https://url.cn/GvEeQutm
https://url.cn/zocfTmZh
https://url.cn/rWKvgrzS
https://url.cn/CXEzQtn5
https://url.cn/nxkCxo5F
https://url.cn/iuCHREQV
https://url.cn/YZtMiFf6
https://url.cn/ut2ciwz3
https://url.cn/O5W1IEU1
https://url.cn/cDs45Ugs
https://url.cn/pWxlmriX
https://url.cn/XYvDQ85B
https://url.cn/i6bCjcE9
https://url.cn/2EBx7AP1
https://url.cn/2X6oKiFZ
https://url.cn/OUGsrLyZ
https://url.cn/kxvvOzgZ
https://url.cn/IcrH4jx5
https://url.cn/23gI7bdL
https://url.cn/XClmR18Q
https://url.cn/sBuzdL4f
https://url.cn/8VRVCHqt
https://url.cn/Q9Jr4PCx
https://url.cn/iG1Jv3el
https://url.cn/RUghXZWP
https://url.cn/EauzhQYs
https://url.cn/hSySmaHd
https://url.cn/PJuUZqTe
https://url.cn/Ogjtvjs9
https://url.cn/jYkRGoev
https://url.cn/ByJKx7Yp
https://url.cn/lZJ4wsXB
https://url.cn/dPa3Yrqx
https://url.cn/wWQfaCx9
https://url.cn/nCIsJWKh
https://url.cn/pACkjSGt
https://url.cn/xhwat8RT
https://url.cn/wZrZgkLA
https://url.cn/G58PqQWo
https://url.cn/3SQoCKvF
https://url.cn/okTB5SH8
https://url.cn/dUvYWKYG
https://url.cn/77iycbTh
https://url.cn/H11D6JN7
https://url.cn/nEr9P9F7
https://url.cn/pO8a1JPH
https://url.cn/eL9gWpvl
https://url.cn/2r9k3TeR
https://url.cn/tBX41asN
https://url.cn/iLdc0P1e
https://url.cn/kJUVAjTH
https://url.cn/yoTMV2GR
https://url.cn/repW35k2
https://url.cn/tK9YqKwp
https://url.cn/7oLuiSIX
https://url.cn/LFcr6wJX
https://url.cn/AE6iRF6E
https://url.cn/EaT1fyn8
https://url.cn/5fIszHaV
https://url.cn/NlkpNlbr
https://url.cn/9lJtuOKf
https://url.cn/8Ti8Zjpu
https://url.cn/IMZyXmOc
https://url.cn/5xaN5JPb
https://url.cn/v39Aaavf
https://url.cn/1s9CNq7o
https://url.cn/i2m3i9un
https://url.cn/AjS7Fncp
https://url.cn/ig9AmQLt
https://url.cn/CvkpoPjt
https://url.cn/IDXyJaXD
https://url.cn/0toKCit5
https://url.cn/TTlioDmJ
https://url.cn/k5UZ9XYU
https://url.cn/lsXHrua5
https://url.cn/0LGCV06z
https://url.cn/JMIxg9BY
https://url.cn/5W5ee9hd
https://url.cn/2wrvbcdW
https://url.cn/7XhKyV23
https://url.cn/Rl6Enar7
https://url.cn/l74pLoCr
https://url.cn/KFGbHLoH
https://url.cn/0zCj286M
https://url.cn/QRGBtmXs
https://url.cn/yQjOva4E
https://url.cn/jguZOeg6
https://url.cn/C3aMKBIU
https://url.cn/uqIljwMu
https://url.cn/ELca9F17
https://url.cn/SyljePp9
https://url.cn/WOf3v0Dj
https://url.cn/4RnF2izH
https://url.cn/ey83KFi2
https://url.cn/BqHB5204
https://url.cn/75qwOw0i
https://url.cn/15vfqhZN
https://url.cn/TF9caXQ2
https://url.cn/718uflIM
https://url.cn/kL3eruNh
https://url.cn/7xsGmUYN
https://url.cn/Zw4pK4ck
https://url.cn/847fUkmT
https://url.cn/y286b1iM
https://url.cn/uNJTW1ke
https://url.cn/vwfnxFjl
https://url.cn/yemy15q8
https://url.cn/zY7YK2Qn
https://url.cn/E93h0wRX
https://url.cn/rDq1SARW
https://url.cn/2VLfkfgp
https://url.cn/FHnOQ29y
https://url.cn/wP1pWJ4o
https://url.cn/FwZrfv5H
https://url.cn/yhOENKE7
https://url.cn/bhrfhC3e
https://url.cn/BfetwI3p
https://url.cn/0j4Bulz0
https://url.cn/7d37x50n
https://url.cn/buZBUjiV
https://url.cn/nOESDblQ
https://url.cn/lsmXUc0j
https://url.cn/0dji0euG
https://url.cn/qlqBjRot
https://url.cn/eb9jSk55
https://url.cn/8EYBOIn9
https://url.cn/8ZVftRV6
https://url.cn/vA7jFM0s
https://url.cn/40pydAel
https://url.cn/TkNjpJjM
https://url.cn/BCxhRI2k
https://url.cn/jsTQywq9
https://url.cn/sOxM6A7o
https://url.cn/BpjAhBz3
https://url.cn/YhAdM7DB
https://url.cn/p6DSmPrN
https://url.cn/hOv1kDQ9
https://url.cn/bEO3XTcE
https://url.cn/eBJmHjKB
https://url.cn/kM198q6f
https://url.cn/i6hkCCnG
https://url.cn/A8NGVbho
https://url.cn/DJAJodWK
https://url.cn/xXjv4aWi
https://url.cn/7fFa4bcR
https://url.cn/KYqGZgBx
https://url.cn/4yWLqhQW
https://url.cn/67gSbUi3
https://url.cn/2VHb6fWz
https://url.cn/TUEr2HNs
https://url.cn/39msMccT
https://url.cn/dM4LgB15
https://url.cn/haddbdNp
https://url.cn/LQODd7Oy
https://url.cn/pO7vKVQO
https://url.cn/F91hG22l
https://url.cn/BN7JXy1D
https://url.cn/dct5wPay
https://url.cn/NYA7jfmf
https://url.cn/n5CZ6QHT
https://url.cn/v9UNWivc
https://url.cn/crfMYjVh
https://url.cn/0iVkAFOE
https://url.cn/oZpZr0cK
https://url.cn/XbANXvjZ
https://url.cn/zq27SbFS
https://url.cn/fnG8rpkH
https://url.cn/hR0ijk3F
https://url.cn/7neO0Fj7
https://url.cn/omhAwlKF
https://url.cn/GbgN1SXF
https://url.cn/SGINNoME
https://url.cn/W8rDXUXS
https://url.cn/e935RYET
https://url.cn/OqSJKIP7
https://url.cn/bOZ2fVqQ
https://url.cn/2OYztGEy
https://url.cn/ueGToeRo
https://url.cn/gwAcjrWO
https://url.cn/X8Ih0tlK
https://url.cn/6NissGVY
https://url.cn/YwPfvLEO
https://url.cn/zD71hvSi
https://url.cn/v5YFAdMO
https://url.cn/WobJ3duO
https://url.cn/vYi1l0x7
https://url.cn/ODxjZw6z
https://url.cn/HvV2HnZx
https://url.cn/88d7Yoot
https://url.cn/bBKdccpj
https://url.cn/cddlJjfo
https://url.cn/vMgT8fpI
https://url.cn/oIGF4CRU
https://url.cn/WxpjeEPX
https://url.cn/6Shs9PD1
https://url.cn/vfRVZxE8
https://url.cn/XPvGl6K8
https://url.cn/pxZDhNYO
https://url.cn/RNAfX20y
https://url.cn/TmAttBmt
https://url.cn/TfKLkqDb
https://url.cn/ESjlq79n
https://url.cn/nRtI2UHS
https://url.cn/iBpMVRYC
https://url.cn/ab16hadc
https://url.cn/trEjXzhM
https://url.cn/vbkhPaU5
https://url.cn/2VnkEuao
https://url.cn/bqCxgkOX
https://url.cn/JT3Xzhyl
https://url.cn/2JFAMOKA
https://url.cn/Wa6JrY8c
https://url.cn/TsAA8nQG
https://url.cn/XtQA47zV
https://url.cn/EhoG5WkU
https://url.cn/la0N6vV5
https://url.cn/yjUsXt7r
https://url.cn/E1PJH0SC
https://url.cn/IKrgGgvJ
https://url.cn/S5vnuu5l
https://url.cn/INAcKDko
https://url.cn/9tT7fdEL
https://url.cn/R8Vb3kA8
https://url.cn/EPBr9HTP
https://url.cn/WyRkrO8M
https://url.cn/a1N9EIXY
https://url.cn/uEQb4xy2
https://url.cn/TOQ0NAwc
https://url.cn/JGpjovUv
https://url.cn/ARQ1Xaje
https://url.cn/i3lYH6pV
https://url.cn/qP5rywHY
https://url.cn/uPGPn8pM
https://url.cn/ZSUvrwpG
https://url.cn/31ZSg8Ns
https://url.cn/3tF6E3Iw
https://url.cn/XVzY4ijo
https://url.cn/4NWk3ea9
https://url.cn/snXLOf4e
https://url.cn/JStY8nDp
https://url.cn/FR0WzZE5
https://url.cn/y97vLTdA
https://url.cn/ZsHpk69J
https://url.cn/oWkp2nWC
https://url.cn/PIfaz7uj
https://url.cn/JWKrBPYj
https://url.cn/zxzbNYd5
https://url.cn/GMbbkiEC
https://url.cn/cQUMv3YL
https://url.cn/hEAXvnAd
https://url.cn/1aRcCpPO
https://url.cn/r5yKGZHB
https://url.cn/F8WM3pTQ
https://url.cn/JGiiDdDY
https://url.cn/dlbV9Apt
https://url.cn/kcObAZag
https://url.cn/lCxidfU4
https://url.cn/DtglQvgf
https://url.cn/8QiS8JjE
https://url.cn/ySEyUn7f
https://url.cn/NL0M7J0X
https://url.cn/dPNoxxRf
https://url.cn/hSv96iHY
https://url.cn/PqZzupOq
https://url.cn/SqMaFrsQ
https://url.cn/zV75IbzN
https://url.cn/r3AfaYZz
https://url.cn/JEjnLLrK
https://url.cn/G8SBJPnC
https://url.cn/1wuafICx
https://url.cn/4zAlJgze
https://url.cn/GAUkDLg0
https://url.cn/eiXm0bsF
https://url.cn/VhdO3wyx
https://url.cn/3T6o9Duk
https://url.cn/U6Z1tWHU
https://url.cn/j5OXxKIa
https://url.cn/ViZDtGuQ
https://url.cn/rgxVsnk1
https://url.cn/a92R011s
https://url.cn/hB98y0X4
https://url.cn/rAw0Hugi
https://url.cn/b6G1KmMy
https://url.cn/JwzF5Aei
https://url.cn/ocHdhfWc
https://url.cn/bVErpoMl
https://url.cn/ZIwTAqqe
https://url.cn/nJn2mHax
https://url.cn/0BZfY0DY
https://url.cn/rQWTdknS
https://url.cn/lNqLXoUj
https://url.cn/BAq4zZ3E
https://url.cn/T476N0nU
https://url.cn/ab1t2vur
https://url.cn/k1R4ITFy
https://url.cn/iPL6UYuM
https://url.cn/EGk9Ho6J
https://url.cn/33evCLi9
https://url.cn/c1B1EkTQ
https://url.cn/x5Pqd28y
https://url.cn/DK3I8kmp
https://url.cn/GL0iE1i7
https://url.cn/49e22DU6
https://url.cn/r81Rha2m
https://url.cn/v2FBtj7G
https://url.cn/kHY0J2my
https://url.cn/q7PVHVTJ
https://url.cn/zio7jf24
https://url.cn/hAz976m8
https://url.cn/aUVCejUJ
https://url.cn/5beYEBTy
https://url.cn/gaw4u91Z
https://url.cn/Ksw02NHj
https://url.cn/dRxO3icW
https://url.cn/WRiREOYQ
https://url.cn/ybWhRTyN
https://url.cn/viROPTUB
https://url.cn/7HMmNLCZ
https://url.cn/s5r90r4t
https://url.cn/6VdkIoex
https://url.cn/Sxgr3bwG
https://url.cn/Dj5IAsrS
https://url.cn/s31pK1C4
https://url.cn/jT6iHxY0
https://url.cn/ioGCcN3F
https://url.cn/4Cgkl7ed
https://url.cn/vImjj3kL
https://url.cn/l7TZtjup
https://url.cn/BzSQOy8z
https://url.cn/IElPMuE7
https://url.cn/XHx7iKUB
https://url.cn/9jWrFqO6
https://url.cn/ggLXsHrc
https://url.cn/UF8fd49P
https://url.cn/W3MVnkJx
https://url.cn/uZMZKO2d
https://url.cn/I6YA1mLF
https://url.cn/tpXyggTm
https://url.cn/449mPTHB
https://url.cn/h2hCWkCf
https://url.cn/pCqr2rL0
https://url.cn/qTmdyNxu
https://url.cn/6gQgV1gs
https://url.cn/3DrFQYW1
https://url.cn/LVnKhZl6
https://url.cn/NJvbI5vP
https://url.cn/RMl39kMT
https://url.cn/k0oYTArU
https://url.cn/KqZ0KpIO
https://url.cn/EBU3rS1u
https://url.cn/WhuwnOOz
https://url.cn/Sciyaeak
https://url.cn/eTPQRJ2W
https://url.cn/WZlqXax5
https://url.cn/AgCfJqOL
https://url.cn/Wg11q0yU
https://url.cn/dCXlHmWY
https://url.cn/OYMGf4hj
https://url.cn/uexaSGTc
https://url.cn/nMF7scXk
https://url.cn/etbaSfVq
https://url.cn/Pa1tVTlN
https://url.cn/xRTRfDMp
https://url.cn/EEzAmQrn
https://url.cn/PqzM6vlA
https://url.cn/Q6sAmptV
https://url.cn/UFFcfM1F
https://url.cn/zDpGru6t
https://url.cn/Cjx7iVAZ
https://url.cn/kkHkqBaY
https://url.cn/3GTP4oZN
https://url.cn/Z6y2VZP8
https://url.cn/qKqDk7kc
https://url.cn/fbuVk3Kp
https://url.cn/EMnClvVB
https://url.cn/BzZFev3d
https://url.cn/YxZMfKpq
https://url.cn/f64VrPWu
https://url.cn/G5WqIeVD
https://url.cn/jbCz9m6b
https://url.cn/jTV0uYfg
https://url.cn/3RfWKKTk
https://url.cn/AS7IGr4g
https://url.cn/XWPvz64d
https://url.cn/RVdBGf76
https://url.cn/Cty4rdhj
https://url.cn/7vqrWYp2
https://url.cn/Iu4R8bWg
https://url.cn/UlxR80ZO
https://url.cn/ZBoLWpIG
https://url.cn/vSFmc6Ez
https://url.cn/GsJH00Mi
https://url.cn/fyGJnFYI
https://url.cn/nxUjYNSR
https://url.cn/4Ry0TNl4
https://url.cn/qei43U7u
https://url.cn/Z2wA4tsZ
https://url.cn/kiWyjn0I
https://url.cn/L8C5VzKK
https://url.cn/V5DDGmcZ
https://url.cn/4XXQz501
https://url.cn/to2lTnc6
https://url.cn/dspXPKEF
https://url.cn/1GoncogU
https://url.cn/dLZvNbyD
https://url.cn/8u1kqlIp
https://url.cn/VPzDktNM
https://url.cn/jLMkY5vY
https://url.cn/eEaYEP5V
https://url.cn/7OWydAAq
https://url.cn/Co5lJ5IX
https://url.cn/6QTLc2sp
https://url.cn/W2oP9gaB
https://url.cn/5IbCpBgO
https://url.cn/PLgpbJL0
https://url.cn/DOK5m735
https://url.cn/uYhReFPc
https://url.cn/Ut7kLVun
https://url.cn/JBJgApyn
https://url.cn/qY0nBEkO
https://url.cn/d6ruw02q
https://url.cn/XhqOaKiH
https://url.cn/PxsmYCQt
https://url.cn/jLeu06Wd
https://url.cn/GY7Ob8Ux
https://url.cn/rHi73u2B
https://url.cn/aIwvl5tk
https://url.cn/8vueAajd
https://url.cn/Lh6XAnoL
https://url.cn/pz0evZ6M
https://url.cn/xaHGc9LG
https://url.cn/puzEX1qv
https://url.cn/g9BJV9ty
https://url.cn/DIjxK9Ef
https://url.cn/JEvuCk0k
https://url.cn/4an9Kg28
https://url.cn/7lPFL5oZ
https://url.cn/bl1z8cEz
https://url.cn/yqwuu3dp
https://url.cn/g6nCvnHx
https://url.cn/1tiTm7qy
https://url.cn/bWNQhzKX
https://url.cn/cBgIFIAc
https://url.cn/qGxeQufZ
https://url.cn/leNeTmLY
https://url.cn/cIFsC6j6
https://url.cn/5sFE5E5t
https://url.cn/ksGng4rz
https://url.cn/GrujoH7R
https://url.cn/e8eD3ZD9
https://url.cn/aYuGaCwL
https://url.cn/l2ATJWJf
https://url.cn/vWLV6mVA
https://url.cn/5gJg3SXl
https://url.cn/EwH6AjS5
https://url.cn/TRhaklQJ
https://url.cn/2Rtand6q
https://url.cn/TYxl2CRi
https://url.cn/61kNmdLn
https://url.cn/Oyt6EPua
https://url.cn/FNuyTETP
https://url.cn/qt0zALH3
https://url.cn/NNSDJIC4
https://url.cn/JyNwk3lP
https://url.cn/2MRBvrSn
https://url.cn/IY5FSVBl
https://url.cn/tot6iKkA
https://url.cn/3YGawbq8
https://url.cn/eJqI0lkU
https://url.cn/wE316lRi
https://url.cn/vZAXAZSO
https://url.cn/Qu8oTnGM
https://url.cn/lv5YZnxb
https://url.cn/jcfLbTxU
https://url.cn/8U4gNSvv
https://url.cn/XcRkGrVV
https://url.cn/R5JaQXgL
https://url.cn/lbaQaDrz
https://url.cn/IdgKy2bL
https://url.cn/Hoq4Qo9h
https://url.cn/D6bfldPL
https://url.cn/htfhYtbc
https://url.cn/rWVPGHeG
https://url.cn/3QFaqZxF
https://url.cn/fhKIYxzN
https://url.cn/RM02k65l
https://url.cn/SB9hxi4U
https://url.cn/jbWbxv9Y
https://url.cn/s2CfExOa
https://url.cn/1wibxW70
https://url.cn/I1CBcFZe
https://url.cn/ZbxPgJvC
https://url.cn/IfO9sS0Z
https://url.cn/4B4OhvlQ
https://url.cn/1RquljmQ
https://url.cn/NgcBKZBX
https://url.cn/UANIkbUZ
https://url.cn/OT1VTvr8
https://url.cn/zAIPrkbq
https://url.cn/eUMG1Rmb
https://url.cn/UXUvaPbW
https://url.cn/WAi0sQqB
https://url.cn/Wrtxj1dE
https://url.cn/B27EhUZ1
https://url.cn/T8miHXXG
https://url.cn/8wMpLoyF
https://url.cn/bjjUuAxe
https://url.cn/dTlgYMpI
https://url.cn/ujLUZ1wF
https://url.cn/P4nX6feI
https://url.cn/tlI74sFa
https://url.cn/z4hCLtUb
https://url.cn/bUjR9LNh
https://url.cn/6TCEpFVC
https://url.cn/A9RU2Lv1
https://url.cn/50i8XBF0
https://url.cn/YZuebzFq
https://url.cn/d3uVoX65
https://url.cn/73OpXeOX
https://url.cn/jV0nrkON
https://url.cn/l5u35qoW
https://url.cn/3F51FJuB
https://url.cn/ZacFi0o3
https://url.cn/i1IKz135
https://url.cn/Albqlxk4
https://url.cn/vphASCNb
https://url.cn/I4KVeQjK
https://url.cn/kmRbfpUE
https://url.cn/uO8NbM6B
https://url.cn/u8lYpIaB
https://url.cn/69zHIgzf
https://url.cn/iPOXU9ZH
https://url.cn/V6rMuRDJ
https://url.cn/TUgN1oPi
https://url.cn/93CxJlzG
https://url.cn/PZ4PAQRO
https://url.cn/a3P3wWDa
https://url.cn/uEiAivLw
https://url.cn/b2ta3Duc
https://url.cn/jFciZzYL
https://url.cn/ypE6FN7V
https://url.cn/tZfpv8JL
https://url.cn/rJz4AqZr
https://url.cn/16LW0V1x
https://url.cn/xpCVbrTM
https://url.cn/Rsm3Q31y
https://url.cn/YXA8S4dU
https://url.cn/4EFaIj42
https://url.cn/9xKtzZX4
https://url.cn/r6osawzj
https://url.cn/wSXOgMrA
https://url.cn/bnPo4W5q
https://url.cn/66iwpINC
https://url.cn/9wXh1SSL
https://url.cn/SHJomEkd
https://url.cn/CzbMbQHf
https://url.cn/aEQz4fkk
https://url.cn/7a7664WL
https://url.cn/p77qHDbN
https://url.cn/VpDgSVcC
https://url.cn/n8z3K18X
https://url.cn/RBVIrCYW
https://url.cn/DLg23Mdu
https://url.cn/NJeBYWRa
https://url.cn/21hIZvCt
https://url.cn/aQER461h
https://url.cn/vFp1JZ4j
https://url.cn/le2PzYT9
https://url.cn/BHTP2R9d
https://url.cn/GEaByxkt
https://url.cn/9ZAPdnbi
https://url.cn/xYYp9vsF
https://url.cn/OA12tEGz
https://url.cn/IScHMw9z
https://url.cn/dentOHGr
https://url.cn/tyMv73wz
https://url.cn/EC9SwETY
https://url.cn/xDUGc9bn
https://url.cn/eegWBbqk
https://url.cn/JjgBlZfw
https://url.cn/vm1WwBB1
https://url.cn/uowS8txh
https://url.cn/ZklNSEBM
https://url.cn/BpnR6E6r
https://url.cn/S50bEQEG
https://url.cn/UmKk9ROY
https://url.cn/VUIlFBkF
https://url.cn/C0IlX33K
https://url.cn/AkkQ4ACH
https://url.cn/TvuqAR7z
https://url.cn/BY9UhXGW
https://url.cn/hsfZLXBz
https://url.cn/6nLzRo6j
https://url.cn/NNUQB7M7
https://url.cn/DNjpuyQD
https://url.cn/WqYgo28x
https://url.cn/8bfXbkc3
https://url.cn/ZtxLHfkC
https://url.cn/r2lkdY98
https://url.cn/cP82iNI2
https://url.cn/rIXf4GZz
https://url.cn/H9INCUxN
https://url.cn/uGqZBQok
https://url.cn/ktplAMfW
https://url.cn/L5GSStLz
https://url.cn/np2adWze
https://url.cn/z8Z1KxYf
https://url.cn/njGIhGrp
https://url.cn/SbdsWVP2
https://url.cn/HMplAxc3
https://url.cn/XaTohaL1
https://url.cn/lIivlrmr
https://url.cn/bOJSJOpU
https://url.cn/FFrGcKHO
https://url.cn/a4QMlI35
https://url.cn/dYYynd9r
https://url.cn/q6o6ZQR7
https://url.cn/sRCqkZWv
https://url.cn/24wbwibR
https://url.cn/J560tlei
https://url.cn/ZrPOHUim
https://url.cn/14dQ4kuN
https://url.cn/lTeaJIFg
https://url.cn/yBWIbpv1
https://url.cn/Z8slbiF1
https://url.cn/rfQCI9p4
https://url.cn/ljAxt8GU
https://url.cn/96tOknhK
https://url.cn/eWCIOFvZ
https://url.cn/q40RtPjv
https://url.cn/UjVb8y3C
https://url.cn/o4pYXqo1
https://url.cn/rmzcor31
https://url.cn/jV1h5tII
https://url.cn/N136Smhg
https://url.cn/8nqbmCCB
https://url.cn/sFZmRbso
https://url.cn/rQ7Z7W0T
https://url.cn/YKPMNami
https://url.cn/zzIMg4w6
https://url.cn/Otk2NPxx
https://url.cn/hHc0ZXuY
https://url.cn/eMV6JHBW
https://url.cn/gVfD44T3
https://url.cn/USKG8z9X
https://url.cn/vvWzI5Ew
https://url.cn/yGSY8KmH
https://url.cn/AqyavZyS
https://url.cn/iQmL7j36
https://url.cn/T0FGVYnC
https://url.cn/hxEj5bl5
https://url.cn/57Jt3UbV
https://url.cn/LfEJAlWC
https://url.cn/ZbYsiKap
https://url.cn/yL3eerBr
https://url.cn/z6RRKmJC
https://url.cn/i61NSzZ3
https://url.cn/bNUSj0pf
https://url.cn/iqdOrD5e
https://url.cn/z7C4MVZE
https://url.cn/IkDySfoP
https://url.cn/RVjNpYDI
https://url.cn/quIr9zhL
https://url.cn/QeH3NiNS
https://url.cn/d82p4SAf
https://url.cn/Gmkv5rvI
https://url.cn/ID2UeQzr
https://url.cn/JU1FqZ4K
https://url.cn/rP3OLks8
https://url.cn/J4MeYpI5
https://url.cn/0qhmJcaV
https://url.cn/nhpGe25g
https://url.cn/3AaNtEfH
https://url.cn/6Astx2gJ
https://url.cn/pw9cB1QU
https://url.cn/81vrsV8i
https://url.cn/En72sRzu
https://url.cn/7uf0WFxp
https://url.cn/rYmuCZqp
https://url.cn/JD88gGkL
https://url.cn/vJVCDuSl
https://url.cn/R9CLi4Ht
https://url.cn/3QE4AqpS
https://url.cn/iICIoSsS
https://url.cn/7KrAXbQ9
https://url.cn/WLpTEStx
https://url.cn/3wrR9vLr
https://url.cn/N9utzZnL
https://url.cn/YsvmVS0e
https://url.cn/vTGONsx7
https://url.cn/kvIBEiET
https://url.cn/Q7u9vNsf
https://url.cn/Hiej5mRm
https://url.cn/L5iZFSc0
https://url.cn/pb1wF9zI
https://url.cn/X71gRI4K
https://url.cn/rampotrE
https://url.cn/bi8Hn7Kg
https://url.cn/GXKMwZYO
https://url.cn/pGCkgeRo
https://url.cn/TLjCPksu
https://url.cn/Bh7FwNbM
https://url.cn/kgPBCAsz
https://url.cn/RIopXpKL
https://url.cn/d1YUlRKn
https://url.cn/kBZz5sok
https://url.cn/vfsA5ofd
https://url.cn/nbipjTpi
https://url.cn/sk95XitY
https://url.cn/jE8jUsCX
https://url.cn/J3qC5vAs
https://url.cn/1naL6A9z
https://url.cn/UBVFUzsz
https://url.cn/53igaGon
https://url.cn/Ply1j0e6
https://url.cn/NaBXnoeR
https://url.cn/ZEtSM55W
https://url.cn/OkthLr8k
https://url.cn/7iCkMQhc
https://url.cn/RHnRtM3o
https://url.cn/oOkIEUuJ
https://url.cn/bRlMK4T3
https://url.cn/j0D6mp1S
https://url.cn/AeRB3rGa
https://url.cn/727TBltJ
https://url.cn/VPttH2pi
https://url.cn/hyMxofXK
https://url.cn/JjwfW3aS
https://url.cn/J6Y876Yb
https://url.cn/u6tFOxzu
https://url.cn/1m7d0Tsg
https://url.cn/XcCoQSt5
https://url.cn/LMGYsDSi
https://url.cn/uXjCvOl7
https://url.cn/L2LaXudf
https://url.cn/cPjScP1Z
https://url.cn/c39aFdIG
https://url.cn/QQf417xB
https://url.cn/5z6TN0Mu
https://url.cn/1hv0CCt0
https://url.cn/XMLY0OQI
https://url.cn/VA42LouC
https://url.cn/6mrxEiop
https://url.cn/AqMJ7qA9
https://url.cn/Y5aImg9R
https://url.cn/x5VdDv8g
https://url.cn/E998jmJr
https://url.cn/sH6M13Xb
https://url.cn/14fkdYP3
https://url.cn/bjlWZ51o
https://url.cn/DL1dKsIX
https://url.cn/yuUWPNgb
https://url.cn/EyxvlG5r
https://url.cn/qHGWKgLP
https://url.cn/EE1xus6t
https://url.cn/VdmfcG9u
https://url.cn/qaCfUh8r
https://url.cn/DZ9mFUQV
https://url.cn/z4bshwLa
https://url.cn/cCTv39OV
https://url.cn/ITu2pvfa
https://url.cn/xA343F2z
https://url.cn/STMCo1KL
https://url.cn/xpQDQqp7
https://url.cn/aa25VLDT
https://url.cn/ou3nCjFT
https://url.cn/UM2Pl8WN
https://url.cn/vL6o72vM
https://url.cn/USyjgILE
https://url.cn/SR4nDw36
https://url.cn/wdOxyYYu
https://url.cn/9dAJLckM
https://url.cn/KtKpvUv1
https://url.cn/qE8uCWAq
https://url.cn/0ILvjJgz
https://url.cn/zsCpdDak
https://url.cn/VVWQwAAu
https://url.cn/WHxCshlo
https://url.cn/ZtzZy8UJ
https://url.cn/VkNpBEuQ
https://url.cn/TQgXtbw0
https://url.cn/dv8SnVqU
https://url.cn/rCjNvi6q
https://url.cn/bMo09Vt1
https://url.cn/Uz4QFmov
https://url.cn/h8LJPICz
https://url.cn/hVP58Fns
https://url.cn/ckbSkkfa
https://url.cn/vCHOsxvd
https://url.cn/cy0artmM
https://url.cn/hnwjfYka
https://url.cn/KaGWLTsn
https://url.cn/4SfUQef6
https://url.cn/l7Y6xubV
https://url.cn/LKIneIex
https://url.cn/qNVEHeje
https://url.cn/S1UUyez4
https://url.cn/3Ks6106M
https://url.cn/Kc0rPjBv
https://url.cn/GNbVQlAH
https://url.cn/OYP4zKEs
https://url.cn/Bk4X2agr
https://url.cn/xJM1DIqh
https://url.cn/2G8iAIMD
https://url.cn/bZV8HZHL
https://url.cn/LUfytRw2
https://url.cn/nKLnJkax
https://url.cn/4F3n92Gi
https://url.cn/nJ0Wbnoe
https://url.cn/s46H0Xu9
https://url.cn/vS2yxWQz
https://url.cn/e7CBqcc4
https://url.cn/zWhMpYTL
https://url.cn/Dnc71iYD
https://url.cn/JoURces1
https://url.cn/IqTWtf7f
https://url.cn/SvOS1tNf
https://url.cn/CTm0jEGN
https://url.cn/HFE6kd1U
https://url.cn/HewXquwl
https://url.cn/Cq2xwBsL
https://url.cn/IFgwYABr
https://url.cn/AuGieP7i
https://url.cn/UACWAcuU
https://url.cn/taQvWVJn
https://url.cn/QSx6WRA8
https://url.cn/jxLvvjo0
https://url.cn/vWrxiz0B
https://url.cn/9JNfQN3B
https://url.cn/B9Zz1KNd
https://url.cn/vWHar4TI
https://url.cn/9yr1yLOJ
https://url.cn/zoGkP7xc
https://url.cn/AVo2XIEF
https://url.cn/oOjjEgG3
https://url.cn/JqOxUn9u
https://url.cn/4UXFcyQj
https://url.cn/XBkmDaxK
https://url.cn/Xljo0q9R
https://url.cn/hRX0AULz
https://url.cn/1IOZFruP
https://url.cn/E7zje7aX
https://url.cn/IvC29O2Y
https://url.cn/1ORarfQg
https://url.cn/0uvf8hfK
https://url.cn/Zit3lCYa
https://url.cn/nXRI4C7M
https://url.cn/lfmFwmtj
https://url.cn/NdhpXEdA
https://url.cn/1Ya0hsos
https://url.cn/AmwV1JJV
https://url.cn/yc3EmY1N
https://url.cn/6yWSFGv7
https://url.cn/RE4rb9K4
https://url.cn/r4I2hzJb
https://url.cn/Fz9s0Opb
https://url.cn/riJo8b55
https://url.cn/l8m7NF49
https://url.cn/fEwZjyfk
https://url.cn/1qJHRMiS
https://url.cn/YhUvksqa
https://url.cn/FLWvGx04
https://url.cn/jxMKdqP4
https://url.cn/G50UigPy
https://url.cn/kFvJIhOZ
https://url.cn/6lrni12A
https://url.cn/RHApY9u4
https://url.cn/BUXmXaL1
https://url.cn/PnSWjjQt
https://url.cn/k4BOT5nJ
https://url.cn/9tp7ELVi
https://url.cn/lc5QmP9g
https://url.cn/lXlQy3eb
https://url.cn/LZtR1wJT
https://url.cn/gT5ywxVM
https://url.cn/tXq5iknc
https://url.cn/gFPrdHPm
https://url.cn/yNatZJQE
https://url.cn/xXK1CKtV
https://url.cn/SrV4E6Gi
https://url.cn/uMFc2Ine
https://url.cn/jXwuXUlL
https://url.cn/UcFutqaB
https://url.cn/nPZ1vFM2
https://url.cn/1WDAQQA4
https://url.cn/8eHSG3S1
https://url.cn/Q1hZKKtD
https://url.cn/IJctZuNM
https://url.cn/7adbHIQt
https://url.cn/GoHCKdWh
https://url.cn/u5HxhQ6I
https://url.cn/5nTstbLH
https://url.cn/3wEbLNuI
https://url.cn/FckDHsLn
https://url.cn/DKO10f9n
https://url.cn/1QO23XpP
https://url.cn/sPcjosqG
https://url.cn/ArGSGeP3
https://url.cn/42cnOOFY
https://url.cn/wztM9cne
https://url.cn/4E4i1k9K
https://url.cn/v4RZgHgz
https://url.cn/jW9p51bJ
https://url.cn/jh0qwEm4
https://url.cn/C9pNx4oG
https://url.cn/sYfB8rHK
https://url.cn/Rt0U1MFR
https://url.cn/rdQPu2LG
https://url.cn/aO4eZOjS
https://url.cn/hkPjqPyo
https://url.cn/cGcUXQP5
https://url.cn/fSHZoRe5
https://url.cn/POYbbhqm
https://url.cn/syEyiLNA
https://url.cn/sCYjPMo8
https://url.cn/QK5mnU0H
https://url.cn/qvGoLE2b
https://url.cn/z0Ad03rg
https://url.cn/LrJpRyNS
https://url.cn/GRVksfnc
https://url.cn/0TadW71w
https://url.cn/22w2R1kI
https://url.cn/7vd2nNZu
https://url.cn/Nx0Ud212
https://url.cn/s29oTO0n
https://url.cn/LwEctge3
https://url.cn/1aC7m7Th
https://url.cn/lGVVqc1q
https://url.cn/YnSa7eGQ
https://url.cn/t43xj99w
https://url.cn/CN0PRJ4A
https://url.cn/lCvonCTr
https://url.cn/9fY41ItS
https://url.cn/vKOaEbQe
https://url.cn/ka8S8f7E
https://url.cn/ANAZkwsy
https://url.cn/aV6anoYS
https://url.cn/tU5MjLAS
https://url.cn/ed0c24R5
https://url.cn/Eg2fZh9p
https://url.cn/Q1B9Ak72
https://url.cn/yTtbbHZm
https://url.cn/XfHruzpL
https://url.cn/b0r7zZjF
https://url.cn/HpMWR6zY
https://url.cn/CyYZs6rA
https://url.cn/ToCu6UXh
https://url.cn/wDvfIdce
https://url.cn/gehh5toL
https://url.cn/2vOXbvoa
https://url.cn/VVIwxoDF
https://url.cn/v5y5Tz1L
https://url.cn/cSWXD1dN
https://url.cn/3WXIVnYt
https://url.cn/QN1eNvue
https://url.cn/A1ym25Mq
https://url.cn/brlZizTz
https://url.cn/RX5BrxQb
https://url.cn/9ChdhcsD
https://url.cn/wFoc0723
https://url.cn/nREoz2tA
https://url.cn/gkkrWgbL
https://url.cn/3G9Sj0LD
https://url.cn/CxwXPG5q
https://url.cn/N1BnvpeH
https://url.cn/aF1vTldX
https://url.cn/7UjyDGfG
https://url.cn/YVqLqlXo
https://url.cn/de868YTs
https://url.cn/roU8vnfj
https://url.cn/BfByHL9N
https://url.cn/xfGJDEgA
https://url.cn/3ItnnGeL
https://url.cn/XZwXCH2d
https://url.cn/jwbIBZop
https://url.cn/KBijE5Z4
https://url.cn/qCgUQEe2
https://url.cn/0KRX0dXX
https://url.cn/lTmEi0ai
https://url.cn/kpbe4uyD
https://url.cn/UR2LmH13
https://url.cn/ft7M5tf8
https://url.cn/jHyLR80I
https://url.cn/cCi0vTyz
https://url.cn/locicr0I
https://url.cn/0UJntsFM
https://url.cn/92qhHiza
https://url.cn/ig9Pz52h
https://url.cn/WkOYUGqv
https://url.cn/WBw53jOh
https://url.cn/O6gpUUxg
https://url.cn/0okn6TG2
https://url.cn/4VZjRXp0
https://url.cn/W26OSIWs
https://url.cn/rIenoBvp
https://url.cn/BqgVWZxr
https://url.cn/kMKqZtk5
https://url.cn/anaPZFgf
https://url.cn/vAze2xZo
https://url.cn/IKeQyTBA
https://url.cn/RK6dJtMP
https://url.cn/ipYHXOrR
https://url.cn/jmDgtHGc
https://url.cn/t8Nx6UBa
https://url.cn/eQKMTNaL
https://url.cn/6Hf6v89W
https://url.cn/BP3TXe1c
https://url.cn/dvSvNJTo
https://url.cn/Wrwknb7s
https://url.cn/kYjqYHuM
https://url.cn/EKhvpI9V
https://url.cn/opV6OS8m
https://url.cn/SVs5OLdD
https://url.cn/gHaxHPKG
https://url.cn/9A3qvqXp
https://url.cn/cO4wwFJ4
https://url.cn/7fN4i2bQ
https://url.cn/xV7s7LFT
https://url.cn/WdA1Y51S
https://url.cn/zE4QuyP7
https://url.cn/n7CsBQjq
https://url.cn/nWZDKAZN
https://url.cn/HsSNRQBQ
https://url.cn/dzB9NxmR
https://url.cn/3SLYjqB5
https://url.cn/0YYLPlJ4
https://url.cn/NRWRo4Hg
https://url.cn/eXRpQa9q
https://url.cn/JERxBNRa
https://url.cn/d6G0j0Au
https://url.cn/v1s1OydH
https://url.cn/r0GkDeO1
https://url.cn/6APqE3AW
https://url.cn/YKv0kDyI
https://url.cn/VhVKDq6e
https://url.cn/cuHg5ySz
https://url.cn/vjYoqkkH
https://url.cn/wKNt7mzb
https://url.cn/hrQ4OoqK
https://url.cn/bBmAPDci
https://url.cn/t4NQ031n
https://url.cn/251IZEPJ
https://url.cn/KMOQK1hG
https://url.cn/l7NLkEaB
https://url.cn/KCRRoV18
https://url.cn/blorAPQj
https://url.cn/KCqqRVQc
https://url.cn/HI0frn42
https://url.cn/Lw9v6HeS
https://url.cn/w5XnfS2S
https://url.cn/AVPLUeZe
https://url.cn/NcGPlfo2
https://url.cn/aSz4Imx4
https://url.cn/b9u4gWwv
https://url.cn/CUFhSFZe
https://url.cn/vRsdFaWf
https://url.cn/iCOPWzQf
https://url.cn/vIIS3d9c
https://url.cn/LrIS1F0p
https://url.cn/scvqdksP
https://url.cn/wDhL1331
https://url.cn/GmI0Ff2B
https://url.cn/hw15WgHJ
https://url.cn/pJ9E1r5J
https://url.cn/QO5YnxNS
https://url.cn/cPIkmtEg
https://url.cn/2oj1McCs
https://url.cn/INEdTD8K
https://url.cn/LZwh0rqt
https://url.cn/TyjkXUZ9
https://url.cn/sqqE8XXl
https://url.cn/EJVHfAGl
https://url.cn/j7O7R6Sc
https://url.cn/LtsscFXc
https://url.cn/PIJW6U0v
https://url.cn/kulSJx5v
https://url.cn/z50WqaoY
https://url.cn/GT83H2NF
https://url.cn/fXTAIR88
https://url.cn/rdALcFIC
https://url.cn/IbYbRajI
https://url.cn/HKKWufIP
https://url.cn/V6kH6pNH
https://url.cn/gwwlQFsa
https://url.cn/QB093lkZ
https://url.cn/qnmF4AWn
https://url.cn/aFYKJnbl
https://url.cn/zmgX27zp
https://url.cn/Id4roDHs
https://url.cn/tNlXmDnE
https://url.cn/3mSaEbgt
https://url.cn/dJ2c1rsC
https://url.cn/OvJND0yF
https://url.cn/xW9K5bk9
https://url.cn/vAfQUkUP
https://url.cn/SV2iRDRU
https://url.cn/usW7QMrI
https://url.cn/nmbOlZmL
https://url.cn/gG2jVZdz
https://url.cn/ec9ZMUww
https://url.cn/F20vEcIR
https://url.cn/oDYGzb9J
https://url.cn/2KrKWFsb
https://url.cn/hqtBo3YJ
https://url.cn/ZzP1X74H
https://url.cn/CKwhU7aJ
https://url.cn/6lyx5xyG
https://url.cn/r88kKFSz
https://url.cn/dPolojm7
https://url.cn/S2imrbS4
https://url.cn/ikIss0Eu
https://url.cn/Nt0cdXej
https://url.cn/C1nhuYtz
https://url.cn/88xq6ypg
https://url.cn/WHKBYTXa
https://url.cn/zrHZAzPo
https://url.cn/5XisYLjw
https://url.cn/9HMSYXRN
https://url.cn/5zrMCGNl
https://url.cn/ufqsxIWo
https://url.cn/uOLetp7N
https://url.cn/9Xso8OSB
https://url.cn/GoNX9XM3
https://url.cn/HvedAw7o
https://url.cn/rRYI8fvp
https://url.cn/OpJqCke1
https://url.cn/TEpfc2J9
https://url.cn/8czSIxQ2
https://url.cn/I592I99V
https://url.cn/NW0wfysN
https://url.cn/XnsqJhoV
https://url.cn/rLq7yOtw
https://url.cn/ePJTCt4Q
https://url.cn/oA1To86I
https://url.cn/VTZUr0mX
https://url.cn/6DJ95dlS
https://url.cn/GBbvkGBq
https://url.cn/ppudSeDx
https://url.cn/EPnijfSP
https://url.cn/9nw4sg0F
https://url.cn/NEq89RXy
https://url.cn/fsiU1Zt2
https://url.cn/spI9V45O
https://url.cn/IT0oSns1
https://url.cn/0oACLCxt
https://url.cn/GsCYDKJH
https://url.cn/wcSJ9aC4
https://url.cn/Da6HyZ1C
https://url.cn/lNHbMwKo
https://url.cn/9EpfN4OM
https://url.cn/cqmFt2UO
https://url.cn/NknBlMYM
https://url.cn/BPINhhRm
https://url.cn/CnPcuV9a
https://url.cn/WTx4lAb4
https://url.cn/4o1dG9hn
https://url.cn/ejG7u3Lo
https://url.cn/lufVc2rw
https://url.cn/PFzGoBwc
https://url.cn/ne9w15e8
https://url.cn/s0cbIIbt
https://url.cn/nNNhJhMc
https://url.cn/YoHtIdDh
https://url.cn/AhfSrCHS
https://url.cn/4w1ysPKl
https://url.cn/y8rAvw8Z
https://url.cn/5AvrcKBC
https://url.cn/dcDsfCrO
https://url.cn/6drQUOOf
https://url.cn/dhiCQvzP
https://url.cn/1wDCjgrm
https://url.cn/WS07AOH8
https://url.cn/1VHan1DS
https://url.cn/NRgmmx34
https://url.cn/E3SDqd1c
https://url.cn/coDix20R
https://url.cn/spd94Kv8
https://url.cn/I75uFT04
https://url.cn/OifZQU2o
https://url.cn/bSdLM1em
https://url.cn/bFwnFH3A
https://url.cn/whCqmulp
https://url.cn/XrIl4HsB
https://url.cn/YUjl79YC
https://url.cn/fCI3saya
https://url.cn/8FMY6Ypd
https://url.cn/2G6CamIY
https://url.cn/SNfETV8p
https://url.cn/ULAgJAaD
https://url.cn/1tlahzJZ
https://url.cn/6dblwXez
https://url.cn/IgWpDZt2
https://url.cn/SIvgHmQw
https://url.cn/e13PjXzh
https://url.cn/C7P8BJYu
https://url.cn/9tjdVj2T
https://url.cn/NfpOnLlh
https://url.cn/TzbREWqv
https://url.cn/zMYSHOWR
https://url.cn/0JAsNfR3
https://url.cn/qaNobLLd
https://url.cn/zwd7JCo1
https://url.cn/jR3y3vBs
https://url.cn/OYXTXgzN
https://url.cn/APXofQpA
https://url.cn/go5fQ9DH
https://url.cn/0wRK3jz2
https://url.cn/8hmlnun6
https://url.cn/VAHsoJZJ
https://url.cn/zDsVhVp1
https://url.cn/BlLYE9Yd
https://url.cn/1NyY8gut
https://url.cn/EWtimB2c
https://url.cn/jBE4fJO5
https://url.cn/7iE8Cx6l
https://url.cn/dtoa2cYJ
https://url.cn/W1vhLZNW
https://url.cn/iYQ8ufl8
https://url.cn/GAKqb3ou
https://url.cn/3iEwcSZv
https://url.cn/6OGhMmBn
https://url.cn/ARETk8Gz
https://url.cn/OYscFJ41
https://url.cn/wMyaMaE4
https://url.cn/55oTSru8
https://url.cn/OmXT3u7y
https://url.cn/IrnWLrS0
https://url.cn/bAxiKnJb
https://url.cn/i9MW0iRy
https://url.cn/OmbaptDu
https://url.cn/OaIIqlPP
https://url.cn/O0kyFbOV
https://url.cn/0Oe93KGp
https://url.cn/gCDTXQvV
https://url.cn/Tr3lwiKH
https://url.cn/WVSyf2it
https://url.cn/ic9Wjuct
https://url.cn/RRF5kJ9I
https://url.cn/L4jdYVgi
https://url.cn/gNcSDUik
https://url.cn/YWRJsr1r
https://url.cn/cfQ2pvRx
https://url.cn/V8Dh2YRy
https://url.cn/QJbErjyj
https://url.cn/gRDa2MUM
https://url.cn/8AtdZzCO
https://url.cn/4AqcByVW
https://url.cn/jORhSzkO
https://url.cn/aRyM2yZe
https://url.cn/Cecgv12Z
https://url.cn/irGOzlta
https://url.cn/kdUE9S48
https://url.cn/AmNGwhG3
https://url.cn/GBybZkxf
https://url.cn/GeoMGbBk
https://url.cn/YEDIac9G
https://url.cn/GbhIdUpq

3、构建镜像

4、创建项目容器,发布运行!!!

以后我们使用了Docker之后,给别人交付就是一个镜像即可!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值