使用 Docker Compose 快速搭建常用基础服务
在容器化部署中,Docker Compose 是编排和管理多容器应用的核心工具。所有官方镜像均可在 Docker Hub 获取。以下是日常开发与环境搭建中最常用的基础启停命令:
# 在后台构建并启动所有服务
$ docker compose up -d
# 停止并移除由 up 命令创建的容器及网络
$ docker compose down
1. Web 服务器部署
1.1 部署 Nginx
通过映射静态资源目录和日志目录,快速启动一个 Nginx 代理节点:
version: '3.8'
services:
frontend_proxy:
image: nginx:1.24.0
container_name: custom_nginx
restart: unless-stopped
ports:
- "8880:80"
volumes:
- ./static_assets:/usr/share/nginx/html
- ./proxy_logs:/var/log/nginx
# - ./custom_nginx.conf:/etc/nginx/nginx.conf
1.2 部署 Apache (httpd)
配置 Apache 服务,映射网站根目录至本地:
version: '3.8'
services:
apache_server:
image: httpd:2.4.57
container_name: custom_httpd
restart: unless-stopped
ports:
- "8881:80"
volumes:
- ./web_root:/usr/local/apache2/htdocs
# - ./httpd.conf:/usr/local/apache2/conf/httpd.conf
2. 开发语言与运行环境
2.1 Java 运行环境
使用 Eclipse Temurin 镜像运行 Spring Boot 应用,并配置 JVM 参数:
version: '3.8'
services:
java_app:
image: eclipse-temurin:17-jdk
container_name: springboot_app
restart: always
network_mode: host
volumes:
- ./target/app.jar:/app/application.jar
entrypoint: ["java", "-Xms512m", "-Xmx1024m", "-jar", "/app/application.jar"]
其他常用的 OpenJDK 发行版镜像拉取示例:
# Amazon Corretto
docker pull amazoncorretto:17.0.8
# BellSoft Liberica
docker pull bellsoft/liberica-openjdk-alpine:17.0.8
# Eclipse Temurin
docker pull eclipse-temurin:17.0.8_1-jdk
3. 基础操作系统环境
3.1 部署 Ubuntu 环境
启动一个具有主机网络模式和特权模式的 Ubuntu 容器,用于开发测试:
version: '3.8'
services:
ubuntu_env:
image: ubuntu:22.04
container_name: dev_ubuntu
network_mode: host
privileged: true
volumes:
- /etc/localtime:/etc/localtime:ro
- ./workspace:/root/workspace
3.2 其他 Linux 发行版
以下是其他常用基础操作系统镜像的交互式运行示例,已调整挂载目录与端口映射:
# Alpine
docker run -it -v /opt/containers/alpine:/root alpine:3.18 /bin/sh
# Debian
docker run -it -p 9200:9200 -v /opt/containers/debian:/root debian:12 /bin/bash
# Amazon Linux
docker run -it -p 9200:9200 -v /opt/containers/amazon:/root amazonlinux:2023 /bin/bash
# Oracle Linux
docker run -it -p 9200:9200 -v /opt/containers/oracle:/root oraclelinux:9 /bin/bash
# Arch Linux
docker run -it -p 9200:9200 -v /opt/containers/arch:/root archlinux:latest /bin/bash
# VMware Photon
docker run -it -p 9200:9200 -v /opt/containers/photon:/root photon:5.0 /bin/bash
# Rocky Linux
docker run -it -p 9200:9200 -v /opt/containers/rocky:/root rockylinux:9.2 /bin/bash
# Clear Linux
docker run -it -p 9200:9200 -v /opt/containers/clear:/root clearlinux:latest /bin/bash
# openSUSE
docker run -it -p 9200:9200 -v /opt/containers/opensuse:/root opensuse/leap:15.5 /bin/bash
# Fedora
docker run -it -p 9200:9200 -v /opt/containers/fedora:/root fedora:38 /bin/bash
4. 数据库与缓存服务
4.1 部署 MySQL
配置 MySQL 8.0 服务,设置字符集、最大连接数及数据持久化卷:
version: '3.8'
services:
relational_db:
image: mysql:8.0.34
container_name: mysql_server
restart: always
environment:
MYSQL_ROOT_PASSWORD: root_secret_pwd
TZ: Asia/Shanghai
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
--max-connections=2000
ports:
- "13306:3306"
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
自定义 my.cnf 核心配置参考:
[mysqld]
port=3306
datadir=/var/lib/mysql
character-set-server=utf8mb4
default-storage-engine=INNODB
sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
max_connections=2048
lower_case_table_names=1
innodb_buffer_pool_size=16M
innodb_log_file_size=64M
innodb_file_per_table=1
4.2 部署 Oracle
使用 Oracle XE 镜像快速启动关系型数据库环境:
version: '3.8'
services:
oracle_db:
image: container-registry.oracle.com/database/express:21.3.0-xe
container_name: oracle_xe
restart: always
environment:
ORACLE_PWD: oracle_secure_pwd
ORACLE_CHARACTERSET: AL32UTF8
ports:
- "11521:1521"
- "15500:5500"
volumes:
- oracle_data:/opt/oracle/oradata
volumes:
oracle_data:
4.3 部署 Redis
启动带有密码验证和持久化配置的 Redis 缓存服务:
version: '3.8'
services:
cache_store:
image: redis:7.2-alpine
container_name: redis_cache
restart: always
ports:
- "16379:6379"
volumes:
- ./redis_data:/data
command: redis-server --requirepass redis_secure_pass --appendonly yes
5. 代码托管与 DevOps 工具
5.1 部署 Gitea
使用 rootless 模式部署 Gitea 代码托管平台,映射 SSH 和 Web 端口:
version: '3.8'
services:
git_server:
image: gitea/gitea:1.21.0-rootless
container_name: gitea_scm
restart: always
environment:
- USER_UID=1000
- USER_GID=1000
volumes:
- ./gitea_data:/var/lib/gitea
- ./gitea_config:/etc/gitea
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "2222:22"