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是否可以?

原文地址:https://www.cnblogs.com/wfdespace/p/12671655.html