Para sa Mga Baguhan: Paano Magtayo ng Ubuntu Environment Gamit ang Dockerfile | Gabay Kompleto Mula sa Basic Hanggang Suporta sa Python

目次

1. Panimula

Ano ba ang Docker at Dockerfile?

Sa mga kamakailang taon, bilang isang paraan upang mapabilis ang pagbuo ng kapaligiran ng pag-unlad at ang pag-deploy ng mga aplikasyon, ang Docker ay mabilis na naging popular. Ang Docker ay may katangian na nagpapakete ng isang aplikasyon kasama ang kanyang mga nakadepende na kapaligiran sa loob ng isang “container”, na nagbibigay-daan sa pag-execute nito sa parehong kapaligiran kahit saan.

Sa pagbuo ng Docker container na ito, kailangan ng isang “blueprint” na tinatawag na Dockerfile. Ang Dockerfile ay isang text file na naglalahad ng base OS image, mga software na i-install, setting ng environment variables, at iba pa. Ang mga developer ay gumagamit ng file na ito upang awtomatikong bumuo ng na-customize na kapaligiran.

Bakit Gumamit ng Ubuntu bilang Base

Kapag gumagawa ng Dockerfile, kailangang tukuyin muna ang base OS image. Sa mga ito, ang pinakapopular ay ang Ubuntu. Ang Ubuntu ay isang Linux distribution na batay sa Debian, na may madaling paggamit at maraming packages para sa flexible na pagbuo ng kapaligiran.

May mga sumusunod na benepisyo ang Dockerfile na batay sa Ubuntu:

  • Maraming opisyal at community documentation, na mababa ang halaga ng pag-aaral
  • Maraming packages at tools na madaling i-install gamit ang APT
  • Lightweight na minimal images (ubuntu:20.04, ubuntu:24.04 at iba pa) na opisyal na ibinigay

Layunin ng Artikulong Ito at Mga Target na mambabasa

Sa artikulong ito, gamit ang keyword na “Dockerfile Ubuntu” bilang tema, ipapaliwanag namin nang malinaw para sa mga baguhan ang paraan ng paggawa ng Ubuntu-based Dockerfile.

Partikular na, mula sa basic na istraktura ng Dockerfile, hanggang sa aktwal na mga hakbang para bumuo ng Ubuntu environment, halimbawa ng pag-install ng mga kapaligiran ng aplikasyon tulad ng Python, at karaniwang mga error kasama ang kanilang mga solusyon, lahat ay sasaklawin namin nang komprehensibo.

Inirerekomenda ang nilalaman na ito para sa mga ganitong tao:

  • Mga taong nagsisimula pang gumamit ng Dockerfile upang bumuo ng kapaligiran
  • Mga taong gustong gumawa ng development environment sa Ubuntu na may mataas na reproducibility
  • Mga taong gustong palalimin ang kaalaman kasama ang mga paraan ng paghawak ng problema
年収訴求

2. Pangunahing istraktura ng Dockerfile

Ano ang Dockerfile? Unawain natin ang papel nito

Dockerfile ay parang resipe para sa paglikha ng Docker image. Sa partikular, ito ay isang text file na naglalarawan kung aling base OS ang gagamitin, anong software ang i-install, at anong setting ang gagawin.

Sa pamamagitan ng file na ito, maaari mong patakbuhin ang docker build command upang madaling bumuo ng reproducible na development environment o application execution environment.

Mga benepisyo ng paggamit ng Dockerfile:

  • Awtomasyon ng pagbuo ng environment (hindi na kailangan i-reproduce ang manual na trabaho)
  • Sa pag-develop ng maraming tao, nawawala ang pagkakaiba-iba ng environment
  • Madaling i-integrate sa CI/CD pipelines

Pangunahing mga utos (direktibo) na karaniwang ginagamit sa Dockerfile

Mayroong maraming utos (direktibo) sa Dockerfile, ngunit ang mga sumusunod ay mga kinatawan nito. Gagamitin natin ang mga ito nang angkop upang bumuo ng Ubuntu-based na Dockerfile.

UtosPaglilinaw
FROMTinatakda ang base Docker image. Halimbawa: FROM ubuntu:24.04
RUNPinapatupad ang shell commands. Ginagamit para sa pag-install ng package at iba pa
COPYKinokopya ang local na files papasok sa image
ADDKatulad ng COPY, ngunit nagbibigay-daan din sa pagkuha mula sa URL o pag-unfold ng archive
WORKDIRTinatakda ang working directory
ENVNagtatakda ng environment variables
CMDTinatakda ang command na patakbuhin kapag nag-start ang container (maaaring i-overwrite)
ENTRYPOINTKatulad ng CMD, ngunit tinatakda ang command na pinipilit na patakbuhin

Pinakamaliit na halimbawa ng Ubuntu-based na Dockerfile

Ang sumusunod ay isang napakabasic na halimbawa ng Dockerfile na batay sa Ubuntu.

FROM ubuntu:24.04

RUN apt-get update && apt-get install -y 
    curl 
    vim

CMD ["/bin/bash"]

Ang Dockerfile na ito ay batay sa Ubuntu 24.04, nag-iinstall ng dalawang utility na curl at vim, at sa huli nagpo-start ng bash shell.

Tungkol sa pagpili ng tag ng Ubuntu

Ang Ubuntu Docker images ay inilalathala sa official na repository ng Docker Hub. Kung tatakda ang ubuntu:latest, gagamitin ang pinakabagong bersyon, ngunit inirerekomenda na tukuyin nang eksplisito ang bersyon.

Halimbawa:

  • ubuntu:22.04(LTS: bersyong may mahabang suporta, prayoridad sa katatagan)
  • ubuntu:24.04(Pinakabagong kandidato para sa LTS, prayoridad sa mga tampok)

Batay sa layunin, isaalang-alang kung alin ang unahin: katatagan o mga bagong tampok.

3. Pagsasanay: Paglikha ng Dockerfile Batay sa Ubuntu

Pag-iinstall ng mga Paketeng Kinakailangan sa Ubuntu Environment

Kapag gumagamit ng Dockerfile upang bumuo ng Ubuntu environment, sa maraming kaso, kailangang i-install ang dagdag na mga paketeng. Halimbawa, upang ayusin ang development environment, madalas na ginagamit ang mga sumusunod na utility:

  • curl: Para sa pagkuha ng file o pagsusuri ng API
  • vim: Simpleng text editor
  • git: Tool para sa version control
  • build-essential: Basic tool set na kinakailangan para sa build ng C/C++

Sa Dockerfile, upang i-install ito, gumamit ng RUN command.

FROM ubuntu:24.04

RUN apt-get update && apt-get install -y 
    curl 
    vim 
    git 
    build-essential

Sa pamamagitan ng pag-execute muna ng apt-get update, makakakuha ka ng pinakabagong listahan ng mga paketeng bago i-install.

Pagsasaayos ng Non-Interactive na Pag-iinstall

Sa Ubuntu, minsan kailangan ng user input sa apt-get install, ngunit sa Docker build process, hindi pwede ang interactive na operations. Kaya, inirerekomenda na i-set ang environment variables tulad ng sumusunod at i-install sa non-interactive mode.

ENV DEBIAN_FRONTEND=noninteractive

Dahil dito, malalagpasan ang mga input tulad ng “locale settings” na lumalabas sa package configuration, at magiging smooth ang installation.

Pagbura ng Hindi Kinakailangang Cache upang Magaan

Kapag gumamit ng APT, ang mga na-download na temporary files (cache) ay nananatili sa image, na nagpapabigat sa final Docker image. Sa pamamagitan ng pagbura ng cache tulad ng sumusunod, maaari mong bawasan ang laki ng image.

RUN apt-get update && apt-get install -y 
    curl 
    vim 
    && rm -rf /var/lib/apt/lists/*

Sa ganitong paraan, sa pamamagitan ng pagsasama ng maraming commands sa isang RUN statement, maaari ring pigilan ang hindi kinakailangang pagtaas ng layers.

Mga Best Practices: Paano Ayusin ang Dockerfile

Sa aktwal na development environment, inirerekomenda ang mga sumusunod na best practices tungkol sa paglalahat ng Dockerfile:

  • Sa halos lahat, i-summarize ang RUN commands upang bawasan ang bilang ng layers
  • Gumamit ng ENV upang explicitly i-define ang version o settings
  • Gumamit ng comments upang i-mark ang layunin ng processing
  • Gumamit ng rm o --no-install-recommends upang hindi mag-iwan ng hindi kinakailangang files

Halimbawa:

RUN apt-get update && apt-get install -y --no-install-recommends 
    curl 
    git 
    && rm -rf /var/lib/apt/lists/*

Sa ganitong paraan, maaari kang bumuo ng mas magaan at mas madaling i-maintain na Dockerfile.

4. Pagbuo at Pagsusuri ng Docker Image

Pagbuo ng Docker Image mula sa Dockerfile

Pagkatapos magsulat ng Dockerfile, ang susunod na hakbang ay ang Pagbuo ng Docker Image. Ito ay ginagawa gamit ang docker build command. Sa direktoryo kung saan naroroon ang Dockerfile, i-execute ang sumusunod na command.

docker build -t my-ubuntu-image .
  • Ang -t option ay para maglagay ng pangalan (tag) sa image. Sa halimbawa, my-ubuntu-image ang ipinangalan.
  • Ang . ay nangangahulugang ang kasalukuyang direktoryo kung saan naroroon ang Dockerfile.

Kapag na-execute ang command na ito, ang Docker ay babasa ng mga utos sa Dockerfile nang sunod-sunod, at magbubuo ng bagong image ayon dito.

Pagsusuri ng Nabuldung Docker Image

Kapag natapos na ang paglikha ng image, maaari mong suriin gamit ang sumusunod na command.

docker images

Dahil dito, ipapakita ang listahan ng mga Docker image na lokal, at maaari mong suriin ang mga sumusunod na impormasyon:

  • REPOSITORY (Pangalan ng Image)
  • TAG (Tag)
  • IMAGE ID (Unikong Identifier)
  • CREATED (Petsa ng Paglikha)
  • SIZE (Laki)

Halimbawa:

REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
my-ubuntu-image   latest    abcd1234abcd   5 minutes ago    189MB

Gayunpaman, maaari mong kumpirmahin na ang nilikhang image ay matagumpay na nirehistro.

Pagsisimula ng Docker Container at Pagsusuri ng Pag-andar

Upang suriin kung tama ang pag-andar ng nilikhang image, subukan nating i-start ang Docker Container. Gumamit ng command na tulad ng sumusunod.

docker run -it my-ubuntu-image
  • Sa pamamagitan ng pagtukoy ng -it option, maaari kang magsimula ng terminal sa interactive mode.
  • Kung normal na nagsimula, ipapakita ang bash prompt sa loob ng container, na parang nag-login ka sa Ubuntu environment.

Sa loob ng container, maaari kang mag-execute ng mga command na tulad ng sumusunod upang suriin kung tama ang pag-andar ng mga installed tool:

curl --version
vim --version

Kung walang problema, matagumpay ang paglalahat ng Dockerfile.

Pagsara ng Hindi Na Kinakailangang Image o Container

Kapag paulit-ulit ang pagbuo o eksperimento, maaaring mag-iwan ng hindi na kinakailangang Docker image o container sa lokal. Inirerekomenda na regular na linisin gamit ang mga command na sumusunod.

  • Pagbura ng Naka-stop na Container:
docker container prune
  • Pagbura ng Hindi Ginagamit na Image:
docker image prune
  • Pagbura ng Lahat ng Hindi Ginagamit na Data (Pansinin!):
docker system prune

Dahil sa mga operasyon na ito, makakapagtipon ng disk space at maiiwasan ang problema.

5. Aplikasyon: Pagbuo ng Kapaligiran ng Python

Paggamit ng Ubuntu-based na Dockerfile upang gawing gumagana ang Python

Kapag gumagamit ng Dockerfile upang bumuo ng kapaligiran ng Ubuntu, sa pamamagitan ng pagdaragdag ng runtime environment ng Python, makakapag-suporta sa malawak na layunin tulad ng pag-unlad, pag-verify, machine learning, at marami pa. Bagaman may Python na na-install na sa Ubuntu, mula sa pananaw ng pamamahala ng bersyon at pamamahala ng package, karaniwang gumagawa ng eksplisitong pagbuo mismo.

Paraan ng Pag-install ng Python Gamit ang apt

Ang pinakamababaw na paraan ay ang paggamit ng APT package upang i-install ang Python. Narito ang halimbawa nito:

FROM ubuntu:24.04

RUN apt-get update && apt-get install -y 
    python3 
    python3-pip 
    && rm -rf /var/lib/apt/lists/*

Sa paraang ito, makakagamit ng stable version ng Python na na-install sa sistema (karaniwang Python 3.10 o 3.12 atbp.). Bukod dito, posible ring magdagdag ng Python package gamit ang pip command.

Pamamahala ng Bersyon ng Python Gamit ang pyenv

Kung nais gamitin ang tiyak na bersyon ng Python o mag-switch sa pagitan ng maraming bersyon, pyenv ang maginhawang gamitin.

Narito ang halimbawa ng pag-install ng Python 3.11.6 gamit ang pyenv sa Dockerfile:

FROM ubuntu:24.04

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y 
    git 
    curl 
    make 
    build-essential 
    libssl-dev 
    zlib1g-dev 
    libbz2-dev 
    libreadline-dev 
    libsqlite3-dev 
    wget 
    llvm 
    libncurses5-dev 
    libncursesw5-dev 
    xz-utils 
    tk-dev 
    libffi-dev 
    liblzma-dev 
    && rm -rf /var/lib/apt/lists/*

# Pag-install ng pyenv
RUN git clone https://github.com/pyenv/pyenv.git ~/.pyenv

ENV PYENV_ROOT="$HOME/.pyenv"
ENV PATH="$PYENV_ROOT/bin:$PATH"

RUN echo 'eval "$(pyenv init --path)"' >> ~/.bashrc

# Pag-install ng anumang bersyon ng Python
RUN pyenv install 3.11.6 && pyenv global 3.11.6

Sa ganitong paraan, mas flexible ang pagbuo at pamamahala ng kapaligiran ng Python.

Pamamahala ng Package Gamit ang requirements.txt

Sa aktwal na proyekto, karaniwang kailangan ng maraming Python library. Ang ginagamit upang pamahalaan ito ay ang requirements.txt.

Uunahin, maghanda ng requirements.txt file sa root directory ng proyekto:

flask==2.3.2
requests>=2.25.1
pandas

Sunod, ilarawan ito sa Dockerfile nang ganito:

COPY requirements.txt /app/requirements.txt
WORKDIR /app

RUN pip install --no-cache-dir -r requirements.txt

Sa ganito, makakapag-install ng kinakailangang library nang sabay-sabay, na nagpapataas ng reproducibility ng development environment.

Mga Pinakamahusay na Gawi

  • Kung gagamit ng Python, bumuo ng virtual environment gamit ang virtualenv o venv upang maiwasan ang conflict ng dependencies.
  • Sa pamamagitan ng pag-delete ng cache (--no-cache-dir), mapapaliit ang Docker image.
  • Bago mag-install ng Python package, gumamit ng pip install --upgrade pip upang maging latest version at maiwasan ang error.

6. Mga Karaniwang Problema at Paraan ng Paglutas

Error sa Pahintulot (Permission)

Halimbawa:

Permission denied

Ito ay nangyayari kapag ang kopyang file ay walang pahintulot na i-execute o kapag ang may-ari ng script o ang gumagamit na nag-e-execute ay hindi angkop.

Paraan ng Paglutas:

  • Gawing executable ang file:
  RUN chmod +x script.sh
  • Kung kinakailangan, baguhin ang user:
  RUN chown root:root /path/to/file

Di matagpuan ang package, o hindi ma-install

Halimbawa:

E: Unable to locate package xxx

Ang error na ito ay nangyayari kapag hindi pa nae-execute ang apt-get update o kapag mali ang tinukoy na pangalan ng package.

Paraan ng Paglutas:

  • Lagyan ng apt-get update bago ang install:
  RUN apt-get update && apt-get install -y curl
  • Suriin ang pangalan ng package at tingnan kung walang maling baybay

Error na may kaugnayan sa network

Halimbawa:

Temporary failure resolving 'deb.debian.org'

Ang ganitong error ay nangyayari sa mga kaso kung saan hindi matagumpay ang DNS resolution habang nagbu-build.

Paraan ng Paglutas:

  • Maaaring mapabuti sa pamamagitan ng pag-restart ng Docker daemon:
  sudo systemctl restart docker
  • Suriin ang DNS setting ng Docker (magdagdag ng DNS sa /etc/docker/daemon.json):
  {
    "dns": ["8.8.8.8", "8.8.4.4"]
  }

Build na nananatiling luma dahil sa epekto ng cache

Gumagamit ang Docker ng cache bawat layer upang mapabilis ang proseso. Bilang resulta, maaaring hindi mag-build nang tama kahit binago ang Dockerfile.

Paraan ng Paglutas:

  • I-build muli nang walang cache:
  docker build --no-cache -t my-image .

Ang startup command sa loob ng container ay hindi nag-e-execute o agad na nagtatapos

Dahilan:

  • May error ang command na tinukoy sa CMD o ENTRYPOINT
  • Kahit tukuyin ang CMD na ["/bin/bash"], agad itong tatapos kung hindi interactive

Paraan ng Paglutas:

  • I-launch ang container para sa debugging at suriin:
  docker run -it my-image /bin/bash
  • Unawain ang pagkakaiba ng CMD at ENTRYPOINT at gamitin ayon sa layunin

Sa pamamagitan ng pagtatapos ng mga problemang ito, tiyak na magiging mas mabuti ang iyong kakayahang magdisenyo ng Dockerfile. Kapag nagkakaroon ng problema, basahin nang kalmado ang error message at sundan nang maingat kung aling layer o command ang sanhi.

7. Buod

Muling Pagsusuri ng Mga Punto sa Paglikha ng Dockerfile Batay sa Ubuntu

Sa artikulong ito, ipinaliwanag namin nang hakbang-hakbang mula sa mga basic hanggang sa advanced ang paano bumuo ng kapaligiran ng Ubuntu gamit ang Dockerfile. Dito, ayusin natin muli ang mga mahahalagang punto.

  • Ang pag-unawa sa basic na istraktura ng Dockerfile ang unang hakbang. Maaari mong awtomatikong bumuo ng kapaligiran sa pamamagitan ng pagkombina ng mga utos tulad ng FROM, RUN, CMD, ENV.
  • Ang Ubuntu ay isang base image na mataas ang katatagan at flexibility. Dahil sa maraming package, malawak na user base, at ang pagkakaroon ng LTS versions, angkop ito bilang pundasyon ng development environment.
  • Sa pamamagitan ng praktikal na pamamahala ng mga package, maaari kang mag-install ng kinakailangang mga tool o library. Ang mga susi rito ay ang paggamit ng apt-get, pagbura ng cache, at non-interactive na pag-install.
  • Ang praktikal na pagbuo ng kapaligiran tulad ng Python ay posible rin gamit ang Dockerfile. Maaari mong makamit ang mataas na reproducibility ng development environment gamit ang mga tool tulad ng pyenv, pip, at requirements.txt.
  • Ang kakayahang humarap sa mga problema ay direktang nauugnay sa matatag na operasyon. Sa pamamagitan ng pag-unawa sa mga madaling mahadlangan tulad ng permissions, network, at build cache, maaari mong mapataas nang malaki ang efficiency ng development.

Susunod na Hakbang sa Pag-aaral ng Dockerfile

Sa pamamagitan ng kakayahang gamitin ang Dockerfile, hindi lamang sa development kundi pati na rin sa testing at deployment sa production environment, maaari kang maging handa sa maraming layunin. Para sa susunod na pag-aaral, magpatuloy sa mga sumusunod na topic.

  • Docker Compose para sa pamamahala ng multiple container configurations
  • Mga CI/CD tool (GitHub Actions, GitLab CI, atbp.) na integrasyon
  • Mga container orchestration tool tulad ng Kubernetes na pagkakasama

Opisyal na Dokumentasyon at Mga Reference Link

8. Mga Madalas na Tanong (FAQ)

Q1. Aling bersyon ng Ubuntu ang dapat pipiliin sa Dockerfile?

A1. Sa pangunahing paraan, kung pinapahalagahan ang katatagan at mahabang suporta, ang pagpili ng LTS (Long Term Support) bersyon ay karaniwang ginagawa. Halimbawa, ang ubuntu:22.04 o ubuntu:20.04 ay ginagamit sa maraming lugar ng pag-unlad, at dahil may 5 taong panahon ng suporta, maaaring gamitin nang walang alalahanin.

Samantala, kung nais gamitin ang pinakabagong package o bersyon ng wika, maaaring pumili ng bagong release tulad ng ubuntu:24.04, ngunit inirerekomenda ang pag-verify nang maaga.

Q2. Bakit lumalabas ang “hindi natagpuan ang package” kapag gumamit ng apt-get install?

A2. Ang pinakakaraniwang dahilan ay hindi pa nae-execute ang apt-get update nang maaga. Kung susubukan ang pag-install nang hindi na-update ang listahan ng package, mananatiling luma ang listahan at hindi matatagpuan ang kaukulang package, na magreresulta sa error.

Tamang halimbawa ng paglalahat:

RUN apt-get update && apt-get install -y curl

Bukod dito, mag-ingat din sa maling pagbabaybay ng pangalan ng package o mga hindi na inirerekomendang pangalan ng package (hal.: hindi python kundi python3).

Q3. Paano mag-set ng environment variable sa Dockerfile?

A3. Ang environment variable ay iniuugnay gamit ang ENV command. Ito ay magiging epektibo sa panahon ng build at pag-execute ng container.

Halimbawa:

ENV DEBIAN_FRONTEND=noninteractive

Ito ay isang tipikal na setting na ginagamit upang pigilan ang interactive prompt sa panahon ng pag-install ng APT. Bukod dito, ginagamit din ito sa pag-set ng aplikasyon o API key sa loob ng Dockerfile.

Q4. Ano ang pagkakaiba ng CMD at ENTRYPOINT sa Dockerfile?

A4. Parehong nagtutukoy ng command na e-execute kapag nag-start ang container, ngunit may pagkakaiba sa paggamit at pag-uugali.

ItemCMDENTRYPOINT
Posibilidad ng Pag-overwriteMaaaring i-overwrite gamit ang command ng docker runKaraniwang hindi ma-o-overwrite (itinuturing na argumento)
PaggamitMag-set ng default na command ng pag-executeDefinisyon ng command na laging e-execute

Halimbawa:

CMD ["python3", "app.py"]
# vs
ENTRYPOINT ["python3"]
CMD ["app.py"]

Sa huling kaso, maaaring ipasa ang CMD bilang argumento sa anyo ng docker run my-image another_script.py.

Q5. Bakit hindi naaapektuhan ng mga pagbabago kahit na binago ang Dockerfile?

A5. Dahil gumagamit ang Docker ng cache sa panahon ng build, kahit maliit na pagbabago sa Dockerfile, maaaring gumamit pa rin ng na-cache na layer na hindi nagbabago.

Paraan ng Pag-ayos:

docker build --no-cache -t my-image .

Sa ganitong paraan, magbi-build nang bago nang hindi gumagamit ng cache, at lahat ng pagbabago ay maipapakita.

年収訴求