Dockerize wordpress

时间:2015-04-29 21:29:48

标签: 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 hub的official mysql image以及第一个数据容器中的volume / var / lib / mysql:

docker run --volumes-from bbdd --name mysql -e MYSQL_ROOT_PASSWORD="xxxx" -d mysql:5.6

然后我需要一个容器用于apache / php所以我使用docker hub中的official wordpress image以及第一个数据容器中的volume / var / lib / mysql:

docker run --volumes-from wordpress --name apache --link mysql:mysql -d -p 8080:80 wordpress:4.1.2-apache

我对docker docs的理解是,如果我不删除数据容器,我会坚持不懈。
但是如果我停止并删除正在运行的容器(apache和mysql)并使用last命令再次重新创建它们,则数据会丢失

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

2 个答案:

答案 0 :(得分:1)

在一个非常简化的测试案例中,这似乎与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

     

用法:docker rm [OPTIONS] CONTAINER [CONTAINER ...]

     

删除一个或多个容器

     

-f, - force = false强制删除正在运行的容器   (使用SIGKILL) - help = false打印用法-l, - link = false   删除指定的链接-v, - volume = false删除卷   与容器相关联

作为参考,我正在运行:

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

答案 1 :(得分:0)

您可以简单地将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