docker image ls --format "{{.Repository}} {{.Tag}}" | while read image tag; do
echo "image: $image"
echo "tag: $tag"
done
images=$(docker image ls --format "{{.Repository}} {{.Tag}}")
echo "$images" | while read image tag; do
echo "image: $image"
echo "tag: $tag"
done
$ ls -l /etc/nginx/sites-enabled/default
lrwxrwxrwx 1 root root 34 ott 24 10:54 /etc/nginx/sites-enabled/default -> /etc/nginx/sites-available/default
# Arguments.
ARG NGINX_VERSION
ARG APP_CODE_PATH_CONTAINER
# Install nginx.
FROM nginx:${NGINX_VERSION}-alpine
# Load scripts.
COPY scripts/* /tmp/scripts/
RUN chmod -R 777 /tmp/scripts/
# объявляем ещё раз. Как можно ближе к реальному месту использования что бы не испортить кеширование директив выше.
ARG APP_CODE_PATH_CONTAINER
# Modify configuration.
RUN /tmp/scripts/modify_config.sh /etc/nginx/conf.d/default.conf "__NGINX_ROOT" ${APP_CODE_PATH_CONTAINER};
...
FROM debian:bullseye
ENV RED='\033[0;31m' COLOR_END='\033[0m'
# успешно выводит сообщение в stdout красным цветом
RUN echo "${RED}message${COLOR_END}"
# тоже успешно выводит сообщение
RUN ["/bin/sh", "-c", "echo ${RED}message${COLOR_END}"]
$ docker build --no-cache .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM debian:bullseye
---> dd8bae8d259f
Step 2/4 : ENV RED='\033[0;31m' COLOR_END='\033[0m'
---> Running in fd8a21d2af82
Removing intermediate container fd8a21d2af82
---> 19553478f260
Step 3/4 : RUN echo "${RED}message${COLOR_END}"
---> Running in 520badc402cd
message
Removing intermediate container 520badc402cd
---> b2f788a04581
Step 4/4 : RUN ["/bin/sh", "-c", "echo ${RED}message${COLOR_END}"]
---> Running in 52086dae131a
message
Removing intermediate container 52086dae131a
---> 0034957876f3
Successfully built 0034957876f3
CMD ["/usr/src/app/src/start.sh"]
The EXPOSE
instruction does not actually publish the port. It functions as a type of documentation between the person who builds the image and the person who runs the container, about which ports are intended to be published.
FROM node:lts-alpine as build
WORKDIR /app
# копируем исходный код
COPY ./ ./
# устанавливаем зависимости
RUN npm ci
# Компилируем приложение
RUN npm run build
# оставляем только production зависимости
RUN npm ci --prod
# опционально удаляем из исходников всякие тесты, ts-файлы и т.п.
FROM node:lts-alpine as app
WORKDIR /app
# копируем сначала node_modules
COPY --from=build /app/node_modules ./node_modules
# а потом всё остальное
COPY --from=build /app ./
# и запускаем
CMD [ "node", "/app/app.js" ]
COPY --from=build /app/node_modules ./node_modules
будет взят из кэша. А это и есть все наши 400 мегабайт зависимостей.$ docker build .
Sending build context to Docker daemon 6.656kB
Step 1/11 : FROM node:lts-alpine as build
---> 1c342643aa5c
Step 2/11 : WORKDIR /app
---> Using cache
---> 01d641ac9d8b
Step 3/11 : COPY ./ ./
---> 2a369bda0312
Step 4/11 : RUN npm ci
---> Running in 5becac2f9f07
added 2 packages in 1.914s
Removing intermediate container 5becac2f9f07
---> c010ba772a08
Step 5/11 : RUN npm run build
---> Running in de6fd7f872a5
> docker-node@1.2.3 build /app
> echo building app
building app
Removing intermediate container de6fd7f872a5
---> dc80bc125954
Step 6/11 : RUN npm ci --prod
---> Running in 825f86a54af5
npm WARN prepare removing existing node_modules/ before installation
added 1 packages in 0.079s
Removing intermediate container 825f86a54af5
---> a00a029b86dc
Step 7/11 : FROM node:lts-alpine as app
---> 1c342643aa5c
Step 8/11 : WORKDIR /app
---> Using cache
---> 01d641ac9d8b
Step 9/11 : COPY --from=build /app/node_modules ./node_modules
---> Using cache
---> 81d587ccf147
Step 10/11 : COPY --from=build /app ./
---> bb40061f06b6
Step 11/11 : CMD [ "node", "/app/app.js" ]
---> Running in e6b9e08d9d8f
Removing intermediate container e6b9e08d9d8f
---> eceb38619009
Successfully built eceb38619009
FROM ubuntu
ENV TZ=Europe/Moscow
RUN apt-get update && apt-get install -yy tzdata
RUN cp /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
$ docker build .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM ubuntu
---> d70eaf7277ea
Step 2/4 : ENV TZ=Europe/Moscow
---> Using cache
---> 24c7e693dacf
Step 3/4 : RUN apt-get update && apt-get install -yy tzdata
---> Using cache
---> 8d1bbd58900b
Step 4/4 : RUN cp /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
---> Using cache
---> b65965107725
Successfully built b65965107725
$ docker run b65965107725 date
Thu Oct 29 21:09:13 MSK 2020
$ date
Thu Oct 29 21:09:15 MSK 2020