Visual Studio Docker Tools如何从头开始强制重build容器

我在Visual Studio 2017(工具版本0.41 )中使用docker-compose来构build两个图像,一个ASP.NET Core API容器和一个PostgreSQL容器。 我运行Docker-Compose项目,一切正常 – 我可以从Api容器访问数据库。

现在我想将PostgreSQL环境variablesPOSTGRES_USERPOSTGRES_PASSWORDPOSTGRES_DB更改为如下所示的新值:

泊坞窗,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 

不过,据我了解,图像已经被创build。 我想从数据库映像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简单地删除图像。 当我下一次build造时,docker工人会明白它没有这个形象,重新build立它?

首先,容器工具1.0(以前称为Docker工具)是在VS 2017中构build的。不需要安装0.41。 事实上,0.41只支持VS 2015,即使可以,也不要在VS 2017上安装0.41。

Visual Studio Docker Tools如何从头开始强制重build容器

在Visual Studio中对docker-compose.dcproj运行'clean'会为你做docker-compose。 如果你想重build图像,切换到“释放”configuration,并对docker-compose.dcproj运行“rebuild”。

一个帮助我理解容器图像与容器本身的想法是将容器图像视为二进制文件,将单个容器视为一个进程。

docker撰写文件的文档可能会有所帮助

无法通过Visual Studio 2017工具版本0.41来执行此操作。 但是,有一个命令行解决scheme。

要刷新PostgreSQL数据库环境variables,您需要删除数据库容器及其容量。 当Visual Studio下一个运行docker-compose项目时,它将通过新的“安装”PostGres和更新的环境variables来重新创build数据库容器及其关联的卷。 你会失去你的数据,所以先备份!

下面是两个容器的起点:一个用于ASP.NET Core容器( mcoapi ),一个用于数据库( mcodatabase )。 Mco是我们公司的首字母缩写。 \v4是我的Visual Studio解决scheme的根,但是这些命令可以从任何地方运行,因为我们没有使用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前两位数字作为简写。

 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 ,这将删除不再使用的卷。 如果我忘记取出一个容器,我很快就会知道。 给予警告。

 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更改环境variables。 我在下面改变的是environment:的内容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项目,并用新值重新创build数据库容器。

为什么我没有从命令行调用docker-compose?

可以在命令行上使用docker-compose down命令来执行类似的拆分操作,但是我发现命令行更为复杂,因为它包含了Visual Studio需要的所有不同的yml文件。 例如,从Visual Studio工具调用的是:

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

这比手动操作更不直观。 如果有人知道更好的方法,我都耳朵!