简介
docker compose 是用于定义和运行多容器 Docker 应用程序的工具。借助 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,只需一个命令,即可从配置中创建并启动所有服务。 docker compose是Compose V2的语法,Compose V1是docker-compose,配置是写在一个名为 compose.yaml 的文件中(也可以是docker-compose.yml,这里用的官网的文件命名)。
配置详细描述
简单的案例
version: '3.0'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '443:443'
- '10000:81' # 可修改
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
version
只是一个版本的显示,可以不用写
image
要使用的Docker镜像如果不加:latest默认为最新,但是一般情况下在你长时间使用一个版本的情况下最好把这个固定成一个版本,这样更稳定
restart
这指定了容器的重新启动策略。unless-stopped
表示除非手动停止容器,否则发生故障时会自动重新启动。选项:
no
: 表示容器不会自动重新启动,无论什么原因导致容器停止。always
: 表示容器会在停止时自动重新启动,除非手动停止容器。unless-stopped
: 类似于always
,容器会在停止时自动重新启动,但如果手动停止容器,它将不会自动重新启动。on-failure
: 容器会在非零退出代码的情况下自动重新启动。可以使用restart: on-failure:5
来指定最大尝试重新启动的次数。
ports
通过这些端口可以从主机访问容器内的服务
volumes
允许容器访问主机上的特定目录或文件,并在容器之间共享数据。一般都会安装默认配置,后面备份和移植都可以直接把这目录下的所有映射文件复制过去,再重新运行下docker compose就可以很方便的迁移了
一般情况下我们只需要去修改- '10000:81'
这段,也就是到时候用什么ip:端口去访问这个应用,80和443端口是因为nginx-proxy-manager需要通过使用HTTP(端口80)和HTTPS(端口443)来提供服务,这个不用管,一般需要访问的管理页面 端口才需要修改成自己常用的端口,注意:避开已经使用的端口,可以使用
netstat -t4lpn
查看ipv4的tcp端口,:
后面的就是端口号,避免是下面这些(6010、10001、8000、53、22)端口就行
稍微复杂的案例
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: KgUDx*4eeUJ6u82!prX^ #修改
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: JC8JBFiPQ&F&bvC%haY3 #修改 需要和WORDPRESS_DB_PASSWORD保持一致
volumes:
- './db:/var/lib/mysql'
app:
image: wordpress:latest
restart: always
ports:
- 30104:80 #可修改
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: JC8JBFiPQ&F&bvC%haY3 #修改
volumes:
- './app:/var/www/html'
depends_on:
- redis
redis:
image: redis:alpine
restart: always
volumes:
- ./redis-data:/data
修改后配置
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: KgUDx*4eeUJ6u82!prX^ #修改
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: JC8JBFiPQ&F&bvC%haY3 #修改 需要和WORDPRESS_DB_PASSWORD保持一致
volumes:
- './db:/var/lib/mysql'
networks:
- default
app:
image: wordpress:latest
restart: always
ports:
- 30104:80 #可修改
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: JC8JBFiPQ&F&bvC%haY3 #修改
volumes:
- './app:/var/www/html'
networks:
- default
depends_on:
redis:
condition: service_started
required: true
redis:
image: redis:alpine
restart: always
volumes:
- ./redis-data:/data
这个配置中 services 服务由 db、app、redis 组成,这些是服务的名称标识,可以修改,目的只是让你更清晰的了解这块是干嘛的
environment
设置容器内部环境变量,这里是配置mysql的root密码、数据库名称、用户名、密码
depends_on
配置服务之间的启动顺序依赖,redis必须在wordpress之前运行
当然配置还有很多,比如使用 dockerfile 构建、Network、dns、configs等。但这里我们只将经常使用的,能让小白快速上手,先大体了解,具体的可以使用翻译查看官方文档https://docs.docker.com/compose/compose-file/
docker compose常用命令
创建和启动容器,并以后台模式运行
docker compose up -d
停止容器并删除创建的容器、网络、卷和映像
docker compose down
实时显示日志的变化
docker compose logs -f
拉取最新的镜像
docker compose pull
清理系统中不再使用的Docker镜像
docker image prune
docker compose 更新
docker compose down
docker compose pull
docker compose up -d
docker compose转换
https://www.composerize.com/
使用这个工具可以快速把那些教程上只有docker run xxx 配置的转换成compose.yml文件