目录
docker compose
docker compose是一个工具,用于在docker容器中运行多个服务。它使用YAML文件
来配置应用程序的服务,并使用一个命令来启动、停止和管理它们。docker compose允许用户定义多个容器并将它们组合在一起,以便可以轻松地在多个容器之间进行通信和协作。
docker compose的主要功能包括:
定义和运行多个容器的应用程序。
使用命令一次启动、停止和管理多个容器。
提供了一个简单的方式来管理容器之间的依赖关系。
允许用户轻松地扩展和升级应用程序。
docker-compose.yml文件
docker-compose.yml文件用于定义和配置多个docker容器的运行方式。它包含多个服务的定义,每个服务包含一个或多个容器,可以指定容器的镜像、端口映射、挂载卷、环境变量、依赖关系等。
docker compose命令
- 启动容器。
docker compose up
- 停止并删除容器。
docker compose down
- 列出正在运行的容器。
docker compose ps
- 查看容器的日志。
docker compose logs
- 在容器内运行命令。
docker compose exec
- 重启容器。
docker compose restart
docker compose案例
基于python和redis的compose案例
- 新建目录
composetest
,进入目录
[root@xia ~]# mkdir composetest
[root@xia ~]# 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 Docker Compose! I have been seen {} times.\n'.format(count)
- 新建
requirements.txt
,安装python使用的库
flask
redis
- 创建
Dockerfile
文件来制作镜像,包含python需要的所有依赖
# 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"]
- 指定基础镜像python3.7
- 将工作目录设置为 /code
- 设置命令使用的环境变量
- 安装 gcc 和其他依赖项
- 复制并安装 python 依赖项
- 暴露端口 5000
- 将项目中的当前目录复制到容器中的工作目录。…
- 将容器的默认命令设置为
flask run
- 创建一个
docker-compose.yml
,定义一个服务
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"
其中:
web服务会使用当前目录Dockerfile文件构建的镜像
,并且使用8000端口映射到flask的5000端口,而redis使用官网的镜像。
- 查看当前目录文件,在当前目录启动容器
[root@xia composetest]# ls
app.py docker-compose.yml Dockerfile requirements.txt
[root@xia composetest]# docker compose up -d
[+] Running 3/3
✔ Network composetest_default Created 0.1s
✔ Container composetest-redis-1 Started 0.8s
✔ Container composetest-web-1 Started 0.8s
- 浏览器访问
使用compose搭建WordPress
- 创建一个
my_wordpress
目录,并且进入该目录编写docker-compose.yml
文件
[root@xia my_wordpress]# vim docker-compose.yml
services:
db:
# We use a mariadb image which supports both amd64 & arm64 architecture
image: mariadb:10.6.4-focal
# If you really want to use MySQL, uncomment the following line
#image: mysql:8.0.27
command: '--default-authentication-plugin=mysql_native_password'
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=somewordpress
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpress
expose:
- 3306
- 33060
wordpress:
image: wordpress:latest
volumes:
- wp_data:/var/www/html
ports:
- 80:80
restart: always
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=wordpress
- WORDPRESS_DB_NAME=wordpress
volumes:
db_data:
wp_data:
- 运行容器
[root@xia my_wordpress]# docker compose up -d
[+] Running 3/3
✔ Network my_wordpress_default Cre... 0.1s
✔ Container my_wordpress-db-1 Star... 0.7s
✔ Container my_wordpress-wordpress-1 Started 0.8s
- 浏览器访问80端口,当看到以下页面时,表示成功