postgresql - Docker:使用参数制作自定义 docker 镜像
问题描述
我正在尝试创建 alpine postgreSql docker 映像来学习创建 docker 映像,所以我创建了 dockerfile:
FROM alpine:latest
MAINTAINER groot
ENV LANG en_US.utf8
ENV DBNAME hoge_db
ENV USERNAME name
RUN apk update && apk upgrade && \
apk add --no-cache postgresql postgresql-contrib openrc && \
/etc/init.d/postgresql start && rc-update add postgresql && \
/etc/init.d/postgresql start && \
psql -U postgres -c "CREATE DATABASE $DBNAME WITH ENCODING 'UTF8' OWNER=$USERNAME;"
VOLUME /var/lib/postgresql/data
ENTRYPOINT ["psql", "-U", "postgres"]
EXPOSE 5432
在创建 postgre 数据库命令时,我想要用户提供的数据库名称和用户名,所以我添加ENV DBNAME hoge_db and ENV USERNAME name
了对吗?创建容器时,用户如何用自己的数据库名称和用户替换这个变量?
解决方案
构建参数可用于为映像提供构建时间值。
FROM alpine:latest
MAINTAINER groot
ENV LANG en_US.utf8
ARG DBNAME=hoge_db
ENV DBNAME ${DBNAME}
ARG USERNAME=name
ENV USERNAME ${USERNAME}
RUN apk update && apk upgrade && \
apk add --no-cache postgresql postgresql-contrib openrc && \
/etc/init.d/postgresql start && rc-update add postgresql && \
/etc/init.d/postgresql start && \
psql -U postgres -c "CREATE DATABASE $DBNAME WITH ENCODING 'UTF8' OWNER=$USERNAME;"
VOLUME /var/lib/postgresql/data
ENTRYPOINT ["psql", "-U", "postgres"]
EXPOSE 5432
然后覆盖必要的参数:
docker build --build-arg DBNAME=testdb --builg-arg USERNAME=root .
推荐阅读
- azure - 以编程方式停止 azure 函数
- visual-studio-code - VS Code:保存时删除换行符
- multithreading - OpenMP 和 shared_ptr
- javascript - 如何使用 React 让 li 元素一个一个地转换不透明度?
- python - 如果第一列匹配,则提取具有第 11 列值的行位于第二个文件的第 2 和第 3 之间
- python - 在 PyMC3 中运行多变量有序 logit
- r - 多个输入文件名作为R中的输出文件名
- javascript - 如何获取 Node.js 响应标头和状态码?
- java - 无法解决 IntelliJ 上关于项目语言级别的 -source 错误
- java - 当以前调用它们时,如何在 main 中获得不同的方法以相互交互?