文章目录
Docker Compose
简介
 Docker
Dockerfile build run 手动操作,单个容器!
微服务,100个微服务,依赖关系。
Docker Compose 来轻松高效的管理容器,定义运行多个容器。
官方介绍
- 定义运行多个容器
- YAML file配置文件
- single command。命令有哪些?
Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration. To learn more about all the features of Compose, see the list of features.
三步骤:
Using Compose is basically a three-step process:
1 Define your app’s environment with a Dockerfile so it can be reproduced anywhere.
Dockerfile保证我们的项目再任何地方可以运行
2 Define the services that make up your app in docker-compose.yml so they can be run together in an isolated environment.
services 什么是服务。
3 Run docker-compose up and Compose starts and runs your entire app.
启动项目
Compose是Docker官方的开源项目,需要安装!
Dockerfile让程序在任何地方运行。web服务、redis、mysql、nginx… 多个容器。 run
安装
1 下载
# 官网提供 (没有下载成功)
curl -L "https://github.com/docker/compose/releases/download/1.26.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
授权

yaml规则
 docker-compose.yaml 核心! 下面是个例子
version: '2.0'
services:
  web:
    build: .
    ports:
    - "5000:5000"
    volumes:
    - .:/code
    - logvolume01:/var/log
    links:
    - redis
  redis:
    image: redis
volumes:
  logvolume01: {}
https://docs.docker.com/compose/compose-file/#compose-file-structure-and-examples
开源项目:博客
https://docs.docker.com/compose/wordpress/
下载程序、安装数据库、配置…
compose应用 => 一键启动
1 下载项目(docker-compse.yaml)
 2 如果需要文件。Dockerfile
 3 文件准备齐全,一键启动项目即可
 
实战:自己编写微服务上线
1 编写项目微服务
2 Dockerfile构建镜像
FROM java:8
 
COPY *.jar /app.jar
 
CMD ["--server.port=8080"]
 
EXPOSE 8080
 
ENTRYPOINT ["java", "-jar", "/app.jar"]
3 docker-compose.yml编排项目
version: '3.8'
services:
  xiaofanapp:
    build: .
    image: xiaofanapp
    depends_on:
      - redis
    ports:
      - "8080:8080"
 
  redis:
    image: "library/redis:alpine"
4 丢到服务器运行 docker-compose up

 
 总结:
工程、服务、容器
项目 compose: 三层
1 工程 Project
 2 服务
 3 容器 运行实例! docker k8s 容器
Docker Swarm
集群
 购买服务器
 登录阿里云账号,进入控制台,创建实例
 4台服务器2G
 
 
 
 
 
 
 到此,我们的服务器购买成功!
四台机器安装docker环境
和我们单机安装一样
xshell直接同步操作,省时间!
Swarm集群搭建

docker swarm init --help
 
ip addr # 获取自己的ip(用内网的不要流量)
 
[root@iZ2ze58v8acnlxsnjoulk5Z ~]# docker swarm init --advertise-addr 172.16.250.97
Swarm initialized: current node (otdyxbk2ffbogdqq1kigysj1d) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-3vovnwb5pkkno2i3u2a42yrxc1dk51zxvto5hrm4asgn37syfn-0xkrprkuyyhrx7cidg381pdir 172.16.250.97:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
初始化结点docker swarm init
 docker swarm join 加入一个结点!
[root@iZ2ze58v8acnlxsnjoulk6Z ~]# docker swarm join --token SWMTKN-1-3vovnwb5pkkno2i3u2a42yrxc1dk51zxvto5hrm4asgn37syfn-0xkrprkuyyhrx7cidg381pdir 172.16.250.97:2377
This node joined a swarm as a worker.
各台机器执行上面的命令把后面的结点都搭建进去

Raft协议
双主双从:假设一个结点挂了!其他结点是否可以用!
Raft协议:保证大多数结点存活才可以使用,只要>1, 集群至少大于3台!
实验:
1、将docker1机器停止。宕机!双主,另外一个结点也不能使用了!
 
- worker就是工作的,管理结点操作! 3台结点设置为了管理结点。
- Docker swarm集群增加节点
十分简单:集群,可用! 3个主节点。 > 1台管理结点存活!
Raft协议:保证大多数结点存活,才可以使用,高可用!
体会
弹性、扩缩容!集群!
以后告别 docker run!
docker-compose up!启动一个项目。单机!
集群: swarm docker-service
k8s service
容器 => 服务!
容器 => 服务! => 副本!
redis => 10个副本!(同时开启10个redis容器)
体验:创建服务、动态扩容服务、动态更新服务
 
灰度发布(金丝雀发布)

查看服务
 
 动态扩缩容
[root@iZ2ze58v8acnlxsnjoulk5Z ~]# docker service update --replicas 3 my-nginx
1/3: running   [==================================================>] 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged 
 
 
[root@iZ2ze58v8acnlxsnjoulk5Z ~]# docker service scale my-nginx=5
my-nginx scaled to 5
overall progress: 3 out of 5 tasks 
overall progress: 3 out of 5 tasks 
overall progress: 3 out of 5 tasks 
overall progress: 5 out of 5 tasks 
1/5: running   [==================================================>] 
2/5: running   [==================================================>] 
3/5: running   [==================================================>] 
4/5: running   [==================================================>] 
5/5: running   [==================================================>] 
verify: Service converged 
 
 
[root@iZ2ze58v8acnlxsnjoulk5Z ~]# docker service scale my-nginx=1
my-nginx scaled to 1
overall progress: 1 out of 1 tasks 
1/1: running   [==================================================>] 
verify: Service converged 
移出!docker service rm
概念的总结
 swarm
集群的管理和编号,docker可以初始化一个swarm集群,其他结点可以加入。(管理,工作者)
Node
就是一个docker结点,多个结点就组成了一个网络集群(管理、工作者)
Service
任务,可以在管理结点或者工作结点来运行。核心,用户访问。
Task
容器内的命令、细节任务!
 


 调整service以什么方式运行
--mode string                        
Service mode (replicated or global) (default "replicated")
 
docker service create --mode replicated --name mytom tomcat:7 默认的
docker service create --mode global  --name haha alpine ping www.baidu.com
其他命令学习方式
Docker Stack
docker-compose 单机部署项目
docker stack 集群部署
 
# 单机
docker-compose up -d wordpress.yaml
# 集群
docker stack deploy wordpress.yaml
Docker Secret
安全!配置密码!证书!
 
[root@iZ2ze58v8acnlxsnjoulk5Z ~]# docker secret --help
 
Usage:  docker secret COMMAND
 
Manage Docker secrets
 
Commands:
  create      Create a secret from a file or STDIN as content
  inspect     Display detailed information on one or more secrets
  ls          List secrets
  rm          Remove one or more secrets
Docker Config
配置!
[root@iZ2ze58v8acnlxsnjoulk5Z ~]# docker config --help
 
Usage:  docker config COMMAND
 
Manage Docker configs
 
Commands:
  create      Create a config from a file or STDIN
  inspect     Display detailed information on one or more configs
  ls          List configs
  rm          Remove one or more configs









