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

来源:https://github.com/MagePsycho/wordpress-dockerized