目录
Docker Compose是什么
安装docker-compose
使用docker-compose
常用命令
Compose and WordPress
Docker Compose是什么
Docker Compose是一款容器编排工具,Compose是在一台机器上管理多个容器。
Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器,使用Docker Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动、停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。
官网地址:Overview of Docker Compose | Docker Documentation
安装docker-compose
1、从daocloud上下载docker-compose二进制文件安装
[root@docker ~]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
2、添加可执行权限
[root@docker ~]# chmod +x /usr/local/bin/docker-compose
3、测试安装结果
[root@docker ~]# docker-compose --version (-v也可以查看版本)
docker-compose version 1.29.2, build 5becea4c
使用docker-compose
1、为docker-compose项目创建一个目录
mkdir compose-test
cd compose-test
2、在该目录下创建一个名为 app.py 的文件,并粘贴以下内容
vim app.py(粘贴之前得在命令模式下输入":set paste",然后按i进入输入模式粘贴)
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,并粘贴以下内容
vim 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 的文件,并粘贴以下内容
vim docker-compose.yml
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
ports:
- "6379:6379"
这个Compose文件定义了web和redis这两个服务。
6、使用Compose构建并运行程序
[root@manager compose-test]# docker-compose up
WARNING: The Docker Engine you're using is running in swarm mode.
Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.
To deploy your application across the swarm, use `docker stack deploy`.
Creating network "compose-test_default" with the default driver
Creating compose-test_web_1 ... done
Creating compose-test_redis_1 ... done
Attaching to compose-test_web_1, compose-test_redis_1
redis_1 | 1:C 05 Sep 2021 08:28:48.263 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1 | 1:C 05 Sep 2021 08:28:48.263 # Redis version=6.2.5, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1 | 1:C 05 Sep 2021 08:28:48.263 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
redis_1 | 1:M 05 Sep 2021 08:28:48.264 * monotonic clock: POSIX clock_gettime
redis_1 | 1:M 05 Sep 2021 08:28:48.265 * Running mode=standalone, port=6379.
redis_1 | 1:M 05 Sep 2021 08:28:48.265 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
redis_1 | 1:M 05 Sep 2021 08:28:48.265 # Server initialized
redis_1 | 1:M 05 Sep 2021 08:28:48.265 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
redis_1 | 1:M 05 Sep 2021 08:28:48.268 * Ready to accept connections
web_1 | * Serving Flask app 'app.py' (lazy loading)
web_1 | * Environment: development
web_1 | * Debug mode: on
web_1 | * Running on all addresses.
web_1 | WARNING: This is a development server. Do not use it in a production deployment.
web_1 | * Running on http://172.19.0.2:5000/ (Press CTRL+C to quit)
web_1 | * Restarting with stat
web_1 | * Debugger is active!
web_1 | * Debugger PIN: 910-519-966
[root@manager compose-test]# docker-compose up -d Compose启动的容器以后台方式运行
Starting compose-test_redis_1 ... done
Starting compose-test_web_1 ... done
web端口访问测试
常用命令
docker-compose up # 创建并启动容器
docker-compose ps # 显示所有容器
docker-compose down # 停止和删除容器、网络、卷、镜像,这些内容是通过docker-compose up命令创建的. 默认值删除容器、网络,可以通过指定rmi、volumes参数删除镜像和卷
docker-compose stop # 停止所有服务(容器)
docker-compose top # 显示正在运行的进程
Compose and WordPress
了解如何使用Compose来设置和运行WordPress
WordPress:可以快速搭建一个自己的网站的框架
快速入门指南:Quickstart: Compose and WordPress | Docker Documentation
1、新建一个目录
# cd my_wordpress
2、在该目录下创建一个名为docker-compose.yml的文件
# vim docker-compose.yml
version: "3.9"
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
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: {}
3、创建并启动WordPress容器
[root@manager my_wordpress]# docker-compose up -d
WARNING: The Docker Engine you're using is running in swarm mode.
Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.
To deploy your application across the swarm, use `docker stack deploy`.
Creating network "my_wordpress_default" with the default driver
Creating volume "my_wordpress_db_data" with default driver
Creating volume "my_wordpress_wordpress_data" with default driver
Creating my_wordpress_db_1 ... done
Creating my_wordpress_wordpress_1 ... done
4.web端口访问WordPress
http://localhost:8000
访问成功,说明已成功运行WordPress。