Acredito que a base do meu mal-entendido foi realmente o contexto de execução do comando Docker COPY
versus o comando RUN
.
Achei que o comando RUN
estava em execução no mesmo contexto de execução que COPY
, que seria o Dockerfile ou o contexto declarado em my docker-compose.yml, porque COPY
estava neste contexto.
Esse não é o caso, basicamente, COPY
know ./
para o Dockerfile. RUN
, no entanto, não sabe sobre nada fora da imagem do Docker que está sendo construída.
Eu estava tentando RUN
um comando contra arquivos que eu não havia copiado na imagem do Docker que estava criando. Esta seção do meu Dockerfile foi o segredo para o sucesso:
WORKDIR /app
COPY . /app
RUN npm run build-$ENVIRONMENT
E aqui está o meu Dockerfile completo, graças ao ALex_hha para algumas das otimizações de sintaxe:
FROM centos:7
MAINTAINER Brian Ogden
# Not currently being used but may come in handy
ARG ENVIRONMENT
ENV NODE_VERSION 6.11.1
RUN yum -y update && \
yum clean all && \
yum -y install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm \
yum -y makecache && \
yum -y install nginx-1.12.0 wget
# Cleanup some default NGINX configuration files we don’t need
RUN rm /etc/nginx/conf.d/default.conf
#############################################
# NodeJs Install
#############################################
#Download NodeJs package
RUN wget -q -O - https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz \
| tar --strip-components=1 -xzf - -C /usr/local
#pipe tar is extracting the binary package into our system's local package hierarchy with the tar command.
#The archive is packaged within a versioned directory, which we can get rid of by passing the --strip-components 1 option.
#We will specify the target directory of our command with the -C command:
#This will install all of the components within the /usr/local branch
# https://stackoverflow.com/a/35774741/1258525
# use changes to package.json to force Docker not to use the cache
# when we change our application's nodejs dependencies:
COPY ./package.json /tmp/package.json
RUN cd /tmp && npm install
RUN mkdir /app && cp -a /tmp/node_modules /app/
WORKDIR /app
COPY . /app
RUN npm run build-$ENVIRONMENT
RUN cd /app && cp -a dist/* /usr/share/nginx/html
COPY ./docker/conf/frontend.conf /etc/nginx/conf.d/frontend.conf
COPY ./docker/conf/nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx"]