Dockerfile 编写
预计搭建一个docker 镜像 集成python3 、selenium 和chrome
使用centos 或者ubuntu 最为基础镜像 搭建的环境比较大。后来发现了alpine 系统镜像。基础镜像只有4M大小。
然后根据实际需要的环境去进行软件包的安装。编写Dockerfile 文件搭建镜像可以进一步压缩镜像大小。
Dockerfile内容如下:
FROM alpine MAINTAINER Ray_lei "LYC10031@126.com" # VERSIONS ENV ALPINE_VERSION=3.7 \ PYTHON_VERSION=3.6.5 # PATHS ENV PYTHON_PATH=/usr/lib/python$PYTHON_VERSION \ PATH="/usr/lib/python$PYTHON_VERSION/bin/:${PATH}" # PACKAGES # * dumb-init: a proper init system for containers, to reap zombie children # * musl: standard C library # * lib6-compat: compatibility libraries for glibc # * linux-headers: commonly needed, and an unusual package name from Alpine. # * build-base: used so we include the basic development packages (gcc) # * bash: so we can access /bin/bash # * git: to ease up clones of repos # * ca-certificates: for SSL verification during Pip and easy_install ENV PACKAGES="\ dumb-init \ musl \ libc6-compat \ linux-headers \ build-base \ bash \ git \ ca-certificates \ chromium \ chromium-chromedriver \ " # PACKAGES needed to built python ENV PYTHON_BUILD_PACKAGES="\ readline-dev \ zlib-dev \ bzip2-dev \ sqlite-dev \ libressl-dev \ " RUN set -ex ;\ # find MAJOR and MINOR python versions based on $PYTHON_VERSION export PYTHON_MAJOR_VERSION=$(echo "${PYTHON_VERSION}" | rev | cut -d"." -f3- | rev) ;\ export PYTHON_MINOR_VERSION=$(echo "${PYTHON_VERSION}" | rev | cut -d"." -f2- | rev) ;\ # replacing default repositories with edge ones echo "http://dl-cdn.alpinelinux.org/alpine/v$ALPINE_VERSION/community" >> /etc/apk/repositories ;\ echo "http://dl-cdn.alpinelinux.org/alpine/v$ALPINE_VERSION/main" >> /etc/apk/repositories ;\ echo "http://dl-4.alpinelinux.org/alpine/v3.4/main" >> /etc/apk/repositories ;\ echo "http://dl-4.alpinelinux.org/alpine/v3.4/community" >> /etc/apk/repositories ;\ # Add the packages, with a CDN-breakage fallback if needed apk add --no-cache $PACKAGES || \ (sed -i -e 's/dl-cdn/dl-4/g' /etc/apk/repositories && apk add --no-cache $PACKAGES) ;\ # Add packages just for the python build process with a CDN-breakage fallback if needed apk add --no-cache --virtual .build-deps $PYTHON_BUILD_PACKAGES || \ (sed -i -e 's/dl-cdn/dl-4/g' /etc/apk/repositories && apk add --no-cache --virtual .build-deps $PYTHON_BUILD_PACKAGES) ;\ # turn back the clock -- so hacky! echo "http://dl-cdn.alpinelinux.org/alpine/v$ALPINE_VERSION/main/" > /etc/apk/repositories ;\ # echo "@community http://dl-cdn.alpinelinux.org/alpine/v$ALPINE_VERSION/community" >> /etc/apk/repositories ;\ # echo "@testing http://dl-cdn.alpinelinux.org/alpine/v$ALPINE_VERSION/testing" >> /etc/apk/repositories ;\ # echo "@edge-main http://dl-cdn.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories ;\ # use pyenv to download and compile specific python version git clone --depth 1 https://github.com/pyenv/pyenv /usr/lib/pyenv ;\ PYENV_ROOT=/usr/lib/pyenv /usr/lib/pyenv/bin/pyenv install $PYTHON_VERSION ;\ # move specific version to correct path delete pyenv, no longer needed mv /usr/lib/pyenv/versions/$PYTHON_VERSION/ $PYTHON_PATH ;\ rm -rfv /usr/lib/pyenv ;\ # change the path on the header of every file from PYENV_ROOT to PYTHON_PATH cd $PYTHON_PATH/bin/ && sed -i "s+/usr/lib/pyenv/versions/$PYTHON_VERSION/+$PYTHON_PATH/+g" * ;\ # delete binary "duplicates" and replace them with symlinks # this also optimizes space since they are actually the same binary rm -f $PYTHON_PATH/bin/python$PYTHON_MAJOR_VERSION \ $PYTHON_PATH/bin/python$PYTHON_MINOR_VERSION \ $PYTHON_PATH/bin/python$PYTHON_MAJOR_VERSION-config \ $PYTHON_PATH/bin/python$PYTHON_MINOR_VERSION-config ;\ ln -sf $PYTHON_PATH/bin/python $PYTHON_PATH/bin/python$PYTHON_MAJOR_VERSION ;\ ln -sf $PYTHON_PATH/bin/python $PYTHON_PATH/bin/python$PYTHON_MINOR_VERSION ;\ ln -sf $PYTHON_PATH/bin/python-config $PYTHON_PATH/bin/python$PYTHON_MAJOR_VERSION-config ;\ ln -sf $PYTHON_PATH/bin/python-config $PYTHON_PATH/bin/python$PYTHON_MINOR_VERSION-config ;\ # delete files to to reduce container size # tips taken from main python docker repo find /usr/lib/python$PYTHON_VERSION -depth \( -name '*.pyo' -o -name '*.pyc' -o -name 'test' -o -name 'tests' \) -exec rm -rf '{}' + ;\ # remove build dependencies and any leftover apk cache apk del --no-cache --purge .build-deps ;\ rm -rf /var/cache/apk/* # since we will be "always" mounting the volume, we can set this up ENTRYPOINT ["/usr/bin/dumb-init"] CMD ["/bin/sh"]