Docker Compose:定义和运行多个容器,批量容器编排
Dockerfile:让程序在任何地方运行
下载安装
//下载
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
//授权
sudo chmod +x /usr/local/bin/docker-compose
初体验
1.自己的应用
2.Dockerfile 将自己的应用打包成镜像
3.Docker-compose.yml文件,(定义整个服务,需要的环境,web,redis),完整的上线服务
4.启动compose项目(docker-compose up)
mkdir composetest
cd composetest
//黄健一个python应用
vim app.py
//文件内容
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
//创建依赖文件
vim requirements.txt
//文件内容
flask
redis
//创建Dockerfile
//文件内容
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
//创建docker-compose.yml文件
docker-compose.yml
//文件内容
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
会发现这里启动了docker-compose.yml里面的两个服务
默认的容器名(number是一个副本,服务不可能只有一个运行实例,弹性,高并发,,):文件名服务名_number
网络规则:通过compose创建的服务都在同一个网络下面,
mysql(ip):3306
redis(ip):6379
//两处一致
docker-compose down || ctrl + c
docker-compose-yml 配置文件编写
知道地址:
https://docs.docker.com/compose/compose-file/#compose-file-structure-and-examples
version: ' ' #版本
services: #服务
service1: web
images
build
network
service2: redis
network:
networks:
configs:
一键部署开源项目
1.mkdir my_wordpress
2.cd my_wordpress/
3.vim docker-compose.yml
version: "3.9"
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: wordpress
volumes:
db_data: {}
wordpress_data: {}
4.docker-compose up -d
编写自己的为服务上线
编写自己的为服务
编写Dockerfile构建镜像
编写docker-compose.yml
打包
//Dockerfile
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
//docker-compose.yml
version: '3.3'
services:
kuangapp:
build: .
image: kuangapp
depends_on:
- redis
redis:
image: "library/redis:alpine"
docker swarm
1.首先购买四太服务器,然后连接
2.然后右键命令发布到所有会话
3.安装docker
4.启动docker
https://docs.docker.com/engine/swarm/
docker swarm --help
//初始化一个节点,会得到遗传命令,可以让其他节点加入这个集群里面
docker swarm init --advertise-addr self_ip
//生成加入集群的命令
docker swarm join-token worker
docker swarm join-token manager
//其他节点使用上面的命令添加进去
docker node ls
Raft(一致性协议)
双主双从:假设一个节点挂了,其他节点是否可以用
Raft协议:保证大多数节点存活才可以用,只要》1,集群至少大于3台
实验:将一台主节点停掉,会发现另一台主节点也不可用了
将一台节点离开,再从其他节点查看节点状态(需要一定时间),