首页 > 解决方案 > 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了对吗?创建容器时,用户如何用自己的数据库名称和用户替换这个变量?

标签: postgresqldockerdockerfile

解决方案


构建参数可用于为映像提供构建时间值。

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 .

推荐阅读