docker实战

一、mysql

1、创建带密码的mysql

docker run -d --name mysql01 -e MYSQL_ROOT_PASSWORD=123123 mysql

docker exec -it mysql01 bash

删除容器:docker rm -f mysql01-------->mysql中的数据也没了

github中上搜docker-library

2、mysql数据保存的目录

myslq-dockerfile中的volume /var/lib/mysql

进入mysql:docker exec -it mysql01 bash

mysql -uroot -p123123

数据保存在:cd   /var/lib/mysql

3、docker中的volume(数据所在的位置)

展示docker的valume:docker valume ls

删除docker的valume:docker volume rm - $(docker volume ls)

查看volume:docker volume inspect volumeId

4、mysql数据所在容器的目录和宿主机的目录 (持久化存储)

容器目录:/var/lib/mysql

宿主机目录:/var/lib/docker/volumes/volumeID/_data

注:当容器删掉的时候,可以通过宿主机进行数据恢复

5、自定义volumeID

docker run -d --name mysql03 -v mysql03_volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123123 myql

所以宿主机目录为:/var/lib/docker/volumes/mysql03_volume/_data

注:删除了container,但volume还在,除非手动删除volume:docker volume rm -f volumeID

6、将volume中的内容同步到新的container (持久化存储)

docker run -d --name mysql04 -v mysql03_volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123123 myql

登录容器:docker exec -it mysql04 bash

登录mysql:mysql -uroot -p123123

7、bind mounts(开发利器)

将宿主机的目录和container的目录进行绑定:更新宿主记得内容,马上会同步到container

例如:docker run -d --name tomcat01 -p 9090:8080 -v /tmp/sunxj:/user/loacal/tomcat/webapps/sunxj tomcat

docker run -d --name 容器的名字 -p 宿主机端口:容器端口 -v 宿主机目录:容器目录

8、数据库高可用的集群方案:

Replication:速度比较快,无需所有节点都同步数据成功。异步复制,无法保证集群中每个节点的数据是一致的

PXC(percona XtraDB cluster):强一致性的高可用数据库集群方案,速度效率比较慢,需要每个节点都同步数据成功。

hub.docker.com中搜:percona XtraDB cluster,直接用这个镜像

9、percona XtraDB cluster

docker pull percona/percona-xtradb-cluster:5.7.21

docker images

a、网络pxc-net 172.18.0.0/24

b、持久化:docker volumer create --name v1 --mysql01 v2 --mysql02  v3--mysql03

c、创建容器:docker run -d  -p 3301:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123123 -e XTRABACKUP_PASSWORD=123123 -e CLUSTER_NAME=pxc myql --privileged --name=node1 --net=pxc-net  172.18.0.2  镜像名

XTRABACKUP_PASSWORD:多节点同步的密码

CLUSTER_NAME:集群的名字

(1)搭建3个节点的pxc-mysql具体过程如下:

创建网络:docker network create --subnet=172.18.0.0/24 pxc-net

检查网络:docker network inspect pxc-net

创建3个volume给容器使用:docker volume create --name v1、docker volume create --name v2、docker volume create --name v3

检查volume:docker volume ls、docker volume inspect v1

创建第个container:docker run -d -p 3301:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123123 -e XTRABACKUP_PASSWORD=123123 -e CLUSTER_NAME=pxc myql --privileged --name=node1 --net=pxc-net  172.18.0.2  镜像名

检查container:docker ps

进入到容器:docker exec -it node1 bash

进入到mysql:mysql -uroot -p123123

创建第个container:docker run -d -p 3302:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123123 -e CLUSTER_JOIN=node1 -e XTRABACKUP_PASSWORD=123123 -e CLUSTER_NAME=pxc myql --privileged --name=node2 --net=pxc-net  172.18.0.3  镜像名

CLUSTER_JOIN=node1:加入到node1形成集群

创建第个container:docker run -d -p 3302:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123123 -e CLUSTER_JOIN=node1 -e XTRABACKUP_PASSWORD=123123 -e CLUSTER_NAME=pxc myql --privileged --name=node3 --net=pxc-net  172.18.0.4 镜像名

CLUSTER_JOIN=node1:加入到node1形成集群

 

二、haproxy

1、安装haproxy

a、hub.docker.com上搜:haproxy

b、docker pull haproxy

c、vim haproxy.cfg

d、启动:docker run -d -p 3306:3306 -p 8888:8888 -v /tmp/haproxy:/user/local/etc/haproxy --name haproxy01 --privileged --net=pex-net(与mysql 用的同一个网络) haproxy

注:如有报错先将haproxy01删掉:docker rm -f haproxy01

监控:宿主机ip:8888/dbs_monitor

e、进入到haproxy01-container:docker exec -it haproxy01 bash

f、启动加载配置文件:cd /user/local/etc/haproxy---->haproxy -f haproxy.cfg

 

 

三、 

1、创建网络:docker network  create --subnet=172.19.0.0/24 pro-net

     验证:docker network ls

2、将spring-mybatis.jar上传到/root/springboot-mybatis 目录下

3、构建dockerfile  vim Dockerfile

4、根据dockerfile构建image:docker build -t sbm-image Dockerfile

     验证:docker images

5、创建mysql的volume(用于存储数据):docker volume create v11

6、创建mysql-container:docker run -d --name my-mysql -v v11:/var/lib/mysql -p 3311:3306 -e MYSQL_ROOT_PASSWORD=123123 --net=pro-net --ip 172.19.0.6 mysql

    验证:docker network inspect pro-net

7、创建springboot-container:docker run -d --name sb01 -p 8801:8080 --net=pro-net --ip 172.19.0.11 sub-image

docker run -d --name sb02 -p 8802:8080 --net=pro-net --ip 172.19.0.12 sub-image

docker run -d --name sb03 -p 8803:8080 --net=pro-net --ip 172.19.0.13 sub-image

8、创建nginx  vim nginx.cfg---->docker run -d --name my-nginx -p 80:80 -v /tmp/nginx/nginx.cfg:/etc/nginx/nginx.cfg --network=pro-net --ip 172.19.0.10 nginx

 

三、python

1、mkdir -p /tmp/composetest

2、vim app.py

3、vim requirements.txg

     内容:flask、redis

4、vim dockerfile

5、根据dockerFile构建docker-image:docker build -t python-app-image .dockerFile

6、拉取redis镜像:docker pull redis:alpine

7、创建一个网络:docker network create --subnet=172.20.0.0/24 app-net

   验证:docker network ls

8、创建app-container:docker run -d --name web -p 5000:5000 --network app-net python-app-image 

9、创建redis-container:docker run -d --name redis --network app-net redis:alpine 

  验证:docker ps(查看有哪些container)

  验证:宿主机ip:5000

10、删除所有container:docker rm -f $(docker ps -aq)

 

 

五、docker-compose(单机管理)+ yaml文件实现上述过程

1、安装docker-compose:sudo crul -L "https://..." -o /usr/local/bin/docker-compose

  验证:docker-compose version

2、删除多余的net-work与volume与image

 docker network rm app-net

docker volume rm -f $(docker volume ls)

 docker rmi -f imageID

3、编辑compose.yaml文件

vim docker-compose.yaml

version: '3'
services:   --------------->定义container,一个service就是一个container
  web:      ------------->service1
    build: .     -------------->表示从当前目录的dockerFile获取image
    ports:
      - "5000:5000"  ------------>该container的端口镜像(宿主机端口:container端口)
    network:      ------------>该container使用的网络
      - app-net


  redis:
    image: "redis:alpine"
    network:
     - app-net

networks: ---------------->等价于docker network create --name app-net
  app-net:
    driver: bridge

4、执行compose文件:docker-compose -f docker-compose.yaml up -d

     停止执行:docker-compose -f docker-compose.yaml down

 

六、docker-swarm(多机管理)

1、将多台安装了docker的机器,组成一个集群,共同给外界提供服务,并且能很好的管理多个容器。

2、

3、

4、初始化swarm-master(manager) :docker swarm init --advertise-addr=192.168.8.11

  让其他的swarm-worker加入到master-Reachable: docker swarm join --token xxxx  192.168.8.11:2377

  验证:docker nodes ls

  将worker晋升到manager:docker node promote worker01-node

  将manager撤掉:docker node demoteworker01-node

  

(二)、使用docker-swarm

docker视角下:container            docker-swarm视角下:service

1、创建tomcat-container:docker service create --name my-tomcat tomcat

    查看service的启动日志:docker service logs my-tomcat

    查看inspect:docker service inspect my-tomcat

2、查看集群中有哪些service:docker service ls

     查看当前节点有哪些container:docker ls

     查看该service运行在哪个节点汇中:docker service ps my-tomcat     NODE(manager-node)

3、将service扩容:docker service scale my-tomcat=3

4、将service下架:docker service rm my-tomcat

 

(三)、docker-swarm实现上述案例

1、master中创建网络:docker network create -d overlay my-overlay-net

     worker中看不到:docker network ls

2、创建mysql-service:docker service create --name mysql --mount type=volume,source=v1,destination=/var/lib/mysql --env

MYSQL_ROOT_PASSWORD=123123 --network my-overlay-net mysql:5.6

     检查:docker service ls------>docker service ps mysql(manager-node)

3、创建wordpress-service:docker service create --name wordpress --env WORDPRESS_DB_USER=root  --env WORDPRESS_DB_PASSWORD=123123  --env WORDPRESS_DB_HOST=mysql:3306 --env WORDPRESS_DB_NAME=db_wordpress -p 8080:80 --network my-overlay-net  wordpress

    检查:docker service ls------>docker service ps mysql(worker01-node)

               docker network ls---->发现worker01-node中有了my-overlay-net网络

4、验证:三个docker节点ip:8080------->都可以访问到wordpress

                lsof -i tcp:8080 都是listen状态,都是打开的状态

 

(四)、docker-swarm有n个tomcat,如何负载均衡这ngetomcat

1、创建whoami-service:docker service create --name whoami -p 8080:8080 --network my-overlay-net -d jwilder/whoami

2、internal技术:负载均衡技术

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值