docker-compose.yml 示例

示例

version: '3.8'

services:
  web:
    image: nginx:latest
    container_name: my_nginx_container
    ports:
      - "8080:80"  # 将主机的 8080 端口映射到容器的 80 端口
    volumes:
      - ./html:/usr/share/nginx/html  # 将主机的 ./html 文件夹映射到容器的 /usr/share/nginx/html 文件夹
      - ./nginx.conf:/etc/nginx/nginx.conf  # 将主机的 ./nginx.conf 文件映射到容器的 /etc/nginx/nginx.conf 文件夹
    environment:
      - NGINX_ENV_VAR=value  # 设置环境变量
    mem_limit: 512m  # 限制容器最多使用 512MB 内存
    restart: always  # 确保容器始终重启
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
    networks:
      - my_network

  db:
    image: mysql:8.0
    container_name: my_mysql_container
    ports:
      - "3306:3306"  # 将主机的 3306 端口映射到容器的 3306 端口
    volumes:
      - db_data:/var/lib/mysql  # 将数据存储在 Docker 卷中
    environment:
      - MYSQL_ROOT_PASSWORD=root_password
      - MYSQL_DATABASE=mydatabase
      - MYSQL_USER=myuser
      - MYSQL_PASSWORD=mypassword
    mem_limit: 1g  # 限制容器最多使用 1GB 内存
    restart: unless-stopped  # 确保容器在 Docker 守护进程重启后自动启动
    logging:
      driver: "json-file"
      options:
        max-size: "20m"
        max-file: "5"
    networks:
      - my_network

volumes:
  db_data:

networks:
  my_network:
    driver: bridge

配置说明

服务配置 (services)
  • web 服务:

    • image: 使用 nginx:latest 镜像。
    • container_name: 设置容器名称为 my_nginx_container
    • ports: 将主机的 8080 端口映射到容器的 80 端口。
    • volumes:
      • 将主机的 ./html 文件夹映射到容器的 /usr/share/nginx/html 文件夹。
      • 将主机的 ./nginx.conf 文件映射到容器的 /etc/nginx/nginx.conf 文件夹。
    • environment: 设置环境变量 NGINX_ENV_VAR
    • mem_limit: 限制容器最多使用 512MB 内存。
    • restart: 确保容器始终重启。
    • logging: 配置日志驱动和选项。
    • networks: 将容器连接到 my_network 网络。
  • db 服务:

    • image: 使用 mysql:8.0 镜像。
    • container_name: 设置容器名称为 my_mysql_container
    • ports: 将主机的 3306 端口映射到容器的 3306 端口。
    • volumes: 使用 Docker 卷 db_data 存储 MySQL 数据。
    • environment: 设置 MySQL 的环境变量。
    • mem_limit: 限制容器最多使用 1GB 内存。
    • restart: 确保容器在 Docker 守护进程重启后自动启动。
    • logging: 配置日志驱动和选项。
    • networks: 将容器连接到 my_network 网络。
卷配置 (volumes)
  • db_data: 用于存储 MySQL 数据的 Docker 卷。
网络配置 (networks)
  • my_network: 使用桥接网络驱动创建一个名为 my_network 的网络,以便服务之间可以相互通信。

使用方法

  1. 创建目录结构

    mkdir my_project
    cd my_project
    mkdir html
    touch nginx.conf
    
  2. 创建 docker-compose.yml 文件
    将上述示例内容复制到 docker-compose.yml 文件中。

  3. 启动服务

    docker-compose up -d
    
  4. 验证服务

    docker-compose ps
    
  5. 访问服务

    • 打开浏览器,访问 http://localhost:8080,确保 Nginx 服务正常运行。
    • 使用 MySQL 客户端连接到 localhost:3306,验证 MySQL 服务是否正常运行。

自定义配置

你可以根据需要保留或删除相应的配置部分。例如:

  • 删除 db 服务

    services:
      web:
        ...
    
  • 删除 volumes 部分

    services:
      web:
        ...
        volumes:
          - ./html:/usr/share/nginx/html
          - ./nginx.conf:/etc/nginx/nginx.conf
    
  • 删除 networks 部分

    services:
      web:
        ...
        networks:
          - default
    

根据自己需求可以调整 docker-compose.yml 文件!

### 使用 `docker-compose.yml` 文件启动 Docker 服务 为了使用 `docker-compose.yml` 文件启动 Docker 服务,需遵循特定流程并理解配置文件中的各项指令。 #### 创建 `docker-compose.yml` 文件 首先,在项目根目录下创建名为 `docker-compose.yml` 的文件。此文件用于定义所需的服务及其参数[^2]。 ```yaml version: '3' services: web: image: nginx:latest ports: - "8080:80" volumes: - ./html:/usr/share/nginx/html networks: - frontend redis: image: redis:alpine networks: - backend networks: frontend: backend: ``` 上述示例展示了两个服务——`web` 和 `redis`,以及它们之间的网络连接设置[^4]。 #### 启动服务 完成 `docker-compose.yml` 文件编辑后,通过终端进入包含该文件的目录,并运行如下命令: ```bash docker-compose up -d ``` 这条命令将以分离模式(后台运行)启动所有定义于 `docker-compose.yml` 中的服务实。若希望查看日志输出,则可省略 `-d` 参数以交互方式启动[^1]。 对于仅启动已停止的服务而非重新创建新容器的情况,可以采用以下命令代替: ```bash docker-compose start ``` 需要注意的是,`docker-compose up` 不仅仅是启动现有容器;它还会根据当前工作目录下的 `docker-compose.yml` 文件检查是否有任何更改需要应用到正在运行的服务上。而 `docker start` 只能用来恢复之前已经存在的暂停状态的容器。 #### 停止服务 当不再需要这些服务时,可通过下面的命令安全地关闭它们: ```bash docker-compose down ``` 这会终止由 `docker-compose up` 或者 `docker-compose start` 所启动的所有容器,并移除相关资源,如临时生成的数据卷等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值