iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 13
0
自我挑戰組

DevOps學習之旅系列 第 13

Day 13 專案 Docker 優化

簡介

上一篇有提到兩個問題,這一篇來講解我針對這兩個問題的解法,也歡迎大家有什麼好作法可以留言給我一起討論.
主要的問題是下面兩點:

  1. 在 Docker 建置好的 Image 會遇到太大的問題,當然希望 Image 越小越好.

  2. 每一次建置 Image 都要重新安裝一次插件,會讓建置的時間多很久.

問題一

面對 Image 太大問題,我後來使用 python:3.5-alpine 的 image 當基底,減少了至少200M的image容量.

問題二

這邊我使用一個樣板 Base Image,裡面都安裝專安需要的環境插件,只要準備好這個專案 Base Image ,就可以每次在建置新的 Image 的時候不用再重新安裝插件,可以加快很多的速度,至少減少了一半以上建置 Image 的時間.

解決方案

Base Image Dockerfile

FROM python:3.5-alpine
MAINTAINER Pellok "pellok@gmail.com"

RUN apk update && \
    apk add --no-cache --virtual deps build-base postgresql-dev libffi-dev openssh libpq gcc python-dev linux-headers musl-dev git autoconf automake libressl-dev jpeg-dev zlib-dev libmagic

ENV LIBRARY_PATH=/lib:/usr/lib

COPY requirements.txt /usr/src/app/
RUN pip install --upgrade pip setuptools && \
    pip install --no-cache-dir -r /usr/src/app/requirements.txt

WORKDIR /usr/src/app
ONBUILD COPY . /usr/src/app

專案需要用到的插件放到 requirements.txt 檔案

pip freeze |grep -v oklib |grep -v git > deploy/docker/alpine/requirements.txt

建置 Base Image

docker build --rm -t ithome_pellok_2018:base deploy/docker/alpine

專案 Dockerfile

FROM ithome_pellok_2018:base

RUN python setup.py develop && \
    find /usr/local \( -type d -a -name test -o -name tests \) -o \( -type f -a -name '*.pyc' -o -name '*.pyo' \) -exec rm -rf '{}' + && \
    rm -f /usr/src/app/requirements.txt && rm -rf /var/cache/apk/*

EXPOSE 7788

CMD pserve production.ini

建置專案 docker

docker build .

結論

上面兩個問題是實際應用的時候碰到的痛點,主要是要讓建置 Image 更快速,但是後來發現有更好用的工具可以使用,也可以整合到 Jenkins 來使用.

參考

Docker從入門到實踐


上一篇
Day 12 專案 Docker 化
下一篇
Day 14 Google Cloud 自動建置 Docker Image
系列文
DevOps學習之旅30

尚未有邦友留言

立即登入留言