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 就会创建绑定安装并隐藏这些文件。