什么是docker compose?
Compos 出现的背景:
通过前面的学习我们能通过 DockerFile 创建 和运行单个容器 ,假如我们现在 运行100个服务(也许有压力 但还能就收)如果运行1000个呢?
Docker Compose 概述
- Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。
- 使用的环境:Compose可在所有环境中工作:生产,登台,开发,测试以及CI工作流
- 使用Compose基本上是一个三步过程:
- 使用定义您的应用环境,
Dockerfile
以便可以在任何地方复制。 - 定义组成应用程序的服务,
docker-compose.yml
以便它们可以在隔离的环境中一起运行。 - Run
docker-compose up
and 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
这里docker的源问题导致的(可以将自己的docker源换成国内的)
接下来我们测试一下
#停止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
搞定!
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