数据管理
docker容器运行,产生一些数据、文件等等持久化的东西,不应该放在容器内部。应当以挂载的形式存在主机文件系统中。
1、镜像与容器读写层,通过联合文件系统,组成系统文件
2、容器服务运行中,一定会产生数据
3、容器只是运行态的服务器,是瞬时的,不承载数据的持久化功能实例1:挂载mysql配置文件
(1)在宿主机相关目录下新建mysql配置文件
(2)创建默认的mysql服务(默认的mysql服务区分大小写)
(3)挂载本地配置文件,不区分大小写
实例2:挂载容器数据卷
docker的文件系统
volume文件挂载的探究
volume-from引用数据卷
Docker-Compose使用
批量执行工程服务
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-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 文件,内容如下:
3、dockerfile 打包业务镜像
4、启动镜像,即得到业务运行
5、浏览器打开页面校验:
集群化部署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-compose up -d
docker-compose up -d --scale tomcat=2
docker-compose down:关闭一组容器服务
Swarm集群管理
swarm概念
我们使用docker容器化部署服务,都是局限在一台宿主机上操作。但是在实际中,我们部署的服务都是集群模式的,分布式部署的,没有以一台强大的物理机,能支撑整个分布式集群,而且这样也无法防范物理机的单点故障问题。
Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口同一管理这个Docker主机上的各种Docker资源。
swarm service 相比单容器的一个最大优势就是,你能够修改一个服务的配置:包括网络、
数据卷,不需要手工重启服务。Docker 将会更新配置,把过期配置的 task 停掉,重新创建
一个新配置的容器。
- swarm:是一组 docker 引擎的集群
- node:是单个 docker 引擎的实例,可以在一个物理机上也可以在多个
- manager node:部署应用的时候会有一个 manager node 节点
- Worker nodes:对应的就是 Worker nodes
- service:然后 service 是一堆被 workder 执行的任务
- 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 服务:
systemctl daemon-reload
systemctl restart docker
2、创建管理节点
docker swarm join --token SWMTKN-1-41v0dwkwt3tgp19hmturaqs4tn1lar7kiid6y2jku8lhczmb10-0p59gqr8xt1kbulun9s4tpado 114.55.242.212:2377
3、添加工作节点到集群
主节点查看集群
节点退出,看结果
创建服务
创建一个 nginx 集群,3 台机器
docker service create --name nginx --replicas 3 -p 80:80 nginx:1.7.9
删除docker service rm nginx