Pengantar
Docker adalah aplikasi yang menyederhanakan proses pengelolaan proses aplikasi di container . Container memungkinkan Anda menjalankan aplikasi dalam proses yang terisolasi sumber daya. Mereka mirip dengan mesin virtual, tetapi container lebih portabel, lebih ramah sumber daya, dan lebih bergantung pada sistem operasi host.
Untuk pengenalan mendetail tentang berbagai komponen container Docker, lihat The Docker Ecosystem:An Introduction to Common Components.
Dalam tutorial ini, Anda akan menginstal dan menggunakan Docker Community Edition (CE) di Ubuntu 22.04. Anda akan menginstal Docker sendiri, bekerja dengan container dan image, dan mendorong image ke Repositori Docker.
Prasyarat
Untuk mengikuti tutorial ini, Anda memerlukan yang berikut:
- Satu server Ubuntu 22.04 disiapkan dengan mengikuti panduan penyiapan server awal Ubuntu 22.04, termasuk
sudo
non-root pengguna dan firewall. - Akun di Docker Hub jika Anda ingin membuat gambar sendiri dan memasukkannya ke Docker Hub, seperti yang ditunjukkan pada Langkah 7 dan 8.
Langkah 1 — Memasang Docker
Paket instalasi Docker yang tersedia di repositori resmi Ubuntu mungkin bukan versi terbaru. Untuk memastikan kami mendapatkan versi terbaru, kami akan menginstal Docker dari repositori Docker resmi. Untuk melakukannya, kami akan menambahkan sumber paket baru, menambahkan kunci GPG dari Docker untuk memastikan unduhan valid, lalu menginstal paket.
Pertama, perbarui daftar paket yang ada:
- sudo apt update
Selanjutnya, instal beberapa paket prasyarat yang memungkinkan apt
gunakan paket melalui HTTPS:
- sudo apt install apt-transport-https ca-certificates curl software-properties-common
Kemudian tambahkan kunci GPG untuk repositori Docker resmi ke sistem Anda:
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Tambahkan repositori Docker ke sumber APT:
- echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Perbarui lagi daftar paket Anda yang ada agar tambahan dikenali:
- sudo apt update
Pastikan Anda akan menginstal dari repo Docker alih-alih repo Ubuntu default:
- apt-cache policy docker-ce
Anda akan melihat output seperti ini, meskipun nomor versi untuk Docker mungkin berbeda:
Output dari kebijakan apt-cache docker-cedocker-ce:
Installed: (none)
Candidate: 5:20.10.14~3-0~ubuntu-jammy
Version table:
5:20.10.14~3-0~ubuntu-jammy 500
500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
5:20.10.13~3-0~ubuntu-jammy 500
500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
Perhatikan bahwa docker-ce
tidak diinstal, tetapi kandidat untuk instalasi berasal dari repositori Docker untuk Ubuntu 22.04 (jammy
).
Terakhir, instal Docker:
- sudo apt install docker-ce
Docker sekarang harus diinstal, daemon dimulai, dan proses diaktifkan untuk memulai saat boot. Periksa apakah itu berjalan:
- sudo systemctl status docker
Outputnya harus mirip dengan berikut ini, menunjukkan bahwa layanan aktif dan berjalan:
Output● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-01 21:30:25 UTC; 22s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 7854 (dockerd)
Tasks: 7
Memory: 38.3M
CPU: 340ms
CGroup: /system.slice/docker.service
└─7854 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Menginstal Docker sekarang memberi Anda tidak hanya layanan Docker (daemon) tetapi juga docker
utilitas baris perintah, atau klien Docker. Kami akan menjelajahi cara menggunakan docker
perintah nanti dalam tutorial ini.
Langkah 2 — Menjalankan Perintah Docker Tanpa Sudo (Opsional)
Secara default, docker
perintah hanya dapat dijalankan root pengguna atau oleh pengguna di buruh pelabuhan group, yang secara otomatis dibuat selama proses instalasi Docker. Jika Anda mencoba menjalankan docker
perintah tanpa awalan dengan sudo
atau tanpa berada di buruh pelabuhan grup, Anda akan mendapatkan output seperti ini:
Outputdocker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.
Jika Anda ingin menghindari mengetik sudo
setiap kali Anda menjalankan docker
perintah, tambahkan nama pengguna Anda ke docker
grup:
- sudo usermod -aG docker ${USER}
Untuk menerapkan keanggotaan grup baru, keluar dari server dan masuk kembali, atau ketik berikut ini:
- su - ${USER}
Anda akan diminta memasukkan sandi pengguna untuk melanjutkan.
Konfirmasikan bahwa pengguna Anda sekarang telah ditambahkan ke buruh pelabuhan kelompokkan dengan mengetik:
- groups
Outputsammy sudo docker
Jika Anda perlu menambahkan pengguna ke docker
grup yang tidak Anda masuki, nyatakan nama pengguna itu secara eksplisit menggunakan:
- sudo usermod -aG docker username
Sisa artikel ini mengasumsikan Anda menjalankan docker
perintah sebagai pengguna di buruh pelabuhan kelompok. Jika Anda memilih untuk tidak melakukannya, harap tambahkan perintah dengan sudo
.
Mari kita jelajahi docker
perintah selanjutnya.
Langkah 3 — Menggunakan Perintah Docker
Menggunakan docker
terdiri dari melewatinya rantai opsi dan perintah diikuti oleh argumen. Sintaksnya mengambil bentuk ini:
- docker [option] [command] [arguments]
Untuk melihat semua subperintah yang tersedia, ketik:
- docker
Pada versi Docker 20.10.14 , daftar lengkap sub-perintah yang tersedia meliputi:
Output attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
Untuk melihat opsi yang tersedia untuk perintah tertentu, ketik:
- docker docker-subcommand --help
Untuk melihat informasi di seluruh sistem tentang Docker, gunakan:
- docker info
Mari kita jelajahi beberapa perintah ini. Kami akan mulai dengan bekerja dengan gambar.
Langkah 4 — Bekerja dengan Gambar Docker
Kontainer Docker dibuat dari image Docker. Secara default, Docker menarik gambar-gambar ini dari Docker Hub, registri Docker yang dikelola oleh Docker, perusahaan di balik proyek Docker. Siapa pun dapat menghosting image Docker mereka di Docker Hub, sehingga sebagian besar aplikasi dan distribusi Linux yang Anda perlukan akan memiliki image yang dihosting di sana.
Untuk memeriksa apakah Anda dapat mengakses dan mengunduh gambar dari Docker Hub, ketik:
- docker run hello-world
Output akan menunjukkan bahwa Docker bekerja dengan benar:
OutputUnable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:bfea6278a0a267fad2634554f4f0c6f31981eea41c553fdf5a83e95a41d40c38
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
Docker awalnya tidak dapat menemukan hello-world
image secara lokal, sehingga mendownload image dari Docker Hub, yang merupakan repositori default. Setelah gambar diunduh, Docker membuat wadah dari gambar dan aplikasi di dalam wadah dijalankan, menampilkan pesan.
Anda dapat mencari gambar yang tersedia di Docker Hub dengan menggunakan docker
perintah dengan search
sub-perintah. Misalnya, untuk mencari gambar Ubuntu, ketik:
- docker search ubuntu
Skrip akan merayapi Docker Hub dan mengembalikan daftar semua gambar yang namanya cocok dengan string pencarian. Dalam hal ini, outputnya akan mirip dengan ini:
OutputNAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 14048 [OK]
websphere-liberty WebSphere Liberty multi-architecture images … 283 [OK]
ubuntu-upstart DEPRECATED, as is Upstart (find other proces… 112 [OK]
neurodebian NeuroDebian provides neuroscience research s… 88 [OK]
open-liberty Open Liberty multi-architecture images based… 51 [OK]
...
Dalam RESMI kolom, Oke menunjukkan citra yang dibangun dan didukung oleh perusahaan di balik proyek tersebut. Setelah Anda mengidentifikasi gambar yang ingin Anda gunakan, Anda dapat mengunduhnya ke komputer Anda menggunakan pull
sub-perintah.
Jalankan perintah berikut untuk mengunduh ubuntu
resmi gambar ke komputer Anda:
- docker pull ubuntu
Anda akan melihat output berikut:
OutputUsing default tag: latest
latest: Pulling from library/ubuntu
e0b25ef51634: Pull complete
Digest: sha256:9101220a875cee98b016668342c489ff0674f247f6ca20dfc91b91c0f28581ae
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
Setelah gambar diunduh, Anda kemudian dapat menjalankan wadah menggunakan gambar yang diunduh dengan run
sub-perintah. Seperti yang Anda lihat dengan hello-world
contoh, jika gambar belum diunduh saat docker
dijalankan dengan run
subcommand, klien Docker akan mengunduh image terlebih dahulu, lalu menjalankan container menggunakannya.
Untuk melihat gambar yang telah diunduh ke komputer Anda, ketik:
- docker images
Outputnya akan terlihat seperti berikut:
OutputREPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 1d622ef86b13 3 weeks ago 73.9MB
hello-world latest bf756fb1ae65 4 months ago 13.3kB
Seperti yang akan Anda lihat nanti dalam tutorial ini, gambar yang Anda gunakan untuk menjalankan container dapat dimodifikasi dan digunakan untuk menghasilkan gambar baru, yang kemudian dapat diunggah (didorong adalah istilah teknisnya) ke Docker Hub atau registry Docker lainnya.
Mari kita lihat cara menjalankan container lebih detail.
Langkah 5 — Menjalankan Kontainer Docker
hello-world
container yang Anda jalankan pada langkah sebelumnya adalah contoh container yang berjalan dan keluar setelah memancarkan pesan pengujian. Wadah bisa jauh lebih berguna dari itu, dan bisa interaktif. Bagaimanapun, mereka mirip dengan mesin virtual, hanya lebih ramah sumber daya.
Sebagai contoh, mari kita jalankan container menggunakan image terbaru Ubuntu. Kombinasi -i dan -t switch memberi Anda akses shell interaktif ke dalam wadah:
- docker run -it ubuntu
Prompt perintah Anda harus berubah untuk mencerminkan fakta bahwa Anda sekarang bekerja di dalam wadah dan harus mengambil formulir ini:
Outputroot@d9b100f2f636:/#
Catat id wadah di prompt perintah. Dalam contoh ini adalah d9b100f2f636
. Anda akan memerlukan ID penampung itu nanti untuk mengidentifikasi penampung saat Anda ingin menghapusnya.
Sekarang Anda dapat menjalankan perintah apa pun di dalam wadah. Misalnya, mari perbarui database paket di dalam wadah. Anda tidak perlu mengawali perintah apa pun dengan sudo
, karena Anda beroperasi di dalam penampung sebagai root pengguna:
- apt update
Kemudian instal aplikasi apa saja di dalamnya. Mari kita instal Node.js:
- apt install nodejs
Ini menginstal Node.js dalam wadah dari repositori resmi Ubuntu. Saat penginstalan selesai, verifikasi bahwa Node.js telah diinstal:
- node -v
Anda akan melihat nomor versi yang ditampilkan di terminal Anda:
Outputv12.22.9
Setiap perubahan yang Anda buat di dalam penampung hanya berlaku untuk penampung itu.
Untuk keluar dari container, ketik exit
saat diminta.
Mari kita lihat mengelola container di sistem kita selanjutnya.
Langkah 6 — Mengelola Container Docker
Setelah menggunakan Docker untuk sementara waktu, Anda akan memiliki banyak wadah aktif (berjalan) dan tidak aktif di komputer Anda. Untuk melihat yang aktif , gunakan:
- docker ps
Anda akan melihat output seperti berikut:
OutputCONTAINER ID IMAGE COMMAND CREATED
Dalam tutorial ini, Anda memulai dua kontainer; satu dari hello-world
gambar dan lainnya dari ubuntu
gambar. Kedua penampung tidak lagi berjalan, tetapi masih ada di sistem Anda.
Untuk melihat semua container — aktif dan tidak aktif, jalankan docker ps
dengan -a
beralih:
- docker ps -a
Anda akan melihat output seperti ini:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu "bash" About a minute ago Exited (0) 7 seconds ago dazzling_taussig
587000e49d53 hello-world "/hello" 5 minutes ago Exited (0) 5 minutes ago adoring_kowalevski
Untuk melihat wadah terbaru yang Anda buat, berikan -l
beralih:
- docker ps -l
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu "bash" 3 minutes ago Exited (0) 2 minutes ago dazzling_taussig
Untuk memulai container yang dihentikan, gunakan docker start
, diikuti dengan ID penampung atau nama penampung. Mari kita mulai container berbasis Ubuntu dengan ID 1c08a7a0d0e4
:
- docker start 1c08a7a0d0e4
Wadah akan dimulai, dan Anda dapat menggunakan docker ps
untuk melihat statusnya:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu "bash" 6 minutes ago Up 8 seconds dazzling_taussig
Untuk menghentikan container yang sedang berjalan, gunakan docker stop
, diikuti dengan ID atau nama penampung. Kali ini, kita akan menggunakan nama yang diberikan Docker untuk container, yaitu dazzling_taussig
:
- docker stop dazzling_taussig
Setelah Anda memutuskan bahwa Anda tidak lagi membutuhkan wadah, hapus dengan docker rm
perintah, sekali lagi menggunakan ID wadah atau namanya. Gunakan docker ps -a
perintah untuk menemukan ID wadah atau nama wadah yang terkait dengan hello-world
gambar dan hapus.
- docker rm adoring_kowalevski
Anda dapat memulai wadah baru dan memberinya nama menggunakan --name
mengalihkan. Anda juga dapat menggunakan --rm
beralih untuk membuat wadah yang menghapus dirinya sendiri saat dihentikan. Lihat docker run help
perintah untuk informasi lebih lanjut tentang opsi ini dan lainnya.
Wadah dapat diubah menjadi gambar yang dapat Anda gunakan untuk membuat wadah baru. Mari kita lihat cara kerjanya.
Langkah 7 — Melakukan Perubahan dalam Wadah ke Gambar Docker
Saat Anda memulai gambar Docker, Anda dapat membuat, memodifikasi, dan menghapus file seperti yang Anda bisa dengan mesin virtual. Perubahan yang Anda buat hanya akan berlaku untuk penampung tersebut. Anda dapat memulai dan menghentikannya, tetapi setelah Anda menghancurkannya dengan docker rm
perintah, perubahan akan hilang untuk selamanya.
Bagian ini menunjukkan cara menyimpan status container sebagai image Docker baru.
Setelah menginstal Node.js di dalam wadah Ubuntu, Anda sekarang memiliki wadah yang menjalankan gambar, tetapi wadahnya berbeda dari gambar yang Anda gunakan untuk membuatnya. Tetapi Anda mungkin ingin menggunakan kembali wadah Node.js ini sebagai dasar untuk gambar baru nanti.
Kemudian komit perubahan ke instance image Docker baru menggunakan perintah berikut.
- docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name
-m switch adalah untuk pesan komit yang membantu Anda dan orang lain mengetahui perubahan apa yang Anda buat, sementara -a digunakan untuk menentukan pengarang. container_id
adalah yang Anda catat sebelumnya di tutorial saat Anda memulai sesi Docker interaktif. Kecuali Anda membuat repositori tambahan di Docker Hub, repository
biasanya adalah nama pengguna Docker Hub Anda.
Misalnya, untuk pengguna sammy , dengan ID penampung d9b100f2f636
, perintahnya adalah:
- docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs
Saat Anda berkomitmen gambar, gambar baru disimpan secara lokal di komputer Anda. Nanti dalam tutorial ini, Anda akan belajar cara memasukkan gambar ke registri Docker seperti Docker Hub sehingga orang lain dapat mengaksesnya.
Mencantumkan gambar Docker lagi akan menampilkan gambar baru, serta gambar lama asalnya:
- docker images
Anda akan melihat output seperti ini:
OutputREPOSITORY TAG IMAGE ID CREATED SIZE
sammy/ubuntu-nodejs latest 7c1f35226ca6 7 seconds ago 179MB
...
Dalam contoh ini, ubuntu-nodejs
adalah gambar baru, yang diturunkan dari ubuntu
yang sudah ada gambar dari Docker Hub. Perbedaan ukuran mencerminkan perubahan yang dilakukan. Dan dalam contoh ini, perubahannya adalah bahwa NodeJS telah diinstal. Jadi lain kali Anda perlu menjalankan wadah menggunakan Ubuntu dengan NodeJS yang sudah diinstal sebelumnya, Anda bisa menggunakan gambar baru.
Anda juga dapat membuat Gambar dari Dockerfile
, yang memungkinkan Anda mengotomatiskan penginstalan perangkat lunak dalam gambar baru. Namun, itu di luar cakupan tutorial ini.
Sekarang mari berbagi gambar baru dengan orang lain sehingga mereka dapat membuat wadah darinya.
Langkah 8 — Mendorong Gambar Docker ke Repositori Docker
Langkah logis berikutnya setelah membuat gambar baru dari gambar yang ada adalah membagikannya dengan beberapa teman Anda, seluruh dunia di Docker Hub, atau registri Docker lain yang dapat Anda akses. Untuk mendorong gambar ke Docker Hub atau registri Docker lainnya, Anda harus memiliki akun di sana.
Untuk mendorong gambar Anda, pertama-tama masuk ke Docker Hub.
- docker login -u docker-registry-username
Anda akan diminta untuk mengautentikasi menggunakan kata sandi Docker Hub Anda. Jika Anda menentukan sandi yang benar, otentikasi akan berhasil.
Catatan: Jika nama pengguna registri Docker Anda berbeda dari nama pengguna lokal yang Anda gunakan untuk membuat gambar, Anda harus menandai gambar Anda dengan nama pengguna registri Anda. Untuk contoh yang diberikan pada langkah terakhir, Anda akan mengetik:
- docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs
Kemudian Anda dapat mendorong gambar Anda sendiri menggunakan:
- docker push docker-registry-username/docker-image-name
Untuk mendorong ubuntu-nodejs
gambar ke sammy repositori, perintahnya adalah:
- docker push sammy/ubuntu-nodejs
Proses ini mungkin memerlukan waktu untuk diselesaikan saat mengupload gambar, tetapi setelah selesai, hasilnya akan terlihat seperti ini:
OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Pushed
5f70bf18a086: Pushed
a3b5c80a4eba: Pushed
7f18b442972b: Pushed
3ce512daaf78: Pushed
7aae4540b42d: Pushed
...
Setelah memasukkan gambar ke registri, itu akan terdaftar di dasbor akun Anda, seperti yang ditunjukkan pada gambar di bawah ini.
Jika upaya push menghasilkan kesalahan semacam ini, kemungkinan Anda tidak masuk:
OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required
Masuk dengan docker login
dan ulangi upaya push. Kemudian verifikasi bahwa itu ada di halaman repositori Docker Hub Anda.
Anda sekarang dapat menggunakan docker pull sammy/ubuntu-nodejs
untuk menarik image ke mesin baru dan menggunakannya untuk menjalankan container baru.
Kesimpulan
Dalam tutorial ini Anda menginstal Docker, bekerja dengan gambar dan wadah, dan mendorong gambar yang dimodifikasi ke Docker Hub. Sekarang setelah Anda mengetahui dasar-dasarnya, jelajahi tutorial Docker lainnya di Komunitas DigitalOcean.