搭建基于 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
附录
参考链接
- 「Install GD On Alpine」 - Github
- 「命令行方式登录PostgreSQL、创建用户和数据库并赋权」 - CSDN
- 「Deploying PostgreSQL on a Docker Container」 - severalnines
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2019-04-25 19:55 PM