博客
关于我
docker-compose入门及使用
阅读量:543 次
发布时间:2019-03-08

本文共 4834 字,大约阅读时间需要 16 分钟。

一、docker-compose简介

docker-compose 是官方开源容器创建、多容器编排的工具。

我们知道一个完整的应用系统往往包含多个容器,相辅相成提供服务。如一个web应用需要包含web服务、数据库等,此时通过使用docker-compose来轻松实现对多容器的控制和管理。

开源地址:


三、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的三个关键

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 ps
  • logs:查看服务日志输出
docker-compose logs
  • build:构建或者重新构建服务
docker-compose build
  • start:启动指定服务已存在的容器
docker-compose start nginx
  • stop:停止已运行的服务的容器
docker-compose stop nginx
  • rm:删除指定服务的容器
docker-compose rm nginx
  • up:构建、启动容器
docker-compose up
  • kill:通过发送 SIGKILL 信号来停止指定服务的容器
docker-compose kill nginx
  • pull:下载服务镜像
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
  • scale:设置指定服务运气容器的个数.
docker-compose scale nginx=3 redis=3
  • run:在一个服务上执行一个命令
docker-compose run web bash

详细命令和介绍参考官方文档https://docs.docker.com/compose/reference/


四、docker-compose实践

使用docker-compose部署一个python web应用。

1.创建一个工程目录
mkdir mycompose cd mycompose
2. 创建flask应用 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)
3.创建requirements.txt
flaskredis
4.创建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"]
5.创建你的docker-compose.yml 包含两个容器 web和redis
version: "3.0"services:  web:    build: .    ports:      - "5000:5000"  redis:    image: "redis:alpine"
6.构建和运行docker-compose工程
#此时你的工程目录如下:[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/

你可能感兴趣的文章
MySQL 在并发场景下的问题及解决思路
查看>>
MySQL 基础架构
查看>>
MySQL 基础模块的面试题总结
查看>>
MySQL 备份 Xtrabackup
查看>>
mYSQL 外键约束
查看>>
mysql 多个表关联查询查询时间长的问题
查看>>
mySQL 多个表求多个count
查看>>
mysql 多字段删除重复数据,保留最小id数据
查看>>
MySQL 多表联合查询:UNION 和 JOIN 分析
查看>>
MySQL 大数据量快速插入方法和语句优化
查看>>
mysql 如何给SQL添加索引
查看>>
mysql 字段区分大小写
查看>>
mysql 字段合并问题(group_concat)
查看>>
mysql 字段类型类型
查看>>
MySQL 字符串截取函数,字段截取,字符串截取
查看>>
MySQL 存储引擎
查看>>
mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
查看>>
MySQL 存储过程参数:in、out、inout
查看>>
mysql 存储过程每隔一段时间执行一次
查看>>
mysql 存在update不存在insert
查看>>