ubuntu14
安装docker
Discuz_X3.3构建docker image

  1. Dockerfile
  `FROM php:5.6-apache

RUN echo "Asia/Shanghai" > /etc/timezone;dpkg-reconfigure -f noninteractive tzdata

RUN apt-get update && apt-get install -y \
        php5-mcrypt \
        libmcrypt4 \
        libmcrypt-dev \
        libpng-dev \
        vim \
        curl \
        rsync \
        wget \
        --no-install-recommends && rm -r /var/lib/apt/lists/*

RUN docker-php-ext-install \
        mysql \
        mysqli \
        sockets \
        pdo \
        pdo_mysql \
        mbstring \
        mcrypt \
        gd

RUN mkdir -p /app/discuz && alias ll='ls -alF'

ADD . /app/discuz
RUN chown www-data:www-data /app/discuz/ -R
RUN chmod -R 777 /app/discuz

COPY config/000-default.conf /etc/apache2/sites-available/000-default.conf
COPY config/apache2.conf /etc/apache2/apache2.conf

WORKDIR /app
VOLUME /data

ENTRYPOINT ["/app/discuz/docker-entrypoint.sh"]
`
  1. docker-entrypoint.sh
 `#!/bin/bash
set -e

# 数据持久化操作

persist_dirs="config data uc_server/data uc_client/data/cache"
dest_dir=/data/discuz
source_dir=/app/discuz
mkdir -p ${dest_dir}

# 在持久化存储中创建需要的目录
for d in ${persist_dirs} ; do
    if [ -d ${dest_dir}/${d} ] ; then
        rm -rf ${source_dir}/${d}
    else
        mkdir -p ${dest_dir}/${d}
        cp -r ${source_dir}/${d}/* ${dest_dir}/${d}
        rm -rf ${source_dir}/${d}
    fi
    pdir=$(dirname ${source_dir}/${d})
    ln -s ${dest_dir}/${d} ${pdir}
done

echo "discuz success"

# 设置权限
chmod -R 777 /data/

apache2-foreground`
  1. docker build -t discuz .
  2. docker run -d discuz -p 8090:80
  3. mysql 构建docker image

MySQL容器
MySQL继承自官方的MySQL5.6镜像,Dockerfile仅有一行,无需做任何额外处理,因为普通需求官方都已经在镜像中实现了,因此Dockerfile的内容为:

FROM mysql:5.6

在项目根目录下运行

docker build -t discuz/mysql ./mysql
会自动下载并构建镜像,这里我们将其命名为discuz/mysql。

由于容器运行结束时会丢弃所有数据库数据,为了不用每次都要导入数据,我们将采用挂载的方式持久化MySQL数据库,官方镜像默认将数据库存放在/var/lib/mysql,同时要求容器运行时必须通过环境变量设置一个管理员密码,因此可以使用以下指令运行容器:

docker run -p 3306:3306 -v ~/opt/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -it eva/mysql

通过上面的指令,我们将本地的3306端口绑定到容器的3306端口,将容器内的数据库持久化到本地的~/opt/data/mysql,并且为MySQL设置了一个root密码123456

docker exec -ti focused_haibt /bin/bash

交互模式,进入discuz,

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐