docker-compose 配置及基本应用场景
本文最后更新于 2024-02-17,文章内容可能已经过时。
什么是docker-compose
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
参考 https://www.runoob.com/docker/docker-compose.html
简单来说就一个应用,分好几个容器,比如一个web应用除了web容器本身还有数据库容器,一共需要两个容器,就需要打包成一个配置文件统一管理和启动,好部署
详细配置例子
这个例子将nginx容器、halo容器、nextcoud容器、mysql容器、redis容器、wordpress容器打包到一起统一进行管理;其中nginx可以反向代理halo、nextcloud、wordpress容器,其中又有其他容器相互依赖使用的例子,比如nextcloud需要mysql
version: '2.0'
services:
nginx:
image: nginx:1.23.1
restart: always
ports:
- "80:80"
- "443:443"
expose:
- "18-190"
- "210-220"
#links:
#- seafile
container_name: nginx
privileged: true
volumes:
#- /nextcloud/nginx/conf:/etc/nginx-
- /nextcloud/nginx/ssl:/ssl
- /nextcloud/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /nextcloud/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
- /nextcloud/nginx/conf.d/halo.quinntian.com.conf:/etc/nginx/conf.d/halo.quinntian.com.conf
- /nextcloud/nginx/conf.d/cloud.quinntian.com.conf:/etc/nginx/conf.d/cloud.quinntian.com.conf
#- /opt/nginx/html:/usr/share/nginx/html
#- /opt/nginx/logs:/var/log/nginx
# - /opt/nginx/proxy.conf:/etc/nginx/proxy.conf
networks:
- nginx-net
links:
- nextcloud
# - halo
halo:
image: halohub/halo:1.5.4
container_name: halo
restart: unless-stopped
ports:
- "8090:8090"
volumes:
- /nextcloud/halo:/root/.halo
command:
- halohub/halo:1.5.4
networks:
- nginx-net
nextcloud:
image: nextcloud
container_name: nextcloud
restart: always
ports:
- "9090:80"
volumes:
- /nextcloud/nextcloud-data/var/www/html:/var/www/html
networks:
- nginx-net
links:
- mysql
- redis
mysql:
image: mysql
container_name: mysql
restart: always
ports:
- "9091:3306"
environment:
- MYSQL_ROOT_PASSWORD=yourpassword # Requested, set the root's password of MySQL service.
- MYSQL_LOG_CONSOLE=true
# - MYSQL_USER=wordpress
# - MYSQL_PASSWORD=yourpassword
volumes:
- /nextcloud/mysql/usr/local/mysql/conf:/etc/mysql/conf.d
- /nextcloud/mysql/usr/local/mysql/logs:/logs
- /nextcloud/mysql/usr/local/mysql/data:/var/lib/mysql
networks:
- nginx-net
redis:
image: redis
container_name: redis
restart: always
ports:
- "9092:6379"
volumes:
- /nextcloud/redis/data:/data
- /nextcloud/redis/conf/redis.conf:/etc/redis/redis.conf
networks:
- nginx-net
command:
# 以配置文件的方式启动 redis.conf
redis-server /etc/redis/redis.conf
wordpress:
image: wordpress:latest
container_name: wordpress
depends_on:
- mysql
ports:
- 9093:80
restart: always
networks:
- nginx-net
links:
- mysql
environment:
WORDPRESS_DB_HOST: mysql:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: yourpassword
volumes:
- /nextcloud/wordpress/wp-content:/var/www/html/wp-content
- /nextcloud/wordpress/php-conf/php.ini:/usr/local/etc/php/php.ini
networks:
nginx-net:
driver: bridge
具体标签解释说明
- service 该标签底下设置一个服务底下的一个个容器,比如web容器,数据库容器
节点名
,比如nginx,代表nginx这个服务,格式是- 节点名
- image 表示拉取的docker镜像,一般的格式是
路径名:版本号
- restart 表示重启的时机
- ports 指定暴露给宿主机的端口号,一般格式是
-[绑定宿主机的端口号:容器内的端口号]
- exports 暴露给其他容器内的端口号 -一般格式是
-端口号
- links 用于指向其他服务
该节点用于指定多个容器构成的服务的内网,比如容器1,指定一个名字,那么其他服务访问这个容器时候就不需要用IP地址,直接用这个名字即可;需要与networks标签配合使用,即要指定一个所属网络,格式是-名称
- networks 用于配置该容器属于哪个网络,格式是
-所属网络
- container_name 容器名
- volumes 映射宿主机和容器的路径
- 格式是
宿主机路径:容器内路径
- 格式是
- environment 设置环境变量,即容器内的服务可以读取相关配置的环境变量
- command 设置相关命令,比如启动容器附带执行的命令
- network 标签,用于配置整个大的服务的网络
- 底下的第一个标签用于配置网络名
- driver 表示该网络的网络模式
- 底下的第一个标签用于配置网络名
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 bit15k
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果