假设我已经取消了正式的mysql:5.6.21图像.
我通过创建几个docker容器来部署此映像.
这些容器已运行一段时间,直到MySQL 5.6.22发布.mysql的官方形象:5.6使用新版本更新,但我的容器仍然运行5.6.21.
如何将图像中的更改(即升级MySQL发行版)传播到我现有的所有容器?Docker的正确方法是什么?
我有一个docker-compose-staging.yml文件,我用它来定义一个PHP应用程序.我已经定义了应用程序代码所在的数据卷容器(app),并使用volumes_from与其他容器共享.
泊坞窗 - 撰写-staging.yml:
version: '2'
services:
nginx:
build:
context: ./
dockerfile: docker/staging/nginx/Dockerfile
ports:
- 80:80
links:
- php
volumes_from:
- app
php:
build:
context: ./
dockerfile: docker/staging/php/Dockerfile
expose:
- 9000
volumes_from:
- app
app:
build:
context: ./
dockerfile: docker/staging/app/Dockerfile
volumes:
- /var/www/html
entrypoint: /bin/bash
Run Code Online (Sandbox Code Playgroud)
此特定的docker-compose-staging.yml用于将应用程序部署到云提供程序(DigitalOcean),而app容器的Dockerfile具有COPY命令,该命令将文件夹从本地目录复制到配置中定义的卷.
泊坞窗/分期/应用/ Dockerfile:
FROM php:7.1-fpm
COPY ./public /var/www/html/public
COPY ./code /var/www/html/code
Run Code Online (Sandbox Code Playgroud)
这在我第一次构建和部署应用程序时有效.我的公共和代码目录中的代码在远程服务器上存在且正确.我使用以下命令进行部署:
docker-compose -f docker-compose-staging.yml up -d
Run Code Online (Sandbox Code Playgroud)
但是,接下来我尝试将文件添加到我的本地公共目录,然后运行以下命令来重建更新的代码:
docker-compose -f docker-compose-staging.yml build app
Run Code Online (Sandbox Code Playgroud)
此重建的输出表明COPY命令成功:
Building app
Step 1 : FROM php:7.1-fpm
---> 6ed35665f88f
Step 2 …Run Code Online (Sandbox Code Playgroud)