数据管理

docker容器运行,产生一些数据、文件等等持久化的东西,不应该放在容器内部。应当以挂载的形式存在主机文件系统中。

docker装cups docker装cupss 老母鸡_mysql


1、镜像与容器读写层,通过联合文件系统,组成系统文件

2、容器服务运行中,一定会产生数据

3、容器只是运行态的服务器,是瞬时的,不承载数据的持久化功能实例1:挂载mysql配置文件

(1)在宿主机相关目录下新建mysql配置文件

docker装cups docker装cupss 老母鸡_nginx_02


(2)创建默认的mysql服务(默认的mysql服务区分大小写)

docker装cups docker装cupss 老母鸡_nginx_03


docker装cups docker装cupss 老母鸡_docker装cups_04


docker装cups docker装cupss 老母鸡_docker装cups_05


(3)挂载本地配置文件,不区分大小写

实例2:挂载容器数据卷

docker的文件系统

volume文件挂载的探究

volume-from引用数据卷

Docker-Compose使用

docker装cups docker装cupss 老母鸡_docker_06


批量执行工程服务

docker-compose安装

curl 方式安装

sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-uname -s-uname -m >
 /usr/local/bin/docker-compose
 增加可执行权限
 sudo chmod +x /usr/local/bin/docker-compose

安装完查看版本

docker装cups docker装cupss 老母鸡_mysql_07

docker-compose命令

docker-compose 的命令与 docker 命令极为相似,用法上没有区别,下面列出它特有的
几种命令:
up 创建并启动容器:docker-compose up -d --scale 服务名=数字
---------- d 表示后台运行,scale 是表示对应的服务同时启动几个容器
down 停止并删除容器: docker-compose down
---------- 会停掉容器,并删除掉容器。如果不希望删除容器,使用 stop

docker-compose实战

手动创建单体springboot镜像并运行

1、将 springboot 打好的 jar 包上传

2、在同级目录下,创建 Dockerfile 文件,内容如下:

docker装cups docker装cupss 老母鸡_docker_08


3、dockerfile 打包业务镜像

docker装cups docker装cupss 老母鸡_nginx_09


docker装cups docker装cupss 老母鸡_mysql_10


4、启动镜像,即得到业务运行

docker装cups docker装cupss 老母鸡_docker装cups_11


5、浏览器打开页面校验:

docker装cups docker装cupss 老母鸡_docker装cups_12

集群化部署spring项目
version: '3'  ##表示使用第三代语法
services: ##表示compose需要启动的服务
  nginx:
   container_name: my-nginx  ##容器名称
   image: nginx:1.9.7  ## 容器镜像
   links:  ##要引用的服务
      -  tomcat:tom
   restart: always  ##如果服务启动不成功一直尝试
   ports:  ##对外开放的端口
       - 80:81
       - 443:443
   volumes: ##加载本地目录到容器目标路径
       - /docker/nginx:/etc/nginx/conf.d
   depends_on: ##依赖服务,先启动depend——on服务
       - tomcat

  mysql:
   container_name: my-mysql
   image: mysql:5.7
   environment: ##容器环境变量
     MYSQL_ROOT_PASSWORD: root1234
   ports:
       - "3306:3306"
   restart: always

  tomcat:
     image: dockermvc:tan
     restart: always
     depends_on:
         - mysql
~

编写一个项目整体服务,一个网关 nginx + tomcat 外加 mysql 的集群,如上图

其中 nginx 服务,将配置文件挂载在主机当前项目目录的路径下:/docker/nginx

docker装cups docker装cupss 老母鸡_nginx_13


命令:docker-compose up -d

docker装cups docker装cupss 老母鸡_mysql_14


docker-compose up -d --scale tomcat=2

docker装cups docker装cupss 老母鸡_nginx_15


docker-compose down:关闭一组容器服务

docker装cups docker装cupss 老母鸡_mysql_16

Swarm集群管理

swarm概念

docker装cups docker装cupss 老母鸡_mysql_17


我们使用docker容器化部署服务,都是局限在一台宿主机上操作。但是在实际中,我们部署的服务都是集群模式的,分布式部署的,没有以一台强大的物理机,能支撑整个分布式集群,而且这样也无法防范物理机的单点故障问题。

Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口同一管理这个Docker主机上的各种Docker资源。

swarm service 相比单容器的一个最大优势就是,你能够修改一个服务的配置:包括网络、

数据卷,不需要手工重启服务。Docker 将会更新配置,把过期配置的 task 停掉,重新创建

一个新配置的容器。

  1. swarm:是一组 docker 引擎的集群
  2. node:是单个 docker 引擎的实例,可以在一个物理机上也可以在多个
  3. manager node:部署应用的时候会有一个 manager node 节点
  4. Worker nodes:对应的就是 Worker nodes
  5. service:然后 service 是一堆被 workder 执行的任务
  6. task:一个 task 就是一个 docker 的容器,是 Swarm 的工作单元

创建、使用

规划俩台网路互通的机器

swarm1 114.55.242.212 阿里云服务器

swarm2 121.4.182.15 腾讯云服务器

1、修改 docker 监听端口( P TCP 端口 2375 5 )

vi /lib/systemd/system/docker.service

docker装cups docker装cupss 老母鸡_docker_18


重启 docker 服务:

systemctl daemon-reload

systemctl restart docker

2、创建管理节点

docker装cups docker装cupss 老母鸡_docker_19


docker swarm join --token SWMTKN-1-41v0dwkwt3tgp19hmturaqs4tn1lar7kiid6y2jku8lhczmb10-0p59gqr8xt1kbulun9s4tpado 114.55.242.212:2377

3、添加工作节点到集群

docker装cups docker装cupss 老母鸡_docker装cups_20


主节点查看集群

docker装cups docker装cupss 老母鸡_docker_21


节点退出,看结果

docker装cups docker装cupss 老母鸡_docker_22


docker装cups docker装cupss 老母鸡_docker装cups_23


创建服务

创建一个 nginx 集群,3 台机器

docker service create --name nginx --replicas 3 -p 80:80 nginx:1.7.9

删除docker service rm nginx

docker装cups docker装cupss 老母鸡_nginx_24


docker装cups docker装cupss 老母鸡_mysql_25


docker装cups docker装cupss 老母鸡_nginx_26


docker装cups docker装cupss 老母鸡_docker装cups_27

docker装cups docker装cupss 老母鸡_mysql_28