Dockerize wordpress
Dockerize wordpress
尝试 docker使用 wordpress 我发现了这个场景:
2个数据卷容器,一个用于数据库(bbdd),另一个用于wordpress文件(wordpress):
sudo docker create -v /var/lib/mysql --name bbdd ubuntu:trusty /bin/true
sudo docker create -v /var/www/html --name wordpress ubuntu:trusty /bin/true
然后我需要一个用于 mysql 的容器,所以我使用来自 docker 集线器的 official mysql image 以及来自第一个数据容器的卷 /var/lib/mysql:
docker run --volumes-from bbdd --name mysql -e MYSQL_ROOT_PASSWORD="xxxx" -d mysql:5.6
然后我需要一个用于 apache/php 的容器,所以我使用来自 docker 集线器的 official wordpress image 以及来自第一个数据容器的卷 /var/lib/mysql:
docker run --volumes-from wordpress --name apache --link mysql:mysql -d -p 8080:80 wordpress:4.1.2-apache
我从 docker 文档中了解到,如果我不删除数据容器,我将有持久性。
但是 如果我停止并删除 运行 个容器(apache 和 mysql)并用最后的命令重新创建它们,数据就会丢失:
docker run --volumes-from bbdd --name mysql -e MYSQL_ROOT_PASSWORD="xxxx" -d mysql:5.6
docker run --volumes-from wordpress --name apache --link mysql:mysql -d -p 8080:80 wordpress:4.1.2-apache
但是,如果我创建没有数据容器的容器,它似乎可以按预期工作:
docker run -v /home/juanda/project/mysql:/var/lib/mysql --name mysql -e MYSQL_ROOT_PASSWORD="juanda" -d mysql:5.6
docker run -v /home/juanda/project/wordpress:/var/www/html --name apache --link mysql:mysql -d -p 8080:80 wordpress:4.1.2-apache
在一个非常简化的测试用例中,这似乎像 Creating and mounting a Data Volume Container 中所宣传和记录的那样工作:
prologic@daisy
Thu Apr 30 08:18:45
~
$ docker create -v /test --name data busybox /vin/true
Unable to find image 'busybox:latest' locally
latest: Pulling from busybox
cf2616975b4a: Pull complete
6ce2e90b0bc7: Pull complete
8c2e06607696: Already exists
busybox:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:38a203e1986cf79639cfb9b2e1d6e773de84002feea2d4eb006b52004ee8502d
Status: Downloaded newer image for busybox:latest
6f5fc1d2e33654867cff8ffdb60c5765ced4b7128441ae2c6be24b68fb6454ef
prologic@daisy
Thu Apr 30 08:20:53
~
$ docker run -i -t --rm --volumes-from data crux /bin/bash
bash-4.3# cd /test
bash-4.3# ls
bash-4.3# touch foo
bash-4.3# echo "Hello World" >> foo
bash-4.3# cat foo
Hello World
bash-4.3# exit
prologic@daisy
Thu Apr 30 08:21:20
~
$ docker run -i -t --rm --volumes-from data crux /bin/bash
bash-4.3# cd /test
bash-4.3# ls
foo
bash-4.3# cat foo
Hello World
bash-4.3# exit
注意我删除了附加容器以确保持久数据卷容器的数据完好无损。
数据卷容器及其数据只会在您 运行 以下内容时消失:
docker rm -v data
注意: -v
选项实际删除卷。
参见(特别是 -v/--volumes
选项):
$ docker rm -h
Usage: docker rm [OPTIONS] CONTAINER [CONTAINER...]
Remove one or more containers
-f, --force=false Force the removal of a running container
(uses SIGKILL) --help=false Print usage -l, --link=false
Remove the specified link -v, --volumes=false Remove the volumes
associated with the container
参考我是运行:
prologic@daisy
Thu Apr 30 08:24:51
~
$ docker version
Client version: 1.6.0
Client API version: 1.18
Go version (client): go1.3.3
Git commit (client): 47496519da
OS/Arch (client): linux/amd64
Server version: 1.6.0
Server API version: 1.18
Go version (server): go1.3.3
Git commit (server): 47496519da
OS/Arch (server): linux/amd64
更新:有关具有完整托管支持的 Dockerized Wordpress 设置的快速示例(您可以在生产中使用),请参阅: https://gist.github.com/prologic/b5525a50bb4d867d84a2
您需要 运行 一次数据容器以使其持久化:
sudo docker run -v /var/lib/mysql --name bbdd ubuntu:trusty /bin/true
sudo docker run -v /var/www/html --name wordpress ubuntu:trusty /bin/true
这是 Docker 描述的一个旧错误 here。如果您的 Docker 版本较旧,您可能会受到影响。
您可以简单地使用 docker-compose
文件作为:
version: '3.3'
services:
# https://hub.docker.com/_/nginx
# Doesn't play well with wordpress fpm based images
# nginx:
# image: nginx:latest
# container_name: "${PROJECT_NAME}_nginx"
# ports:
# - "${NGINX_HTTP_PORT}:80"
# working_dir: /var/www/html
# volumes:
# - ./docker/etc/nginx:/etc/nginx/conf.d
# - ./logs/nginx:/var/log/nginx
# - ./app:/var/www/html
# environment:
# - NGINX_HOST=${NGINX_HOST}
# #command: /bin/sh -c "envsubst '$$NGINX_HOST' < /etc/nginx/conf.d/wordpress.conf > /etc/nginx/conf.d/wordpress.conf && nginx -g 'daemon off;'"
# links:
# - wordpress
# restart: always
# https://hub.docker.com/r/jwilder/nginx-proxy
nginx-proxy:
image: jwilder/nginx-proxy
container_name: "${PROJECT_NAME}_nginx-proxy"
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
# https://hub.docker.com/_/mysql
mysql:
image: mysql:${MYSQL_TAG}
# For MySQL 8.0
#image: mysql:8
#command: '--default-authentication-plugin=mysql_native_password'
container_name: "${PROJECT_NAME}_mysql"
ports:
- "${MYSQL_PORT}:3306"
volumes:
- ./data/mysql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
restart: always
# https://hub.docker.com/_/wordpress
wordpress:
# -fpm or apache, unfortunately fpm doesn't work properly with nginx-proxy
image: wordpress:${WP_VERSION}-php${PHP_VERSION}-apache
container_name: "${PROJECT_NAME}_wordpress"
environment:
- VIRTUAL_HOST=${WP_HTTP_HOST}
- WORDPRESS_DB_HOST=mysql:3306
- WORDPRESS_DB_NAME=${MYSQL_DATABASE}
- WORDPRESS_DB_USER=${MYSQL_USER}
- WORDPRESS_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}
working_dir: /var/www/html
volumes:
- ./app:/var/www/html
#- ./app/wp-content:/var/www/html/wp-content
- ./docker/etc/php-fpm/custom.ini:/usr/local/etc/php/conf.d/999-custom.ini
#depends_on:
# - mysql
ports:
- "${WP_HTTP_PORT}:80"
expose:
- ${WP_HTTP_PORT}
links:
- mysql
restart: always
# https://hub.docker.com/r/phpmyadmin/phpmyadmin
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: "${PROJECT_NAME}_phpmyadmin"
ports:
- "${PMA_PORT}:80"
expose:
- ${PMA_PORT}
environment:
VIRTUAL_HOST: ${PMA_HTTP_HOST}
PMA_HOST: mysql
depends_on:
- mysql
# @todo services
# jwilder/nginx-proxy
# https / letsencrypt
# composer
# mailhog
# redis
# phpredisadmin
# blackfire
networks:
default:
external:
name: nginx-proxy
尝试 docker使用 wordpress 我发现了这个场景:
2个数据卷容器,一个用于数据库(bbdd),另一个用于wordpress文件(wordpress):
sudo docker create -v /var/lib/mysql --name bbdd ubuntu:trusty /bin/true
sudo docker create -v /var/www/html --name wordpress ubuntu:trusty /bin/true
然后我需要一个用于 mysql 的容器,所以我使用来自 docker 集线器的 official mysql image 以及来自第一个数据容器的卷 /var/lib/mysql:
docker run --volumes-from bbdd --name mysql -e MYSQL_ROOT_PASSWORD="xxxx" -d mysql:5.6
然后我需要一个用于 apache/php 的容器,所以我使用来自 docker 集线器的 official wordpress image 以及来自第一个数据容器的卷 /var/lib/mysql:
docker run --volumes-from wordpress --name apache --link mysql:mysql -d -p 8080:80 wordpress:4.1.2-apache
我从 docker 文档中了解到,如果我不删除数据容器,我将有持久性。
但是 如果我停止并删除 运行 个容器(apache 和 mysql)并用最后的命令重新创建它们,数据就会丢失:
docker run --volumes-from bbdd --name mysql -e MYSQL_ROOT_PASSWORD="xxxx" -d mysql:5.6
docker run --volumes-from wordpress --name apache --link mysql:mysql -d -p 8080:80 wordpress:4.1.2-apache
但是,如果我创建没有数据容器的容器,它似乎可以按预期工作:
docker run -v /home/juanda/project/mysql:/var/lib/mysql --name mysql -e MYSQL_ROOT_PASSWORD="juanda" -d mysql:5.6
docker run -v /home/juanda/project/wordpress:/var/www/html --name apache --link mysql:mysql -d -p 8080:80 wordpress:4.1.2-apache
在一个非常简化的测试用例中,这似乎像 Creating and mounting a Data Volume Container 中所宣传和记录的那样工作:
prologic@daisy
Thu Apr 30 08:18:45
~
$ docker create -v /test --name data busybox /vin/true
Unable to find image 'busybox:latest' locally
latest: Pulling from busybox
cf2616975b4a: Pull complete
6ce2e90b0bc7: Pull complete
8c2e06607696: Already exists
busybox:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:38a203e1986cf79639cfb9b2e1d6e773de84002feea2d4eb006b52004ee8502d
Status: Downloaded newer image for busybox:latest
6f5fc1d2e33654867cff8ffdb60c5765ced4b7128441ae2c6be24b68fb6454ef
prologic@daisy
Thu Apr 30 08:20:53
~
$ docker run -i -t --rm --volumes-from data crux /bin/bash
bash-4.3# cd /test
bash-4.3# ls
bash-4.3# touch foo
bash-4.3# echo "Hello World" >> foo
bash-4.3# cat foo
Hello World
bash-4.3# exit
prologic@daisy
Thu Apr 30 08:21:20
~
$ docker run -i -t --rm --volumes-from data crux /bin/bash
bash-4.3# cd /test
bash-4.3# ls
foo
bash-4.3# cat foo
Hello World
bash-4.3# exit
注意我删除了附加容器以确保持久数据卷容器的数据完好无损。
数据卷容器及其数据只会在您 运行 以下内容时消失:
docker rm -v data
注意: -v
选项实际删除卷。
参见(特别是 -v/--volumes
选项):
$ docker rm -h
Usage: docker rm [OPTIONS] CONTAINER [CONTAINER...]
Remove one or more containers
-f, --force=false Force the removal of a running container (uses SIGKILL) --help=false Print usage -l, --link=false Remove the specified link -v, --volumes=false Remove the volumes associated with the container
参考我是运行:
prologic@daisy
Thu Apr 30 08:24:51
~
$ docker version
Client version: 1.6.0
Client API version: 1.18
Go version (client): go1.3.3
Git commit (client): 47496519da
OS/Arch (client): linux/amd64
Server version: 1.6.0
Server API version: 1.18
Go version (server): go1.3.3
Git commit (server): 47496519da
OS/Arch (server): linux/amd64
更新:有关具有完整托管支持的 Dockerized Wordpress 设置的快速示例(您可以在生产中使用),请参阅: https://gist.github.com/prologic/b5525a50bb4d867d84a2
您需要 运行 一次数据容器以使其持久化:
sudo docker run -v /var/lib/mysql --name bbdd ubuntu:trusty /bin/true
sudo docker run -v /var/www/html --name wordpress ubuntu:trusty /bin/true
这是 Docker 描述的一个旧错误 here。如果您的 Docker 版本较旧,您可能会受到影响。
您可以简单地使用 docker-compose
文件作为:
version: '3.3'
services:
# https://hub.docker.com/_/nginx
# Doesn't play well with wordpress fpm based images
# nginx:
# image: nginx:latest
# container_name: "${PROJECT_NAME}_nginx"
# ports:
# - "${NGINX_HTTP_PORT}:80"
# working_dir: /var/www/html
# volumes:
# - ./docker/etc/nginx:/etc/nginx/conf.d
# - ./logs/nginx:/var/log/nginx
# - ./app:/var/www/html
# environment:
# - NGINX_HOST=${NGINX_HOST}
# #command: /bin/sh -c "envsubst '$$NGINX_HOST' < /etc/nginx/conf.d/wordpress.conf > /etc/nginx/conf.d/wordpress.conf && nginx -g 'daemon off;'"
# links:
# - wordpress
# restart: always
# https://hub.docker.com/r/jwilder/nginx-proxy
nginx-proxy:
image: jwilder/nginx-proxy
container_name: "${PROJECT_NAME}_nginx-proxy"
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
# https://hub.docker.com/_/mysql
mysql:
image: mysql:${MYSQL_TAG}
# For MySQL 8.0
#image: mysql:8
#command: '--default-authentication-plugin=mysql_native_password'
container_name: "${PROJECT_NAME}_mysql"
ports:
- "${MYSQL_PORT}:3306"
volumes:
- ./data/mysql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
restart: always
# https://hub.docker.com/_/wordpress
wordpress:
# -fpm or apache, unfortunately fpm doesn't work properly with nginx-proxy
image: wordpress:${WP_VERSION}-php${PHP_VERSION}-apache
container_name: "${PROJECT_NAME}_wordpress"
environment:
- VIRTUAL_HOST=${WP_HTTP_HOST}
- WORDPRESS_DB_HOST=mysql:3306
- WORDPRESS_DB_NAME=${MYSQL_DATABASE}
- WORDPRESS_DB_USER=${MYSQL_USER}
- WORDPRESS_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}
working_dir: /var/www/html
volumes:
- ./app:/var/www/html
#- ./app/wp-content:/var/www/html/wp-content
- ./docker/etc/php-fpm/custom.ini:/usr/local/etc/php/conf.d/999-custom.ini
#depends_on:
# - mysql
ports:
- "${WP_HTTP_PORT}:80"
expose:
- ${WP_HTTP_PORT}
links:
- mysql
restart: always
# https://hub.docker.com/r/phpmyadmin/phpmyadmin
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: "${PROJECT_NAME}_phpmyadmin"
ports:
- "${PMA_PORT}:80"
expose:
- ${PMA_PORT}
environment:
VIRTUAL_HOST: ${PMA_HTTP_HOST}
PMA_HOST: mysql
depends_on:
- mysql
# @todo services
# jwilder/nginx-proxy
# https / letsencrypt
# composer
# mailhog
# redis
# phpredisadmin
# blackfire
networks:
default:
external:
name: nginx-proxy