Dockerfile Ubuntu: Panduan Pemula untuk Pembangun

目次

1. Pengenalan

Apakah Docker dan Dockerfile?

Dalam beberapa tahun kebelakangan ini, Docker telah dengan cepat mendapat populariti sebagai cara untuk menyederhanakan persediaan persekitaran pembangunan dan penyebaran aplikasi. Docker mempunyai keupayaan unik untuk membungkus aplikasi dan kebergantungannya ke dalam satu “kontena,” yang kemudian boleh dijalankan dalam persekitaran yang sama di mana-mana sahaja. Untuk membina kontena Docker ini, pelan biru yang dipanggil “Dockerfile” adalah perlu. Dockerfile adalah fail teks yang menyatakan imej OS asas, perisian untuk dipasang, tetapan pembolehubah persekitaran, dan banyak lagi. Pembangun boleh menggunakan fail ini untuk membina persekitaran tersuai secara automatik.

Sebab Memilih Ubuntu sebagai Asas

Apabila mencipta Dockerfile, langkah pertama adalah menyatakan imej OS asas. Antara banyak pilihan, Ubuntu adalah sangat popular. Ubuntu adalah pengagihan Linux berasaskan Debian yang dikenali kerana kemudahan penggunaannya dan fleksibiliti untuk membina persekitaran pelbagai berkat repositori pakej yang luas. Dockerfile berasaskan Ubuntu menawarkan kelebihan berikut:

  • Dokumentasi rasmi dan komuniti yang melimpah ruah tersedia, menghasilkan lengkung pembelajaran yang lebih rendah.
  • Banyak pakej dan alat boleh dipasang dengan mudah menggunakan APT (Advanced Package Tool).
  • Imej minimum ringan (seperti ubuntu:20.04 , ubuntu:24.04 ) disediakan secara rasmi.

Tujuan dan Sasaran Artikel Ini

Dalam artikel ini, kami akan memberi tumpuan kepada kata kunci “Dockerfile Ubuntu” dan memberikan penjelasan yang mudah difahami untuk pemula tentang cara mencipta Dockerfile berasaskan Ubuntu. Secara khusus, kami akan meliputi secara komprehensif segalanya dari struktur asas Dockerfile hingga langkah-langkah untuk membina persekitaran Ubuntu secara sebenar, contoh pemasangan persekitaran aplikasi seperti Python, dan ralat biasa beserta penyelesaiannya. Artikel ini disyorkan untuk:

  • Mereka yang ingin membina persekitaran menggunakan Dockerfile untuk pertama kalinya.
  • Mereka yang ingin mencipta persekitaran pembangunan yang boleh diulang pada Ubuntu.
  • Mereka yang ingin mendalami pengetahuan mereka, termasuk cara menyelesaikan masalah.

2. Struktur Asas Dockerfile

Apakah Dockerfile? Memahami Peranannya

Dockerfile adalah seperti resipi untuk mencipta imej Docker. Secara khusus, ia adalah fail teks yang menerangkan OS asas mana yang digunakan, perisian apa yang dipasang, dan konfigurasi apa yang diterapkan. Dengan melaksanakan arahan docker build menggunakan fail ini, anda boleh membina persekitaran pembangunan dan pelaksanaan aplikasi yang sangat boleh diulang dengan mudah. Kelebihan menggunakan Dockerfile:

  • Automatikasi persediaan persekitaran (tiada keperluan untuk mengulang langkah manual).
  • Menghapuskan ketidakselarasan persekitaran apabila membangunkan dengan ahli pasukan pelbagai.
  • Mudah diintegrasikan ke dalam saluran CI/CD.

Arahan Asas Biasa Digunakan (Direktif) dalam Dockerfile

Dockerfile mengandungi beberapa arahan (direktif), dengan yang berikut adalah yang paling mewakili. Kami akan menggabungkan ini dengan sesuai untuk mencipta Dockerfile berasaskan Ubuntu.

InstructionDescription
FROMSpecifies the base Docker image. Example: FROM ubuntu:24.04
RUNExecutes shell commands. Used for package installation, etc.
COPYCopies local files into the image.
ADDSimilar to COPY, but also allows fetching from URLs and extracting archives.
WORKDIRSets the working directory.
ENVSets environment variables.
CMDDefines the command to be executed when the container starts (can be overridden).
ENTRYPOINTSimilar to CMD, but defines a command that is always executed.

Contoh Minimum Dockerfile Berasaskan Ubuntu

Berikut adalah contoh asas yang sangat ringkas untuk Dockerfile berasaskan Ubuntu.

FROM ubuntu:24.04

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

CMD ["/bin/bash"]

Dockerfile ini dikonfigurasi untuk menggunakan Ubuntu 24.04 sebagai asas, memasang dua utiliti (curl dan vim), dan akhirnya memulakan cangkang bash.

Tentang Memilih Tag Ubuntu

Imej Docker Ubuntu tersedia di repositori Docker Hub rasmi. Walaupun menyatakan ubuntu:latest akan menggunakan versi terbaru, ia disyorkan untuk secara eksplisit menentukan versi. Contohnya:

  • ubuntu:22.04 (LTS: Long Term Support version, menekankan kestabilan)
  • ubuntu:24.04 (Calon LTS terkini, menekankan ciri-ciri)

Pertimbangkan sama ada untuk mengutamakan kestabilan atau ciri-ciri baru bergantung pada tujuan anda.

3. Amalan: Mencipta Dockerfile Berasaskan Ubuntu

Memasang Pakej yang Diperlukan untuk Persekitaran Ubuntu

Apabila membina persekitaran Ubuntu menggunakan Dockerfile, anda sering perlu memasang pakej tambahan. Sebagai contoh, utiliti berikut biasanya digunakan untuk menyediakan persekitaran pembangunan:

  • curl : Untuk mengambil fail dan menyemak API.
  • vim : Sebuah penyunting teks ringkas.
  • git : Alat kawalan versi.
  • build-essential : Satu koleksi alat asas yang diperlukan untuk membina program C/C++.

Untuk memasang ini dalam Dockerfile, gunakan arahan RUN.

FROM ubuntu:24.04

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

Dengan menjalankan apt-get update terlebih dahulu, anda memastikan senarai pakej terkini diperoleh sebelum pemasangan.

Menyediakan Pemasangan Tidak Interaktif

Dalam Ubuntu, apt-get install mungkin memerlukan input pengguna, tetapi operasi interaktif tidak boleh dilakukan semasa proses pembinaan Docker. Oleh itu, disyorkan untuk menetapkan pemboleh ubah persekitaran seperti berikut untuk melakukan pemasangan dalam mod tidak interaktif.

ENV DEBIAN_FRONTEND=noninteractive

Ini akan melangkau prompt seperti “Tetapan Serantau” yang muncul semasa konfigurasi pakej, membolehkan pemasangan berjalan dengan lancar.

Mengurangkan Saiz Imej dengan Menghapuskan Cache Tidak Perlu

Apabila menggunakan APT, fail sementara yang dimuat turun (cache) boleh kekal dalam imej, menjadikan imej Docker akhir lebih besar. Anda boleh mengurangkan saiz imej dengan memadamkan cache ini seperti berikut:

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

Dengan menggabungkan pelbagai arahan ke dalam satu kenyataan RUN seperti ini, anda juga boleh mengelakkan penciptaan lapisan tidak perlu.

Amalan Terbaik: Mengatur Dockerfile Anda

Dalam persekitaran pembangunan sebenar, amalan terbaik untuk menulis Dockerfile berikut disyorkan:

  • Gabungkan arahan RUN sebanyak mungkin untuk mengurangkan bilangan lapisan.
  • Nyatakan versi dan konfigurasi secara eksplisit menggunakan ENV.
  • Gunakan komen untuk menyatakan tujuan setiap operasi dengan jelas.
  • Gunakan rm dan --no-install-recommends untuk mengelakkan meninggalkan fail tidak perlu.

Contoh:

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

Dengan melakukan ini, anda boleh membina Dockerfile yang lebih ringan dan boleh dipelihara.

4. Membina dan Mengesahkan Imej Docker

Membina Imej Docker daripada Dockerfile

Setelah anda menulis Dockerfile, langkah seterusnya ialah membina imej Docker. Ini dilakukan menggunakan arahan docker build. Jalankan arahan berikut dalam direktori di mana Dockerfile anda berada:

docker build -t my-ubuntu-image .
  • Pilihan -t digunakan untuk memberi nama (tag) kepada imej. Dalam contoh ini, kami menamakan ia my-ubuntu-image.
  • Titik . merujuk kepada direktori semasa di mana Dockerfile berada.

Apabila anda menjalankan arahan ini, Docker akan membaca arahan dalam Dockerfile secara berurutan dan membina imej baru mengikutnya.

Mengesahkan Imej Docker yang Dibina

Setelah penciptaan imej selesai, anda boleh mengesahkannya dengan arahan berikut:

docker images

Ini akan memaparkan senarai imej Docker yang wujud secara tempatan, dan anda boleh memeriksa maklumat berikut:

  • REPOSITORY (nama imej)
  • TAG (tag)
  • IMAGE ID (pengidentifikasi unik)
  • CREATED (tarikh dan masa penciptaan)
  • SIZE (saiz)

Contoh:

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

Ini mengesahkan bahawa imej yang anda cipta telah berjaya didaftarkan.

Memulakan Bekas Docker dan Mengesahkan Operasi

Untuk mengesahkan bahawa imej yang dicipta berfungsi dengan betul, mari kita mulakan bekas Docker. Gunakan arahan berikut:

docker run -it my-ubuntu-image
  • Menentukan pilihan -it membolehkan anda memulakan terminal dalam mod interaktif.
  • Jika ia berjaya dimulakan, prompt bash dalam bekas akan muncul, dan anda akan berada dalam keadaan seolah-olah anda telah log masuk ke persekitaran Ubuntu.

Dalam bekas, anda boleh melaksanakan arahan seperti yang berikut untuk memeriksa sama ada alat yang dipasang berfungsi dengan betul:

curl --version
vim --version

Jika tiada isu, Dockerfile telah ditulis dengan berjaya.

Membersihkan Imej dan Bekas yang Tidak Perlu

Semasa anda mengulangi pembinaan dan eksperimen, imej Docker dan bekas yang tidak perlu mungkin terkumpul secara tempatan. Disyorkan untuk membersihkannya secara berkala menggunakan arahan seperti yang berikut:

  • Memadam bekas yang berhenti:
    docker container prune
    
  • Memadam imej yang tidak digunakan:
    docker image prune
    
  • Memadam semua data yang tidak digunakan (Amaran!):
    docker system prune
    

Operasi ini membantu untuk menjimatkan ruang cakera dan mencegah isu.

5. Aplikasi: Membina Persekitaran Python

Menjadikan Python Boleh Digunakan dalam Dockerfile Berasaskan Ubuntu

Dengan menambah persekitaran pelaksanaan Python semasa membina persekitaran Ubuntu menggunakan Dockerfile, anda boleh menyokong pelbagai kegunaan seperti pembangunan, pengujian, dan pembelajaran mesin. Walaupun Ubuntu mungkin mempunyai Python yang dipasang terdahulu, amalan biasa adalah untuk membina secara eksplisit sendiri dari perspektif pengurusan versi dan pakej.

Cara Memasang Python Menggunakan apt

Cara paling mudah adalah memasang Python menggunakan pakej APT. Berikut adalah contoh:

FROM ubuntu:24.04

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

Dengan kaedah ini, anda boleh menggunakan versi stabil Python yang dipasang pada sistem (biasanya Python 3.10 atau 3.12, dsb.). Di samping itu, anda boleh menambah pakej Python menggunakan arahan pip.

Mengurus Versi Python dengan pyenv

Jika anda ingin menggunakan versi Python tertentu atau bertukar antara pelbagai versi, menggunakan pyenv adalah mudah. Berikut adalah contoh menggunakan pyenv untuk memasang Python 3.11.6 dalam 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/*

# Install pyenv
RUN git clone [https://github.com/pyenv/pyenv.git](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

# Install a specific Python version
RUN pyenv install 3.11.6 && pyenv global 3.11.6

Ini membolehkan anda membina dan mengurus persekitaran Python anda dengan lebih fleksibel.

Pengurusan Pakej Menggunakan requirements.txt

Dalam projek sebenar, anda sering memerlukan pelbagai pustaka Python. requirements.txt digunakan untuk mengurus ini. Pertama, sediakan fail requirements.txt dalam direktori akar projek anda:

flask==2.3.2
requests>=2.25.1
pandas

Seterusnya, huraikan ia dalam Dockerfile seperti berikut:

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

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

Ini membolehkan anda memasang pustaka yang diperlukan sekaligus, meningkatkan kebolehulangan persekitaran pembangunan anda.

Amalan Terbaik

  • Semasa menggunakan Python, membina persekitaran maya dengan virtualenv atau venv boleh membantu mencegah konflik pergantungan.
  • Anda boleh mengurangkan saiz imej Docker anda dengan memadam cache ( --no-cache-dir ).
  • Memasang versi terbaru pip dengan pip install --upgrade pip sebelum memasang pakej Python boleh mencegah ralat.

6. Isu Biasa dan Penyelesaian

Ralat Kebenaran

Contoh:

Permission denied

Ini berlaku apabila fail yang disalin tidak mempunyai kebenaran pelaksanaan atau apabila pemilik fail/pengguna pelaksanaan tidak sesuai.

Penyelesaian:

  • Jadikan fail boleh dilaksanakan:
    RUN chmod +x script.sh
    
  • Tukar pengguna jika perlu:
    RUN chown root:root /path/to/file
    

Pakej Tidak Ditemui atau Tidak Boleh Dipasang

Contoh:

E: Unable to locate package xxx

Ralat ini berlaku apabila apt-get update tidak dijalankan atau apabila nama pakej yang ditentukan tidak betul.

Penyelesaian:

  • Sentiasa tulis apt-get update sebelum install :
    RUN apt-get update && apt-get install -y curl
    
  • Periksa nama pakej untuk kesilapan ejaan dan pastikan ia betul.

Ralat Berkaitan Rangkaian

Contoh:

Temporary failure resolving 'deb.debian.org'

Jenis ralat ini berlaku apabila penyelesaian DNS gagal semasa proses pembinaan.

Penyelesaian:

  • Memulakan semula daemon Docker mungkin menyelesaikan isu tersebut:
    sudo systemctl restart docker
    
  • Semak tetapan DNS Docker (tambah spesifikasi DNS ke /etc/docker/daemon.json ):
    {
      "dns": ["8.8.8.8", "8.8.4.4"]
    }
    

Pembinaan Kekal dalam Keadaan Lama Akibat Kesan Cache

Docker menggunakan cache lapisan demi lapisan untuk kelajuan. Akibatnya, walaupun anda mengubah suai Dockerfile, ia mungkin tidak dibina seperti yang dimaksudkan kerana lapisan cache sedang digunakan semula.

Penyelesaian:

  • Bina semula tanpa menggunakan cache:
    docker build --no-cache -t my-image .
    

Arahan Permulaan dalam Kontena Gagal Dilaksanakan atau Keluar Segera

Punca:

  • Arahan yang ditentukan dalam CMD atau ENTRYPOINT mengalami ralat.
  • Walaupun anda tentukan ["/bin/bash"] dalam CMD , ia akan keluar serta-merta jika tidak dijalankan secara interaktif.

Penyelesaian:

  • Mulakan kontena untuk penyahpepijatan dan semak:
    docker run -it my-image /bin/bash
    
  • Fahami perbezaan antara CMD dan ENTRYPOINT dan gunakannya dengan sewajarnya untuk tujuan anda.

Dengan mengalami isu-isu ini, kemahiran reka bentuk Dockerfile anda pasti akan bertambah baik. Apabila anda menghadapi masalah, baca mesej ralat dengan tenang dan jejaki dengan teliti lapisan atau arahan mana yang menjadi punca.

7. Kesimpulan

Mengesahkan Semula Perkara Utama untuk Membina Dockerfile Berasaskan Ubuntu

Dalam artikel ini, kami telah menerangkan langkah demi langkah dari kaedah asas hingga kepada kaedah lanjutan mengenai cara membina persekitaran Ubuntu menggunakan Dockerfile. Mari kita ulangi perkara penting di sini.

  • Memahami struktur asas Dockerfile adalah langkah pertama. Anda boleh mengautomasikan persediaan persekitaran dengan menggabungkan arahan seperti FROM , RUN , CMD , dan ENV .
  • Ubuntu adalah imej asas yang stabil dan sangat fleksibel. Repositori pakej yang kaya, pangkalan pengguna yang besar, dan ketersediaan versi LTS menjadikannya sesuai sebagai asas untuk persekitaran pembangunan.
  • Anda boleh pasang alat dan pustaka yang diperlukan melalui pengurusan pakej praktikal . Mengetahui cara menggunakan apt-get , membuang cache, dan melakukan pemasangan tidak interaktif adalah kunci.
  • Membina persekitaran praktikal seperti Python juga boleh dilakukan dengan Dockerfile. Alat seperti pyenv , pip , dan requirements.txt membolehkan anda mencipta persekitaran pembangunan yang sangat boleh diulang.
  • Kemahiran penyelesaian masalah secara langsung membawa kepada operasi stabil. Memahami perangkap biasa seperti kebenaran, isu rangkaian, dan cache pembinaan boleh meningkatkan kecekapan pembangunan dengan ketara.

Langkah Seterusnya untuk Pembelajaran Dockerfile

Kemampuan untuk mengendalikan Dockerfile membolehkan anda menyokong pelbagai kegunaan, tidak hanya dalam pembangunan tetapi juga dalam pengujian dan penyebaran ke persekitaran pengeluaran. Untuk pembelajaran masa depan, ia akan bermanfaat untuk meneruskan kepada topik berikut:

  • Mengurus konfigurasi pelbagai kontena menggunakan Docker Compose .
  • Integrasi dengan alat CI/CD (GitHub Actions, GitLab CI, dsb.) .
  • Interoperasi dengan alat orkestrasi kontena seperti Kubernetes .

8. FAQ (Soalan Lazim)

Q1. Versi Ubuntu mana yang patut saya pilih dalam Dockerfile saya?

A1. Pada dasarnya, jika anda mengutamakan kestabilan dan sokongan jangka panjang, biasanya anda akan memilih versi LTS (Long Term Support). Contohnya, ubuntu:22.04 dan ubuntu:20.04 digunakan dalam banyak persekitaran pembangunan dan boleh digunakan dengan yakin kerana tempoh sokongan 5 tahun mereka.
Sebaliknya, jika anda ingin menggunakan pakej dan versi bahasa terkini, anda boleh memilih pelepasan yang lebih baru seperti ubuntu:24.04, tetapi kami mengesyorkan anda mengujinya terlebih dahulu.

Q2. Mengapa saya mendapat “Package not found” apabila menggunakan apt-get install?

A2. Sebab paling biasa ialah anda belum menjalankan apt-get update terlebih dahulu. Jika anda cuba memasang tanpa mengemas kini senarai pakej, anda akan mendapat ralat kerana pakej yang bersesuaian tidak dapat ditemui dalam senarai yang sudah lapuk.
Contoh penggunaan yang betul:

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

Juga, berhati-hati dengan kesilapan taip dalam nama pakej dan nama pakej yang sudah tidak disokong (contohnya, python3 bukannya python).

Q3. Bagaimana saya menetapkan pembolehubah persekitaran dalam Dockerfile?

A3. Anda menetapkan pembolehubah persekitaran menggunakan arahan ENV. Pembolehubah persekitaran ini akan sah semasa proses pembinaan serta masa jalan kontena.
Contoh:

ENV DEBIAN_FRONTEND=noninteractive

Ini adalah tetapan tipikal yang digunakan untuk menekan prompt interaktif semasa pemasangan APT. Ia juga digunakan untuk menetapkan konfigurasi aplikasi dan kunci API dalam Dockerfile.

Q4. Apa perbezaan antara CMD dan ENTRYPOINT dalam Dockerfile?

A4. Kedua‑dua-duanya menentukan perintah yang akan dijalankan apabila kontena dimulakan, tetapi terdapat perbezaan dalam cara penggunaan dan kelakuannya.

ItemCMDENTRYPOINT
OverridableCan be overridden by the docker run commandBasically not overridden (treated as arguments)
UsageSets the default execution commandDefines a command that should always be executed

Contoh:

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

Dalam kes yang terakhir, anda boleh menghantar CMD sebagai argumen dalam bentuk docker run my-image another_script.py.

Q5. Saya mengedit Dockerfile saya, tetapi perubahan tidak kelihatan. Mengapa?

A5. Docker menggunakan cache semasa proses pembinaan, jadi walaupun anda membuat perubahan kecil pada Dockerfile, lapisan yang dicache masih mungkin digunakan.
Penyelesaian:

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

Ini akan melakukan pembinaan baru tanpa menggunakan cache, dan semua perubahan akan kelihatan.

年収訴求