- 1 1. Pengenalan
- 2 2. Struktur Asas Dockerfile
- 3 3. Amalan: Mencipta Dockerfile Berasaskan Ubuntu
- 4 4. Membina dan Mengesahkan Imej Docker
- 5 5. Aplikasi: Membina Persekitaran Python
- 6 6. Isu Biasa dan Penyelesaian
- 7 7. Kesimpulan
- 8 8. FAQ (Soalan Lazim)
- 8.1 Q1. Versi Ubuntu mana yang patut saya pilih dalam Dockerfile saya?
- 8.2 Q2. Mengapa saya mendapat “Package not found” apabila menggunakan apt-get install?
- 8.3 Q3. Bagaimana saya menetapkan pembolehubah persekitaran dalam Dockerfile?
- 8.4 Q4. Apa perbezaan antara CMD dan ENTRYPOINT dalam Dockerfile?
- 8.5 Q5. Saya mengedit Dockerfile saya, tetapi perubahan tidak kelihatan. Mengapa?
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.
| Instruction | Description |
|---|---|
FROM | Specifies the base Docker image. Example: FROM ubuntu:24.04 |
RUN | Executes shell commands. Used for package installation, etc. |
COPY | Copies local files into the image. |
ADD | Similar to COPY, but also allows fetching from URLs and extracting archives. |
WORKDIR | Sets the working directory. |
ENV | Sets environment variables. |
CMD | Defines the command to be executed when the container starts (can be overridden). |
ENTRYPOINT | Similar 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
RUNsebanyak mungkin untuk mengurangkan bilangan lapisan. - Nyatakan versi dan konfigurasi secara eksplisit menggunakan
ENV. - Gunakan komen untuk menyatakan tujuan setiap operasi dengan jelas.
- Gunakan
rmdan--no-install-recommendsuntuk 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
-tdigunakan untuk memberi nama (tag) kepada imej. Dalam contoh ini, kami menamakan iamy-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
-itmembolehkan 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
virtualenvatauvenvboleh 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 pipsebelum 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 updatesebeluminstall: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
CMDatauENTRYPOINTmengalami ralat. - Walaupun anda tentukan
["/bin/bash"]dalamCMD, 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
CMDdanENTRYPOINTdan 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, danENV. - 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, danrequirements.txtmembolehkan 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.
| Item | CMD | ENTRYPOINT |
|---|---|---|
| Overridable | Can be overridden by the docker run command | Basically not overridden (treated as arguments) |
| Usage | Sets the default execution command | Defines 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.



