多个DockerFile
我正在尝试使用docker,并希望创建一个Ubuntu基础,其中包含三个容器,它们可以执行以下操作: 容器:安装Wildfly 容器:安装MySQL 集装箱:其他所需包装 这是否意味着,我必须在三个不同的目录中创建三个DockerFile,每个目录都包含以下顶行多个DockerFile,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我正在尝试使用docker,并希望创建一个Ubuntu基础,其中包含三个容器,它们可以执行以下操作: 容器:安装Wildfly 容器:安装MySQL 集装箱:其他所需包装 这是否意味着,我必须在三个不同的目录中创建三个DockerFile,每个目录都包含以下顶行 FROM ubuntu:18.04 您可以按照另一个答案@Krumelur的答案中的建议,在build命令中创建多个Dockerfile并精确指定它们的名称,但是如果中心中这些依赖项的基本映像与您的neeed匹配,您也可以通过直接从d
FROM ubuntu:18.04
您可以按照另一个答案@Krumelur的答案中的建议,在build命令中创建多个Dockerfile并精确指定它们的名称,但是如果中心中这些依赖项的基本映像与您的neeed匹配,您也可以通过直接从docker.io调用映像来使用docker compose 这样,您根本不需要任何Dockerfile 应该是这样的:
version: '3.3'
services:
wildfly:
#this image will be automatically downloaded from your registry (by default Docker hub)
image: jboss/wildfly
ports:
- '8080:8080'
- '9990:9990'
volumes:
- 'wildfly_data:/wildfly_data'
environment:
- WILDFLY_PASSWORD=password
mysql:
#this image will be automatically downloaded from your registry (by default Docker hub)
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: 'db'
# So you don't have to use root, but you can if you like
MYSQL_USER: 'user'
# You can use whatever password you like
MYSQL_PASSWORD: 'password'
# Password for root access
MYSQL_ROOT_PASSWORD: 'password'
ports:
# <Port exposed> : < MySQL Port running inside container>
- '3306:3306'
expose:
# Opens port 3306 on the container
- '3306'
# Where our data will be persisted
volumes:
- my-db:/var/lib/mysql
otherService :
image: busybox
volumes:
my-db:
wildfly_data:
然后您只需调用命令:docker compose up您可以创建许多docker文件,并按照另一个答案@Krumelur的答案中的建议在build命令中精确命名,但如果中心中这些依赖项的基础映像与您的need匹配,您也可以通过直接从docker.io调用映像来使用docker compose 这样,您根本不需要任何Dockerfile 应该是这样的:
version: '3.3'
services:
wildfly:
#this image will be automatically downloaded from your registry (by default Docker hub)
image: jboss/wildfly
ports:
- '8080:8080'
- '9990:9990'
volumes:
- 'wildfly_data:/wildfly_data'
environment:
- WILDFLY_PASSWORD=password
mysql:
#this image will be automatically downloaded from your registry (by default Docker hub)
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: 'db'
# So you don't have to use root, but you can if you like
MYSQL_USER: 'user'
# You can use whatever password you like
MYSQL_PASSWORD: 'password'
# Password for root access
MYSQL_ROOT_PASSWORD: 'password'
ports:
# <Port exposed> : < MySQL Port running inside container>
- '3306:3306'
expose:
# Opens port 3306 on the container
- '3306'
# Where our data will be persisted
volumes:
- my-db:/var/lib/mysql
otherService :
image: busybox
volumes:
my-db:
wildfly_data:
然后您只需要调用命令:docker compose up如果需要,您可以在同一目录中有多个docker文件。要指定要使用的Dockerfile,请使用-f参数,例如
docker build -f wildfly.Dockerfile ./wildfly
docker build -f mysql.Dockerfile ./mysql
docker build -f other.Dockerfile ./other
在Compose中,这些参数对应于dockerfile和context属性
并非总是需要编写docker文件,例如,对于数据库服务,您可以简单地从docker hub中提取图像并直接使用它。
像下面这样
db:
image: mysql
db:
image: mysql
当然,您可以让他们共享相同的上下文,例如
docker build -f wildfly.Dockerfile .
docker build -f mysql.Dockerfile .
docker build -f other.Dockerfile .
请注意,上下文已完全发送到daemon.dockrignore,因此如果存在大量冗余数据,这可能会导致生成时间更长
如果DockerFile之间有大量的重用,您甚至可以将它们全部放在一个文件中,例如
FROM ubuntu:20.04 as base
...
FROM base AS wildfly
(install wildfly)
FROM base AS mysql
(install mysql)
...
然后你可以用例如
docker build --target wildfly .
在Compose中,这些参数对应于目标和上下文属性
这称为多阶段构建,并不总是一个好主意,但有时有助于缓解Docker对include的缺乏支持。如果需要,可以在同一目录中有多个Dockerfile。要指定要使用的Dockerfile,请使用-f参数,例如
docker build -f wildfly.Dockerfile ./wildfly
docker build -f mysql.Dockerfile ./mysql
docker build -f other.Dockerfile ./other
在Compose中,这些参数对应于dockerfile和context属性
并非总是需要编写docker文件,例如,对于数据库服务,您可以简单地从docker hub中提取图像并直接使用它。
像下面这样
db:
image: mysql
db:
image: mysql
当然,您可以让他们共享相同的上下文,例如
docker build -f wildfly.Dockerfile .
docker build -f mysql.Dockerfile .
docker build -f other.Dockerfile .
请注意,上下文已完全发送到daemon.dockrignore,因此如果存在大量冗余数据,这可能会导致生成时间更长
如果DockerFile之间有大量的重用,您甚至可以将它们全部放在一个文件中,例如
FROM ubuntu:20.04 as base
...
FROM base AS wildfly
(install wildfly)
FROM base AS mysql
(install mysql)
...
然后你可以用例如
docker build --target wildfly .
在Compose中,这些参数对应于目标和上下文属性
这称为多阶段构建,并不总是一个好主意,但有时有助于缓解Docker对include的缺乏支持。使用Docker compose协调容器 1-创建docker-compose.yml 2-内部定义:
version: '3'
services:
wildly:
build:
context: .
dockerfile: Dockerfile_Wildfly
mysql:
build:
context: .
dockerfile: Dockerfile_Mysql
anotherpackages:
build:
context: .
dockerfile: Dockerfile_AnotherPackages
并非总是需要编写docker文件,例如,对于数据库服务,您可以简单地从docker hub中提取图像并直接使用它。
像下面这样
db:
image: mysql
db:
image: mysql
3-创建文件并定义您喜欢的命令:
Dockerfile_Wildfly
FROM wildfly
Dockerfile_Mysql
FROM mariadb
Dockerfile_AnotherPackages
FROM node
FROM nginx
用docker compose编排容器 1-创建docker-compose.yml 2-内部定义:
version: '3'
services:
wildly:
build:
context: .
dockerfile: Dockerfile_Wildfly
mysql:
build:
context: .
dockerfile: Dockerfile_Mysql
anotherpackages:
build:
context: .
dockerfile: Dockerfile_AnotherPackages
并非总是需要编写docker文件,例如,对于数据库服务,您可以简单地从docker hub中提取图像并直接使用它。
像下面这样
db:
image: mysql
db:
image: mysql
3-创建文件并定义您喜欢的命令:
Dockerfile_Wildfly
FROM wildfly
Dockerfile_Mysql
FROM mariadb
Dockerfile_AnotherPackages
FROM node
FROM nginx
我认为OP是根据他自己的形象建立起来的Dockerfiles@Krumelur例如他问这是否意味着,我必须在三个不同的目录中创建三个DockerFile,每个目录都包含以下顶行?…我的回答是:不,这并不意味着你必须创建三个DockerFile…如果你不想修改它们,你可以直接从中心调用基本映像。公平点,我不是这样读的,事实上@Krumelur是对的,我想从头开始创建DockerFile,而不是从中心加载它们。非常感谢你的回答。我认为OP是根据Dockerfiles@Krumelur例如他问这是否意味着,我必须在三个不同的目录中创建三个DockerFile,每个目录都包含以下顶行?…我的回答是:不,这并不意味着您必须创建三个DockerFile…如果不需要,您可以直接从中心调用基本映像
我想修改它们。公平地说,我没有那样读,但它也有道理。实际上@Krumelur是对的,我想从头开始创建DockerFile,而不是从中心加载它们。非常感谢你的回答。我也遇到过同样的问题。所以我同意这个解决方案。非常感谢投票。我很高兴我也遇到了同样的问题。所以我同意这个解决方案。非常感谢投票。我很高兴事情解决了