一起来定制运行 fecshop 的 docker 环境

乱弹 · successgo · 于 5年前 发布 · 2170 次阅读

docker-fecshop

docker for fecshop

前言

让我们深入研究官方提供的 docker 配置,然后定制 docker 环境

大家在布署 fecshop 的过程中,仍然是推荐使用官方的 docker 配置,本贴仅作学习用途

分析

fecshop 依赖于多个基础的服务。

  • nginx 作为 web 服务,提供静态资源的访问和 php 请求的转发
  • php 主要的服务,处理 php 请求,且是作为 php-fpm 的模式运行
  • mysql 结构化数据库,也是主要的数据库,涉及事务的表主要存 mysql
  • mongodb 非结构化数据库,在 fecshop 里也是发挥着重要角色,存商品和分类数据
  • redis 此服务主要是做缓存
  • xunsearch 此服务中提供中文搜索

可能的问题

  • 配置各数据库的用户名和密码等
  • 自定义 php 镜像, 添加更多的 php 扩展
  • 配置代码路径, 环境变量
  • fecshop 那么多的站点配置

深入服务内部

关于服务,我们需要做几件事:选择基础镜像,设置用户名和密码,额外的参数定制,以及数据的持久化存储设置

关于基础镜像的版本号的选择,我们要明确指定主版本和副版本,bug 版本号不指定,从而让每一次构建都可以保证使用的是最新的修复稳定版本,不会引入较大的变化,前提是它们都以语义化版本来发布

基础镜像,有大有小,需要从网络下载,如果加速下载镜像 http://docker-cn.com/registry-mirror

关于用户名和密码的设置,可以通过环境变量指定

额外的参数配置,可通过挂载配置文件到容器内的具体路径

数据的持久化存储,可通过挂载容器的目录到宿主机

关于代码路径,通过 .env 文件,配置 APP_ROOT 路径, 然后挂载到容器里,须同时挂载到 nginx 服务容器和 php 服务容器

nginx

基础镜像: nginx:1.15-alpine

php

基础镜像: php:7.1-fpm-stretch

因为 fecshop 依赖于 redis, mongodb, pdo_mysql 等扩展,因为需要在基础镜像之上定制,添加需要的扩展

为了方便在容器内操作 composer, 因此需要把二进制包挂载到 php 容器内,当然可以 php 容器里安装最新的 composer

如何 composer 加速 https://laravel-china.org/composer

利用 pecl 安装扩展前, 先执行一下更新命令 pecl channel-update pecl.php.net

mysql

基础镜像: mysql:5.7

通过环境变量设置 root 密码:MYSQL_ROOT_PASSWORD: root

配置目录: /etc/mysql/conf.d

数据目录: /var/lib/mysql

mongodb

基础镜像: mongo:3.6

通过环境变量设置用户名: MONGO_INITDB_ROOT_USER: root

通过环境变量设置密码: MONGO_INITDB_ROOT_PASSWORD: root

通过指定的文件设置密码: MONGO_INITDB_ROOT_PASSWORD_FILE: /run/secrets/mongo-root 需要把密码文件通过数据卷挂载到 /run/secrets/mongo-root

数据目录: /data/db

日志目录: /data/logs

redis

基础镜像: redis:4.0-stretch

密码文件: /var/secrets/redis-password

配置文件: /usr/local/etc/redis/redis.conf

数据目录: /data

xunsearch

基础镜像: hightman/xunsearch:latest

数据目录: /usr/local/xunsearch/data

repository

https://github.com/ChallengesOfPHP/docker-fecshop

共收到 3 条回复
successgo#15年前 0 个赞

docker for fecshop 的环境配置,已经基本 Ok.

Fecmall#25年前 0 个赞

看了一下你的yml文件:https://github.com/ChallengesOfPHP/docker-fecshop/blob/master/docker-compose.yml

1.php部分采用了中国源,这个很赞,国内加快下载速度,以及减少被墙的几率

2.env的引入很好:https://github.com/ChallengesOfPHP/docker-fecshop/blob/master/.env

3.数据库部分,mysql和monmodb的数据存储,你没有映射出来,如果你的容器出现问题被销毁,那么你的mysql和mongodb的数据也没有了

你的帖子里面已经说明了, 数据的持久化存储,可通过挂载容器的目录到宿主机,但yml文件中没有做配置

docker compose mysql部分的配置,这个挺全的:https://github.com/sprintcube/docker-compose-lamp/blob/master/docker-compose.yml

3楼 已删除.
successgo#45年前 1 个赞

是的,我还没有把数据库的持久化配置好,我打算是用单独的数据卷的方式,而不是把一个目录挂上去。

我当前出现了点小问题,还在处理。

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics