Docker——Docker Compose应用
Posted Pakho`
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker——Docker Compose应用相关的知识,希望对你有一定的参考价值。
Docker Compose应用
Docker Compose简介
Docker
开源项目,负责实现对Docker
容器集群的快速编排- 托管于
Github
上,由Python
实现,调用Docker
服务的API
负责实现对Docker
容器集群的快速编排,即通过一个单独的yaml文件,来定义一组相关的容器来为一个项目服务。 - 所以,
Docker-compose
默认的管理对象是项目,通过子命令的方式对项目中的一组容器进行生命周期的管理 Docker Compose
来轻松高效的管理容器,定义运行多个容器- 作用:批量容器编排
查阅官方文档
- https://docs.docker.com/compose/
Compose
是一个用于定义和运行多容器Docker
应用程序的工具- 使用
Compose
,可以使用YAML
文件来配置应用程序的服务。然后,使用一个命令,从配置中创建并启动所有服务 - Compose适用于所有环境:生产、暂存、开发、测试以及CI工作流
- 使用Compose基本上分为
三个
步骤:- 使用Dockerfile定义应用程序的环境,以便可以在任何地方复制。
- 在
Docker-compose.yml
中定义组成应用程序的服务,以便它们可以在隔离的环境中一起运行 - 运行
Docker compose up
,Docker compose命令启动并运行整个应用程序。也可以使用Docker compose二进制文件运行Docker compose up。
Docker Compose安装
#由于官方镜像是国外的太慢,使用国内镜像下载
[root@docker ~]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
#为compose授权
[root@docker ~]# chmod +x /usr/local/bin/docker-compose
[root@docker bin]# docker-compose version
Docker Compose初体验
创建应用
#为项目创建目录
[root@docker docker]# mkdir composetest
#在项目目录中创建一个名为app.py的文件
[root@docker composetest]# vim app.py
import time
import redis
from flask import Flask #导入Flask框架
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379) #使用redis缓存
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)
#在项目目录中创建另一个名为requirements.txt的文件(依赖包)
[root@docker composetest]# vim requirements.txt
flask
redis
创建Dockerfile
[root@docker composetest]# vim 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"]
在yml文件中合成服务
[root@docker composetest]# vim docker-compose.yml
version: "3"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
使用Compose构建并运行应用程序
#从项目目录中,通过运行docker compose up启动应用程序
[root@docker composetest]# docker-compose up
Creating composetest_web_1 ... done
Creating composetest_redis_1 ... done
#本机测试
[root@docker composetest]# curl localhost:5000
Hello World! I have been seen 1 times.
Docker Compose配置编写规则
- 只有
三层
- https://docs.docker.com/compose/compose-file/compose-file-v3/
- 第一层:
Version
版本,与Docker Engine
对应 - 第二层:
Services
服务- 服务1:web (服务配置)
images
build
Network
… - 服务2:redis
- 服务1:web (服务配置)
- 第三层:其他配置
- 网络/卷,全局规则
- 第一层:
Service
中可
+的参数container_name
:指定自定义容器名称,而不是生成的默认名称depends_on
表示服务之间的依赖关系,服务依赖性导致以下行为,[ 如:启动顺序 web -> redis web依赖redis ]
使用Compose一键部署Wordpress博客
#创建一个空的项目目录
[root@docker /]# mkdir my_wordpress
#编写docker-compose.yml文件
[root@docker my_wordpress]# vim docker-compose.yml
version: "3.3"
services:
db:
image: mysql:5.7 #镜像使用mysql:5.7
volumes:
- db_data:/var/lib/mysql #数据卷挂载 主机路径:容器路径
restart: always #总是重启,创建容器时没有添加参数导致的后果是当Docker重启时,容器未能自动启动
environment: #环境
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on: #依赖于数据库db
- db
image: wordpress:latest #下载wp最新版镜像
volumes:
- wordpress_data:/var/www/html #数据卷挂载
ports:
- "8000:80" #本机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: {}
wordpress_data: {}
[root@docker my_wordpress]# docker-compose up #前台运行
[root@docker my_wordpress]# docker-compose up -d #后台运行
以上是关于Docker——Docker Compose应用的主要内容,如果未能解决你的问题,请参考以下文章