Docker swarm 相同图像不同版本
Docker swarm same image different build
我正在使用 Docker 版本 19.03.3 和 docker 群,以及 docker 注册表。
我想知道如何使用相同的图像但具有不同的构建。
我的 swarm.yml :
version: '3'
services:
db:
image: 127.0.0.1:5000/postgres:11.5
build: docker-compose.d/postgres
environment:
- PG_MAX_WAL_SENDERS=8
- PG_WAL_KEEP_SEGMENTS=8
- PGDATA=/var/lib/postgresql/data/pgdata
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
deploy:
placement:
constraints:
- node.role == manager
db-slave:
build: docker-compose.d/postgres/slave
image: 127.0.0.1:5000/postgres:11.5
environment:
- PGDATA=/var/lib/postgresql/data/pgdata
- REPLICATE_FROM=db
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
deploy:
placement:
constraints:
- node.role == manager
depends_on:
- db
docker 图片:
127.0.0.1:5000/postgres 11.5 839a428f8eac 4 days ago 848MB
127.0.0.1:5000/postgres <none> e5636a8fc5f0 4 days ago 848MB
127.0.0.1:5000/postgres <none> 6c1932b5707c 4 days ago 848MB
postgres 11.5 5f1485c70c9a 5 days ago 293MB
registry <none> f32a97de94e1 7 months ago 25.8MB
docker 文件数据库:
FROM postgres:11.5
COPY ./cluster/ /docker-entrypoint-initdb.d/
RUN apt-get update -y
RUN apt-get install postgis -y
docker 文件 db-slave:
FROM postgres:11.5
RUN apt-get update -y
RUN apt-get install postgis iputils-ping -y
COPY setup-replication.sh /docker-entrypoint-initdb.d/
COPY docker-entrypoint.sh /docker-entrypoint.sh
COPY postgres.sql /docker-entrypoint-initdb.d/
RUN chmod +x /docker-entrypoint-initdb.d/setup-replication.sh /docker-entrypoint.sh
他们都从注册表镜像 postgres:11.5,这就成了问题
因为我确实想在两者上都使用 postgres 11.5,但是要使用不同的构建,因为我需要对它们执行不同的构建过程。一个正在复制一个文件,另一个不是。(例如)
我该怎么做?
注册表将两个构建保存为一个 postgres:11.5
两者具有相同的名称,因为您使用的是相同的 image: 127.0.0.1:5000/postgres:11.5
。
image
在此上下文中是结果图像的名称,而不是基础图像的名称。
所以,基本上将它们更改为:
db:
image: 127.0.0.1:5000/db <--------
build: docker-compose.d/postgres
db-slave:
build: docker-compose.d/postgres/slave
image: 127.0.0.1:5000/db-slave <--------
另请注意,这适用于 docker-compose。 Docker swarm 无法构建容器,只能部署已经预构建的镜像。
我正在使用 Docker 版本 19.03.3 和 docker 群,以及 docker 注册表。 我想知道如何使用相同的图像但具有不同的构建。
我的 swarm.yml :
version: '3'
services:
db:
image: 127.0.0.1:5000/postgres:11.5
build: docker-compose.d/postgres
environment:
- PG_MAX_WAL_SENDERS=8
- PG_WAL_KEEP_SEGMENTS=8
- PGDATA=/var/lib/postgresql/data/pgdata
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
deploy:
placement:
constraints:
- node.role == manager
db-slave:
build: docker-compose.d/postgres/slave
image: 127.0.0.1:5000/postgres:11.5
environment:
- PGDATA=/var/lib/postgresql/data/pgdata
- REPLICATE_FROM=db
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
deploy:
placement:
constraints:
- node.role == manager
depends_on:
- db
docker 图片:
127.0.0.1:5000/postgres 11.5 839a428f8eac 4 days ago 848MB
127.0.0.1:5000/postgres <none> e5636a8fc5f0 4 days ago 848MB
127.0.0.1:5000/postgres <none> 6c1932b5707c 4 days ago 848MB
postgres 11.5 5f1485c70c9a 5 days ago 293MB
registry <none> f32a97de94e1 7 months ago 25.8MB
docker 文件数据库:
FROM postgres:11.5
COPY ./cluster/ /docker-entrypoint-initdb.d/
RUN apt-get update -y
RUN apt-get install postgis -y
docker 文件 db-slave:
FROM postgres:11.5
RUN apt-get update -y
RUN apt-get install postgis iputils-ping -y
COPY setup-replication.sh /docker-entrypoint-initdb.d/
COPY docker-entrypoint.sh /docker-entrypoint.sh
COPY postgres.sql /docker-entrypoint-initdb.d/
RUN chmod +x /docker-entrypoint-initdb.d/setup-replication.sh /docker-entrypoint.sh
他们都从注册表镜像 postgres:11.5,这就成了问题 因为我确实想在两者上都使用 postgres 11.5,但是要使用不同的构建,因为我需要对它们执行不同的构建过程。一个正在复制一个文件,另一个不是。(例如) 我该怎么做?
注册表将两个构建保存为一个 postgres:11.5
两者具有相同的名称,因为您使用的是相同的 image: 127.0.0.1:5000/postgres:11.5
。
image
在此上下文中是结果图像的名称,而不是基础图像的名称。
所以,基本上将它们更改为:
db:
image: 127.0.0.1:5000/db <--------
build: docker-compose.d/postgres
db-slave:
build: docker-compose.d/postgres/slave
image: 127.0.0.1:5000/db-slave <--------
另请注意,这适用于 docker-compose。 Docker swarm 无法构建容器,只能部署已经预构建的镜像。