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 ~]
[root@docker ~]
[root@docker bin]
Docker Compose初体验
创建应用
[root@docker docker]
[root@docker composetest]
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)
[root@docker composetest]
flask
redis
创建Dockerfile
[root@docker composetest]
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]
version: "3"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
使用Compose构建并运行应用程序
[root@docker composetest]
Creating composetest_web_1 ... done
Creating composetest_redis_1 ... done
[root@docker composetest]
Hello World! I have been seen 1 times.
Docker Compose配置编写规则
使用Compose一键部署Wordpress博客
[root@docker /]
[root@docker my_wordpress]
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
volumes:
- wordpress_data:/var/www/html
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: {}
wordpress_data: {}
[root@docker my_wordpress]
[root@docker my_wordpress]
使用Compose搭建lnmp环境
[root@docker]
[root@docker lnmp]
[root@docker lnmp]
[root@docker lnmp]
[root@docker lnmp]
.
├── conf
│ └── default.conf
├── docker-compose.yml
└── html
├── index.php
├── index.html
[root@docker lnmp]
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.php index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
root /var/www/html;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
[root@docker lnmp]
ok
[root@docker lnmp]
<?php
$conn=mysql_connect("mysql","root","123456");
if ($conn) echo "It's ok!!";
mysql_close();
?>
[root@docker lnmp]
version: "3"
services:
nginx:
image: nginx:1.18
ports:
- 80:80
volumes:
- /lnmp/conf/default.conf:/etc/nginx/conf.d/default.conf
- /lnmp/html:/usr/share/nginx/html
depends_on:
- php
php:
image: php:5.6-fpm
volumes:
- /lnmp/html:/var/www/html/
depends_on:
- mysql
mysql:
image: mysql:5.7
ports:
- 3306:3306
environment:
- MYSQL_ROOT_PASSWORD=123456
[root@docker lnmp]
[root@docker lnmp]
- 构建完成后访问页面进行测试
192.168.100.100/index.php
192.168.100.100/index.html
- 此时可能会发生php与mysql无法对接的问题,需要进入php安装插件
./docker-php-ext-install mysql
- 部署
WordPress
[root@docker html]
[root@docker html]
[root@docker html]
[root@docker wordpress]
- 再次访问
宿主机IP地址
- 根据提示创建
php
文件 - 进入数据库主机,为WordPress创建数据库和授权账户