Lewati ke konten

3. Port & Akses

Secara bawaan, container hidup di jaringan internal Docker. Nginx di dalam container memang mendengarkan port 80 — tapi port 80 milik container, bukan milik server. Supaya bisa diakses dari luar, port itu harus diteruskan (publish).

Terminal window
docker run -d --name web -p 8080:80 nginx
# ▲ ▲
# port host port di dalam container

Sekarang permintaan ke port 8080 server diteruskan ke port 80 container:

Terminal window
curl localhost:8080

Satu port host hanya bisa dipakai satu container. Kalau dipakai dua kali, Docker menolak dengan pesan port is already allocated. Solusinya: pakai port host lain, misalnya -p 8081:80.

Mengintip ke dalam container — docker exec

Section titled “Mengintip ke dalam container — docker exec”
Terminal window
docker exec web ls /usr/share/nginx/html
docker exec web cat /etc/os-release
docker exec -it web sh # shell interaktif (di server sungguhan)

exec menjalankan perintah di dalam container yang sedang berjalan. Opsi -it membuka shell interaktif — sangat berguna untuk debugging. (Shell interaktif tidak tersedia di terminal latihan, tapi perintah biasa bisa.)

Setiap kali kamu curl ke nginx, nginx mencatatnya. Lihat dengan docker logs web — kamu akan melihat baris "GET / HTTP/1.1" 200.

Lab: Membuka port container
Misi 0/7
  1. Jalankan nginx bernama web dan teruskan port host 8080 ke port 80 container.
    Petunjukdocker run -d --name web -p 8080:80 nginx
  2. Buka halamannya dengan curl.
    Petunjukcurl localhost:8080
  3. Coba jalankan container web2 di port host yang sama (8080) — perhatikan error-nya.
    Petunjukdocker run -d --name web2 -p 8080:80 nginx
  4. Jalankan web2 di port host 8081.
    Petunjukdocker run -d --name web2 -p 8081:80 nginx
  5. Buka web2 dengan curl.
    Petunjukcurl localhost:8081
  6. Lihat log web — permintaan curl tadi tercatat.
    Petunjukdocker logs web
  7. Intip isi folder web di dalam container web.
    Petunjukdocker exec web ls /usr/share/nginx/html