IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    10 分钟上手 Docker Compose:详细介绍与实战部署

    Denis | 邓鸿华发表于 2025-06-14 15:33:57
    love 0

    前几天群里的小伙伴问我:为啥要用 Docker 部署网站或者是一些小工具?

    单纯因为“简单”呀!

    今天就给大家简单介绍一下 Docker 和 Docker Compose,并以 EasyImage 这个简单图床的程序为例,如何实现快速部署。

    什么是Docker?

    Docker是一种容器化技术,将应用与依赖(如库、配置)打包成独立的“容器”,确保环境一致;且具有隔离性,每个容器相互隔离,共享主机系统内核,像是一个跟轻量化的虚拟机。

    通常只需改配置文件的访问端口、映射路径、环境变量等就可以快速部署,而不需要繁琐的“准备工作”(如:安装nginx、安装php、安装php拓展等)。

    • 镜像(Image):容器的「安装包」,打包了程序、依赖和环境,开箱即用。
    • 映射:把容器的访问端口、文件"挂钩"到主机,方便访问和持久化数据(通常只改左边的)。
    • 环境变量:给容器传小纸条,配置参数(比如数据库地址),不用改代码就能切换设置。
    • 网络模式:容器如何联网,是共用主机网络(host),还是开独立通道(bridge),或者完全隔离(none),docker run 没写则默认为 bridge 模式。

    安装Docker

    1. 主流的面板软件(如:宝塔、1Panel)都可以在面板一键安装Docker。
    2. 也可以手动安装docker、docker compose

    实战 EasyImage

    以 EasyImage 简单图床 为例!(bt、1panel的docker 商店也提供了示例,这里主要介绍手动部署方法)

    常规安装

    如果你要以PHP的形式运行,需要准备的工作是:

    ​Nginx​ + PHP≥7.0​ + linux​,且PHP安装Fileinfo、iconv、zip、mbstring、openssl扩展!

    这些有有没没装完,几十分钟要吧?而且还是不能出错的情况下🙂

    Docker Run(直接启动)

    项目示例:

    docker run -itd \
      --name easyimage \ #容器名称
      -p 8080:80 \ #访问端口,改前面的即可,不要和已有的冲突
      -e TZ=Asia/Shanghai \ #环境变量,TZ为时区
      -v /root/data/docker_data/easyimage/config:/app/web/config \ #配置文件路径,按需改动
      -v /root/data/docker_data/easyimage/i:/app/web/i \ #存储路径,按需改动
      ddsderek/easyimage:latest #镜像

    修改你要用的端口、路径(这里用了18080端口访问,文件存放在 /opt/easyimage 下面):

    docker run -itd \
      --name easyimage \
      -p 18080:80 \
      -e TZ=Asia/Shanghai \
      -v /opt/easyimage/config:/app/web/config \
      -v /opt/easyimage/i:/app/web/i \
      ddsderek/easyimage:latest

    运行前建议先在面板搜索和拉取镜像 ddsderek/easyimage:latest ,SSH 里面拉取镜像命令: docker pull ddsderek/easyimage:latest 。

    无法拉取的话,自行配置加速地址。然后使用面板创建,或者是直接SSH里面运行!

    宝塔部署

    1Panel 部署

    完成后访问 ip:18080​

    是不是开箱即用🙂~ 当然这样还是觉得不够优雅?那么就用Docker Compose!

    Docker Compose(编排模式)

    Docker Compose 用一个Yaml文件的形式,同时配置一个或多个容器,轻松搞定依赖关系,同时方便迁移。

    上面的简易图床也提供了一个 docker-compose.yaml 示例:

    version: '3.3'
    services:
      easyimage: #整个编排的名称
        image: ddsderek/easyimage:latest #镜像
        container_name: easyimage #容器名称
        ports:
          - '8080:80' #访问端口,改前面的即可
        environment:
          - TZ=Asia/Shanghai #环境变量,TZ为时区
        volumes:
          - '/root/data/docker_data/easyimage/config:/app/web/config' #配置文件路径
          - '/root/data/docker_data/easyimage/i:/app/web/i' #存储路径
        restart: unless-stopped

    如果没有提供yaml,可以自行转换,或者借助工具转换(多部署几次就得心应手了🙂),推荐一个工具:https://www.composerize.com/

    我们同样小小修改:

    version: '3.3'
    services:
      easyimage: #编排的名称
        image: ddsderek/easyimage:latest #镜像
        container_name: easyimage #容器名称
        ports:
          - '18080:80' #访问端口,这里我依旧改成了18080
        environment:
          - TZ=Asia/Shanghai #环境变量,TZ为时区
        volumes:
          - './config:/app/web/config' #配置文件路径,[./]是当前目录的意思
          - './i:/app/web/i' #存储路径,[./]是当前目录的意思
        restart: unless-stopped

    编排模式支持当前文件夹的形式,而且为了方便后期迁移、备份,我也更推荐你用这种形式,而不是实际路径!config​、i​ 两个目录会在编排启动后自动创建!

    宝塔部署​​

    直接复制、粘贴、启动!就可以 ip:18080​ 进行访问了!😄是不是更快?

    ​​从生成的目录,可以看到宝塔的 compose 编排默认路径为:/www/server/panel/data/compose​

    1Panel 部署

    同样如此!一键启动~ 完事😄

    1panel 的默认 compose 编排默认路径则为:/opt/1panel/docker/compose​

    这就是为何我更建议你用 ./​ 的当前文件夹,而不是实际路径,这样是最规范的(除非需要映射已有的文件夹,比如媒体库之类的)。

    毕竟每家的docker管理器,默认编排目录会有所不同的!这样也是更方便备份、迁移。

    命令行启动

    选一个你想存放的路径,例如:/opt/docker/easyimage​,将上面的命令保存成 docker-compose.yaml​ 文件

    cd 到当前文件夹

    cd /opt/docker/easyimage

    启动编排!然后就又弄完了~

    docker compose up -d

    附几个的常规 compose 命令

    • 启动编排:docker-compose up -d
    • 停止并删除所有容器、网络:docker-compose down (只会停止当前文件夹下的yaml编排)
    • 查看容器编排的运行情况:docker-compose ps

    备份与迁移

    备份

    打包或拷贝编排所在的文件夹,例如:/opt/1panel/docker/compose/easyimage​,当然你也可以整个 /opt/1panel/docker/compose​ 都备份🙂。

    恢复

    创建编排,选择从yaml文件(有的面板是yml格式,如无法识别,可改成yaml后缀)

    后言

    如果是多个容器,那更是 compose 的拿手好活!一次启动,依赖关系、配置都能直接搞定,这里以wp+mysql为例:

    version: '3.8'
    services:
      wordpress:
        image: wordpress:latest
        ports:
          - "8080:80"  # 主机8080映射到容器80端口
        volumes:
          - /opt/docker/wordpress/html:/var/www/html  # 持久化网站数据
        environment:
          WORDPRESS_DB_HOST: db
          WORDPRESS_DB_USER: wpuser
          WORDPRESS_DB_PASSWORD: wppass
          WORDPRESS_DB_NAME: wpdb
        depends_on:
          - db
    
      db:
        image: mysql:8.0
        environment:
          MYSQL_ROOT_PASSWORD: rootpass  # 管理员密码(建议生产环境修改)
          MYSQL_DATABASE: wpdb
          MYSQL_USER: wpuser
          MYSQL_PASSWORD: wppass
        volumes:
          - /opt/docker/wordpress/db:/var/lib/mysql  # 持久化数据库
        ports:
          - "3306:3306"  # 可选:暴露MySQL到主机

    启动后,直接连数据库都不用手动设置了🙂,直接开箱即用!

    当然对于 WordPress,一般不太推荐直接 Docker 启动,原因是官方的 Docker 镜像,并没有集成一些常见的 PHP 拓展~

    容器是不是非常简单?而且 Docker compose 实际也不难!也是目前主流的部署方式。

    需要注意的是yaml文件对缩进有比较严格的要求!只能用空格,不能用tab进行缩进!

    © WordPress果酱 / RSS 订阅 / 长期承接 WordPress 项目



沪ICP备19023445号-2号
友情链接