博客
关于我
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 Cluster与MGR集群实战
查看>>
multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded
查看>>
mysql cmake 报错,MySQL云服务器应用及cmake报错解决办法
查看>>
Multiple websites on single instance of IIS
查看>>
mysql CONCAT()函数拼接有NULL
查看>>
multiprocessing.Manager 嵌套共享对象不适用于队列
查看>>
multiprocessing.pool.map 和带有两个参数的函数
查看>>
MYSQL CONCAT函数
查看>>
multiprocessing.Pool:map_async 和 imap 有什么区别?
查看>>
MySQL Connector/Net 句柄泄露
查看>>
multiprocessor(中)
查看>>
mysql CPU使用率过高的一次处理经历
查看>>
Multisim中555定时器使用技巧
查看>>
MySQL CRUD 数据表基础操作实战
查看>>
multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
查看>>
mysql csv import meets charset
查看>>
multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
查看>>
MySQL DBA 数据库优化策略
查看>>
multi_index_container
查看>>
MySQL DBA 进阶知识详解
查看>>