使用docker-compose部署项目

2024年11月22日4 min read
docker

1. 使用PowerShell构建项目

$env:GOOS="linux"
$env:GOARCH="amd64"
go build -o main

2. 上传配置文件和构建的二进制文件

编写 Dockerfile

# 使用更小的基础镜像  
FROM alpine:latest  
  
# 安装运行 Go 程序所需的依赖  
RUN apk --no-cache add ca-certificates  
  
# 复制二进制文件到镜像中  
COPY ./main /usr/local/bin/main  
RUN chmod +x /usr/local/bin/main  
  
# 创建配置目录并复制所有配置文件到镜像中  
RUN mkdir /conf  
COPY ./*.yaml /conf/  
  
# 设置容器启动命令  
CMD ["/usr/local/bin/main", "web", "-d", "/conf"]

项目配置文件中的ip可以使用容器 服务的名称例如:

cache:  
  name: redis  
  redis:  
    driver: redis
    #address: '127.0.0.1:6379'
    address: 'redis:6379'  # 修改为服务名称  
    password: 123456  
    db: 0

3. 构建镜像

docker build -t qaps .

4. 创建project文件夹这里存放有关的配置

project/
├── docker-compose.yml
├── Dockerfile
├── config/
│   ├── redis/
│   │   └── redis.conf
│   ├── clickhouse/
│   │   ├── config.xml
│   │   └── users.xml
│   ├── mysql/
│   │   └── my.cnf
│   └── rabbitmq/
│       └── rabbitmq.conf
├── data/
│   ├── redis/
│   ├── clickhouse/
│   ├── mysql/
│   └── rabbitmq/
└── logs/
    ├── clickhouse/
    ├── mysql/
    └── rabbitmq/

5. 编写docker-compose.yml

version: '3.8'  
  
services:  
  go-app:  
    image: qaps:latest  
    container_name: go-app  
    restart: always  
    depends_on:  
      - redis  
      - clickhouse  
      - mysql  
      - rabbitmq  
    ports:  
      - "9010:9010"  
    networks:  
      - app-network  
  
  redis:  
    image: redis:latest  
    container_name: redis  
    restart: always  
    volumes:  
      - ./data/redis:/data  
      - ./config/redis/redis.conf:/usr/local/etc/redis/redis.conf  
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]  
    ports:  
      - "6379:6379"  
    networks:  
      - app-network  
  
  clickhouse:  
    image: clickhouse/clickhouse-server:latest  
    container_name: clickhouse  
    restart: always  
    cap_add:  
      - SYS_NICE  
    volumes:  
      - ./data/clickhouse:/var/lib/clickhouse  
      - ./config/clickhouse/config.xml:/etc/clickhouse-server/config.xml  
      - ./config/clickhouse/users.xml:/etc/clickhouse-server/users.xml  
      - ./logs/clickhouse:/var/log/clickhouse-server  
    ports:  
      - "8123:8123"  
      - "9000:9000"  
      - "9009:9009"  
    networks:  
      - app-network  
  
  mysql:  
    image: mysql:latest  
    container_name: mysql  
    restart: always  
    environment:  
      MYSQL_ROOT_PASSWORD: "123456"  
    volumes:  
      - ./data/mysql:/var/lib/mysql  
      - ./config/mysql/my.cnf:/etc/mysql/my.cnf  
      - ./logs/mysql:/var/log/mysql  
    ports:  
      - "3306:3306"  
    networks:  
      - app-network  
  
  rabbitmq:  
    image: rabbitmq:management  
    container_name: rabbitmq  
    restart: always  
    volumes:  
      - ./data/rabbitmq:/var/lib/rabbitmq/mnesia  
      - ./logs/rabbitmq:/var/log/rabbitmq  
      - ./config/rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf  
    ports:  
      - "5672:5672"  
      - "15672:15672"  
    networks:  
      - app-network  
  
networks:  
  app-network:  
    driver: bridge

启动

docker-compose up -d

以下是一些常用的 docker-compose 命令:

**后台启动服务(以分离模式运行)**:
docker-compose up -d

**前台启动服务(日志会显示在终端)**:
docker-compose up

**停止正在运行的服务,但不删除容器**:
docker-compose stop

**停止并删除容器、网络和在 `docker-compose.yml` 中定义的卷**:
docker-compose down

**构建或重新构建服务(如果修改了 Dockerfile,可以使用此命令)**:
docker-compose build

**查看所有服务的日志**:
docker-compose logs

**实时显示日志(跟踪日志)**:
docker-compose logs -f

**列出 Docker Compose 管理的所有容器**:
docker-compose ps

**在运行中的容器内执行命令(例如启动一个 bash shell)**:
docker-compose exec <服务名> bash

**运行一次性命令(在新容器中运行单个命令)**:
docker-compose run <服务名> <命令>

**查看当前配置的服务**:
docker-compose config

**删除所有停止的容器、未使用的网络以及悬挂的镜像**:
docker-compose down --volumes --remove-orphans