Docker:Pendahuluan
Docker adalah alat manajemen platform terbuka untuk Linux Containers. Ini menyediakan sarana bagi pengembang dan administrator sistem untuk membangun dan mengemas aplikasi ke dalam wadah yang ringan. Docker terdiri dari komponen-komponen berikut:
- Mesin Docker – Alat pengemasan dan runtime yang portabel dan ringan
- Hub Docker – Layanan cloud untuk berbagi aplikasi dan mengotomatiskan alur kerja
Docker digunakan untuk membuat wadah aplikasi berbasis gambar. Kontainer berbasis gambar mengemas aplikasi dengan runtime stack individual ke dalam satu kontainer. Ini membuat wadah independen dari sistem operasi host dan versi kernel. Hasilnya, Anda dapat menjalankan aplikasi yang sama, tidak berubah, di laptop, mesin virtual pusat data, dan cloud apa pun. Anda dapat mentransfer container ini ke komputer lain yang menjalankan Docker dan menjalankan aplikasi tanpa masalah kompatibilitas.
Berikut ini daftar keuntungan tambahan dari menjalankan aplikasi dalam container Docker:
- Image Docker hanya berisi konten yang diperlukan untuk menjalankan aplikasi sehingga lebih kecil dari mesin virtual, yang memerlukan seluruh sistem operasi.
- Kontainer Docker berjalan lebih cepat daripada aplikasi yang menyertakan overhead seluruh mesin virtual.
- Container Docker menyertakan antarmuka jaringan, sistem file, dan memorinya sendiri, yang memungkinkan aplikasi yang berjalan di container untuk diisolasi dan diamankan dari proses lain di komputer host.
Gambar Docker
Kontainer Docker dibuat dari image Docker. Anda membuat wadah Docker untuk menjalankan aplikasi Anda dari gambar Docker ini. Contoh berikut membuat container Docker bernama “test” dari image Docker bernama centos:7” dan menjalankan /bin/bash.
# docker create --name test centos:7 /bin/bash Unable to find image 'centos:7' locally Trying to pull repository docker.io/library/centos ... 7: Pulling from docker.io/library/centos 469cfcc7a4b3: Pull complete Digest: sha256:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16 Status: Downloaded newer image for docker.io/centos:7 a79ce1655f2ca17c7ac8cc15f307ba0bb438fbebd4595568df3433dd5ff79b73
Gambar adalah templat hanya-baca yang dapat berisi seluruh sistem operasi dengan layanan dan aplikasi tambahan yang diinstal. Docker menyediakan kemampuan untuk membangun gambar atau memperbarui gambar yang ada. Anda dapat membuat gambar Docker dari baris perintah atau Anda dapat menyimpan instruksi untuk membuat gambar di Dockerfile. Docker membaca Dockerfile ini dan menjalankan instruksi saat Anda memulai pembuatan image Docker.
Setiap gambar dimulai dari gambar dasar (misalnya, centos). Setiap gambar Docker terdiri dari serangkaian lapisan yang dibangun dari gambar dasar ini. Setiap instruksi di Dockerfile membuat layer baru pada gambar. Setiap kali Anda membuat perubahan pada gambar Docker, hanya lapisan itu yang diperbarui atau ditambahkan. Docker menggunakan unionfs untuk menggabungkan lapisan-lapisan ini menjadi satu gambar. Layanan sistem file unionfs memungkinkan file dan direktori dari sistem file terpisah untuk dilapiskan ke dalam satu sistem file.
Setelah Anda membuat gambar Docker, Anda dapat membagikan gambar dengan menyimpannya di registri Docker. Registri ini dapat bersifat pribadi atau publik. Docker Hub adalah registry Docker publik yang bertindak sebagai platform Software-as-a-Service untuk berbagi dan mengelola container Docker.
Cara menginstal docker di CentOS / RHEL / FedoraCara menginstal Docker di Mac
Registry Hub Docker
Docker Hub Registry menghosting aplikasi sebagai image Docker dan menyediakan layanan yang memungkinkan Anda membuat dan mengelola lingkungan Docker. Registri Docker Hub dimiliki dan dikelola oleh Docker, Inc. dan terletak di https://registry.hub.docker.com/.
Docker Hub menyediakan sejumlah repositori dan setiap repositori dapat berisi sejumlah gambar. Selain meng-hosting gambar Docker, Docker Hub menyediakan layanan seperti otentikasi pengguna, pembuatan gambar otomatis dan alat alur kerja, dan integrasi dengan GitHub dan BitBucket. Untuk menggunakan layanan Docker ini, Anda perlu membuat akun Docker Hub. Anda dapat membuat akun di https://hub.docker.com/account/signup/. Anda juga dapat membuat akun dari baris perintah dengan menggunakan perintah berikut:
# docker loginCara Membuat Repositori Publik/Pribadi di Docker Hub dan menghubungkannya dari jarak jauh menggunakan baris perintah
Anda dapat mencari gambar Docker dan menarik (mengunduh) gambar dari Docker Hub tanpa memiliki akun. Untuk mendorong (mengunggah) gambar, meninggalkan komentar pada gambar atau repositori, dan menggunakan semua layanan Docker Hub yang tersedia, Anda memerlukan akun Docker Hub.
Menginstal dan Memulai Docker
Menginstal dan memulai layanan buruh pelabuhan adalah tugas yang mudah. Anda dapat menggunakan perintah berikut untuk menginstal paket buruh pelabuhan:
# yum install docker
Gunakan perintah systemctl untuk mengaktifkan dan memulai layanan buruh pelabuhan.
# systemctl enable docker # systemctl start docker
Secara default, Docker menggunakan devicemapper sebagai driver penyimpanan. Dengan RedHat Linux 7, Anda dapat mengonfigurasi Mesin Docker untuk menggunakan Btrfs. Ini memungkinkan Anda untuk memanfaatkan fitur snapshot dari Btrfs. Perintah berikut menampilkan semua file yang diinstal dari paket buruh pelabuhan:
# rpm -ql docker /etc/docker /etc/docker/certs.d /etc/docker/certs.d/redhat.com /etc/docker/certs.d/redhat.com/redhat-ca.crt /etc/docker/certs.d/redhat.io /etc/docker/certs.d/redhat.io/redhat-ca.crt ...
Anda dapat melihat bahwa, selain binari buruh pelabuhan dan file konfigurasi, dokumentasi dan halaman manual diinstal untuk semua perintah buruh pelabuhan. Direktori /var/lib/docker kosong sampai layanan buruh pelabuhan dimulai. Serangkaian perintah berikut menampilkan isi direktori sebelum dan sesudah memulai buruh pelabuhan.
# ls /var/lib/docker # systemctl enable docker # systemctl start docker # ls /var/lib/docker containers graph linkgraph.db tmp volumes devicemapper init repositories-devicemapper trust
Utilitas buruh pelabuhan
Antarmuka baris perintah buruh pelabuhan memiliki lebih dari 30 perintah. Lihat halaman manual buruh pelabuhan untuk daftar perintah. Perintah info docker menampilkan informasi seluruh sistem tentang instalasi Docker. Lihat halaman manual docker-info untuk informasi lebih lanjut. Perhatikan bahwa driver penyimpanan default adalah devicemapper dan data serta metadata disimpan dalam perangkat loop:/dev/loop0 dan /dev/loop1.
# docker info Containers: 1 Running: 0 Paused: 0 Stopped: 1 Images: 1 Server Version: 1.13.1 Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: false Native Overlay Diff: true Logging Driver: journald ...
Pengguna selain root dapat menjalankan perintah buruh pelabuhan jika Anda menambahkannya ke grup buruh pelabuhan dan mengkonfigurasi ulang layanan buruh pelabuhan.
Menelusuri Registry Docker Hub untuk Gambar
Gunakan perintah pencarian buruh pelabuhan untuk mencari gambar di Hub Docker. Ditampilkan di bawah ini adalah output dari perintah “pencarian buruh pelabuhan”:
# docker search centos INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/centos The official build of CentOS. 4207 [OK] docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 108 [OK] docker.io docker.io/jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x8... 94 [OK] docker.io docker.io/consol/centos-xfce-vnc Centos container with "headless" VNC sessi... 52 [OK] docker.io docker.io/imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 40 [OK] ...
Perintah ini mencari Docker Hub untuk gambar "centos". Outputnya mencakup nama repositori/gambar, deskripsi, jumlah bintang yang diberikan, apakah gambar itu resmi, dan apakah itu otomatis. Kolom nama dalam formulir berikut dan dapat menyertakan repositori yang berisi untuk memberikan identifikasi unik:
[repository_name]/[image_name]
Bintang mengukur popularitas gambar. Siapa pun yang memiliki akun Docker Hub dapat "membintangi" gambar jika mereka menyukainya. Contoh berikut menelusuri gambar “centos” dengan minimal 3 bintang:
# docker search -s 3 centos Flag --stars has been deprecated, use --filter=stars=3 instead INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/centos The official build of CentOS. 4207 [OK] docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 108 [OK] docker.io docker.io/jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x8... 94 [OK] ...
Repositori "resmi" disertifikasi oleh vendor atau kontributor Docker. Gambar “otomatis” dibuat oleh proses pembuatan otomatis Hub Docker.
Mengunduh Gambar dari Docker Hub
Gunakan perintah "docker pull" untuk mengunduh gambar atau repositori dari Docker Hub Registry ke sistem lokal Anda. Contoh berikut menarik centos:gambar terbaru.
# docker pull centos Using default tag: latest Trying to pull repository docker.io/library/centos ... latest: Pulling from docker.io/library/centos Digest: sha256:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16 Status: Downloaded newer image for docker.io/centos:latest
Gunakan perintah “gambar buruh pelabuhan” untuk membuat daftar gambar yang disimpan di repositori Docker lokal.
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos 7 e934aafc2206 2 weeks ago 199 MB docker.io/centos latest e934aafc2206 2 weeks ago 199 MB
Setiap gambar dalam repositori dibedakan berdasarkan TAG dan IMAGE ID.
Berikut ini menunjukkan lokasi file konfigurasi buruh pelabuhan.
# cd /var/lib/docker/ # ll total 4 drwx------. 3 root root 77 Apr 21 07:57 containers drwx------. 3 root root 21 Apr 21 07:56 image drwxr-x---. 3 root root 18 Apr 21 07:56 network drwx------. 6 root root 4096 Apr 21 07:57 overlay2 drwx------. 4 root root 30 Apr 21 07:56 plugins drwx------. 2 root root 6 Apr 21 07:56 swarm drwx------. 2 root root 6 Apr 21 07:57 tmp drwx------. 2 root root 6 Apr 21 07:56 trust drwx------. 2 root root 24 Apr 21 07:56 volumesCara Daftar / Cari / Tarik gambar buruh pelabuhan di Linux
Menjalankan Aplikasi di Dalam Wadah
Gunakan perintah docker run untuk menjalankan aplikasi di dalam wadah. Perintah ini memulai proses dengan sistem filenya sendiri, jaringannya sendiri, dan pohon prosesnya sendiri yang terisolasi. Sintaks berikut tidak menyertakan semua opsi yang tersedia untuk perintah:
# docker run [OPTION...] IMAGE [COMMMAND] {ARG...]
IMAGE yang memulai proses dapat menentukan default yang terkait dengan proses yang akan dijalankan dalam wadah, jaringan, dan lainnya, tetapi opsi run docker menimpa pengaturan di IMAGE. Jika IMAGE tidak tersedia secara lokal, docker run menarik image dengan cara yang sama seperti perintah docker pull sebelum memulai container di IMAGE.
Ditampilkan di bawah ini adalah dua contoh penggunaan docker run. Contoh pertama menggunakan gambar "centos", yang sudah ada di mesin lokal. Docker menggunakan gambar untuk membuat lingkungan CentOS baru dan kemudian menjalankan perintah echo untuk menampilkan “Halo”.
# docker run centos /bin/echo "Hello" Hello
Contoh kedua menggunakan gambar fedora, yang tidak ada di sistem lokal. Docker menarik image dari Docker Hub lalu menggunakan image tersebut untuk membuat lingkungan Fedora baru dan menjalankan perintah echo.
# docker run fedora /bin/echo "Hello" Unable to find image 'fedora:latest' locally Trying to pull repository docker.io/library/fedora ... latest: Pulling from docker.io/library/fedora 2176639d844b: Pull complete Digest: sha256:ec588fc80b05e19d3006bf2e8aa325f0a2e2ff1f609b7afb39176ca8e3e13467 Status: Downloaded newer image for docker.io/fedora:latest Hello
Dalam kedua contoh, wadah Docker berhenti setelah "Halo" ditampilkan ke layar. Gunakan perintah docker ps untuk membuat daftar container dan tidak ada container yang ditampilkan:
# docker ps
Itu karena "docker ps" hanya menampilkan container yang sedang berjalan. Untuk menampilkan semua container termasuk container yang dihentikan, gunakan perintah “docker ps -a”.
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7b772ea59c92 fedora "/bin/echo Hello" 25 seconds ago Exited (0) 23 seconds ago vigilant_haibt 263e715ae13c centos "/bin/echo Hello" About a minute ago Exited (0) About a minute ago condescending_aryabhata a79ce1655f2c centos:7 "/bin/bash" 4 hours ago Created test
Perintah gambar buruh pelabuhan menunjukkan bahwa gambar "terbaru" dari repositori "fedora" diunduh dari Docker Hub saat menggunakan perintah menjalankan buruh pelabuhan:
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos 7 e934aafc2206 2 weeks ago 199 MB docker.io/centos latest e934aafc2206 2 weeks ago 199 MB docker.io/fedora latest 9110ae7f579f 6 weeks ago 235 MB
Menjalankan Wadah Docker Interaktif
Gunakan –t dan –i opsi dengan perintah docker run untuk menjalankan wadah interaktif. Opsi ini dijelaskan:
- -t :Alokasikan pseudo-tty dan lampirkan ke STDIN (input standar) dari sebuah wadah
- -i :Biarkan STDIN wadah tetap terbuka
Ditampilkan di bawah ini adalah dua contoh penggunaan perintah docker run dengan opsi –t dan –i. Dalam kedua contoh, CentOS Linux 7.4 berjalan di sistem lokal:
# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
Contoh pertama menggunakan gambar “centos:7”. Docker menggunakan gambar untuk membuat lingkungan CentOS baru dan kemudian menjalankan perintah bash shell. Versi OS dari gambar ini adalah CentOS 7.
# docker run -t -i centos:7 /bin/bash [root@b3e1316c4653 /]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
Contoh kedua menggunakan gambar ubuntu. Karena tidak ada gambar spesifik yang ditentukan, Docker menggunakan gambar Ubuntu "terbaru" untuk membuat lingkungan Ubuntu baru dan kemudian menjalankan perintah bash shell. Versi OS dari gambar ini adalah Ubuntu 16.04.4. Juga karena gambar ubuntu tidak tersedia secara lokal, buruh pelabuhan pertama-tama akan mengunduhnya dari repositori dan kemudian menjalankannya.
# docker run -t -i ubuntu /bin/bash Unable to find image 'ubuntu:latest' locally Trying to pull repository docker.io/library/ubuntu ... latest: Pulling from docker.io/library/ubuntu d3938036b19c: Pull complete a9b30c108bda: Pull complete 67de21feec18: Pull complete 817da545be2b: Pull complete d967c497ce23: Pull complete Digest: sha256:9ee3b83bcaa383e5e3b657f042f4034c92cdd50c03f73166c145c9ceaea9ba7c Status: Downloaded newer image for docker.io/ubuntu:latest
root@9ee24718262c:/# cat /etc/os-release NAME="Ubuntu" VERSION="16.04.4 LTS (Xenial Xerus)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 16.04.4 LTS" VERSION_ID="16.04" HOME_URL="http://www.ubuntu.com/" SUPPORT_URL="http://help.ubuntu.com/" BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/" VERSION_CODENAME=xenial UBUNTU_CODENAME=xenial
Anda dapat menggunakan perintah keluar atau tekan CTRL + D untuk keluar dari wadah interaktif.
Mendaftarkan Kontainer dan Melihat Log Kontainer
Gunakan perintah docker ps untuk membuat daftar informasi tentang container Docker. Secara default, hanya container yang sedang berjalan yang terdaftar. Sertakan –a opsi dengan perintah docker ps untuk menampilkan semua wadah. Keluaran mencakup ID wadah unik dan nama wadah unik yang dibuat secara otomatis saat wadah dibuat. Output dari perintah docker ps juga mencakup gambar yang digunakan untuk membuat container, perintah yang berjalan di container, dan informasi status. Informasi status mencakup kapan penampung dibuat, dan berapa lama penampung telah berjalan.
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9ee24718262c ubuntu "/bin/bash" 3 minutes ago Exited (127) 2 seconds ago modest_turing b3e1316c4653 centos:7 "/bin/bash" 6 minutes ago Exited (0) 4 minutes ago gracious_pare 7b772ea59c92 fedora "/bin/echo Hello" 18 minutes ago Exited (0) 18 minutes ago vigilant_haibt 263e715ae13c centos "/bin/echo Hello" 19 minutes ago Exited (0) 19 minutes ago condescending_aryabhata a79ce1655f2c centos:7 "/bin/bash" 4 hours ago Created test
Perintah docker logs melihat ke dalam container dan mengembalikan output standarnya. Anda dapat menggunakan ID penampung atau nama penampung sebagai argumen untuk perintah.
# docker logs b3e1316c4653 [root@b3e1316c4653 /]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@b3e1316c4653 /]# exit exit
Pada contoh di atas, perintah docker logs menunjukkan bahwa perintah “cat /etc/redhat-release” dieksekusi di dalam container. Perintah docker ps dan docker logs perlu dijalankan dari luar container, yaitu dari jendela terminal lain.
Menampilkan Semua Informasi untuk Wadah atau Gambar
Gunakan perintah docker inspect untuk melihat semua informasi yang tersedia untuk container atau image. Contoh berikut menunjukkan beberapa informasi yang ditampilkan. Gunakan –f {{.section.subsection}} pilihan untuk menampilkan informasi tertentu. Contoh berikut hanya menampilkan pengaturan jaringan:
# docker inspect -f {{.NetworkSettings}} modest_turing {{ 98e04ea6d68753022ae2212b06b1514323927a1ed117448bc70ea3fa9a2f4a06 false 0 map[] /var/run/docker/netns/98e04ea6d687 [] []} { 0 0 } map[bridge:0xc4200c0300]}
Contoh berikut menampilkan alamat IP:
# docker inspect -f {{.NetworkSettings.IPAddress}} modest_turing 172.17.0.10
Contoh berikut menampilkan ID proses:
# docker inspect -f {{.State.Pid}} modest_turing 7181
Contoh berikut menampilkan perintah yang berjalan di dalam container:
# docker inspect -f {{.Config.Cmd}} modest_turing [/bin/bash]
Jika Anda ingin melihat semua opsi/properti penampung, jangan gunakan opsi apa pun dengan “pemeriksaan buruh pelabuhan”:
# docker inspect modest_turing [ { "Id": "9ee24718262c9f7ed3320019163a8b1b2bb1bccc83eb362a5512a74eaa4ad57f", "Created": "2018-04-21T12:22:21.983441857Z", "Path": "/bin/bash", "Args": [], "State": { ....
Ini akan menjadi output yang cukup panjang yang menunjukkan semua properti container.
Membuat Wadah Baru
Perintah docker run menjalankan proses dalam wadah baru. Anda juga dapat menggunakan perintah docker create untuk membuat wadah yang dapat Anda mulai di lain waktu. Sintaks dan opsi yang tersedia untuk docker create mirip dengan sintaks docker run.
Contoh di bawah ini membuat wadah baru bernama "geeklab" dari gambar centos:7, dan ketika dimulai, jalankan perintah bash shell. Nama container akan dibuat secara otomatis jika Anda menghilangkan opsi –name.
# docker create -t -i --name geeklab centos:7 /bin/bash 667fd40faeb69113d035f08e5a910275a8463aa2a6a0796833f590e878732e17
Keluaran dari perintah ini adalah ID wadah unik yang sangat panjang. Wadah tidak segera dimulai seperti yang ditunjukkan oleh perintah docker ps, yang hanya menampilkan wadah yang berjalan secara default:
# docker ps
Anda perlu menjalankan "docker ps -a" untuk menampilkan semua container. Contoh menyalurkan output ke grep dan mencari bagian dari ID penampung:
# docker ps -a | grep 667fd 667fd40faeb6 centos:7 "/bin/bash" About a minute ago Created geeklab
Memulai, Menghentikan, dan Menghapus Kontainer
Gunakan "mulai buruh pelabuhan ” perintah untuk memulai container yang ada. Gunakan –a dan –i opsi untuk melampirkan STDIN (input standar), STDOUT (output standar), dan STDERR (kesalahan standar) shell saat ini ke wadah dan juga menyebabkan semua sinyal diteruskan ke wadah.
# docker start -a -i geeklab [root@667fd40faeb6 /]#
Dari dalam wadah, gunakan perintah keluar atau CTRL-d untuk menghentikan wadah. Dari luar container, yaitu dari jendela terminal lain, gunakan perintah docker stop untuk menghentikan container.
# docker stop geeklab
Gunakan “docker rm ” perintah untuk menghapus wadah. Anda dapat menghapus beberapa wadah dalam satu perintah. Gunakan –f opsi untuk menghapus wadah yang sedang berjalan.
# docker rm geeklab geeklab
Ketiga perintah buruh pelabuhan ini menerima ID wadah atau nama wadah sebagai argumen.
Perintah docker rm menghapus sebuah wadah. Gunakan perintah docker rmi untuk menghapus gambar:
# docker rmi [IMAGE]Cara Daftar / Mulai / Berhenti / Hapus Kontainer buruh pelabuhan
Menjalankan Perintah Tambahan di Wadah Berjalan
Gunakan perintah docker exec untuk menjalankan perintah dalam wadah yang sedang berjalan. Mirip dengan perintah docker run, sertakan opsi –t dan –i untuk menjalankan perintah interaktif. Berikan ID penampung atau nama penampung sebagai argumen.
Dalam contoh berikut, perintah docker exec memulai shell bash interaktif baru di wadah “guest”:
# docker exec -t -i geeklab /bin/bash [root@68b5b713c37b /]#
Contoh berikut menggunakan perintah docker exec untuk memulai layanan sshd pada container “geeklab”. Wadah "geeklab" menjalankan CentOS 6.4. Dalam contoh ini, opsi -t dan -i tidak diperlukan.
# docker exec guest service sshd start Generating SSH2 RSA host key: [ OK ] Generating SSH1 RSA host key: [ OK ] Generating SSH2 DSA host key: [ OK ] Starting sshd: [ OK ]
Layanan sshd dimulai pada wadah dan kontrol kembali ke sistem host yang memulai.