最近开始使用Docker,我正在设置一个新项目。我有一个用于Node web应用程序的Dockerfile,用于运行用于开发的npm脚本,该脚本通过实时重新加载和一些其他过程(如linting等)运行webpack。
我正在为我的生产部署进行设置,这看起来会有所不同。
处理这些差异的推荐方法是什么?两个Dockerfiles?
答案 0 :(得分:1)
你可能会感到惊讶,但三个Dockerfiles看起来更好!
让我向您展示php项目的示例:
我们为项目创建基本图像。
Dockerfile.base
看起来像
# Set the base image
FROM php:5.6-apache
# install php dependencies
RUN apt-get update && apt-get install -y \
php5-pgsql \
postgresql-client \
php5-mongo \
libxml2-dev \
php-soap \
libpq-dev \
libmcrypt-dev \
php-pear \
&& docker-php-ext-install pdo \
&& docker-php-ext-install pgsql \
&& docker-php-ext-install pdo_pgsql \
&& docker-php-ext-install soap \
&& docker-php-ext-install pcntl \
&& docker-php-ext-install mcrypt
# preconfiguring apache
RUN a2enmod rewrite && a2enmod headers && a2enmod proxy && a2enmod proxy_http
RUN echo "export DISPLAY=':0'" >> /etc/apache2/envvars
VOLUME /var/log/apache2
EXPOSE 80
# configure envarionments
RUN echo "date.timezone=Europe/Moscow" > $PHP_INI_DIR/conf.d/date_timezone.ini
...settings env, configuring apache, etc...
,图片将命名为my_company/php5.6:base
在制作中我希望容器中包含源代码,然后我的Dockerfile.prod
将如下所示:
# Set the base image
FROM my_company/php5.6:base
# begin instalation
# copy src
ADD . /src
在开发环境中,我希望能够在容器外编辑源代码,那么我的Dockerfile.dev
将如下所示:
# Set the base image
FROM my_company/php5.6:base
RUN docker-php-ext-install xdebug
VOLUME /src
答案 1 :(得分:1)
我认为你应该"玩"使用ARG
和ENV
https://docs.docker.com/engine/reference/builder/#/arg
https://docs.docker.com/engine/reference/builder/#env
示例:
Dockerfile:
FROM node:7.1
ARG NODE_ENV
ENV NODE_ENV=${NODE_ENV:-production}
COPY package.json .
RUN npm install
COPY . .
CMD npm start # the start script can handle the NODE_ENV variable to run a special command
bash for development:
docker build --tag myimage:development --build-arg "NODE_ENV=development" .
docker run myimage:development
bash for production:
docker build --tag myimage:production --build-arg "NODE_ENV=production" .
# or
docker build --tag myimage:production .
docker run myimage:production
答案 2 :(得分:0)
调查" 12-factor app"宣言适合你。如果是,那么Docker为这些应用程序提供了非常好的方法:
一些谷歌搜索会给你一些关于如何使用Docker的12因素应用程序的文章。我将仅为搜索页面提供one link。