尝试使用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
答案 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