Saat Anda perlu memecahkan masalah atau mengintip sebentar ke dalam wadah Docker, SSH adalah pilihan yang bagus. SSH memungkinkan Anda terhubung dengan cepat ke container yang sedang berjalan dan melihat apa yang terjadi. Tetapi menghubungkan ke wadah Docker terlebih dahulu melibatkan beberapa penyiapan, dan Anda memiliki beberapa opsi berbeda.
Dalam tutorial ini, Anda akan mempelajari cara SSH ke dalam container Docker menggunakan docker run
perintah dan Dockerfile.
Mari kita mulai!
Prasyarat
Jika Anda ingin mengikuti langkah demi langkah, pastikan Anda memiliki hal berikut:
- Sebuah host Linux. Tutorial ini menggunakan Ubuntu 18.04.5 LTS.
- Docker diinstal pada host Linux. Tutorial ini menggunakan Docker v19.03.8.
Memulai Container dan SSH ke dalam Container Docker dengan docker run
docker run
command adalah perintah Docker yang menjalankan perintah ketika wadah baru pertama kali muncul. Menggunakan docker run
, Anda dapat meluncurkan sesi SSH interaktif ke penampung menggunakan langkah-langkah di bawah ini.
Sebelum Anda memulai bagian ini, pastikan Anda memiliki gambar Docker yang diunduh dan tersedia. Tutorial ini menggunakan image Docker Ubuntu terbaru yang tersedia di Docker Hub.
Untuk SSH ke dalam wadah Docker dengan docker run
:
1. Buka terminal di komputer lokal Anda.
2. Jalankan docker run
menyediakan perintah:
name
wadah yang akan dijalankan (ubuntu_container_ssh
)i
tanda yang menunjukkan Anda ingin membuka sesi SSH interaktif ke penampung.i
flag tidak menutup sesi SSH meskipun container tidak dilampirkan.t
flag mengalokasikan pseudo-TTY yang banyak digunakan untuk menjalankan perintah secara interaktif.- Gambar dasar untuk membuat wadah dari (
ubuntu
).
# Creating the container named ubuntu_container_ssh and start a Bash session.
sudo docker run --name ubuntu_container_ssh -i -t ubuntu
Pada titik ini, Anda telah SSH ke container dan dapat menjalankan perintah apa pun yang Anda inginkan.
3. Selanjutnya, jalankan perintah apa pun, seperti touch
memerintah. Perintah sentuh akan membuat folder baru bernama myfolder
di tmp direktori, seperti yang ditunjukkan di bawah ini.
touch /tmp/myfolder
Sekarang Anda dapat menjalankan perintah apa pun yang Anda inginkan!
Terakhir, setelah Anda selesai menjalankan perintah, ketik exit
untuk menutup sesi.
SSH ke Menjalankan Wadah Docker dengan docker exec
Di bagian sebelumnya, Anda telah mempelajari cara menjalankan perintah SSH saat memulai container Docker baru. Tetapi bagaimana jika Anda perlu SSH ke dalam wadah Docker yang sudah berjalan? Anda menjalankan docker exec
perintah.
docker exec
command membuat shell Bash di dalam container yang sedang berjalan dan merupakan cara yang bagus untuk mengirim perintah SSH ke dalam container.
Sebelum Anda memulai bagian ini, pastikan Anda memiliki gambar Docker yang diunduh dan tersedia. Tutorial ini menggunakan image NGINX Docker terbaru yang tersedia di Docker Hub.
Untuk SSH ke dalam wadah Docker yang sedang berjalan dengan docker exec
:
1. Buka terminal di komputer lokal Anda.
2. Selanjutnya, jalankan docker run
perintah untuk memulai wadah. Pastikan untuk menentukan -d
flag untuk menjalankan wadah di latar belakang agar tetap hidup sampai Anda menghapusnya. Perintah di bawah ini memulai sebuah wadah bernama nginx-testing
.
sudo docker run --name nginx-testing -d nginx
3. Sekarang, jalankan perintah docker ps untuk memverifikasi container sedang berjalan. docker ps
perintah akan mencantumkan semua wadah yang berjalan yang berjalan di Host Docker.
4. Terakhir, jalankan docker exec
, seperti yang ditunjukkan di bawah ini, ke SSH ke dalam wadah berjalan yang disebut nginx-testing
. Dalam cuplikan kode di bawah ini:
docker exec
perintah berjalan (/bin/bash
) untuk mendapatkan shell Bash di dalam wadah.-it
flag memungkinkan Anda menjalankan wadah dalam mode interaktif, yaitu, Anda dapat menjalankan perintah di dalam wadah saat masih berjalan.nginx-testing
adalah nama wadahnya.
sudo docker exec -it nginx-testing /bin/bash
Menyiapkan Server OpenSSH dan Menghubungkan dengan Dockerfile
Sampai sekarang, tutorial mengasumsikan Anda terhubung ke wadah yang sudah menginstal beberapa server SSH. Tapi bagaimana jika tidak? Mungkin gambar yang Anda gunakan belum menginstal OpenSSH, dan Anda perlu mengonfigurasinya terlebih dahulu?
Dengan menggunakan Dockerfile, Anda dapat mengonfigurasi semua tugas yang diperlukan untuk tidak hanya SSH ke dalam wadah Docker tetapi juga menyiapkan server OpenSSH dari awal.
Dengan asumsi Anda masih membuka terminal lokal Anda:
1. Secara opsional, buat direktori untuk menyimpan Dockerfile. Tutorial ini akan menggunakan ~/DockerFileContainerTest direktori.
2. Buka editor teks favorit Anda, salin/tempelkan Dockerfile di bawah ini ke dalam dan simpan file sebagai Dockerfile di dalam ~/DockerFileContainerTest direktori. Dockerfile ini berisi semua perintah dan konfigurasi untuk membangun image Docker baru di atas image dasar apa pun dan mengatur OpenSSH.
DockerFile di bawah ini berisi berbagai langkah/petunjuk yang akan membuat container:
FROM
– Mendefinisikanubuntu:16.04
gambar dasar yang akan digunakan.RUN
– Menjalankan perintah di layer baru di atas gambar dasar.CMD
– CMD memungkinkan Anda untuk menjalankan perintah. Ada dua cara di mana perintah dijalankan baik melalui exec atau menggunakan format shell.
EXPOSE
– Memberi tahu Docker bahwa container mendengarkan port jaringan yang ditentukan saat runtime. Wadah akan terbuka di pot22
.
# Instruction for Dockerfile to create a new image on top of the base image (ubuntu)
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:mypassword' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed '[email protected]\s*required\s*[email protected] optional [email protected]' -i /etc/pam.d/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
3. Selanjutnya, jalankan docker build
perintah untuk membuat gambar Docker. t
tandai tag gambar sshd_container
dan.
memungkinkan Docker untuk memilih semua file yang diperlukan dari direktori kerja saat ini.
# Building the docker Image
sudo docker build -t sshd_tagged_image .
4. Sekarang, jalankan docker images
perintah untuk memeriksa gambar yang dibuat. Perhatikan REPOSITORY atribut. Atribut ini adalah tag yang dibuat dengan -t
bendera pada langkah sebelumnya.
5. Jalankan docker run
untuk membuat dan menjalankan container dari image yang menyuruh Docker menjalankan image di latar belakang (-d
),
Perintah di bawah ini menginstruksikan Docker untuk membuat dan menjalankan container bernama test_sshd_container
di latar belakang (-d
), menggunakan sshd_tagged_image
gambar baru yang Anda buat di langkah 3 dan untuk memublikasikan semua port yang ditentukan di Dockerfile sebagai port acak.
# Running the container using the newly built image
docker run -d -P --name test_sshd_container sshd_tagged_image
Setelah eksekusi perintah Docker run yang berhasil, Anda akan melihat bahwa ID penampung dibuat di bawah ini.
6. Jalankan docker port
untuk memverifikasi konektivitas SSH antara host Docker dan container. docker port
daftar perintah adalah pemetaan port atau pemetaan khusus untuk container.
sudo docker port test_sshd_container
Anda akan melihat output dari 22/TCP → 0.0.0.0:32769
, yang menunjukkan port kontainer 22 dipetakan ke port eksternal 32769
.
7. Selanjutnya, cari alamat IP container. Untuk melakukannya, jalankan docker inspect
memerintah. docker inspect
perintah menanyakan informasi Docker dan merender hasilnya dalam larik JSON menggunakan format
parameter.
Anda akan melihat format
argumen parameter di bawah ini menggunakan range
untuk menemukan alamat IP penampung dengan memeriksa NetworkSettings
→Networks
→ IPAddress
.
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' test_sshd_container
8. Akhirnya, sekarang Anda memiliki alamat IP untuk SSH, coba SSH ke wadah, dan itu akan berhasil!
ssh [email protected]
Kesimpulan
Sekarang Anda menunjukkan beberapa cara untuk SSH ke wadah Docker menggunakan beberapa pendekatan berbeda. Dengan menggunakan salah satu pendekatan ini, Anda akan dapat memecahkan masalah dan mengelola penampung Anda.
Dengan pengetahuan baru ini, bagaimana Anda berencana untuk SSH ke wadah Anda sekarang?