本文共 4834 字,大约阅读时间需要 16 分钟。
docker-compose 是官方开源容器创建、多容器编排的工具。
我们知道一个完整的应用系统往往包含多个容器,相辅相成提供服务。如一个web应用需要包含web服务、数据库等,此时通过使用docker-compose来轻松实现对多容器的控制和管理。
开源地址:
docker-compose由python编写,可以通过pip包管理安装
pip install docker-compose#或yum方式安装wget https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repoyum install docker-compose#或二进制安装clone GitHubrelease
Docker Compose 将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container)
docker-compose.yml文件所在目录为docker-compose工程,一个工程包含多个服务,每个服务中定义了容器运行的镜像、容器名、端口、网络等参数。即一个服务可包含多个容器实例。
如下的一个docker-compose.yml文件
version: '2.3' services: log: image: goharbor/harbor-log:v2.1.5 container_name: harbor-log restart: always dns_search: . cap_drop: - ALL cap_add: - CHOWN - DAC_OVERRIDE - SETGID - SETUID volumes: - /var/log/harbor/:/var/log/docker/:z - type: bind source: ./common/config/log/logrotate.conf target: /etc/logrotate.d/logrotate.conf - type: bind source: ./common/config/log/rsyslog_docker.conf target: /etc/rsyslog.d/rsyslog_docker.conf ports: - 127.0.0.1:1514:10514 networks: - harbor registry: image: goharbor/registry-photon:v2.1.5 container_name: registry restart: always ...
docker-compose ps
docker-compose logs
docker-compose build
docker-compose start nginx
docker-compose stop nginx
docker-compose rm nginx
docker-compose up
docker-compose kill nginx
version: '2'services: db: image: postgres web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/myapp ports: - "3000:3000" depends_on: - db $ docker-compose pull dbPulling db (postgres:latest)...latest: Pulling from library/postgrescd0a524342ef: Pull complete9c784d04dcb0: Pull completed99dddf7e662: Pull completee5bff71e3ce6: Pull completecb3e0a865488: Pull complete31295d654cd5: Pull completefc930a4e09f5: Pull complete8650cce8ef01: Pull complete61949acd8e52: Pull complete527a203588c0: Pull complete26dec14ac775: Pull complete0efc0ed5a9e5: Pull complete40cd26695b38: Pull completeDigest: sha256:fd6c0e2a9d053bebb294bb13765b3e01be7817bf77b01d58c2377ff27a4a46dcStatus: Downloaded newer image for postgres:latest
docker-compose scale nginx=3 redis=3
docker-compose run web bash
详细命令和介绍参考官方文档https://docs.docker.com/compose/reference/
使用docker-compose部署一个python web应用。
mkdir mycompose cd mycompose
app.py
import timeimport redisfrom flask import Flaskapp = 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)
requirements.txt
flaskredis
Dockerfile
文件# syntax=docker/dockerfile:1FROM python:3.7-alpineWORKDIR /codeENV FLASK_APP=app.pyENV FLASK_RUN_HOST=0.0.0.0RUN apk add --no-cache gcc musl-dev linux-headersCOPY requirements.txt requirements.txtRUN pip install -r requirements.txtEXPOSE 5000COPY . .CMD ["flask", "run"]
docker-compose.yml
包含两个容器 web和redisversion: "3.0"services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine"
#此时你的工程目录如下:[root@VM-0-5-centos mycompose]# lsapp.py docker-compose.yml Dockerfile requirements.txtdocker-compose up
开始构建容器
docker ps可查看到两个容器已经起来了
验证安装 ,如下安装已完成。
更新docker-compose.yml 添加挂载
version: "3.0"services: web: build: . ports: - "5000:5000" volumes: - .:/code environment: FLASK_ENV: development redis: image: "redis:alpine"
编辑app.py
import timeimport redisfrom flask import Flaskapp = 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 ' I have been seen {} times.\n'.format(count) #去除hello world
重新构建web容器
[root@VM-0-5-centos mycompose]# docker-compose up -dStarting mycompose_web_1 ... Starting mycompose_web_1 ... done
此时访问web页面如下:
docker-compose基础使用完毕啦,深入学习可参考官方文档https://docs.docker.com/compose/reference/
文章有不足的地方欢迎在评论区指出。
欢迎收藏、点赞、提问。关注顶级饮水机管理员,除了管烧热水,有时还做点别的。
转载地址:http://yuxiz.baihongyu.com/