Docker 卷持久性
Docker Volume Persistence
我正在努力学习Docker。我在 Windows10 Pro 计算机上安装了 Docker Desktop。
我开始使用 PHP、MySQL 网站,然后 运行 使用 Docker。
我的docker-compose.yml长得像
version: "3.8"
services:
www:
build: .
ports:
- "80:80"
volumes:
- ./www:/var/www/html
links:
- db
networks:
- default
db:
image: mysql:8.0
ports:
- "3306:3306"
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_DATABASE: myDb
MYSQL_USER: user
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: test
volumes:
- ./dump:/docker-entrypoint-initdb.d
- ./conf:/etc/mysql/conf.d
- persistent:/var/lib/mysql
networks:
- default
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- db:db
ports:
- 8000:80
environment:
MYSQL_USER: user
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: test
volumes:
persistent:
并且Docker文件看起来像
FROM php:7.3-apache
RUN docker-php-ext-install mysqli
RUN apt-get update \
&& apt-get install -y libzip-dev \
&& apt-get install -y wget \
&& apt-get install -y zlib1g-dev \
&& rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-install zip
我有一个 www 文件夹,其中包含 index.php.
当我运行
docker-compose up -d
我已正确启动 PHP、mySQL 站点并 运行ning,我可以访问 index.php 并获得预期结果。
到目前为止一切顺利。
现在,我想更改 Docker 文件以设置 php 论坛网站 (phpbb) - 所以我更新了我的 Docker 文件如下:
FROM php:7.3-apache
RUN docker-php-ext-install mysqli
RUN apt-get update \
&& apt-get install -y libzip-dev \
&& apt-get install -y wget \
&& apt-get install -y zlib1g-dev \
&& rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-install zip
WORKDIR /var/www/html
RUN wget https://download.phpbb.com/pub/release/3.3/3.3.0/phpBB-3.3.0.tar.bz2 \
&& tar -xvjf phpBB-3.3.0.tar.bz2
&& ls -l
当我运行
docker-compose build --no-cache
我可以看到预期的结果 - 即“ls”命令显示 /var/www/html
中所有预期的 phpBB 文件
然而,当我运行
docker-compose up -d
我的容器只有 index.php 在 /var/www/html (index.php 来自www 文件夹)。那里有 None 个 phpBB 文件。
我做错了什么?
文件在那里,但您通过绑定安装隐藏了它们。
您正在将 ./www
绑定到同一目录 (/var/www/html
),这将隐藏其内容。
此处:
www:
...
volumes:
- ./www:/var/www/html
当您构建映像时,您可以正确地看到文件,但是一旦您 运行 docker-compose
就会创建绑定安装并隐藏这些文件。
我正在努力学习Docker。我在 Windows10 Pro 计算机上安装了 Docker Desktop。
我开始使用 PHP、MySQL 网站,然后 运行 使用 Docker。
我的docker-compose.yml长得像
version: "3.8"
services:
www:
build: .
ports:
- "80:80"
volumes:
- ./www:/var/www/html
links:
- db
networks:
- default
db:
image: mysql:8.0
ports:
- "3306:3306"
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_DATABASE: myDb
MYSQL_USER: user
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: test
volumes:
- ./dump:/docker-entrypoint-initdb.d
- ./conf:/etc/mysql/conf.d
- persistent:/var/lib/mysql
networks:
- default
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- db:db
ports:
- 8000:80
environment:
MYSQL_USER: user
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: test
volumes:
persistent:
并且Docker文件看起来像
FROM php:7.3-apache
RUN docker-php-ext-install mysqli
RUN apt-get update \
&& apt-get install -y libzip-dev \
&& apt-get install -y wget \
&& apt-get install -y zlib1g-dev \
&& rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-install zip
我有一个 www 文件夹,其中包含 index.php.
当我运行
docker-compose up -d
我已正确启动 PHP、mySQL 站点并 运行ning,我可以访问 index.php 并获得预期结果。
到目前为止一切顺利。
现在,我想更改 Docker 文件以设置 php 论坛网站 (phpbb) - 所以我更新了我的 Docker 文件如下:
FROM php:7.3-apache
RUN docker-php-ext-install mysqli
RUN apt-get update \
&& apt-get install -y libzip-dev \
&& apt-get install -y wget \
&& apt-get install -y zlib1g-dev \
&& rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-install zip
WORKDIR /var/www/html
RUN wget https://download.phpbb.com/pub/release/3.3/3.3.0/phpBB-3.3.0.tar.bz2 \
&& tar -xvjf phpBB-3.3.0.tar.bz2
&& ls -l
当我运行
docker-compose build --no-cache
我可以看到预期的结果 - 即“ls”命令显示 /var/www/html
中所有预期的 phpBB 文件然而,当我运行
docker-compose up -d
我的容器只有 index.php 在 /var/www/html (index.php 来自www 文件夹)。那里有 None 个 phpBB 文件。
我做错了什么?
文件在那里,但您通过绑定安装隐藏了它们。
您正在将 ./www
绑定到同一目录 (/var/www/html
),这将隐藏其内容。
此处:
www:
...
volumes:
- ./www:/var/www/html
当您构建映像时,您可以正确地看到文件,但是一旦您 运行 docker-compose
就会创建绑定安装并隐藏这些文件。