第八章docker compose
三步骤:
1.Dockerfile保证我们的项目在任何地方可以运行。
2.services 什么是服务。docker-compose.yml这个文件怎么写。
3.启动项目
作用:批量容器编排。
compose是docker开源项目,需要安装!
Dockerfile 让程序在任何地方运行。web服务。redis、MySQL、nginx...多个容器。
docker-compose.yml看起来像这样:
version: "3.9" # optional since v1.27.0services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redisvolumes:
logvolume01: {}
docker-compose up 100个服务。
Compose重要的概念
服务services,容器。应用(web、redis、mysql.....)
项目project。一组关联的容器。博客。web、MySQL。
1.安装
#这个地址比较慢
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#这个可能快点:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-'uname -s'-'uname -m' > /usr/local/bin/docker-compose
2.授权
#官方的有问题会出错,
[root@localhost bin]# docker-compose version
/usr/local/bin/docker-compose:行1: 未预期的符号 `<' 附近有语法错误
/usr/local/bin/docker-compose:行1: `<html><body><h1>400 Bad request</h1>'
#自己下载了一个然后重命名
[root@localhost bin]# ls
docker-compose-Linux-x86_64
[root@localhost bin]# mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
[root@localhost bin]# ls
docker-compose
[root@localhost bin]# chmod +x /usr/local/bin/docker-compose
[root@localhost bin]# docker-compose -v
docker-compose version 1.14.0-rc2, build 24dae73
[root@localhost bin]# docker-compose -version
docker-compose version 1.14.0-rc2, build 24dae73
[root@localhost bin]#
#成功!
体验
Try Docker Compose | Docker Documentation
python应用。计数器。redis!
1.应用app.py
2.Dockerfile应用打包为镜像
3.Docker-compose.yaml文件(定义整个服务,需要的环境。web、redis)完整的上线服务!
4.启动compose项目(docker-compose up)
流程:
1.创建网络
2.执行Docker-compose.yml
3.启动服务
Docker-compose.yaml
Creating composetest_web_1 ...
Creating composetest_redis_1 ...
1.文件名composetest
2.服务
version: "3.9"services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"
自动的默认规则?
docker images
[root@localhost ~]# docker service ls
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.
默认的服务名 文件名——服务名——num
多个服务器。集群。A B _num 副本数量
服务redis服务=》4个副本。
集群状态。服务都不可能只有一个运行实例。弹性、10 HA 高并发。
kubectl service负载均衡。
3.网络规则
10个服务=》项目(项目中的内容都在同个网络下。域名访问)
如果在同一个网络下,我们可以通过域名访问。
HA!
停止:
docker-compose down
ctrl+c
docker-compose
以前都是单个docker run启动容器。
docker-compose。通过docker-compose编写yaml配置文件、可以通过compose一件启动所有服务,停止!
docker小结:掌握这4点,docker已经满足日常了
1.docker镜像。run=》容器
2.DockerFile构建镜像(服务打包)
3.docker-compose启动项目(编写、多个微服务/环境)
4.Docker网络
yaml规则
docker-compose.yaml 核心。
Compose file version 3 reference | Docker Documentation
# 3层!
version: '' #版本
services #服务
服务1:web
#服务配置
images
build
network
...
服务2: redis
#其他配置 网络/卷、全局规则
volumes:
networks:
configs:
学习,要掌握规律!
只要多写,多看。compose.yaml配置。!
1.官方·1文档
Compose file version 3 reference | Docker Documentation
2.开源项目compose.yaml
redis、mysql、mq!
开源项目
博客
步骤
下载程序、安装数据库、配置....
compose应用。=》一键启动!
1.下载项目(docker-compose.yaml)
2.如果需要文件。Dockerfile
3.文件准备齐全(直接一键启动项目!)
案例文档:
WordPress samples | Docker Documentation
[root@localhost home]# mkdir my_wordpress
[root@localhost home]# cd my_wordpress/
[root@localhost my_wordpress]# vim docker-compose.yml
version: "3.3"
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- wordpress_data:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpressvolumes:
db_data: {}
wordpress_data: {}
然后执行
[root@localhost my_wordpress]# docker-compose up
Creating network "mywordpress_default" with the default driver
Creating volume "mywordpress_db_data" with default driver
Creating volume "mywordpress_wordpress_data" with default driver
Pulling db (mysql:5.7)...
5.7: Pulling from library/mysql
15115158dd02: Downloading [====> ] 2.513MB/27.15MB
d733f6778b18: Download complete
1cc7a6c74a04: Downloading [=======================> ] 1.981MB/4.179MB
c4364028a805: Download complete
82887163f0f6: Download complete
28abcb7f57e0: Downloading [========>
使用浏览器访问:宿主机IP+8000端口访问,即可进入安装wordpress界面
以下是安装好的界面。
docker -d
docker-compose up -d
集群工作模式
搭建SWARM集群
先把docker卸载然后安装,前面有安装方式,这里就不再缀诉。
初始化节点
docker swarm init
docker swarm join 加入一个节点!
#生成管理节点或工作节点,指定某一台成为管理或者工作节点就将生成的令牌粘贴到指定主机运行。
docker swarm join-token manager
docker swarm join-token worker
把后面的节点都搭建进去
1.生成主节点init
2.加入(管理者、worker)
目标:双主双从!
Raft协议(高可用)
双主双从:假设一个节点挂了!其他节点是否可用?
Raft协议:保证大多数节点存活才可以用。只要>1,集群至少大于3台!
实验
1.将docker机器停止。宕机!双主,另外一个主节点也不能使用了!
2.可以将其他节点离开集群
3.work就是工作的、管理节点操作!3台机器设置为了管理节点。
十分简单:集群,可用!3个主节点。>1台管理节点存活!
Raft协议:保证大多数节点存活,才可以使用,高可用!
结论
弹性、扩缩容!集群!
以后告别docker run!
docker-compose up! 启动一个项目。
集群:swarm docker service
容器=》服务!
容器=>服务 !=>副本!
redis服务=>10个副本!(同时开启10个rendis容器)
体验:创建服务、动态扩展服务、动态更新服务。
灰度发布:金丝雀发布!(不停机升级)
docker run 容器启动! 不具有扩缩容器
docker service 服务!具有扩缩容器,滚动更新!
查看服务REPLICAS
动态扩容
服务,集群中任意的节点都可以访问。服务可以有多个副本动态扩容实现高可用!
弹性、扩缩容!
10台!10000台!卖给别人!虚拟化!
服务的高可用,任何企业,云!
移除!
docker swarm其实并不难
只要会搭建集群、会启动服务、动态管理容器就可以了!
概念总结
swarm
集群的管理和编号。 docker可以初始化一个swarm集群,其他节点可以加入。(管理、工作者)
Node
就是一个docker节点。多个结点就组成了一个网络集群。
Service
任务,可以在管理节点或者工作节点来运行。核心。!用户访问!
Task
容器内命令,细节任务!
创建逻辑不变
命令->管理->api->调度->工作节点(创建Task容器维护创建!)
调整service以什么方式运行
拓展
网络模式:“PublishMode”:"ingress"
Swarm:
Overlay:
ingress:特殊的Overlay网络!负载均衡的功能!IPVS VIP!
虽然docker在4台机器上,实际网络是同一个! ingress网络,是一个特殊的Overlay网络 整体!
Docker Stack
docker-compose 单机部署项目!
Docker Stack部署,集群部署!
#单机
docker-compose up -d wordpress.yaml
#集群
docker stack deploy wordPress.yaml
....
Docker Secret
安全!配置密码,证书!
Docker Config
配置
标签:compose,服务,批量,wordpress,docker,root,节点 From: https://blog.51cto.com/HMJP/12109679