一、介绍Docker compose
作用:
Docker compose就是用来轻松高效管理容器,定义运行多个容器的
Docker compose运用介绍:
Compose是Docker官方的开源项目,需要安装!
Dockerfile 让程序在任何地方运行。如web服务、redis、mysql、nginx…多个容器。
Compose的yaml文件(类似这样):
version: "3.9" # optional since v1.27.0
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
docker-compose up 100个服务
Compose以上的有两个重要的概念:
1、服务services,是容器。应用(web、nginx、redis…)。(这些都是单独的容器)
2、项目project。一组关联的容器。
Docker Swarm
集群的方式部署,4台阿里云服务器、2核4G
二、Compose安装
1、下载
sudo 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、授权
sudo chmod +x /usr/local/bin/docker-compose
四、compose初体验
跟着官方文档走:https://docs.docker.com/compose/gettingstarted/
第 1 步:设置
1、为项目创建一个目录:
mkdir composetest
cd composetest
2、在项目目录中创建一个名为的文件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)
#这里是经过本人实验的,和官网不一样
3、在项目目录中创建另一个名为的文件requirements.txt并将其粘贴到:
flask
redis
第 2 步:创建 Dockerfile
在项目目录中,创建一个名为Dockerfile并粘贴以下内容的文件:
ROM python:3.7-alpine
RUN echo -e http://mirrors.ustc.edu.cn/alpine/v3.12/main/ > /etc/apk/repositories
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 -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
#该处也和官网不同
第 3 步:在 Compose 文件中定义服务
version: "3.3"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"
#该处也和官网不同
服务名命名为文件名_服务名_num:
网络规则:
在同一个网络下可以通过域名访问
停止:
docker-compose dowm或者直接Ctrl+C