标签: docker-multi-stage-build

Docker 多阶段构建不在阶段之间复制

我正在尝试创建一个多阶段构建,其中第一阶段为主题安装纱线,第二阶段为 Drupal 设置 PHP 环境。

当我查看输出时,看起来 yarn install 正在运行,但COPY底部附近的命令没有将其复制到 PHP 映像。如果我是对的,那么应该在我的本地机器上创建 node_modules 目录吗?

docker-compose.yml:

version: '3.7'
services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./:/var/www/html:cached
    env_file:
      - ./local-development.env
    ports:
      - "8888:80"
  db:
    image: mysql:5.7
    env_file:
      - ./local-development.env
    ports:
      - "3306:3306"
Run Code Online (Sandbox Code Playgroud)

Dockerfile:

FROM node:latest as yarn-install
WORKDIR /app
COPY ./web/themes/material_admin_mine ./
RUN yarn install --verbose --force;

# from https://www.drupal.org/docs/8/system-requirements/drupal-8-php-requirements
FROM php:7.2-apache

# Install & setup Xdebug
RUN yes | pecl install xdebug \
&& echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name …
Run Code Online (Sandbox Code Playgroud)

docker dockerfile docker-compose docker-multi-stage-build

2
推荐指数
1
解决办法
1884
查看次数

python和nodejs在同一个容器中的多阶段构建

我需要有两个接入npmpipenv在同一容器中。我认为实现这一目标的最佳方法是多阶段构建。

如果我做这样的事情:

FROM python:3.7
COPY Pipfile /app/Pipfile
RUN pip install pipenv

FROM node:8
npm install
Run Code Online (Sandbox Code Playgroud)

如何确保pipenv二进制文件不会被丢弃?我需要从前一阶段复制哪些文件才能在最终图像中使用 pipenv?

docker docker-multi-stage-build

2
推荐指数
1
解决办法
1521
查看次数

Docker multi-stage build for flask application

I want to dockerize flask application which has lots of dependencies. My goal is to reduce the size of the final docker image.

I tried multi-stage build but it is not reducing the size of final docker image.

Below is my Dockerfile

FROM python:3.6-slim-buster as base

RUN apt-get update && apt-get install --no-install-recommends --no-upgrade -y \
    libglib2.0-0 libxext6 libsm6 libxrender1 libfontconfig1 && rm -rf /var/lib/apt/lists/*


WORKDIR /wheels

COPY requirements.txt /wheels

RUN pip install -U pip \
   && pip wheel -r …
Run Code Online (Sandbox Code Playgroud)

python docker docker-multi-stage-build

2
推荐指数
1
解决办法
5178
查看次数

如果我们在 dockerfile 中使用 CMD,Docker 多阶段构建会失败

Dockerfile:

FROM maven:3.6.3-openjdk-8 as builder
# Set the working directory.
WORKDIR /usr/src/mymaven
COPY ./ /usr/src/mymaven
CMD [ "mvn" , "clean" , "install" ]

FROM openjdk:8
COPY --from=builder /usr/src/mymaven/target /usr/src/myapp
WORKDIR /usr/src/myapp
CMD ["java", "-jar" , "Backend-0.0.1-SNAPSHOT.jar"]
Run Code Online (Sandbox Code Playgroud)

上面的 docker build 失败并显示错误:目标文件夹不存在
下面的 dockerfile 完美运行:

FROM maven:3.6.3-openjdk-8 as builder
# Set the working directory.
WORKDIR /usr/src/mymaven
COPY ./ /usr/src/mymaven
RUN [ "mvn" , "clean" , "install" ]

FROM openjdk:8
COPY --from=builder /usr/src/mymaven/target /usr/src/myapp
WORKDIR /usr/src/myapp
CMD ["java", "-jar" , "Backend-0.0.1-SNAPSHOT.jar"]
Run Code Online (Sandbox Code Playgroud)

只需将 CMD …

java maven docker dockerfile docker-multi-stage-build

2
推荐指数
1
解决办法
351
查看次数

Dockerfile 未执行第二阶段

我从 Docker 那里得到了一些奇怪的行为,我找不到任何地方提到它。它似乎是随机跳过阶段,即使是我简单地从网上论坛复制粘贴的多阶段 Dockerfile。

我的 dockerfile 是:

FROM alpine as base
RUN echo "1"

# SKIPPED
FROM base as mid
RUN echo "2"

FROM base as final
RUN echo "3"
Run Code Online (Sandbox Code Playgroud)

输出:

docker build -t test .\ --no-cache
[+] Building 2.0s (7/7) FINISHED
 => [internal] load .dockerignore                                                                                  0.0s
 => => transferring context: 34B                                                                                   0.0s
 => [internal] load build definition from Dockerfile                                                               0.0s
 => => transferring dockerfile: 143B                                                                               0.0s
 => [internal] load metadata for docker.io/library/alpine:latest                                                   1.3s
 => CACHED [base 1/2] FROM docker.io/library/alpine@sha256:... …
Run Code Online (Sandbox Code Playgroud)

linux ubuntu docker dockerfile docker-multi-stage-build

2
推荐指数
1
解决办法
355
查看次数

Docker 多阶段

是否可以将多阶段 Dockerfile 的一个阶段复制到另一个阶段?

出于各种商业原因,我被指示使用多阶段 Dockerfile,但我真正需要做的是将应用程序服务器映像和网络服务器映像结合起来。这在 docker-compose 中很好,因为您可以参考每个部分 - 但我不确定这是否可以通过 GCP 和 Kubernetes 完成。

我的 Dockerfile 代码如下。

FROM php:7.1-fpm as appserver

RUN apt-get update && apt-get install -y libpq-dev \
    && docker-php-ext-install pdo pdo_pgsql pgsql
RUN apt-get update && \
     apt-get install -y \
         zlib1g-dev \
         && docker-php-ext-install zip

COPY ./app /var/www/html

FROM nginx:stable-alpine as webserver
COPY ./app /var/www/html/
COPY vhost-prod.conf /etc/nginx/conf.d/default.conf
Run Code Online (Sandbox Code Playgroud)

kubernetes dockerfile docker-multi-stage-build

1
推荐指数
1
解决办法
77
查看次数

无法在 docker 多阶段构建中使用 ARG

我正在尝试在 docker 多阶段构建过程中使用 ARGS。

我的 Dockerfile 如下所示:

ARG DOCKER_REGISTRY=example.com/docker
FROM $DOCKER_REGISTRY/openjdk8:latest AS installer 
ARG APP_VERSION=6.3.0.78 
ARG DOCKER_REGISTRY 
ARG REPO_TYPE=snapshot 
ARG DB_VERSION=12.2.0.11-ee
ARG DB_TYPE=oracle ARG PASSWORD

ARG DOCKER_REGISTRY 
ARG DB_VERSION 
ARG DB_TYPE
FROM ${DOCKER_REGISTRY}/${DB_TYPE}/database:${DB_VERSION} 
ARG DB_VERSION 
ARG DB_TYPE
ARG PASSWORD
RUN mkdir -p /opt/oracle/script
COPY --from=installer /opt/installer/target_script/* /opt/oracle/scripts/
Run Code Online (Sandbox Code Playgroud)

每当它获取 docker 文件中的第二个 FROM 步骤时,它就会失败并出现错误invalid reference format,因为它无法识别获取图像的语法。

我的假设是它不知道如何处理ARG多阶段 docker 构建。

docker dockerfile docker-multi-stage-build

1
推荐指数
1
解决办法
1411
查看次数