Docker Compose Usage

2024-05-15
2 min read

Docker Compose 是一个用于定义和运行多个 Docker 容器应用程序的工具。它通过一个简单的 YAML 文件来配置应用程序的服务、网络、卷等方面,然后使用单个命令启动、停止和管理整个应用程序的容器。

Introduction

Docker 官方还维护了一个很方便的工具 docker compose,使用macos 安装 docker desktop 自带docker compose,其他情况需要单独安装。
Docker Compose 是一个用于定义和运行多个 Docker 容器应用程序的工具。它通过一个简单的 YAML 文件来配置应用程序的服务、网络、卷等方面,然后使用单个命令启动、停止和管理整个应用程序的容器。Docker Compose 简化了多个容器之间的交互和管理,提供了一种简便的方式来部署和管理基于容器的应用程序。

Process

img

docker-comose.yml

创建一个docker-compose.yml文件,用来定义容器及设置参数。

Table 1: docker-compose 参数文件说明
config describe
services 容器列表
\_zlm 容器名称,实际镜像名称会加上文件名
build 镜像的构建目录,支持相对路径(相对docker-compose.yml)
build.dockerfile 镜像的dockerfile文件
command 容器的启动命令
ports 设置暴露端口,通过 ${STREAM_PORT} 引用环境变量
volumes 设置硬盘挂载 ,前面是容器内的目录,后面是宿主机的目录
extra_hosts 设置host
environment 设置环境变量,适合环境变量较少的情况
env_file.env 引入外部环境变量文件,适合环境变量较多情况
services:
  zlm:
    container_name: zlm
    build:
      context: ./zlm
      dockerfile: Dockerfile
    command: ["/opt/media/MediaServer", "-m", "3", "-c","/opt/media/config/config.ini"]
    restart: always
    ports:
      - "${STREAM_PORT}:${STREAM_PORT}/udp"
    extra_hosts:
      - "stream-test.wvp.com:127.0.0.1"
    env_file:
      - .env
  wvp:
    container_name: wvp
    build:
      context: ./wvp
      dockerfile: Dockerfile
    restart: always
    ports:
      - "5060:5060"
    volumes:
      - ./node_modules:/opt/wvp/node_modules
    environment:
      - TZ="Asia/Shanghai"
    extra_hosts:
      - "stream-test.wvp.com:127.0.0.1"

catalog

整个 docker compose 的项目目录

.
├── docker-compose.yml
├── .env
├── wvp
│   ├── Dockerfile
│   └── config
│       ├── application.yml
│       └── run-wvp.sh
└── zlm
    ├── Dockerfile
    └── config
        ├── config.ini
        ├── default.pem
        └── run-zlm.sh

env_file.env

.env 环境变量文件,支持在不同的环境中可引入不同的环境变量参数,可以在这里配置 Key/Value 键值对,方便在docker compose中引用。
幸运的是 springboot 项目也支持通过和 docker comopse 相同的方式引入环境变量,则数据库连接、账号、密码等信息均可以通过这种方式来进行管理。

TZ=Asia/Shanghai
STREAM_PORT=30000-30050

spring:
    application:
        name: wvp
    redis:
        host: ${REDIS_HOST:127.0.0.1}
        port: ${REDIS_PORT}
        database: ${REDIS_DB}
        password: ${REDIS_PWD}
        timeout: 10000

Dockerfile

在dockerfile中使用非交互式安装,通过设置 `DEBIAN_FRONTEND=noninteractive`,可以将 Debian 系统的安装程序设置为非交互式模式,这样在安装软件包时不会出现任何交互式提示或确认,所有的安装选择都会使用默认设置。

FROM ubuntu:20.04

ENV LC_ALL zh_CN.UTF-8
RUN export DEBIAN_FRONTEND=noninteractive && \
        apt-get update && \
        apt-get install -y --no-install-recommends curl && \
        curl -fsSLk https://deb.nodesource.com/setup_20.x -o nodesource_setup.sh && \
        chmod +x nodesource_setup.sh && ./nodesource_setup.sh --yes && rm nodesource_setup.sh && \
        apt update && \
        apt-get install -y --no-install-recommends openjdk-11-jre git nodejs maven build-essential \
        cmake ca-certificates openssl && \
        npm cache clean --force && npm install vite -g && \
        apt-get autoremove -y && \
        apt-get clean -y && \
        rm -rf /var/lib/apt/lists/*dic

CMD ["sh", "/opt/wvp/config/run-wvp.sh"]

run script

#!/bin/bash
cd /home || exit
echo "clone start"
git clone -b release1.6 http://vanniuner:password@github.com/wvp-gb28181-pro/wvp-gb28181-pro.git
echo "clone done"
git log -1

echo "node version:" $(node -v)
echo "build web_src"
cd wvp-gb28181-pro/web_src || exit
npm config set prefix /opt/wvp/node_modules

# uncomment below if new pacakge need
echo "web_src install start"
npm install --registry=https://mirrors.tencent.com/npm/ --legacy-peer-deps
cp -rf ./node_modules /opt/wvp
echo "web_src install done"

echo "web_src run build start"
npm run build
echo "web_src run build done"

cd /home/wvp-gb28181-pro || exit
mvn clean package -Dmaven.test.skip=true -s settings.xml -Dmaven.repo.local=/opt/wvp/repo
cp /home/wvp-gb28181-pro/target/*.jar /opt/wvp/
cd /opt/wvp || exit
java -jar *.jar --spring.config.location=/opt/wvp/config/application.yml

command

build the docker image

docker compose build

restart docker compose containers and output a particular containers log

docker compose down && docker compose up -d && docker compose logs -f -n100 wvp
Previous Obs Usage
Next Org Clock