docker - 我在 Docker 中有两个 MariaDb 映像,但是一个配置
问题描述
我使用 docker-compose 构建配置:
db:
build:
context: ./context
dockerfile: /path/Dockerfile
image: mariadb:dev
在 Dockerfile 中:
FROM mariadb:latest
MAINTAINER Billy
COPY ./ /var/lib/mysql
启动 docker-compose up 后,我有:
REPOSITORY TAG
mariadb dev
mariadb latest
为什么我有一个图像 mariadb:latest 而不仅仅是 mariadb:dev ?
谢谢你的帮助(我是码头工人的菜鸟,对不起我的英语)
解决方案
db:
build:
context: ./context
dockerfile: /path/Dockerfile
image: mariadb:dev
这告诉 Docker 你想要构建一个镜像并调用它mariadb
并将其标记为dev
(=mariadb:dev)。
您的 Dockerfile 基于mariadb
带有标签latest
( FROM mariadb:latest
) 的图像。
所以 Docker 首先必须mariadb:latest
从 docker hub 拉取。在该步骤之后,此图像位于您的本地注册表中。构建映像 ( mariadb:dev
) 后,此映像也在您的本地注册表中。
这就是为什么您在注册表中同时拥有这两者的原因。mariadb:latest
是您的图像的基础图像。因此,Docker 必须在 Dockerfile 的第一步中提取该映像。所以它在您的注册表中。
该行为记录在官方Docker 文档中
如果您指定图像和构建,则 Compose 使用 webapp 和图像中指定的可选标签命名构建的图像:
build: ./dir
image: webapp:tag
这会产生一个名为 webapp 和标记标签的图像,从 ./dir 构建。
我认为您真正想要的是使用mariadb:latest
docker hub 中的图像并将修改后的文件包含为卷,而不是构建新图像。
这看起来像您的以下内容docker-compose.yml
(请参阅maria db 图像的文档,了解如何详细使用它):
db:
image: mariadb:latest
volumes:
- "<relativePath>:/var/lib/mysql"
environment:
- MYSQL_ROOT_PASSWORD=password
where<relativePath>
是从 docker-compose.yml 所在位置/执行docker-compose up
. 例如,您可以创建一个子文件夹“mysql”,其中包含要安装到/var/lib/mysql
容器内的所有文件,然后使用- "mysql:/var/lib/mysql"
. (通过使用.
,您会将docker-compose.yml
同一文件夹/var/lib/mysql
内的所有内容安装到容器内)
推荐阅读
- maven - 在我的项目中添加了axis2作为maven依赖项
- java - 在 Eclipse 中输入 stream() 或 map() 而不使用箭头键
- python - 在 python ImportError 上导入 librosa 的问题:无法导入名称“iter_entry_points”
- flutter - chart_flutter 包中的图中的 domainFn 和 measureFn 是什么?
- java - Java de parser 多字符作为引号或支持字符串分隔符
- python - 如何检查插入的输入是否与 .env 文件中的变量匹配?
- java - 从 Android 应用程序打印纸张
- php - 未定义索引:expires_in Google Login Api
- jmeter - 添加 Jmeter APDEX OK 和 KO 列
- arrays - SWIFT如何将super.array的嵌套结构元素复制到数组变量中