经过一段时间的学习和研究,终于把Docker Compose如何快速部署整个基础开发环境给搭建好了。
铁杵磨成针,只要功夫深,相信大家也可以通过每一步的学习,从而把知识掌握。
下面就跟着我的步伐,带你如何快速搭建Docker应用环境。
version: "3.8" # 指定 docker-compose.yml 文件的写法格式
services: # 用来表示compose需要启动的服务 本文件从.env文件读取变量
redis: # 自定义服务名
image: redis:${REDIS_IMAGE_TAG:-6.0.8-alpine} # 指定服务所使用的镜像
container_name: ${REDIS_CONTAINER_NAME:-redis} # docker容器实例名称
restart: always # 配置重启,表示如果服务启动不成功会一直尝试
privileged: true # 特权模式,修改系统变量
environment: # 环境变量定义
- TZ=Asia/Shanghai
- author=${AUTHOR:-ucucs}
ports: # 端口映射,外部访问的端口 不同端口可以如此配置 6379:6380,单独写代表随机端口
- ${REDIS_PORT:-6379}:6379
networks: # 网络网段定义
- frontend
volumes: # 加载本地目录下的配置文件到容器目标地址下
- ${REDIS_CNF:-./config/redis/redis.conf}:/usr/local/etc/redis/redis.conf
- ${REDIS_DATA:-./data/redis/}:/data/
- ${REDIS_LOG:-./log/redis/}:/var/log/redis/
command: # 表示以这个命令来启动服务
/bin/sh -c "echo 65535 > /proc/sys/net/core/somaxconn
&& echo never > /sys/kernel/mm/transparent_hugepage/enabled
&& echo never > /sys/kernel/mm/transparent_hugepage/defrag
&& redis-server /usr/local/etc/redis/redis.conf"
mysql:
container_name: mysql
image: mysql:${MYSQL_IMAGE_TAG:-5.7.31}
restart: always
env_file: # 读取指定的环境变量文件
- ./mysql.env
environment:
- TZ=Asia/Shanghai
- LANG=C.UTF-8
- MYSQL_INITDB_SKIP_TZINFO=yes
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-ucucs}
- MYSQL_ROOT_HOST=${MYSQL_ROOT_HOST:-%}
- MYSQL_USER=${MYSQL_USER:-ucs}
- MYSQL_PASSWORD=${MYSQL_PASSWORD:-ucspwd}
- MYSQL_DATABASE=${MYSQL_DATABASE:-ucsdb}
ports:
- ${MYSQL_PORT:-3306}:3306
networks:
- backend
volumes:
- ${MYSQL_CNF:-./config/mysql/my.cnf}:/etc/mysql/conf.d/my.cnf
- ${MYSQL_DATA:-./data/mysql/}:/var/lib/mysql/
- ${MYSQL_INIT:-./data/mysql-init/}:/docker-entrypoint-initdb.d/
- ${MYSQL_LOG:-./log/mysql/}:/var/log/mysql/
entrypoint:
bash -c "chown -R mysql:mysql /var/log/mysql && exec /entrypoint.sh mysqld"
nginx:
container_name: nginx
image: nginx:1.19.2
environment:
- TZ=Asia/Shanghai
ports:
- "80:80"
volumes:
- ./config/nginx/nginx.conf:/etc/nginx/nginx.conf
- ./config/nginx/conf.d/:/etc/nginx/conf.d/
- ./data/nginx/:/usr/share/nginx/html/
- ./log/nginx/:/var/log/nginx/
restart: always
networks: # 网络定义
frontend: # 网络命名
driver: bridge # 定义网络模式,默认时可忽略 bridge(默认) host none service:[service name] container:[container name/id]
backend:
相信大家可以看到,命令都有相应的文本表示,方便大家入门和学习。
同时,采用环境变量的方式,已经提供基础优化的配置,方便大家快捷搭建出稳定可用的版本。
具体环境变量,请查看源代码里的.env文件