docker使用2
04 Docker数据持久化
4.1 以myql容器创建为例
(1)创建mysql数据库的container
》需要下载mysql镜像image【docker images----如果有,不再pull】
>docker images
>doker run创建【先查看docker ps -a】
> docker run -d --name test_mysql -e MYSQL_ROOT_PASSWORD=wffix mysql
>进入容器
>docker exec -it test_mysql bash
注意:
运行mysql容器,所有的数据都在容器中进行保存,如果我一不小心,把它删除了【数据就没了】======所以,需要对数据进行永久【持久化】保存。
我们要知道,当mysql容器创建成功了,它的数据是如何保存的?保存在什么地方的?
通过docker官网,mysql的dockerfile定义,有一个关键字Volumn,定义如下:
Volume /var/lib/mysql //这就是定义mysql保存数据的地方
》linux下登录mysql【需要先进入mysql容器】
root@2ad920548df9:/# mysql -uroot -pwffix //登录成功
(2)docker查看volume
>docker volume ls
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local 2fe372cdcf2fe2c13592c81bde62bce81f379acc915a666b8f1c7eece60a4942
local c893e32240f3677625da23167bbe4f3000f7c60938c2eed4868c1db71b06bcb1
volume删除:
>docker volume rm -f $(docker volume ls) //当在使用中,则无法删除
(3)具体查看该volume详情://后面很一串id【它代表centos物理机上数据挂载地址】
docker volume inspect 2fe372cdcf2fe2c13592c81bde62bce81f379acc915a666b8f1c7eece60a4942
[
{
"CreatedAt": "2020-01-07T03:36:10Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/2fe372cdcf2fe2c13592c81bde62bce81f379acc915a666b8f1c7eece60a4942/_data",
"Name": "2fe372cdcf2fe2c13592c81bde62bce81f379acc915a666b8f1c7eece60a4942",
"Options": null,
"Scope": "local"
}
]
(4)自定义存储id,创建第二个容器
当使用docker run mysql时,自动生成的id很长,难辨识【可以自己定义,使用-v】
docker run -d --name mysql01 -v mysql01_volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=wffix mysql
"-v mysql01_volume:/var/lib/mysql"表示给上述的volume起一个能识别的名字.
(5)查看volume docker volume ls
[root@localhost ~]# docker run -d --name mysql01 -v mysql01_volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=wffix mysql
70c86bccfc63a3233dc32635dcd2d895f47d758d52faa8530f5b8bcfef1ce6fc
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local 2fe372cdcf2fe2c13592c81bde62bce81f379acc915a666b8f1c7eece60a4942
local mysql01_volume
》查看详情docker volume inspect mysql01_volume
4.1.1.mysql容器存储数据的理解
docker run mysql=======
》容器:指定临时存储目录 volume /var/lib/mysql
》宿主机centos: volume id【很长】,目录如下:
/var/lib/docker/volumes/2fe372cdcf2fe2c13592c81bde62bce81f379acc915a666b8f1c7eece60a4942/_data
查看下centos里面的数据:
[root@localhost ~]# cd /var/lib/docker/volumes/2fe372cdcf2fe2c13592c81bde62bce81f379acc915a666b8f1c7eece60a4942/_data
[root@localhost _data]# ll
total 178184
-rw-r-----. 1 polkitd input 56 Jan 7 03:36 auto.cnf
-rw-r-----. 1 polkitd input 3084516 Jan 7 03:36 binlog.000001
-rw-r-----. 1 polkitd input 155 Jan 7 03:36 binlog.000002
-rw-r-----. 1 polkitd input 32 Jan 7 03:36 binlog.index
-rw-------. 1 polkitd input 1676 Jan 7 03:36 ca-key.pem
-rw-r--r--. 1 polkitd input 1112 Jan 7 03:36 ca.pem
-rw-r--r--. 1 polkitd input 1112 Jan 7 03:36 client-cert.pem
-rw-------. 1 polkitd input 1680 Jan 7 03:36 client-key.pem
-rw-r-----. 1 polkitd input 5431 Jan 7 03:36 ib_buffer_pool
-rw-r-----. 1 polkitd input 12582912 Jan 7 03:36 ibdata1
-rw-r-----. 1 polkitd input 50331648 Jan 7 03:36 ib_logfile0
-rw-r-----. 1 polkitd input 50331648 Jan 7 03:35 ib_logfile1
-rw-r-----. 1 polkitd input 12582912 Jan 7 03:36 ibtmp1
drwxr-x---. 2 polkitd input 187 Jan 7 03:36 #innodb_temp
drwxr-x---. 2 polkitd input 143 Jan 7 03:36 mysql
-rw-r-----. 1 polkitd input 30408704 Jan 7 03:36 mysql.ibd
drwxr-x---. 2 polkitd input 8192 Jan 7 03:36 performance_schema
-rw-------. 1 polkitd input 1676 Jan 7 03:36 private_key.pem
-rw-r--r--. 1 polkitd input 452 Jan 7 03:36 public_key.pem
-rw-r--r--. 1 polkitd input 1112 Jan 7 03:36 server-cert.pem
-rw-------. 1 polkitd input 1676 Jan 7 03:36 server-key.pem
drwxr-x---. 2 polkitd input 28 Jan 7 03:36 sys
-rw-r-----. 1 polkitd input 12582912 Jan 7 03:36 undo_001
-rw-r-----. 1 polkitd input 10485760 Jan 7 03:36 undo_002
这样的一种设计方式,它的目的是防止数据删除。
当我们不小心把docker容器时,还可以根据centos中数据对container进行恢复。
4.1.1.1.验证删除容器后mysql数据是否还存在
》查看mysql容器
>docker ps -a【存储mysql01和test_mysql,这里删除前者】
>docker rm -f mysql01【删除】
> docker volume ls
[root@localhost ~]# docker rm -f mysql01 //删除
mysql01
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local 2fe372cdcf2fe2c13592c81bde62bce81f379acc915a666b8f1c7eece60a4942
local mysql01_volume //volume还存在
注意:
当我们删除container后,它对应的volume还存在。
4.1.1.2.验证恢复的实时
》进入test_mysql容器里面 ,进入volume目录
>docker exec -it test_mysql bash
>cd /var/lib/mysql
》在volume中增加一个文件yihangqinlu
>touch yinhangqinlu
root@2ad920548df9:/var/lib/mysql# ls
#innodb_temp binlog.index client-key.pem ibdata1 performance_schema server-key.pem
auto.cnf ca-key.pem ib_buffer_pool ibtmp1 private_key.pem sys
binlog.000001 ca.pem ib_logfile0 mysql public_key.pem undo_001
binlog.000002 client-cert.pem ib_logfile1 mysql.ibd server-cert.pem undo_002
root@2ad920548df9:/var/lib/mysql# touch yinhangqinlu
root@2ad920548df9:/var/lib/mysql# ls
#innodb_temp ca-key.pem ib_logfile0 mysql.ibd server-key.pem
auto.cnf ca.pem ib_logfile1 performance_schema sys
binlog.000001 client-cert.pem ibdata1 private_key.pem undo_001
binlog.000002 client-key.pem ibtmp1 public_key.pem undo_002
binlog.index ib_buffer_pool mysql server-cert.pem yinhangqinlu
》退出volume,查看volume及详情
>docker volume ls
>docker volume inspect
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local 2fe372cdcf2fe2c13592c81bde62bce81f379acc915a666b8f1c7eece60a4942
local mysql01_volume
[root@localhost ~]# docker volume inspect 2fe372cdcf2fe2c13592c81bde62bce81f379acc915a666b8f1c7eece60a4942
[
{
"CreatedAt": "2020-01-07T05:18:28Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/2fe372cdcf2fe2c13592c81bde62bce81f379acc915a666b8f1c7eece60a4942/_data",
"Name": "2fe372cdcf2fe2c13592c81bde62bce81f379acc915a666b8f1c7eece60a4942",
"Options": null,
"Scope": "local"
}
]
》进入宿主机centos的物理目录,查看新增文件是否已实时同步
>cd /var/lib/docker/volumes/2fe372cdcf2fe2c13592c81bde62bce81f379acc915a666b8f1c7eece60a4942/_data
>ls
[root@localhost _data]# ls
auto.cnf ca.pem ib_logfile0 mysql.ibd server-key.pem
binlog.000001 client-cert.pem ib_logfile1 performance_schema sys
binlog.000002 client-key.pem ibtmp1 private_key.pem undo_001
binlog.index ib_buffer_pool #innodb_temp public_key.pem undo_002
ca-key.pem ibdata1 mysql server-cert.pem yinhangqinlu
结论:数据是实时同步的。
》创建一个数据库
>docker exec -it test_mysql bash
>mysql -uroot -pwffix
>create database db_test;
show databases;
》退出容器,删除容器----------------发现:删除container之后,volume还存在
> docker rm -f test_mysql
>docker volume ls
4.1.2.常用的创建容器的方式
原有的容器创建方式:
docker run -d --name test_mysql -e MYSQL_ROOT_PASSWORD=wffix mysql
这种方式,会默认生成一串很长id,id用于映射volume地址。
指定volume创建container:
docker run -d --name test_mysql -v my_volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=wffix mysql
指定:volume别名----my_volume
引申:
既然volume名字可以自己指定。那么,它的存储路径我们也可以指定【如果让它指向中间件,是不是就可以达到持久化的目的了呢?】
同样,在docker的帮助下,我们能够把数据存储到想要的任何地方。【如:磁盘上】
[root@localhost ~]# docker volume inspect mysql01_volume
[
{
"CreatedAt": "2020-01-07T04:58:36Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/mysql01_volume/_data", //这个就是指定存储目录的关键
"Name": "mysql01_volume",
"Options": null,
"Scope": "local"
}
]
对于数据的持久化存储,只需要关注Mountpoint。
再度引申:
我们想达到:
>docker run -d 宿主机的任意目录:容器的任意目录 //这样的一一映射
4.1.2.1.实现创建tomcat容器,并把项目布署到tomcat中
》创建tomcat容器
>docker run -d --name tomcat01 -p 9090:8080 -v /temp/test:/usr/local/tomcat/webapps/test tomcat
说明:
创建tomcat容器的同时,还希望把项目test[宿主机centos的/temp目录下],布署到tomcat的webapp下,名称还是test.【tomcat的目录/usr/local/tomcat】
>查看两个目录是否创建成功
>项目目录:/tmp/test
[root@localhost ~]# cd /temp/test
[root@localhost test]# ll
total 0
>tomcat容器的目录:
>docker exec -it tomcat01 bash
>cd webapps
root@e7fa8b9965ad:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager test
4.1.2.2.对项目升级维护
说明:
现在项目已经布署成功了,现在更新一个文件,想要升级项目,重新布署。
我需要在宿主机centos中,修改文件【因为我不可能在容器中修改文件】
》宿主机项目中增加test.html文件
》进入项目目录:cd /temp/test
》vi test.html【只需要新建一个p标签】
》查看宿主机内容
>ls /temp/test
》进入tomcat,查看
[root@localhost test]# docker exec -it tomcat01 bash
root@e7fa8b9965ad:/usr/local/tomcat# cd webapps/test/
root@e7fa8b9965ad:/usr/local/tomcat/webapps/test# ls
test.html //容器中数据直接同步
》浏览器访问
》访问tomcat: http://30.50.34.2:9090/
》访问test项目:http://30.50.34.2:9090/test/test.html
修改文件后,会自动同步到容器。
05.Docker实战
5.1.mysql集群布署
需求:
布署3个mysql集群,还需要考虑数据同步性的问题。
5.1.1.解决方案:
5.1.1.1.Replication
原理如下:
特点:
弱一致性,速度较快。无需所有节点都同步数据成功,只保证主节点同步成功。
异步复制方案,无法保证集群中每个节点的数据是一致的。
使用场景:
存储低价值的数据。
5.1.1.2.PXC【Percona XtraDB Custer】
一种强一致性高可用数据库集群搭建方案。
速度较慢。
使用场景:
保存一些高价值的数据,如:订单,抢红包。
原理图解如下:
5.1.2.搭建Pxc方案集群
注意:
布署之前,和编写代码一样,一定要先分析需求。
布署规划:
》网络怎么操作?
专门设置一个网络pxc-net:127.18.0.0/24
》持久化存储怎么做?
Docker volume create --name v1 --mysql v2 --mysql02 v3 –mysql03
》容器该如何创建?
docker run -d -p 3301:3306 -v v1:/var/lib/mysql -e -e MYSQL_ROOT_PASSWORD=wffix -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=wffix --privileged --name=node1 --net=pxc-net --ip 172.18.0.2 pxc
XTRABACKUP_PASSWORD=wffix【同步密码,保证节点数据一致性】
Pxc这种方案,已经有人给我们做好了,并且做成了docker image。可以到dockerhub上搜索percona-xtradb-cluster【它是对mysql的封装】
1.拉取image
>docker pull percona/percona-xtradb-cluster:5.7.21
2.复制【重命名】image
> docker tag percona/percona-xtradb-cluster:5.7.21 pxc //重命名为pxc
3.删除原来的pxc镜像
> docker rmi percona/percona-xtradb-cluster:5.7.21
4. 创建一个单独的网段,给mysql数据库集群使用
>docker network ls //查看网络
>docker network create --subnet=172.18.0.0/24 pxc-net
[root@localhost ~]# docker network create --subnet=172.18.0.0/24 pxc-net
bb421728de8c23c29f956da20221eeefb71cf6769da4b1d3131f3276270b7c91
>docker network inspect pxc-net [查看详情]
[root@localhost ~]# docker network inspect pxc-net
[
{
"Name": "pxc-net",
"Id": "bb421728de8c23c29f956da20221eeefb71cf6769da4b1d3131f3276270b7c91",
"Created": "2020-01-07T13:39:41.191768706Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/24"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
>docker network rm pxc-net [删除] //暂时不执行
5 创建3个volume---v1,v2,v3,给容器使用
和删除volume
>创建:docker volume create --name v1
[root@localhost ~]# docker volume create --name v1
v1
[root@localhost ~]# docker volume create --name v2
v2
[root@localhost ~]# docker volume create --name v3
v3
>创建结束后,查看:
>ls查看:docker volume ls
>查看详情:docker volume inspect v1
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local 2fe372cdcf2fe2c13592c81bde62bce81f379acc915a666b8f1c7eece60a4942
local mysql01_volume
local v1
local v2
local v3
[root@localhost ~]# docker volume inspect v1
[
{
"CreatedAt": "2020-01-07T13:43:28Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/v1/_data",
"Name": "v1",
"Options": {},
"Scope": "local"
}
]
>删除:docker volume rm v1 【暂不执行】
06 创建PXC【集群】容器demo
[CLUSTER_NAME PXC集群名字]
[XTRABACKUP_PASSWORD数据库同步需要用到的密码]
》创建第一个容器
docker run -d -p 3301:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=wffix -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=wffix --privileged --name=node1 --net=pxc-net --ip 172.18.0.2 pxc
>查看container
>docker ps
>进入mysql容器:docker exec -it node1 bash
>登录mysql:mysql -uroot -pwffix
》再创建两个容器
端口:volume:name:网段----3302:v2 :node2: 172.18.0.3
端口:volume:name:网段----3303:v3: node3: 172.18.0.4
docker run -d -p 3302:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=wffix -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=wffix --privileged --name=node2 --net=pxc-net --ip 172.18.0.3 pxc
docker run -d -p 3303:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=wffix -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=wffix --privileged --name=node3 --net=pxc-net --ip 172.18.0.4 pxc
07.使用mysql客户端进行连接测试
这里使用navcat或使用idea
测试第三个mysql:
当都连接成功后,需要验证是否是集群:
在node1中新建库db_test,然后查看node2,node3是否同步创建?
可以发现,并没有同步。原因是:当创建容器时,3个节点并没有进行集群设置,它们只是3个独立的节点,3个容器是不通的,没有融入到一个集群中。
所以,当创建容器时,需要设置让node2,node3加入到node1容器中。
现在,删掉3个节点,重新创建节点:
[root@localhost ~]# docker rm -f node2
[root@localhost ~]# docker rm -f node3
8.真正集群布署
>创建第一个节点
docker run -d -p 3301:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=wffix -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=wffix --privileged --name=node1 --net=pxc-net --ip 172.18.0.2 pxc
>创建第二个节点,加入node1
docker run -d -p 3302:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=wffix -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=wffix -e CLUSTER_JOIN=node1 --privileged --name=node2 --net=pxc-net --ip 172.18.0.3 pxc
>创建第三个节点,加入node1
docker run -d -p 3303:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=wffix -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=wffix -e CLUSTER_JOIN=node1 --privileged --name=node3 --net=pxc-net --ip 172.18.0.4 pxc
(3)MySQL工具连接测试
Jetbrains Datagrip-
说明:
可以发现,集群布署成功。
5.1.3.数据库的负载均衡
负载均衡器:ngnix 或haproxy
(1)拉取haproxy的镜像
>docker pull haproxy
(2)创建haproxy配置文件,这里使用bind mounting的方式
> touch /tmp/haproxy/haproxy.cfg
》如果目录不存在,先创建目录,再touch
>mkdir -p /tmp/haproxy
> cd /tmp/haproxy/
>touch haproxy.cfg
haproxy.cfg配置文件编写:
global
#工作目录,这边要和创建容器指定的目录对应
chroot /usr/local/etc/haproxy
#日志文件
log 127.0.0.1 local5 info
#守护进程运行
daemon
defaults
log global
mode http
#日志格式
option httplog
#日志中不记录负载均衡的心跳检测记录
option dontlognull
#连接超时(毫秒)
timeout connect 5000
#客户端超时(毫秒)
timeout client 50000
#服务器超时(毫秒)
timeout server 50000
#监控界面
listen admin_stats
#监控界面的访问的IP和端口
bind 0.0.0.0:8888
#访问协议
mode http
#URI相对地址
stats uri /dbs_monitor
#统计报告格式
stats realm Global\ statistics
#登陆帐户信息
stats auth admin:admin
#数据库负载均衡
listen proxy-mysql
#访问的IP和端口,haproxy开发的端口为3306
#假如有人访问haproxy的3306端口,则将请求转发给下面的数据库实例
bind 0.0.0.0:3306
#网络协议
mode tcp
#负载均衡算法(轮询算法)
#轮询算法:roundrobin
#权重算法:static-rr
#最少连接算法:leastconn
#请求源IP算法:source
balance roundrobin
#日志格式
option tcplog
#在MySQL中创建一个没有权限的haproxy用户,密码为空。
#Haproxy使用这个账户对MySQL数据库心跳检测
option mysql-check user haproxy
server MySQL_1 172.18.0.2:3306 check weight 1 maxconn 2000
server MySQL_2 172.18.0.3:3306 check weight 1 maxconn 2000
server MySQL_3 172.18.0.4:3306 check weight 1 maxconn 2000
#使用keepalive检测死链
option tcpka
(3)创建haproxy容器
> docker run -it -d -p 8888:8888 -p 3306:3306 -v /tmp/haproxy:/usr/local/etc/haproxy --name haproxy01 --privileged --net=pxc-net haproxy
(4)浏览器访问:
>访问haproxy的监控平台:http://centos_ip:8888/dbs_monitor
用户名密码都是:admin
http://30.50.36.30:8888/dbs_monitor
>连接代理数据库【虚假的数据库】
连接失败,原因是:
Haproxy需要配置文件haproxy.cfg没有生效,因为它没有启动。
》进入haproxy容器,查看配置文件:
[root@localhost haproxy]# docker exec -it haproxy01 bash
root@e4929c87912c:/# cd /usr/local/etc/haproxy/
root@e4929c87912c:/usr/local/etc/haproxy# ls
haproxy.cfg
root@e4929c87912c:/usr/local/etc/haproxy# haproxy -f /usr/local/etc/haproxy/haproxy.cfg //启动配置文件
再次启动,仍然连接不成功,就需要进行问题排查:
》docker inspect haproxy01-----检查存储
》docker exec -it haproxy01 ping 172.18.0.2 //ping网络
》需要给用户一个授权:
(5)在MySQL数据库上创建用户,用于心跳检测
CREATE USER 'haproxy'@'%' IDENTIFIED BY '';
[小技巧[如果创建失败,可以先输入一下命令]:
drop user 'haproxy'@'%';
flush privileges;
CREATE USER 'haproxy'@'%' IDENTIFIED BY '';
]
(6)连接代理数据库【虚假的数据库】
ip:centos_ip
port:3306
user:root
password:wffix
5.2. Nginx+Spring Boot项目+MySQL
5.2.1 网络
(1)网络 docker network create --subnet=172.18.0.0/24 pro-net
(2)网络划分
mysql--172.18.0.6
spring boot--172.18.0.11/12/13
nginx--172.18.0.10
5.2.2 MySQL
(1)创建volume
>docker volume create v1
(2)创建mysql容器
> docker run -d --name my-mysql -v v1:/var/lib/mysql -p 3301:3306 -e MYSQL_ROOT_PASSWORD=jack123 --net=pro-net --ip 172.18.0.6 mysql
(3)datagrip连接,执行.mysql文件
name:my-mysql
ip:centos-ip
端口:3301
User:root
password:wffix
create schema db_gupao_springboot collate utf8mb4_0900_ai_ci;
use db_gupao_springboot; create table t_user (
id int not null
primary key,
username varchar(50) not null,
password varchar(50) not null,
number varchar(100) not null
);
5.2.3 Spring Boot项目
Spring Boot+MyBatis实现CRUD操作,名称为“springboot-mybatis”
(1)在本地测试该项目的功能
主要是修改application.yml文件中数据库的相关配置
(2)在项目根目录下执行mvn clean package打成一个jar包
[记得修改一下application.yml文件数据库配置]
mvn clean package -Dmaven.test.skip=true
在target下找到"springboot-mybatis-0.0.1-SNAPSHOT.jar.jar"
(3)在docker环境中新建一个目录"springboot-mybatis"
(4)上传"springboot-mybatis-0.0.1-SNAPSHOT.jar"到该目录下,并且在此目录创建Dockerfile
(5)编写Dockerfile内容
FROM openjdk:8-jre-alpine
MAINTAINER itcrazy2016
LABEL name="springboot-mybatis" version="1.0" author="itcrazy2016"
COPY springboot-mybatis-0.0.1-SNAPSHOT.jar springboot-mybatis.jar
CMD ["java","-jar","springboot-mybatis.jar"]
(6)基于Dockerfile构建镜像
docker build -t sbm-image .
(7)基于image创建container
docker run -d --name sb01 -p 8081:8080 --net=pro-net --ip 172.18.0.11 sbmimage
(8)查看启动日志
docker logs sb01
(9)在win浏览器访问http://192.168.8.118:8081/user/listall
5.2.3.1 网络问题
因为sb01和my-mysql在同一个bridge的网段上,所以是可以互相ping通,比如:
docker exec -it sb01 ping 172.18.0.6
or
docker exec -it sb01 ping my-mysql
so? application.yml文件不妨这样修改一下?也就是把ip地址直接换成容器的名字
url: jdbc:mysql://my-mysql/db_gupao_springboot?
5.2.3.2 创建多个项目容器
docker run -d --name sb01 -p 8081:8080 --net=pro-net --ip 172.18.0.11 sbm-image
docker run -d --name sb02 -p 8082:8080 --net=pro-net --ip 172.18.0.12 sbm-image
docker run -d --name sb03 -p 8083:8080 --net=pro-net --ip 172.18.0.13 sbm-image
5.2.4 Nginx
(1)在centos的/tmp/nginx下新建nginx.conf文件,并进行相应的配置
user nginx;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
location / {
proxy_pass http://balance;
}
}
upstream balance{
server 172.18.0.11:8080;
server 172.18.0.12:8080;
server 172.18.0.13:8080;
}
include /etc/nginx/conf.d/*.conf;
}
(2)创建nginx容器 注意 :先在centos7上创建/tmp/nginx目录,并且创建nginx.conf文件,写上内容
docker run -d --name my-nginx -p 80:80 -v /tmp/nginx/nginx.conf:/etc/nginx/nginx.conf --network=pro-net --ip 172.18.0.10 nginx
(3)win浏览器访问: ip[centos]/user/listall
思考 :若将172.18.0.11/12/13改成sb01/02/03是否可以?