IT评测·应用市场-qidao123.com技术社区

标题: Docker compose详细介绍以及编写 [打印本页]

作者: 宁睿    时间: 2025-3-25 11:53
标题: Docker compose详细介绍以及编写
1. Docker compose介绍

Docker Compose 是 Docker 官方提供的一个工具,用于定义和管理多容器应用。它使用 YAML 文件来描述多个 Docker 容器的配置,并通过一条下令来创建和管理这些容器。
Docker Compose 通过 YAML 配置文件(docker-compose.yml)来简化多容器管理,让运维更搞笑!
2. Docker Compose 安装

Docker Compose 通常已经集成在 Docker CLI 中,可以直接使用 docker compose 下令。如果必要单独安装,可以执行以下下令:
  1. curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  2. chmod +x /usr/local/bin/docker-compose
复制代码
检查是否安装成功,并检查版本:
  1. docker compose version
复制代码
3. Docker Compose 核心概念

Docker Compose 重要由一个 **YAML配置文件 ** 和 下令行工具 组成
4. docker-compose.yml

假设要摆设一个wordpress网站,包含:
docker-compose.yml 示例:
  1. version: '3.8'
  2. services:
  3.   wordpress:
  4.     image: wordpress:latest
  5.     restart: always
  6.     ports:
  7.       - "8080:80"
  8.     environment:
  9.       WORDPRESS_DB_HOST: db
  10.       WORDPRESS_DB_USER: root
  11.       WORDPRESS_DB_PASSWORD: mypassword
  12.       WORDPRESS_DB_NAME: wordpress
  13.     depends_on:
  14.       - db
  15.   db:
  16.     image: mysql:5.7
  17.     restart: always
  18.     environment:
  19.       MYSQL_ROOT_PASSWORD: mypassword
  20.       MYSQL_DATABASE: wordpress
复制代码
解析:
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 来办理:
  1. services:
  2.   db:
  3.     image: mysql:5.7
  4.     restart: always
  5.     environment:
  6.       MYSQL_ROOT_PASSWORD: mypassword
  7.       MYSQL_DATABASE: wordpress
  8.     volumes:
  9.       - mysql_data:/var/lib/mysql
  10. volumes:
  11.   mysql_data:
复制代码
如许即使 docker compose down,数据仍旧保存
7. 使用 .env 文件管理环境变量

可以创建一个 .env 文件:
  1. DB_PASSWORD=mypassword
复制代码
然后 docker-compose.yml 如许写
  1. environment:
  2.   MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
复制代码
如许可以更加安全地管理密码文件,而不直接写在 docker-compose.yml 里。
8. Docker Compose 与 Dockerfile 结合

起首可以自定义一个镜像,例如 PHP + Wordpress 镜像:
  1. services:
  2.   wordpress:
  3.     build: .
  4.     ports:
  5.       - "8080:80"
  6.     depends_on:
  7.       - db
复制代码
同时编写 Dockerfile:
  1. FROM wordpress:latest
  2. RUN apt update && apt install -y vim
复制代码
然后运行:
  1. docker compose up --build -d
复制代码
如许就可以用 自己的 Dockerfile 来构建镜像了。
9. Docker Compose 网络(Network)

默认情况下,Docker Compose 会为全部服务构建一个 独立的网络,并允许它们通过 服务名互相通信
也可以自己手动定义网络,如果不手动定义网络那么在Docker compose文件中的主机都会处于同一个网络
  1. networks:
  2.   mynetwork:
  3.     driver: bridge
  4. services:
  5.   wordpress:
  6.     networks:
  7.       - mynetwork
  8.   db:
  9.     networks:
  10.       - mynetwork
复制代码
如许可以管理差别服务的通信
10. docker-compose.yml文件模版
  1. version: "3.8"  # 指定 Docker Compose 版本
  2. services:
  3.   # 1️⃣ Nginx 反向代理
  4.   nginx:
  5.     image: nginx:latest
  6.     container_name: nginx_proxy
  7.     ports:
  8.       - "80:80"    # 访问 http://localhost
  9.       - "443:443"  # 访问 https://localhost
  10.     volumes:
  11.       - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro  # Nginx 主配置文件
  12.       - ./nginx/conf.d:/etc/nginx/conf.d:ro  # 站点配置
  13.       - ./nginx/logs:/var/log/nginx  # Nginx 日志持久化
  14.     depends_on:
  15.       - tomcat
  16.     networks:
  17.       - backend_network
  18.     restart: always  # 自动重启
  19.   # 2️⃣ Tomcat 服务器(运行 Java Web 应用)
  20.   tomcat:
  21.     image: tomcat:9.0
  22.     container_name: tomcat_server
  23.     ports:
  24.       - "8080:8080"  # Tomcat 端口
  25.     volumes:
  26.       - ./app:/usr/local/tomcat/webapps  # 挂载 Web 应用目录
  27.       - ./tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml:ro  # Tomcat 配置
  28.       - ./tomcat/logs:/usr/local/tomcat/logs  # Tomcat 日志持久化
  29.     environment:
  30.       - TZ=Asia/Shanghai  # 设置时区
  31.     networks:
  32.       - backend_network
  33.     restart: always
  34.   # 3️⃣ MySQL 数据库
  35.   mysql:
  36.     image: mysql:8.0
  37.     container_name: mysql_db
  38.     ports:
  39.       - "3306:3306"
  40.     environment:
  41.       MYSQL_ROOT_PASSWORD: root
  42.       MYSQL_DATABASE: myapp_db
  43.       MYSQL_USER: myapp_user
  44.       MYSQL_PASSWORD: myapp_pass
  45.     volumes:
  46.       - mysql_data:/var/lib/mysql  # 持久化 MySQL 数据
  47.     networks:
  48.       - backend_network
  49.     restart: always
  50.   # 4️⃣ Redis 缓存数据库
  51.   redis:
  52.     image: redis:latest
  53.     container_name: redis_cache
  54.     command: ["redis-server", "--appendonly", "yes"]
  55.     ports:
  56.       - "6379:6379"
  57.     volumes:
  58.       - redis_data:/data
  59.     networks:
  60.       - backend_network
  61.     restart: always
  62.   # 5️⃣ Prometheus 监控系统
  63.   prometheus:
  64.     image: prom/prometheus:latest
  65.     container_name: prometheus_server
  66.     ports:
  67.       - "9090:9090"  # Prometheus Web 访问地址
  68.     volumes:
  69.       - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml  # 配置文件
  70.     networks:
  71.       - monitoring_network
  72.     restart: always
  73.   # 6️⃣ Grafana 数据可视化
  74.   grafana:
  75.     image: grafana/grafana:latest
  76.     container_name: grafana_dashboard
  77.     ports:
  78.       - "3000:3000"  # Grafana Web 界面
  79.     volumes:
  80.       - grafana_data:/var/lib/grafana
  81.     networks:
  82.       - monitoring_network
  83.     restart: always
  84. networks:
  85.   backend_network:
  86.     driver: bridge
  87.   monitoring_network:
  88.     driver: bridge
  89. volumes:
  90.   mysql_data:
  91.   redis_data:
  92.   grafana_data:
复制代码
个人学习使用

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4