当前位置:首页 > 技术 > 正文内容

使用 Docker Compose 快速搭建常用基础服务

访客 技术 2026年10月9日 1

在容器化部署中,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"
标签: Docker

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。