GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Mengurangi Ukuran Gambar Docker di Wadah Docker

Apakah gambar Docker Anda membutuhkan waktu terlalu lama untuk dibuat dan diterapkan? Apakah perlu berjam-jam untuk mengekspor? Berhentilah membuang waktu dan percepat proses ini dengan mengembangkan gambar yang lebih kecil. Dalam tutorial ini, Anda akan mempelajari tiga trik untuk mengurangi ukuran gambar Docker Anda.

Mari kita mulai!

Prasyarat

Tutorial ini akan menjadi demonstrasi langsung. Jika Anda ingin mengikuti, pastikan Anda memiliki yang berikut:

  • Desktop atau Mesin Docker. Ada versi Docker yang tersedia untuk Linux, Windows, dan macOS. Tutorial ini menggunakan Docker versi 20.10.8 build 3967b7d di komputer Ubuntu 18.04 LTS.
  • Node.js. Tutorial ini menggunakan Node.js versi 10.10.0 tetapi juga dapat digunakan dengan versi yang lebih baru.
  • Anda memerlukan editor kode seperti Visual Studio Code, vim, dan nano . Tutorial ini menggunakan nano.

Membuat Gambar Docker

Anda mungkin sudah memiliki gambar Docker yang ingin Anda perkecil. Jangan. Dalam tutorial ini, Anda akan memulai dari awal dengan membuat image Docker untuk pengujian Anda.

Anda akan mulai dengan membangun wadah untuk aplikasi Node.js Aplikasi Node.js yang akan Anda gunakan adalah contoh Hello World Express.js yang menampilkan teks “Hello World!” di browser Anda.

1. Pertama, buka sesi terminal dan buat direktori tempat Anda akan membuat gambar Docker dan file terkait. Untuk contoh ini, direktori kerja akan menjadi ~/docker_demo .

# Create the project directory
mdkir ~/docker_demo
# Change the current directory to your working directory
cd ~/docker_demo

Selanjutnya, buat tiga file di direktori kerja Anda. File-file ini adalah:

  • index.js – titik awal untuk aplikasi sampel Anda.
  • package.json – berisi metadata aplikasi Anda.
  • Dockerfile – berisi instruksi untuk membangun image Docker Anda. Jalankan perintah di bawah ini di terminal untuk membuat semua file ini sekaligus.
touch index.js package.json Dockerfile

3. Buka index.js di editor kode Anda, isi dengan kode di bawah ini, dan simpan.

const express = require('express')
const app = express()

app.get('/', (req, res) => res.send('Hello World!'))

app.listen(3000, () => {
  console.log(`Example app listening on port 3000!`)
})

4. Selanjutnya, buka package.json file untuk diedit, salin dan tempel kode di bawah ini, dan simpan.

{
  "name": "hello-world",
  "version": "1.0.0",
  "main": "index.js",
  "dependencies": {
    "express": "^4.16.2"
  },
  "scripts": {
    "start": "node index.js"
  }
}

5. Dengan cara yang sama, edit Dockerfile untuk mengisi kode di bawah ini dan menyimpan file.

# use the Node.js parent image 
FROM node:8 

# set a directory for the app
WORKDIR /app
# copy all the files to the container
COPY . .
# install dependencies
RUN npm install
# define the port number the container should expose
EXPOSE 3000

# run the application
CMD ["npm", "start"]

6. Jalankan docker build berikut ini perintah untuk membangun gambar Docker Anda. Opsi -t bendera menandai gambar Anda dengan nama untuk membuatnya dapat diidentifikasi. Contoh ini menggunakan nama ‘aplikasi_saya.’

docker build -t my_app .

7. Ketika Docker selesai membangun image, jalankan perintah berikut untuk melihat image Anda yang diberi tag dengan ‘my_app.’

grep perintah ini hanya tersedia di Linux, tetapi untuk melihat gambar Anda di sistem operasi lain, jalankan perintah docker images dan cari gambar dengan tag 'my_app.'

docker images | grep my_app

Seperti yang ditunjukkan pada gambar berikut, ukuran gambar Docker adalah 904MB.

8. Sekarang verifikasi gambar Anda berfungsi dengan benar. Jalankan perintah docker run berikut. Perintah ini akan menggunakan gambar Docker Anda untuk membuat wadah tempat aplikasi Anda akan berjalan.

docker run -p 3000:3000 -ti --rm --init my_app

Jika aplikasi dimulai dengan benar, pesan 'Contoh aplikasi mendengarkan pada port 3000!' akan dicetak di terminal Anda.

9. Untuk memverifikasi aplikasi Anda berfungsi, buka browser Anda dan navigasikan ke http://localhost:3000/. Teks 'Halo Dunia!' harus ditampilkan seperti yang ditunjukkan pada gambar berikut.

10. Untuk mengakhiri aplikasi dan kembali ke terminal prompt, tekan CTRL+C .

Mengurangi Ukuran Gambar Docker

Sekarang setelah Anda memiliki gambar Docker, saatnya mempelajari cara mengurangi ukuran gambar Anda! Bagian berikut membahas tiga metode untuk membuat ukuran gambar Docker Anda lebih kecil.

Metode 1:Menerapkan Pembuatan Multi-Tahap

Memiliki file Dockerfile terpisah untuk pengembangan dan produksi adalah praktik umum.

Dockerfile pengembangan berisi semua yang diperlukan untuk membangun aplikasi, sedangkan yang produksi menyertakan apa yang dibutuhkan aplikasi untuk dijalankan. Metode ini menghasilkan citra produksi akhir dengan ukuran optimum. Tetapi mengelola dua file Docker tidak perlu rumit.

Sejak diperkenalkannya pembangunan multi-tahap di versi 17.05, pengembang sekarang hanya membutuhkan satu Dockerfile berisi beberapa FROM instruksi untuk memisahkan tahap pengembangan dan produksi. Jadi, menyalin artefak secara selektif dari satu tahap pembangunan ke tahap pembangunan lainnya.

Sekarang saatnya menggunakan build multi-tahap pada gambar Anda!

1. Buka Dockerfile Anda di editor kode dan ganti kontennya dengan kode berikut. Kode Dockerfile baru ini memiliki dua tahap pembuatan seperti yang ditunjukkan oleh dua FROM garis.

Secara default, tahapan build tidak memiliki nama, dan kode Anda hanya dapat mereferensikannya sebagai bilangan bulat sesuai urutan kemunculannya (mulai dari nol) di Dockerfile. Anda dapat menambahkan as <name> ke FROM baris untuk menetapkan nama ke tahap pembuatan untuk identifikasi yang lebih baik .

# the develop build stage using the node parent image
FROM node:8 as develop

# set a directory for the app
WORKDIR /app
# copy all the files to the container
COPY . .
# install dependencies
RUN npm install

# the production build stage using the node parent image
FROM node:8

# Copy only the build artifact from the first (develop) build stage
# Any intermediate artifacts used to build your application are not included in the final image.
COPY --from=develop /app /

# define the port number the container should expose
EXPOSE 3000

# run the application
CMD ["npm", "start"]

2. Buat gambar baru Anda dengan nama my_app_multi_stage_builds dengan menjalankan perintah berikut.

docker build -t my_app_multi_stage_builds .

3. Setelah build, lihat ukuran gambar yang diperbarui dengan menjalankan perintah berikut.

docker images | grep my_app_multi_stage_builds

Aplikasi sampel kecil dan hanya memiliki beberapa artefak perantara. Namun masih ada pengurangan sebesar 1MB dibandingkan build image Docker sebelumnya.

Metode 2:Menggunakan Gambar Induk yang Ringan

Kecuali Anda membuat image Docker dari awal (menggunakan FROM scratch direktif), setiap gambar Docker memiliki gambar induk. Dockerfile file di bagian sebelumnya menggunakan node:8 sebagai gambar induk selama pembuatan.

Jika aplikasi Anda tidak memerlukan versi sistem operasi tertentu untuk dijalankan, pertimbangkan untuk menukar gambar induk Anda dengan yang lebih ringan. Jika Anda menggunakan Linux, image paling ringan di Docker Hub adalah Alpine.

Sekarang saatnya mempelajari cara mengganti gambar induk dengan Alpine!

1. Edit Dockerfile Anda dan ganti FROM node:8 kedua baris dengan FROM node:8-alpine . FROM baru ini instruksi, Docker, akan menggunakan node-8-alpine sebagai gambar induk. Sekarang gambar akhir Anda akan berjalan di Alpine, bukan di Node.js.

# the first build stage using the node parent image
FROM node:8 as build

# set a directory for the app
WORKDIR /app
# copy all the files to the container
COPY . .
# install dependencies
RUN npm install

# the second build stage using the node-8-alpine parent image
FROM node:8-alpine

# copy the required artifacts to from the first build stage
COPY --from=build /app /
# define the port number the container should expose
EXPOSE 3000

# run the application
CMD ["npm", "start"]

2. Jalankan perintah di bawah ini untuk membangun image Docker dengan nama my_app_alpine.

docker build -t my_app_alpine .

3. Terakhir, lihat ukuran gambar yang diperbarui dengan menjalankan perintah berikut.

docker images | grep my_app_alpine

Ukuran gambar Docker akhir sekarang hanya 75,2 MB. Pengurangan signifikan sebesar 827,8 MB!

Metode 3:Membuat File .dockerignore

Docker adalah aplikasi klien-server yang terdiri dari klien Docker atau CLI dan daemon Docker, yang mengelola image Docker (dan container, jaringan, dan volume).

CLI mengkompilasi konteks pembangunan terdiri dari file yang akan disertakan dalam gambar yang akan dibuat. CLI juga mencari file .dockerignore yang mencantumkan file yang akan diabaikan sebelum mengirim konteks build ke daemon Docker. Akibatnya, menyalin lebih sedikit file mengurangi ukuran gambar Docker.

Sekarang saatnya menerapkan file .dockerignore ke dalam build Anda!

1. Pertama, buat file kosong baru bernama .dockerignore .

touch .dockerignore

2. Selanjutnya, buat file dummy yang akan Anda abaikan oleh Docker selama build. Dalam contoh ini, buat file README.md dummy yang berukuran 2MB.

Jika di komputer Linux, jalankan perintah fallocate di bawah ini untuk membuat file.

fallocate -l 2MB README.md

Jika di komputer Windows, jalankan perintah fsutil sebagai gantinya.

fsutil file createnew README.md 2000000

3. Selanjutnya, buat image Docker baru Anda dengan menjalankan perintah berikut. Karena file README.md berada di direktori yang sama, harap file dummy ini menjadi bagian dari gambar Docker yang dihasilkan.

docker build -t my_app_readme .

4. Lihat ukuran gambar yang diperbarui dengan menjalankan perintah berikut.

docker images | grep my_app_readme

Seperti yang diharapkan, dengan dimasukkannya file README.md, ukuran gambar Docker akhir meningkat sebesar 2 MB.

5. Sekarang, kecualikan semua file dengan .md ekstensi dari gambar build. Untuk melakukannya, edit .dockerignore file dan isi dengan kode berikut.

# ignore markdown files
.md

File penurunan harga (.md) biasanya tidak memengaruhi fungsionalitas aplikasi dan umumnya aman untuk dikecualikan dari build. File lain yang dapat Anda kecualikan adalah log build, skrip pengujian, folder .git repositori Anda, dan file apa pun yang menyertakan informasi sensitif (seperti kata sandi).

6. Sekarang setelah Anda memperbarui file abaikan, jalankan kembali perintah build image Docker seperti yang ditunjukkan di bawah ini.

docker build -t my_app_dockerignore .

7. Terakhir, jalankan perintah di bawah ini untuk melihat ukuran image Docker yang baru, termasuk file README.md.

docker images | grep my_app_dockerignore

Sekarang setelah file README.md keluar dari versi baru, ukuran gambar Docker turun menjadi 75,2 MB!

Kesimpulan

Dalam tutorial ini, Anda mempelajari berbagai metode untuk mengurangi ukuran gambar Docker Anda. Anda telah mempelajari cara menggunakan build multi-tahap, build dari gambar induk yang lebih kecil, dan mengecualikan file yang tidak penting.

Lain kali Docker membutuhkan waktu terlalu lama untuk membangun dan menerapkan, jangan menahan diri dan menerapkan pengetahuan Anda untuk mengoptimalkan ukuran gambar Docker Anda. Metode mana yang menurut Anda paling sering Anda gunakan?


Docker
  1. Cara Menggunakan Tulis Docker

  2. Bagaimana Menghubungkan Kontainer Docker

  3. Cara Menggunakan Dockerfile untuk Membangun Gambar Docker

  1. Bagaimana Melewati Variabel Lingkungan ke Docker Containers

  2. Cara Memodifikasi Gambar Docker

  3. Cara melakukan perubahan pada gambar Docker

  1. Cara Mengurangi Ukuran Gambar Docker:6 Metode Optimasi

  2. Cara Mendaftar Kontainer Docker

  3. Cara menghapus semua wadah Docker