1. Ringkasan
Docker adalah platform terbuka untuk mengembangkan, mengirim, dan menjalankan aplikasi. Dengan Docker, Anda dapat memisahkan aplikasi dari infrastruktur dan memperlakukan infrastruktur layaknya aplikasi terkelola. Docker membantu mengirim kode, menguji, dan men-deploy lebih cepat, serta mempersingkat siklus antara menulis dan menjalankan kode.
Docker melakukan proses tersebut dengan menggabungkan fitur containerization kernel dengan alur kerja serta peralatan yang membantu Anda mengelola dan men-deploy aplikasi.
Container Docker dapat langsung digunakan di Kubernetes, sehingga memudahkan container dijalankan di Kubernetes Engine. Setelah mempelajari hal-hal penting mengenai Docker, Anda akan memiliki keterampilan untuk mulai mengembangkan Kubernetes serta aplikasi dalam container.
Yang akan Anda pelajari
Di lab ini, Anda akan mempelajari cara melakukan hal-hal berikut:
- Membuat Dockerfile untuk aplikasi contoh
- Membangun gambar
- Menjalankan image sebagai container secara lokal
- Mengubah perilaku penampung
- Mengirim image ke Artifact Registry
Prasyarat
Ini adalah lab tingkat pendahuluan. Anda dianggap tidak memiliki atau hanya memiliki sedikit pengalaman terkait Docker dan container. Pemahaman dalam menggunakan Cloud Shell dan command line direkomendasikan, tetapi tidak wajib.
Penyiapan lingkungan mandiri
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.



- Nama project adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API, dan Anda dapat memperbaruinya kapan saja.
- Project ID harus unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis menghasilkan string unik; biasanya Anda tidak peduli dengan kata-katanya. Pada sebagian besar codelab, Anda harus mereferensikan Project ID (dan biasanya diidentifikasi sebagai
PROJECT_ID). Jadi, jika Anda tidak menyukainya, buat ID acak lain, atau, Anda dapat mencoba sendiri dan melihat apakah tersedia. Kemudian file akan "dibekukan" setelah project dibuat. - Ada nilai ketiga, Nomor Project yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan API/resource Cloud. Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Untuk menonaktifkan resource agar tidak menimbulkan penagihan di luar tutorial ini, ikuti petunjuk "pembersihan" yang ada di akhir codelab. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
2. Contoh Aplikasi
Aplikasi contoh telah disediakan untuk memfasilitasi lab ini. Di bagian ini, Anda akan mengambil kode sumber dan membangun aplikasi dalam bentuk aslinya sebelum melanjutkan ke proses penampungan.
Kode Sumber
Kode sumber untuk lab ini tersedia di repositori GoogleCloudPlatform/container-developer-workshop bersama dengan dokumentasi aplikasi contoh.
Mengonfigurasi git
git config --global user.name ${USER}
git config --global user.email ${USER}@qwiklabs.net
Meng-clone Cloud Source Repository aplikasi contoh
gcloud source repos clone sample-app ${HOME}/sample-app &&
cd ${HOME}/sample-app &&
git checkout main
Output
Cloning into '/home/student_03_49720296e995/sample-app'... remote: Finding sources: 100% (16/16) remote: Total 16 (delta 0), reused 16 (delta 0) Receiving objects: 100% (16/16), 47.23 KiB | 681.00 KiB/s, done. warning: remote HEAD refers to nonexistent ref, unable to checkout. Project [qwiklabs-gcp-02-4327c4e03d82] repository [sample-app] was cloned to [/home/student_03_49720296e995/sample-app]. Branch 'main' set up to track remote branch 'main' from 'origin'. Switched to a new branch 'main'
Membangun aplikasi contoh
cd ${HOME}/sample-app
./mvnw compile
Output
[INFO] Scanning for projects... ... [INFO] Compiling 1 source file to /home/student_03_49720296e995/sample-app/target/classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 10.080 s [INFO] Finished at: 2022-02-23T17:14:30Z [INFO] ------------------------------------------------------------------------
Menjalankan aplikasi sampel
cd ${HOME}/sample-app
./mvnw exec:java
Output
[INFO] Scanning for projects... ... Listening at http://localhost:8080
Melihat pratinjau aplikasi yang sedang berjalan
- Klik tombol Pratinjau Web Cloud Shell
- Klik Preview on port 8080
Setelah selesai
- Tekan CTRL + c di Cloud Shell untuk menghentikan aplikasi yang sedang berjalan
3. Dockerfile
Membuat Container Aplikasi dengan Dockerfile
Salah satu metode untuk mengemas aplikasi ke dalam container adalah dengan menggunakan Dockerfile. Dockerfile mirip dengan skrip yang menginstruksikan daemon tentang cara menyusun image container. Lihat dokumentasi referensi Dockerfile untuk mengetahui informasi selengkapnya.
Buat Dockerfile kosong di repositori aplikasi contoh.
touch ${HOME}/sample-app/Dockerfile
Buka Dockerfile di editor pilihan Anda.
vi ${HOME}/sample-app/Dockerfile
Memilih gambar awal
Menggunakan metode Dockerfile untuk membangun container memerlukan pengetahuan langsung tentang aplikasi untuk merakit container. Langkah pertama untuk membuat Dockerfile adalah memilih image yang akan digunakan sebagai dasar image Anda.Image ini harus berupa image induk atau dasar yang dikelola dan dipublikasikan oleh sumber tepercaya, biasanya perusahaan Anda.
Petunjuk FROM menginisialisasi tahap build baru dan menetapkan image dasar untuk perintah berurutan berikutnya. Oleh karena itu, petunjuk FROM biasanya merupakan petunjuk pertama dalam Dockerfile dan hanya dapat didahului oleh petunjuk ARG opsional untuk mendukung variabel.
Sintaksis: FROM <image>[:<tag> | @<digest>] [AS <name>]
Format gambar adalah <image>:<tag> atau <image>@<digest>. Jika tag atau ringkasan tidak ditentukan, tag defaultnya adalah :latest. Format <image> bervariasi berdasarkan registry yang digunakan untuk menyimpan gambar. Untuk Artifact Registry, format <image> adalah <region>-docker.pkg.dev/<project ID>/<repository name>/<image name>:<image tag>.
Untuk lab ini, kita menggunakan image openjdk:11.0-jdk publik, tambahkan baris berikut ke Dockerfile Anda
FROM openjdk:11.0-jdk
Menetapkan direktori kerja
Instruksi WORKDIR menetapkan direktori kerja untuk setiap instruksi berurutan yang mengikuti di Dockerfile. Untuk mengetahui informasi selengkapnya, lihat bagian WORKDIR dalam dokumentasi referensi Dockerfile
Sintaksis: WORKDIR <path>
Untuk lab ini, kita menggunakan direktori /app sebagai WORKDIR, tambahkan baris berikut ke bagian bawah Dockerfile Anda
WORKDIR /app
Menyalin file aplikasi
Instruksi COPY menyalin direktori atau file dari lokasi <source> ke jalur <destination> sistem file gambar. Beberapa aset <source> dapat ditentukan dan semuanya relatif terhadap konteks build. Konteks build akan dibahas lebih lanjut di bagian Build. Untuk mengetahui informasi selengkapnya, lihat bagian COPY dalam dokumentasi referensi Dockerfile
Sintaksis: COPY <source>... <destination>
Untuk lab ini, kita akan menyalin semua file di repositori ke sistem file image, tambahkan baris berikut ke bagian bawah Dockerfile Anda
COPY . /app
Kompilasi aplikasi
Petunjuk RUN mengeksekusi perintah di lapisan image baru di atas image saat ini dan menjalankan hasilnya. Image yang dihasilkan akan digunakan untuk langkah berurutan di Dockerfile. Untuk mengetahui informasi selengkapnya, lihat bagian RUN dalam dokumentasi referensi Dockerfile
Sintaksis: RUN <command>
Untuk lab ini, kita akan menggunakan Maven untuk mengompilasi aplikasi ke file JAR. Tambahkan baris berikut ke bagian bawah Dockerfile Anda
RUN ./mvnw compile assembly:single
Mulai aplikasi
Instruksi CMD memberikan perintah default untuk container yang sedang berjalan. Hanya boleh ada satu instruksi CMD dalam Dockerfile. Jika lebih dari satu CMD ditentukan, hanya CMD terakhir yang akan berlaku. Ada fungsi yang lebih canggih yang tersedia menggunakan petunjuk CMD dan ENTRYPOINT, tetapi hal itu tidak dibahas dalam lab ini. Untuk mengetahui informasi selengkapnya, lihat bagian CMD` dalam dokumentasi referensi Dockerfile
Sintaksis: CMD ["executable","param1","param2"]
Untuk lab ini, kita menjalankan file JAR yang kita kompilasi, tambahkan baris berikut ke bagian bawah Dockerfile Anda
CMD ["java","-jar","/app/target/sample-app-1.0.0-jar-with-dependencies.jar"]
Dockerfile akhir
Dockerfile akhir akan menjadi
FROM openjdk:11.0-jdk
WORKDIR /app
COPY . /app
RUN ./mvnw compile assembly:single
CMD ["java","-jar","/app/target/sample-app-1.0.0-jar-with-dependencies.jar"]
Lakukan commit Dockerfile secara lokal
cd ${HOME}/sample-app
git add Dockerfile
git commit -m "Added Dockerfile"
4. Build
Sekarang kita akan membangun image dari Dockerfile menggunakan perintah docker build. Perintah ini menginstruksikan daemon Docker untuk membangun image menggunakan petunjuk dari Dockerfile kita. Lihat dokumentasi referensi build Docker untuk mengetahui informasi selengkapnya.
Membangun image
cd ${HOME}/sample-app
export IMAGE_TAG=$(git rev-parse --short HEAD)
docker build --tag sample-app:${IMAGE_TAG} .
Output
Sending build context to Docker daemon 221.2kB Step 1/4 : FROM openjdk:11.0-jdk 11.0-jdk: Pulling from library/openjdk 0c6b8ff8c37e: Pull complete 412caad352a3: Pull complete e6d3e61f7a50: Pull complete 461bb1d8c517: Pull complete e442ee9d8dd9: Pull complete 542c9fe4a7ba: Pull complete 41de18d1833d: Pull complete Digest: sha256:d72b1b9e94e07278649d91c635e34737ae8f181c191b771bde6816f9bb4bd08a Status: Downloaded newer image for openjdk:11.0-jdk ---> 2924126f1829 Step 2/4 : WORKDIR /app ---> Running in ea037abb273d Removing intermediate container ea037abb273d ---> bd9b6d078082 Step 3/4 : COPY . /app ---> b9aec2b5de51 Step 4/4 : RUN ./mvnw compile jar:jar ---> Running in 3f5ff737b7fd [INFO] Scanning for projects... ... [INFO] Building jar: /app/target/sample-app-1.0.0.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 22.952 s [INFO] Finished at: 2022-02-23T18:09:08Z [INFO] ------------------------------------------------------------------------ Removing intermediate container 331443caebd3 ---> 152f65cc441e Step 5/5 : CMD ["java", "-jar", "/app/target/sample-app-1.0.0.jar"] ---> Running in 3d595a72231c Removing intermediate container 3d595a72231c ---> 0e40d7548cab Successfully built 0e40d7548cab Successfully tagged sample-app:aaa8895
5. Jalankan
Setelah berhasil membangun image container, kita sekarang dapat menjalankan aplikasi dan memastikan aplikasi berperilaku seperti yang diharapkan menggunakan perintah docker run. Perintah ini akan meluncurkan penampung di latar depan command prompt untuk pengujian atau proses debug. Lihat dokumentasi referensi docker run untuk mengetahui informasi selengkapnya.
Jalankan container menggunakan image
cd ${HOME}/sample-app
export IMAGE_TAG=$(git rev-parse --short HEAD)
docker run \
--rm \
-p 8080:8080 \
sample-app:${IMAGE_TAG}
Output
Listening at http://localhost:8080
Melihat pratinjau aplikasi yang berjalan di container
- Klik tombol Pratinjau Web Cloud Shell
- Klik Preview on port 8080
- Tekan CTRL + c di Cloud Shell untuk menghentikan penampung
Mengubah perilaku penampung
Menjalankan Docker Run menggunakan konfigurasi default di Dockerfile. Petunjuk dan parameter tambahan dapat ditambahkan untuk mengubah perilaku ini.
Mengaktifkan logging TRACE
cd ${HOME}/sample-app
export IMAGE_TAG=$(git rev-parse --short HEAD)
docker run \
--rm \
-p 8080:8080 \
sample-app:${IMAGE_TAG} \
java -Dorg.slf4j.simpleLogger.defaultLogLevel=trace -jar /app/target/sample-app-1.0.0-jar-with-dependencies.jar
Melihat pratinjau aplikasi yang berjalan di container
- Klik tombol Pratinjau Web Cloud Shell
- Klik Preview on port 8080
- Beralih ke tab Cloud Shell dan lihat logging tambahan
- Tekan CTRL + c di Cloud Shell untuk menghentikan container
Ubah port
cd ${HOME}/sample-app
export IMAGE_TAG=$(git rev-parse --short HEAD)
docker run \
--rm \
-e PORT=8081 \
-p 8081:8081 \
sample-app:${IMAGE_TAG}
Melihat pratinjau aplikasi yang berjalan di container
- Klik tombol Pratinjau Web Cloud Shell
- Klik Ubah port
- Masukkan 8081
- Klik Ubah dan Pratinjau
- Tekan CTRL + c di Cloud Shell untuk menghentikan container
6. Push
Setelah yakin bahwa image container berjalan dengan benar dan kita ingin membuat container ini tersedia untuk dijalankan di lingkungan lain dan/atau oleh pengguna lain, kita perlu mengirimkan image ke repositori bersama. Hal ini akan terjadi sebagai bagian dari pipeline build otomatis, tetapi di lingkungan pengujian, kita sudah mengonfigurasi repositori dan dapat mengirim image secara manual.
Kirim commit Dockerfile ke repositori sample-app
cd ${HOME}/sample-app
export IMAGE_TAG=$(git rev-parse --short HEAD)
git push
Memberi tag pada image untuk Artifact Registry
docker tag sample-app:${IMAGE_TAG} \
us-central1-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/apps/sample-app:${IMAGE_TAG}
Mengonfigurasi kredensial Anda untuk Artifact Registry
gcloud auth configure-docker us-central1-docker.pkg.dev
Saat diminta Do you want to continue (Y/n)? jawab y dan tekan Enter
Mengirim image ke Artifact Registry
docker push us-central1-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/apps/sample-app:${IMAGE_TAG}
Output
The push refers to repository [us-central1-docker.pkg.dev/qwiklabs-gcp-04-b47ced695a3c/apps/sample-app] 453b97f86449: Pushed e86791aa0382: Pushed d404c7ee0850: Pushed fe4f44af763d: Pushed 7c072cee6a29: Pushed 1e5fdc3d671c: Pushed 613ab28cf833: Pushed bed676ceab7a: Pushed 6398d5cccd2c: Pushed 0b0f2f2f5279: Pushed aaa8895: digest: sha256:459de00f86f159cc63f98687f7c9563fd65a2eb9bcc71c23dda3351baf13607a size: 2424
7. Selamat!
Selamat, Anda telah menyelesaikan codelab!
Yang telah Anda pelajari
- Membuat Dockerfile untuk aplikasi contoh
- Membangun gambar
- Menjalankan image sebagai container secara lokal
- Perilaku penampung yang berubah
- Mengirim image ke Artifact Registry