马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1. Docker compose介绍
Docker Compose 是 Docker 官方提供的一个工具,用于定义和管理多容器应用。它使用 YAML 文件来描述多个 Docker 容器的配置,并通过一条下令来创建和管理这些容器。
- Docker compose适用于
- 微服务架构(例如Nginx + PHP + Mysql)
- 测试环境(快速搭建应用)
- CI/CD流程(自动化摆设)
- Docker Compose办理了什么问题
- 手动运行多个 docker run 下令:
- 必要为每个容器手动指定网络、端口映射、环境变量等
- 容易出错,难以维护
- 使用 Shell 脚本:
- 通过 Bash 或 Python 脚本管理多个 docker run 下令
- 仍旧缺乏灵活性,维护成本较高。
Docker Compose 通过 YAML 配置文件(docker-compose.yml)来简化多容器管理,让运维更搞笑!
2. Docker Compose 安装
Docker Compose 通常已经集成在 Docker CLI 中,可以直接使用 docker compose 下令。如果必要单独安装,可以执行以下下令:- curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- chmod +x /usr/local/bin/docker-compose
复制代码 检查是否安装成功,并检查版本: 3. Docker Compose 核心概念
Docker Compose 重要由一个 **YAML配置文件 ** 和 下令行工具 组成
- YAML配置文件(docker-compose.yml)
- 用于描述应用的全部 服务(容器)、网络 、数据卷 等。
- 核心下令(CLI)
4. docker-compose.yml
假设要摆设一个wordpress网站,包含:
- Nginx + PHP + Wordpress (web服务)
- Mysql(数据库服务)
docker-compose.yml 示例:- version: '3.8'
- services:
- wordpress:
- image: wordpress:latest
- restart: always
- ports:
- - "8080:80"
- environment:
- WORDPRESS_DB_HOST: db
- WORDPRESS_DB_USER: root
- WORDPRESS_DB_PASSWORD: mypassword
- WORDPRESS_DB_NAME: wordpress
- depends_on:
- - db
- db:
- image: mysql:5.7
- restart: always
- environment:
- MYSQL_ROOT_PASSWORD: mypassword
- MYSQL_DATABASE: wordpress
复制代码 解析:
- services:定义了两个服务(wordpress 和 db)
- images:指定使用的Docker镜像
- ports:映射端口(如 8080:80,访问 localhost:8080 就能打开wordpress
- environment:设置环境变量
- depends_on:确保 db 服务先启动
5. Docker Compose 常用下令
下令作用docker compose up -d以后台模式启动全部服务docker compose down停止并删除全部容器docker compose ps检察正在运行的容器docker compose logs -f实时检察容器日记docker compose restart重新启动全部服务docker compose stop停止全部容器docker compose start启动已停止的容器docker compose exec 服务名 bash进入容器6. 数据持久化(Volumes)
如果不使用数据卷,数据库数据会丢失 。
在 docker -compose.yml 中添加 volumes 来办理:- services:
- db:
- image: mysql:5.7
- restart: always
- environment:
- MYSQL_ROOT_PASSWORD: mypassword
- MYSQL_DATABASE: wordpress
- volumes:
- - mysql_data:/var/lib/mysql
- volumes:
- mysql_data:
复制代码 如许即使 docker compose down,数据仍旧保存
7. 使用 .env 文件管理环境变量
可以创建一个 .env 文件:然后 docker-compose.yml 如许写- environment:
- MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
复制代码 如许可以更加安全地管理密码文件,而不直接写在 docker-compose.yml 里。
8. Docker Compose 与 Dockerfile 结合
起首可以自定义一个镜像,例如 PHP + Wordpress 镜像:- services:
- wordpress:
- build: .
- ports:
- - "8080:80"
- depends_on:
- - db
复制代码 同时编写 Dockerfile:- FROM wordpress:latest
- RUN apt update && apt install -y vim
复制代码 然后运行:- docker compose up --build -d
复制代码 如许就可以用 自己的 Dockerfile 来构建镜像了。
9. Docker Compose 网络(Network)
默认情况下,Docker Compose 会为全部服务构建一个 独立的网络,并允许它们通过 服务名互相通信。
也可以自己手动定义网络,如果不手动定义网络那么在Docker compose文件中的主机都会处于同一个网络- networks:
- mynetwork:
- driver: bridge
- services:
- wordpress:
- networks:
- - mynetwork
- db:
- networks:
- - mynetwork
复制代码 如许可以管理差别服务的通信
10. docker-compose.yml文件模版
- version: "3.8" # 指定 Docker Compose 版本
- services:
- # 1️⃣ Nginx 反向代理
- nginx:
- image: nginx:latest
- container_name: nginx_proxy
- ports:
- - "80:80" # 访问 http://localhost
- - "443:443" # 访问 https://localhost
- volumes:
- - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro # Nginx 主配置文件
- - ./nginx/conf.d:/etc/nginx/conf.d:ro # 站点配置
- - ./nginx/logs:/var/log/nginx # Nginx 日志持久化
- depends_on:
- - tomcat
- networks:
- - backend_network
- restart: always # 自动重启
- # 2️⃣ Tomcat 服务器(运行 Java Web 应用)
- tomcat:
- image: tomcat:9.0
- container_name: tomcat_server
- ports:
- - "8080:8080" # Tomcat 端口
- volumes:
- - ./app:/usr/local/tomcat/webapps # 挂载 Web 应用目录
- - ./tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml:ro # Tomcat 配置
- - ./tomcat/logs:/usr/local/tomcat/logs # Tomcat 日志持久化
- environment:
- - TZ=Asia/Shanghai # 设置时区
- networks:
- - backend_network
- restart: always
- # 3️⃣ MySQL 数据库
- mysql:
- image: mysql:8.0
- container_name: mysql_db
- ports:
- - "3306:3306"
- environment:
- MYSQL_ROOT_PASSWORD: root
- MYSQL_DATABASE: myapp_db
- MYSQL_USER: myapp_user
- MYSQL_PASSWORD: myapp_pass
- volumes:
- - mysql_data:/var/lib/mysql # 持久化 MySQL 数据
- networks:
- - backend_network
- restart: always
- # 4️⃣ Redis 缓存数据库
- redis:
- image: redis:latest
- container_name: redis_cache
- command: ["redis-server", "--appendonly", "yes"]
- ports:
- - "6379:6379"
- volumes:
- - redis_data:/data
- networks:
- - backend_network
- restart: always
- # 5️⃣ Prometheus 监控系统
- prometheus:
- image: prom/prometheus:latest
- container_name: prometheus_server
- ports:
- - "9090:9090" # Prometheus Web 访问地址
- volumes:
- - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml # 配置文件
- networks:
- - monitoring_network
- restart: always
- # 6️⃣ Grafana 数据可视化
- grafana:
- image: grafana/grafana:latest
- container_name: grafana_dashboard
- ports:
- - "3000:3000" # Grafana Web 界面
- volumes:
- - grafana_data:/var/lib/grafana
- networks:
- - monitoring_network
- restart: always
- networks:
- backend_network:
- driver: bridge
- monitoring_network:
- driver: bridge
- volumes:
- mysql_data:
- redis_data:
- grafana_data:
复制代码个人学习使用
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |