Visual Studio Docker 工具如何强制从头开始重建容器
Visual Studio Docker Tools how to force a container rebuild from scratch
我正在使用 docker-compose in Visual Studio 2017(工具版本 0.41)来构建两个图像,一个 ASP.NET Core API 容器和一个 PostgreSQL 容器。我 运行 Docker-Compose 项目,一切正常 - 我可以从 Api 容器访问数据库。
我现在想将 PostgreSQL 环境变量 POSTGRES_USER
、POSTGRES_PASSWORD
和 POSTGRES_DB
更改为如下新值:
docker-compose.yml:
services:
mcodatabase:
image: mcodatabase
build:
context: ./Data
dockerfile: Dockerfile
restart: always
ports:
- 5432:5432
environment:
POSTGRES_USER: mcodevuser
POSTGRES_PASSWORD: password
POSTGRES_DB: mcodev
volumes:
- postgresdata:/var/lib/postgresql/data
networks:
- mconetwork
mcoapi:
image: mcoapi
build:
context: ./Mco.Api
dockerfile: Dockerfile
ports:
- 56107:80
links:
- mcodatabase
depends_on:
- "mcodatabase"
networks:
- mconetwork
volumes:
postgresdata:
networks:
mconetwork:
driver: bridge
但是,据我了解,图像已经创建。我想从数据库图像 mcodatabase
.
开始
这是我的图片:
c:\Projects\v4>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mcodatabase dev 96c9ba7509ed 2 hours ago 267 MB
mcoapi dev f238b18ab9bb 26 hours ago 288 MB
microsoft/aspnetcore 1.1 b186ab38f718 8 days ago 288 MB
postgres latest ff0943ecbb3c 13 days ago 267 MB
d4w/nsenter latest 9e4f13a0901e 7 months ago 83.8 kB
有没有办法用这个工具做到这一点?
如果不是,使用 >docker rmi mcodatabase:dev
删除图像是否有任何问题?当我下次构建时,docker-compose 会明白它没有那个图像并重新构建它吗?
帮助我理解容器镜像与容器本身的一个想法是将容器镜像视为二进制文件,将单个容器视为一个进程。
还有一个命令行解决方案。
要刷新 PostgreSQL 数据库环境变量,您需要删除数据库容器及其卷。当 Visual Studio 接下来 运行 是 docker-compose 项目时,它将使用新的 'install' PostGres 和更新的环境变量重新创建数据库容器及其关联的卷。 你会丢失你的数据,所以先备份!
这里是起点,两个容器:一个用于 ASP.NET 核心容器 (mcoapi
),一个用于数据库 (mcodatabase
)。 Mco 是我们公司的缩写。 \v4
是我的 Visual Studio 解决方案的根,但这些命令可以从任何地方 运行 因为我们没有使用 docker-compose 命令行(请参阅下面的原因)。
C:\Projects\v4>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
809b90e22290 mcoapi:dev "tail -f /dev/null" About an hour ago Up About an hour 0.0.0.0:32776->80/tcp, 0.0.0.0:56107->80/tcp dockercompose320715364_mcoapi_1
86d9036daccf mcodatabase:dev "docker-entrypoint..." About an hour ago Up About an hour 0.0.0.0:5432->5432/tcp dockercompose320715364_mcodatabase_1
首先,我停止容器。我使用 CONTAINER_ID
的前两位数字作为 shorthand.
C:\Projects\v4>docker stop 80
C:\Projects\v4>docker stop 86
现在我移除容器。我需要删除两者,因为我相信它们都使用相同的 docker 卷。
C:\Projects\v4>docker rm 80
C:\Projects\v4>docker rm 86
我现在没有容器了。
C:\Projects\v4>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
我现在可以删除存储数据库的卷。
在你这样做之前,备份你需要的任何数据,这将擦除数据库!
接下来,我检查一下安装了哪些卷:
C:\Projects\v4>docker volume ls
DRIVER VOLUME NAME
local dockercompose320715364_postgresdata
我现在可以使用 >docker volume rm dockercompose320715364_postgresdata
删除它,但我更喜欢 volume prune
,它会删除不再使用的卷。如果我忘记取出容器,我很快就会知道。在警告处给出 y
。
C:\Projects\v4>docker volume prune
WARNING! This will remove all volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
dockercompose320715364_postgresdata
Total reclaimed space: 45.95 MB
我们现在可以更改 docker-compose.yml
中的环境变量。下面我只改了environment:
.
下面的内容
version: '2'
services:
mcodatabase:
image: mcodatabase
build:
context: ./Data
dockerfile: Dockerfile
restart: always
ports:
- 5432:5432
environment:
POSTGRES_USER: myNewUser
POSTGRES_PASSWORD: myNewPassword
POSTGRES_DB: myNewDb
volumes:
- postgresdata:/var/lib/postgresql/data
networks:
- mconetwork
[snip for brevity]
我现在 运行 在 Visual Studio 中 docker-compose 项目,并使用新值重新创建数据库容器。
为什么我没有从命令行调用 docker-compose
可以在命令行上使用类似 docker-compose down
的命令来执行类似的拆卸,但我发现命令行更复杂,因为它包含所有不同的 yml
文件 Visual Studio需要。例如,从 Visual Studio 工具调用的 up
是:
docker-compose -f "C:\Projects\v4\docker-compose.yml" -f "C:\Projects\v4\docker-compose.override.yml" -f "C:\Projects\v4\docker-compose.vs.debug.yml" -p dockercompose320715364 up -d
这不如手动操作直观。如果有人知道更好的方法,我洗耳恭听!
首先,容器工具1.0(以前称为Docker工具)内置于VS 2017中。您不需要安装0.41。事实上,0.41 仅支持 VS 2015。请不要在 VS 2017 上安装 0.41,即使可以。
Visual Studio Docker Tools how to force a container rebuild from scratch
运行 'clean' 对抗 Visual Studio 中的 docker-compose.dcproj 将为您做 docker-compose down。如果你想重建图像,切换到 'Release' 配置和 运行 'rebuild' 反对 docker-compose.dcproj.
我正在使用 docker-compose in Visual Studio 2017(工具版本 0.41)来构建两个图像,一个 ASP.NET Core API 容器和一个 PostgreSQL 容器。我 运行 Docker-Compose 项目,一切正常 - 我可以从 Api 容器访问数据库。
我现在想将 PostgreSQL 环境变量 POSTGRES_USER
、POSTGRES_PASSWORD
和 POSTGRES_DB
更改为如下新值:
docker-compose.yml:
services:
mcodatabase:
image: mcodatabase
build:
context: ./Data
dockerfile: Dockerfile
restart: always
ports:
- 5432:5432
environment:
POSTGRES_USER: mcodevuser
POSTGRES_PASSWORD: password
POSTGRES_DB: mcodev
volumes:
- postgresdata:/var/lib/postgresql/data
networks:
- mconetwork
mcoapi:
image: mcoapi
build:
context: ./Mco.Api
dockerfile: Dockerfile
ports:
- 56107:80
links:
- mcodatabase
depends_on:
- "mcodatabase"
networks:
- mconetwork
volumes:
postgresdata:
networks:
mconetwork:
driver: bridge
但是,据我了解,图像已经创建。我想从数据库图像 mcodatabase
.
这是我的图片:
c:\Projects\v4>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mcodatabase dev 96c9ba7509ed 2 hours ago 267 MB
mcoapi dev f238b18ab9bb 26 hours ago 288 MB
microsoft/aspnetcore 1.1 b186ab38f718 8 days ago 288 MB
postgres latest ff0943ecbb3c 13 days ago 267 MB
d4w/nsenter latest 9e4f13a0901e 7 months ago 83.8 kB
有没有办法用这个工具做到这一点?
如果不是,使用 >docker rmi mcodatabase:dev
删除图像是否有任何问题?当我下次构建时,docker-compose 会明白它没有那个图像并重新构建它吗?
帮助我理解容器镜像与容器本身的一个想法是将容器镜像视为二进制文件,将单个容器视为一个进程。
还有一个命令行解决方案。
要刷新 PostgreSQL 数据库环境变量,您需要删除数据库容器及其卷。当 Visual Studio 接下来 运行 是 docker-compose 项目时,它将使用新的 'install' PostGres 和更新的环境变量重新创建数据库容器及其关联的卷。 你会丢失你的数据,所以先备份!
这里是起点,两个容器:一个用于 ASP.NET 核心容器 (mcoapi
),一个用于数据库 (mcodatabase
)。 Mco 是我们公司的缩写。 \v4
是我的 Visual Studio 解决方案的根,但这些命令可以从任何地方 运行 因为我们没有使用 docker-compose 命令行(请参阅下面的原因)。
C:\Projects\v4>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
809b90e22290 mcoapi:dev "tail -f /dev/null" About an hour ago Up About an hour 0.0.0.0:32776->80/tcp, 0.0.0.0:56107->80/tcp dockercompose320715364_mcoapi_1
86d9036daccf mcodatabase:dev "docker-entrypoint..." About an hour ago Up About an hour 0.0.0.0:5432->5432/tcp dockercompose320715364_mcodatabase_1
首先,我停止容器。我使用 CONTAINER_ID
的前两位数字作为 shorthand.
C:\Projects\v4>docker stop 80
C:\Projects\v4>docker stop 86
现在我移除容器。我需要删除两者,因为我相信它们都使用相同的 docker 卷。
C:\Projects\v4>docker rm 80
C:\Projects\v4>docker rm 86
我现在没有容器了。
C:\Projects\v4>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
我现在可以删除存储数据库的卷。
在你这样做之前,备份你需要的任何数据,这将擦除数据库!
接下来,我检查一下安装了哪些卷:
C:\Projects\v4>docker volume ls
DRIVER VOLUME NAME
local dockercompose320715364_postgresdata
我现在可以使用 >docker volume rm dockercompose320715364_postgresdata
删除它,但我更喜欢 volume prune
,它会删除不再使用的卷。如果我忘记取出容器,我很快就会知道。在警告处给出 y
。
C:\Projects\v4>docker volume prune
WARNING! This will remove all volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
dockercompose320715364_postgresdata
Total reclaimed space: 45.95 MB
我们现在可以更改 docker-compose.yml
中的环境变量。下面我只改了environment:
.
version: '2'
services:
mcodatabase:
image: mcodatabase
build:
context: ./Data
dockerfile: Dockerfile
restart: always
ports:
- 5432:5432
environment:
POSTGRES_USER: myNewUser
POSTGRES_PASSWORD: myNewPassword
POSTGRES_DB: myNewDb
volumes:
- postgresdata:/var/lib/postgresql/data
networks:
- mconetwork
[snip for brevity]
我现在 运行 在 Visual Studio 中 docker-compose 项目,并使用新值重新创建数据库容器。
为什么我没有从命令行调用 docker-compose
可以在命令行上使用类似 docker-compose down
的命令来执行类似的拆卸,但我发现命令行更复杂,因为它包含所有不同的 yml
文件 Visual Studio需要。例如,从 Visual Studio 工具调用的 up
是:
docker-compose -f "C:\Projects\v4\docker-compose.yml" -f "C:\Projects\v4\docker-compose.override.yml" -f "C:\Projects\v4\docker-compose.vs.debug.yml" -p dockercompose320715364 up -d
这不如手动操作直观。如果有人知道更好的方法,我洗耳恭听!
首先,容器工具1.0(以前称为Docker工具)内置于VS 2017中。您不需要安装0.41。事实上,0.41 仅支持 VS 2015。请不要在 VS 2017 上安装 0.41,即使可以。
Visual Studio Docker Tools how to force a container rebuild from scratch
运行 'clean' 对抗 Visual Studio 中的 docker-compose.dcproj 将为您做 docker-compose down。如果你想重建图像,切换到 'Release' 配置和 运行 'rebuild' 反对 docker-compose.dcproj.