docker 常用容器启动 docker-compose.yml 配置文件详解

在平常的开发工作中,我们经常需要部署项目。项目开发完成后,部署测试环境、部署生产环境等。以前部署项目,在服务器上安装项目所需的软件,如 nginx、redis 等。可能在测试环境测试没有问题,由于环境配置等不同,部署到生产环境又会产生莫名奇怪的问题。随着 docker 容器的出现,我们可以用 Dockerfile 构建镜像,构建完成后运行,这样可以保证每个地方使用的镜像一致,然后启动使用 docker-compose.yml 文件,保证容器的配置一致。今天总结下常用软件启动的 docker-compose.yml 文件。

一:概述

定义和运行多容器 Docker 应用的工具,可以在里面定义多个服务信息,定义每个服务的服务名、端口映射、环境变量、网络模式等。这样可以方便的管理启动命令,方便拓展。可以一次启动多个容器。常用于部署测试环境等。这样可以保证每个环境映射的端口、依赖的镜像等信息一致,减少因环境问题导致的差异。通过 docker-compose.yml 文件,可以确保开发、测试和生产环境的一致性,避免"因部署不同机器存在差异"的问题。

二:docker-compose.yml 示例

1:后端服务

复制代码
services:
  ruoyi-admin:
    image: ruoyi-admin:v1.0
    container_name : ruoyi-admin
    ports:
      - "9016:9016"
    environment:
      - SERVER_PORT=9016
      - TZ=Asia/Shanghai
    restart: always
    networks:
      - my_network
 
networks:
 my_network:
   external: true

2:mysql

复制代码
services:
  mysql:
    image: mysql:8.0.33
    restart: always
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: your_password
      TZ: Asia/Shanghai
      
    ports:
      - "3306:3306"
      
    volumes:
      - /docker/mysql/log:/var/log/mysql
      - /docker/mysql/data:/var/lib/mysql 
      - /docker/mysql/conf:/etc/mysql/conf.d
      
    command:
      --max_connections=1000
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
	  
	privileged: true
    network_mode: "host"

3:nginx

复制代码
services:
  nginx:
    image: nginx:latest
    container_name: nginx-web
    environment:
      TZ: Asia/Shanghai
    ports:
      - "80:80"
      - "443:443"
    volumes:
      # 配置文件映射
      - /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - /docker/nginx/conf:/etc/nginx/conf
      # 页面目录
      - /docker/nginx/html:/usr/share/nginx/html
 
    privileged: true
    network_mode: "host"

4:redis

复制代码
services:
  redis:
    image: redis:6.2.6
    container_name: redis6.2.6
    ## 设置持久化,允许远程访问,密码等
    command: redis-server --appendonly yes --bind 0.0.0.0 --requirepass your_password
    ports:
      - 6379:6379
    volumes:
      # - ./data/:/data
      - /docker/redis/conf/redis.conf:/etc/redis/redis.conf 
      - /docker/redis/data:/data
    environment:
      - TZ=Asia/Shanghai
    restart: always
 
    # 获取宿主机 root 权限
    privileged: true
    # # 设置容器网络为本机网络
    network_mode: "host"

5:nacos

复制代码
nacos:
    image: nacos/nacos-server:v2.0.3
    container_name: nacos
    restart: always
    ports:
      # web 界面访问端口
      - 8848:8848
    environment:
      - MODE=standalone
      # 连接 mysql 数据库,主要是为了配置的持久化
      - SPRING_DATASOURCE_PLATFORM=mysql # 定义使用的数据库是 mysql
      - MYSQL_SERVICE_HOST=mysql
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_DB_NAME=nacos_dev
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=root
    volumes:
      - /docker/nacos/logs:/home/nacos/logs

6:rabbitmq

复制代码
rabbitmq:
    # 带有管理界面的 rabbitmq 镜像
    image: rabbitmq:management  
    container_name: rabbitmq
    ports:
      # AMQP 协议端口
      - "5672:5672" 
      # rabbitmq 管理界面端口 
      - "15672:15672"  
    volumes:
      # 数据持久化目录
      - /usr/local/docker/rabbitmq/data:/var/lib/rabbitmq
       # 日志目录
      - /usr/local/docker/rabbitmq/logs:/var/log/rabbitmq 
    environment:
      # 设置用户名
      RABBITMQ_DEFAULT_USER: guest
      # 设置密码
      RABBITMQ_DEFAULT_PASS: 123456
    restart: always

三:docker compose 常用命令

(1):docker compose up -d:启动新的容器,会先拉取镜像等然后创建新的容器。带上 -d 是非阻塞的,不阻塞当前的命令窗口,不带 -d 是阻塞的,会阻塞当前的命令窗口。

(2):docker compose down:停止所有运行中的容器

(3):docker compose start:启动一个停止的容器

(4):docker compose restart:重启容器

(5):docker compose build:构建镜像

(6):docker compose config:查看配置

(7):docker compose logs:查看容器日志

(8):docker compose exec service-name command:进入运行中的容器

四:总结

docker-compose.yml 可以更好的管理启动命令,这样可以保持测试环境、生产环境等端口,配置等一致性,防止项目部署因配置不同导致的问题。包括镜像来源、容器名称、端口映射、环境变量、数据卷挂载等。使用 docker run 启动,要输入很长的命令,而且容易出错。使用 docker-compose.yml 管理命令,启动方便快捷,也降低了配置出错的概率。

相关推荐
功德+n6 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos
小敬爱吃饭7 小时前
Ragflow Docker部署及问题解决方案(界面为Welcome to nginx,ragflow上传文件失败,Docker中的ragflow-cpu-1一直重启)
人工智能·python·nginx·docker·语言模型·容器·数据挖掘
木子欢儿7 小时前
Docker Hub 镜像发布指南
java·spring cloud·docker·容器·eureka
coppher8 小时前
Ubuntu 22.04 amd64 离线安装 Docker 完整教程
linux·docker
虚伪的空想家10 小时前
k8s集群configmap和secrets备份脚本
linux·容器·kubernetes
SXJR10 小时前
k8s中的Pod
云原生·容器·kubernetes
文静小土豆10 小时前
K8s 滚动更新在 Java 应用中的实践与优化
java·容器·kubernetes
w61001046610 小时前
CKA-2026-Ingress
云原生·容器·kubernetes·cka
bloglin9999911 小时前
docker logs 如何一直监听日志输出
运维·docker·容器
说实话起个名字真难啊11 小时前
Docker 入门之网络基础
网络·docker·php