Docker compose

什么是docker compose?

Compos 出现的背景:

通过前面的学习我们能通过 DockerFile 创建 和运行单个容器 ,假如我们现在 运行100个服务(也许有压力 但还能就收)如果运行1000个呢?

Docker Compose 概述

  1. Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。
  2. 使用的环境:Compose可在所有环境中工作:生产,登台,开发,测试以及CI工作流
  3. 使用Compose基本上是一个三步过程:
    1. 使用定义您的应用环境,Dockerfile以便可以在任何地方复制。
    2. 定义组成应用程序的服务,docker-compose.yml 以便它们可以在隔离的环境中一起运行。
    3. Run docker-compose upand Compose启动并运行您的整个应用程序。

Compose 理解

  • compose是docker官方的开源项目

  • Dockerfile 让程序在任何地方运行,web,redis

  • docker-compose.yml

    version: '2.0'
    services:
      web:
        build: .
        ports:
        - "5000:5000"
        volumes:
        - .:/code
        - logvolume01:/var/log
        links:
        - redis
      redis:
        image: redis
    volumes:
      logvolume01: {}
    
  • 服务Service: 就是每个容器单独提供的

  • 项目project: 就是一组关联的容器

Compose 安装

# 1.安装compose
[root@localhost ~]# curl -L "https://get.daocloud.io/docker/compose/releases/download/1.27.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose  #这个是国内源 下载速度会快点


[root@localhost ~]# curl -L "https://github.com/docker/compose/releases/download/1.27.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   651  100   651    0     0    162      0  0:00:04  0:00:04 --:--:--   162
100 11.6M  100 11.6M    0     0   689k      0  0:00:17  0:00:17 --:--:-- 1848k

#给compose 加上执行权限
[root@localhost ~]# ls /usr/local/bin/
docker-compose
[root@localhost ~]# chmod +x /usr/local/bin/docker-compose 
[root@localhost ~]# docker-compose version
docker-compose version 1.27.1, build 509cfb99
docker-py version: 4.3.1
CPython version: 3.7.7
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019
  • 假如不能再全局使用docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose  #

安装预发行版本

如果您想试用预发布版本,可以从GitHub上Compose存储库发布页面下载候选发布。按照链接中的说明进行操作,该链接涉及curl在终端中运行命令以下载二进制文件。

也可以从https://dl.bintray.com/docker-compose/master/下载从“ master”分支构建的预发行版本 。

发行前的版本使您可以在发行新功能之前对其进行试用,但可能会使其不稳定。

升级

如果要从Compose 1.2或更早版本进行升级,请在升级Compose之后删除或迁移现有容器。这是因为从1.3版开始,Compose使用Docker标签来跟踪容器,并且需要重新创建容器以添加标签。

如果Compose检测到创建的没有标签的容器,则它将拒绝运行,这样您就不会最终获得两组标签。如果要继续使用现有容器(例如,因为它们具有要保留的数据量),则可以使用Compose 1.5.x通过以下命令迁移它们:

docker-compose migrate-to-labels

另外,如果您不担心保留它们,可以将其删除。撰写只是创建新的。

docker container rm -f -v myapp_web_1 myapp_db_1 ...

卸载

如果使用curl以下命令卸载Docker Compose :

sudo rm /usr/local/bin/docker-compose

如果使用pip以下命令卸载Docker Compose :

pip uninstall docker-compose

实战练习

实战:在此页面上,您将构建一个运行在Docker Compose上的简单Python Web应用程序。该应用程序使用Flask框架,并在Redis中维护一个计数器。尽管该示例使用Python,但是即使您不熟悉此处演示的概念,也应可以理解。(官方实例)

https://docs.docker.com/compose/gettingstarted/

#前提条件
确保已经安装了Docker Engine 和Docker Compose。您无需安装Python或Redis,因为两者均由Docker映像提供。


#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.
'.format(count)
#3.requirements.txt在项目目录中创建另一个名为的文件,并将其粘贴到:
flask
redis

#4.创建一个DockerFile
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文件
version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"
      
      
#启动工程
docker-compose up

image-20200915152601446

这里docker的源问题导致的(可以将自己的docker源换成国内的)

image-20200915153418148

image-20200915153538375

接下来我们测试一下

image-20200915153749174

#停止docker-compose
1.CTRL + C
2.进入项目目录 执行docker-compose down

使用docker-compose搭建自己的博客

[root@localhost ~]# mkdir  my_wordpress
[root@localhost ~]# cd my_wordpress
[root@localhost my_wordpress]# vim docker-compose.yml
version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
volumes:
    db_data: {}

[root@localhost my_wordpress]# docker-compose up -d  

image-20200915160746600

搞定!

docker-compose 的常用命令

如果要在后台运行服务,则可以将-d标志(用于“分离”模式)传递给docker-compose up并用于docker-compose ps查看当前正在运行的内容:

$ docker-compose up -d
Starting composetest_redis_1...
Starting composetest_web_1...

$ docker-compose ps
Name                 Command            State       Ports
-------------------------------------------------------------------
composetest_redis_1   /usr/local/bin/run         Up
composetest_web_1     /bin/sh -c python app.py   Up      5000->5000/tcp

docker-compose run命令允许您为服务运行一次性命令。例如,查看哪些环境变量可用于 web服务:

$ docker-compose run web env

请参阅docker-compose --help以查看其他可用命令。您还可以为bash和zsh shell 安装命令完成功能,这还将显示可用命令。

如果您开始使用Compose with docker-compose up -d,请在完成服务后停止它们:

$ docker-compose stop

您可以使用down 命令降低所有内容,完全删除容器。通过--volumes还删除Redis容器使用的数据量:

$ docker-compose down --volumes
*************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
原文地址:https://www.cnblogs.com/martin-huang/p/13683634.html