基于 PostgreSQL 的 PHP 项目容器化
后知后觉 暂无评论

搭建基于 PostgreSQL+PHP+NGINX 的 Docker 容器化架构

部署

拉取镜像

docker pull redis:5-alpine
docker pull nginx:stable-alpine-perl
docker pull php:fpm-alpine
docker pull postgres:alpine
docker pull memcached:alpine
小贴士:使用全部 Alpine 基础镜像的镜像。

创建私网

docker network create backend

创建容器

创建 PostgreSQL 容器

docker run --name mypdb --memory=512m --restart=always --network=backend \
-p 127.0.0.1:5432:5432 \
-v /usr/mystack/data:/var/lib/postgresql/data \
-e POSTGRES_INITDB_ARGS="--data-checksums" \
-e POSTGRES_PASSWORD=y6S9EbZj6N8w872CzkOFf -d postgres:alpine

创建 PHP 容器

docker run --name myphp --memory=512m --restart=always --network=backend \
-v /usr/mystack/php/php.ini:/usr/local/etc/php/php.ini:ro \
-v /usr/mystack/www:/var/www -d php:fpm-alpine

创建 NGINX 容器

docker run --name myngx --memory=64m --restart=always --network=backend \
-p 80:80 -p 443:443 \
-v /usr/mystack/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /usr/mystack/nginx/conf.d:/etc/nginx/conf.d \
-v /usr/mystack/nginx/logs.d:/etc/nginx/logs.d \
-v /usr/mystack/nginx/cert.d:/etc/nginx/cert.d \
-v /usr/mystack/www:/var/www -d nginx:stable-alpine-perl

创建 memcached 容器

docker run --name mymcd --memory=64m --restart=always --network=backend \
-p 127.0.0.1:11211:11211 \
-d memcached:alpine

定制容器

初始情况下的官方 PHP 容器不支持 PostgreSQL ,需要定制 PHP 容器。

docker exec -it myphp /bin/sh

安装额外组件(PostgreSQL)

apk add --no-cache postgresql-dev postgresql-libs
docker-php-ext-install pdo_pgsql pdo opcache
apk del --no-cache postgresql-dev

安装额外组件(GD XML XMLRPC等)

apk add --no-cache freetype libpng libjpeg-turbo freetype-dev libpng-dev libjpeg-turbo-dev
docker-php-ext-install gd xml xmlrpc
apk del --no-cache freetype-dev libpng-dev libjpeg-turbo-dev
apk add --no-cache autoconf build-base
pecl install igbinary
docker-php-ext-enable igbinary
pecl install msgpack
docker-php-ext-enable msgpack

安装额外组件(Memcached)

apk add --no-cache libmemcached \
    libmemcached-libs \
    libmemcached-dev \
    libevent \
    libevent-dev \
    zlib-dev \
    build-base \
    autoconf

pecl install memcached
docker-php-ext-enable memcached

apk del --no-cache libmemcached \
    libmemcached-dev \
    libevent-dev \
    zlib-dev \
    build-base \
    autoconf

导入数据

创建临时容器登陆数据库

docker run -it --rm --network backend postgres:alpine psql -h mypdb -U postgres

创建角色、用户、数据库,并授权

CREATE USER typecho WITH PASSWORD 'y6S9EbZj6N8w872CzkOFf';
CREATE DATABASE typecho OWNER typecho;
GRANT ALL PRIVILEGES ON DATABASE typecho TO typecho;

定时备份

容器化数据库导出

docker exec -t mypdb pg_dumpall -c -U postgres > $DUMPPATH/dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql

附录

参考链接

本文撰写于一年前,如出现图片失效或有任何问题,请在下方留言。博主看到后将及时修正,谢谢!
禁用 / 当前已拒绝评论,仅可查看「历史评论」。