gpt4 book ai didi

mysql - Docker:构建依赖于另一个要运行的图像的图像

转载 作者:行者123 更新时间:2023-11-30 21:45:31 27 4
gpt4 key购买 nike

我的目标是构建一个包含 MySQL 的 Docker 镜像,其中预填充了由 Alembic 迁移生成的表和数据。不幸的是,如果没有事件的 MySQL 实例,Alembic 无法生成必要的数据,也它可以独立创建一个 SQL 转储为 loaded by MySQL on first run .

我尝试使用 multi-stage builds为此同时使用 mysqlpython 容器,但是一旦 Python 阶段开始,MySQL 守护进程就会再次关闭。

# start MySQL daemon
FROM mysql:5.6
RUN docker-entrypoint.sh

# install and run Alembic
FROM python:2.7-alpine
# [install Alembic]
COPY ./alembic-migrations /alembic-migrations
# [run migrations]

我对这个特定的解决方案并不感兴趣,但它似乎是最简单的选择。有没有办法做我正在尝试的事情?我应该放弃在 MySQL 容器中安装 Python 和 Alembic 吗?

最佳答案

它可能会让一些 Docker 布道者的眼睛流血,但这就是我能够实现我正在寻找的行为的方式。它实际上比我预期的更简单并且运行速度更快。

FROM python:2.7-alpine as python
FROM mysql:5.6

# set up a functional chroot of the Python image at /python
COPY --from=python / /python
RUN set -ex; \
cp /etc/resolv.conf /python/etc/resolv.conf; \
mknod -m 0644 /python/dev/random c 1 8; \
mknod -m 0644 /python/dev/urandom c 1 9;

# install software depedencies in chroot jail
RUN set -ex; \
chroot /python apk --no-cache --virtual add [some dependencies]

# install Python libraries
COPY ./requirements.txt /python/tmp/requirements.txt
RUN chroot /python pip install -r /tmp/requirements.txt;

# apply Alembic migrations and remove the Python chroot jail
COPY ./usr/local/bin/build.sh /usr/local/bin/
COPY ./alembic /python/alembic

RUN build.sh && rm -rf /python;

ENTRYPOINT ["docker-entrypoint.sh", "--datadir=/var/lib/mysql-persist"]

EXPOSE 3306
CMD ["mysqld"]

build.sh 脚本只是从 MySQL 容器中派生出 docker-entrypoint.sh 脚本,然后在 Python chroot 中调用特定于 Alembic 的代码。

#!/bin/sh
docker-entrypoint.sh --datadir=/var/lib/mysql-persist 2>/dev/null &

chroot /python build.sh

请注意,我正在设置自定义数据目录 (/var/lib/mysql-persist),因为上游 mysql 容器定义了 VOLUME/var/lib/mysql ,我无法覆盖。

结果是一个包含 MySQL 的构建镜像,完整的数据库,但不包含任何 Python 容器或 Alembic 脚本的痕迹。它现在可以通过注册表分发并由 docker-compose 获取,避免了所有用户独立执行 Alembic 迁移的需要。

关于mysql - Docker:构建依赖于另一个要运行的图像的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49680148/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com