7
respostas

Multi FROM no Dockerfile

Olá pessoal, como consigo usar dois FROM no Dockerfile

estou tentando usar https://store.docker.com/community/images/jjanzic/docker-python3-opencv e https://store.docker.com/community/images/alessandroadamo/ubuntu-ds-python3 importando esses dois no mesmo Dockerfile mas nao ta indo, alguma sugestão?

valeu

7 respostas

Oi Rafael, até onde sei não é possível mesmo ter dois FROM, pois o FROM indica a imagem base a partir da qual você construirá sua própria imagem.

Exemplo: a partir da imagem do Ubuntu, você instalar o mysql e depois criar containers dela. (Já existe a própria imagem do MYSQL).

Normalmente o pessoal cria vários containers (ex: uma pra rodar a aplicação java, outro pro mysql...) e faz com que eles se comuniquem:

https://cursos.alura.com.br/course/docker-e-docker-compose/task/29413

Faz sentido?

Abraço!

por que nessa linha da resposta montando o compose nao consigo rodar import cv2 no notebook do outro container?

version: '3'
services:

    python3:
        image: alessandroadamo/ubuntu-ds-python3
        ports:
            - "80:8888"
        networks: 
            - production-network
        depends_on: 
            - "tesseract"
            - "opencv"

    tesseract:
        image: tesseractshadow/tesseract4re
        networks: 
            - production-network

    opencv:
        image: jjanzic/docker-python3-opencv
        networks: 
            - production-network

networks: 
    production-network:
        driver: bridge

Oi Rafael.

Só uma coisa antes. Eu errei sobre não poder ter dois FROM no mesmo Dockerfile. Perdão.

O Fernando Furtado me alertou sobre isso. Eu ainda não consegui parar pra estudar, mas se chama multistage-build.

--

Pra gente entender, qual sua necessidade?

Assim podemos tentar te ajudar de acordo com o que você precisa. :)

Abraço!

Olá Lucas,

o que preciso usar opencv e tesseract juntos. tentei montar um dockerfile com os dois mas nao deu certo. entende?

Oi Rafael,

manda o Dockerfile que você tentou montar?

Uma possivel solução q to pensando seria criar sua imagem instalando o opencv e o tesseract mesmo. só não sei se vai rolar usando os dois FROM para as imagens já existentes.

abraço!

montei esse dockerfile porem nao ta funcionando:

FROM ubuntu:16.04
MAINTAINER Alessandro Adamo "alessandro.adamo@gmail.com"
ENV REFRESHED_AT 2017-06-10

RUN apt-get -qq update && \
apt-get -y dist-upgrade
RUN apt-get install -y --no-install-recommends \
fonts-dejavu \
gfortran \
gcc 
RUN apt-get -y install python3 python3-pip
RUN apt-get -y install pandoc texlive texlive-latex-extra texlive-xetex
RUN apt-get autoclean

RUN pip3 install --upgrade pip

# Fundamentals
RUN pip3 install --upgrade jupyter \
numpy \
scipy \
pandas \
pillow 

# Math and Statistics
RUN pip3 install --upgrade sympy \
statsmodels

# Machine Learning
RUN pip3 install --upgrade Theano \ 
 tensorflow \
scikit-learn \
keras \
gensim \
nltk

# Plotting and Visualization
RUN pip3 install --upgrade matplotlib \
bokeh \
ggplot \
plotly \
seaborn

# profilers 
RUN pip3 install --upgrade line_profiler memory_profiler



RUN apt-get update && \
apt-get install -y \
build-essential \
cmake \
git \
wget \
unzip \
yasm \
pkg-config \
libswscale-dev \
libtbb2 \
libtbb-dev \
libjpeg-dev \
libpng-dev \
libtiff-dev \
libjasper-dev \
libavformat-dev \
libpq-dev

RUN pip install numpy

WORKDIR /
RUN wget https://github.com/opencv/opencv_contrib/archive/3.2.0.zip \
&& unzip 3.2.0.zip \
&& rm 3.2.0.zip

RUN wget https://github.com/Itseez/opencv/archive/3.2.0.zip \
&& unzip 3.2.0.zip \
&& mkdir /opencv-3.2.0/cmake_binary \
&& cd /opencv-3.2.0/cmake_binary \
&& cmake -DBUILD_TIFF=ON \
-DBUILD_opencv_java=OFF \
-DOPENCV_EXTRA_MODULES_PATH=/opencv_contrib-3.2.0/modules \
-DWITH_CUDA=OFF \
-DENABLE_AVX=ON \
-DWITH_OPENGL=ON \
-DWITH_OPENCL=ON \
-DWITH_IPP=ON \
-DWITH_TBB=ON \
-DWITH_EIGEN=ON \
-DWITH_V4L=ON \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF \
-DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=$(python3.6 -c "import sys; print(sys.prefix)") \
-DPYTHON_EXECUTABLE=$(which python3.6) \
-DPYTHON_INCLUDE_DIR=$(python3.6 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-DPYTHON_PACKAGES_PATH=$(python3.6 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") .. \
&& make install \
&& rm /3.2.0.zip \
&& rm -r /opencv-3.2.0 \
&& rm -r /opencv_contrib-3.2.0

RUN pip install flake8 pep8 --upgrade



# Add Tini. Tini operates as a process subreaper for jupyter. This prevents
# kernel crashes.
# ENV TINI_VERSION v0.14.0
ENV TINI_VERSION v0.6.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /usr/bin/tini
RUN chmod +x /usr/bin/tini
ENTRYPOINT ["/usr/bin/tini", "--"]

RUN adduser --disabled-password --gecos '' ds 
# useradd -ms /bin/bash ds
USER ds
WORKDIR /home/ds

RUN mkdir /home/ds/notebooks
WORKDIR /home/ds/notebooks

EXPOSE 8888
CMD ["jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0", "--NotebookApp.token=''", "--NotebookApp.base_url='/'", "--NotebookApp.notebook_dir='/home/ds/notebooks'"]

Oi Rafael, desculpa a demora.

Eu consegui buildar a imagem alterando a imagem base. usei a do python e removi a linhas do Docker file que instalavam o python:

FROM python:3.6
MAINTAINER Alessandro Adamo "alessandro.adamo@gmail.com"
ENV REFRESHED_AT 2017-06-10

RUN apt-get -qq update && \
apt-get -y dist-upgrade
RUN apt-get install -y --no-install-recommends \
fonts-dejavu \
gfortran \
gcc
RUN apt-get -y install pandoc texlive texlive-latex-extra texlive-xetex
RUN apt-get autoclean

RUN pip3 install --upgrade pip

# Fundamentals
RUN pip3 install --upgrade jupyter \
numpy \
scipy \
pandas \
pillow 

# Math and Statistics
RUN pip3 install --upgrade sympy \
statsmodels

# Machine Learning
RUN pip3 install --upgrade Theano \ 
 tensorflow \
scikit-learn \
keras \
gensim \
nltk

# Plotting and Visualization
RUN pip3 install --upgrade matplotlib \
bokeh \
ggplot \
plotly \
seaborn

# profilers 
RUN pip3 install --upgrade line_profiler memory_profiler



RUN apt-get update && \
apt-get install -y \
build-essential \
cmake \
git \
wget \
unzip \
yasm \
pkg-config \
libswscale-dev \
libtbb2 \
libtbb-dev \
libjpeg-dev \
libpng-dev \
libtiff-dev \
libjasper-dev \
libavformat-dev \
libpq-dev

RUN pip install numpy

WORKDIR /
RUN wget https://github.com/opencv/opencv_contrib/archive/3.2.0.zip \
&& unzip 3.2.0.zip \
&& rm 3.2.0.zip

RUN wget https://github.com/Itseez/opencv/archive/3.2.0.zip \
&& unzip 3.2.0.zip \
&& mkdir /opencv-3.2.0/cmake_binary \
&& cd /opencv-3.2.0/cmake_binary \
&& cmake -DBUILD_TIFF=ON \
-DBUILD_opencv_java=OFF \
-DOPENCV_EXTRA_MODULES_PATH=/opencv_contrib-3.2.0/modules \
-DWITH_CUDA=OFF \
-DENABLE_AVX=ON \
-DWITH_OPENGL=ON \
-DWITH_OPENCL=ON \
-DWITH_IPP=ON \
-DWITH_TBB=ON \
-DWITH_EIGEN=ON \
-DWITH_V4L=ON \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF \
-DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=$(python3.6 -c "import sys; print(sys.prefix)") \
-DPYTHON_EXECUTABLE=$(which python3.6) \
-DPYTHON_INCLUDE_DIR=$(python3.6 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-DPYTHON_PACKAGES_PATH=$(python3.6 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") .. \
&& make install \
&& rm /3.2.0.zip \
&& rm -r /opencv-3.2.0 \
&& rm -r /opencv_contrib-3.2.0

RUN pip install flake8 pep8 --upgrade



# Add Tini. Tini operates as a process subreaper for jupyter. This prevents
# kernel crashes.
# ENV TINI_VERSION v0.14.0
ENV TINI_VERSION v0.6.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /usr/bin/tini
RUN chmod +x /usr/bin/tini
ENTRYPOINT ["/usr/bin/tini", "--"]

RUN adduser --disabled-password --gecos '' ds 
# useradd -ms /bin/bash ds
USER ds
WORKDIR /home/ds

RUN mkdir /home/ds/notebooks
WORKDIR /home/ds/notebooks

EXPOSE 8888
CMD ["jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0", "--NotebookApp.token=''", "--NotebookApp.base_url='/'", "--NotebookApp.notebook_dir='/home/ds/notebooks'"]

Tenta ver se ela funciona pra você?

Admito que nao sei se a melhor solução que poderiamos ter, mas é um começo se funcionar pra você!

abraço!