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