docker-compose入门及使用

一、docker-compose简介

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

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

开源地址:https://github.com/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.repo
yum 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 db
Pulling db (postgres:latest)...
latest: Pulling from library/postgres
cd0a524342ef: Pull complete
9c784d04dcb0: Pull complete
d99dddf7e662: Pull complete
e5bff71e3ce6: Pull complete
cb3e0a865488: Pull complete
31295d654cd5: Pull complete
fc930a4e09f5: Pull complete
8650cce8ef01: Pull complete
61949acd8e52: Pull complete
527a203588c0: Pull complete
26dec14ac775: Pull complete
0efc0ed5a9e5: Pull complete
40cd26695b38: Pull complete
Digest: sha256:fd6c0e2a9d053bebb294bb13765b3e01be7817bf77b01d58c2377ff27a4a46dc
Status: 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
  1. 创建flask应用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

4.创建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"]

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]# ls
app.py  docker-compose.yml  Dockerfile  requirements.txt

docker-compose up

开始构建容器
在这里插入图片描述
docker ps可查看到两个容器已经起来了
在这里插入图片描述
验证安装 http://ip ,如下安装已完成。
在这里插入图片描述

更新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 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 ' I have been seen {} times.\n'.format(count)     #去除hello world

重新构建web容器

[root@VM-0-5-centos mycompose]# docker-compose up -d
Starting mycompose_web_1 ... 
Starting mycompose_web_1 ... done

此时访问web页面如下:
在这里插入图片描述


推荐一下个人的公众号:
在这里插入图片描述

【注】在微信里搜索“满目山河m”或者微信扫描二维码都可以关注微信公众号。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr_沉溺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值