tutorial

Networking in Docker

secara default setiap container akan terisolasi dari yang lainnya sehingga jika antar container ingin berkomunikasi maka diperlukan pembuatan network.

untuk mengecek network yang telah terbuat ketika pertama kali install docker engine :

docker network ls

Basic Network

Docker menyediakan fitur-fitur untuk mengelola jaringan antara kontainer dan antara kontainer dengan jaringan eksternal. Dengan menggunakan perintah seperti docker network, Anda dapat membuat, memeriksa, dan mengelola jaringan di lingkungan Docker Anda.

Network Type

None Networks

  • Container tidak memiliki akses jaringan.
  • Sangat terisolasi dan tidak dapat berkomunikasi dengan container lain atau host.

Kapan Digunakan:

  • Untuk tugas pemrosesan data lokal atau aplikasi yang tidak memerlukan jaringan.

Perintah:

#create
docker network create --driver none my_none_network

#run
docker run --network my_none_network -d nginx

Bridge Networks (default)

tipe jaringan Docker default. Saat Anda menjalankan sebuah kontainer tanpa menentukan jaringan, kontainer tersebut akan terhubung ke jaringan bridge default. Jaringan bridge memungkinkan kontainer berkomunikasi satu sama lain, tetapi memisahkan kontainer dari jaringan host.

deskripsi:

  • Driver default untuk jaringan di Docker.
  • Digunakan untuk menghubungkan container di host yang sama dalam jaringan yang terisolasi.

Kapan Digunakan:

  • Untuk aplikasi multi-container yang berjalan di host yang sama.

Fitur:

  • Container dapat saling berkomunikasi menggunakan nama atau alias.
  • Tidak langsung terhubung dengan jaringan host.

Perintah:

  • Membuat jaringan baru di bridge network:
#create
docker network create --driver <network_type> <network_name>
docker network create --driver bridge my_bridge_network

#run
docker run --network my_bridge_network -d nginx

Host Networks

Dalam mode ini, kontainer berbagi jaringan dengan hostnya. Ini berguna untuk keperluan tertentu tetapi kurang aman karena kontainer dapat mengakses port di host.

Deskripsi:

  • Menghapus isolasi jaringan antara container dan host, sehingga container langsung menggunakan jaringan host.

Kapan Digunakan:

  • Untuk aplikasi yang membutuhkan kinerja tinggi atau akses langsung ke jaringan host. seperti aplikasi yang membutuhkan latensi rendah.

Fitur:

  • Tidak ada namespace jaringan terpisah; container berbagi alamat IP host.

Perintah:

#create
docker network create --driver host my_host_network

#run
docker run --network my_host_network -d nginx

Overlay Networks

Tipe jaringan ini digunakan dalam klaster Docker Swarm untuk memungkinkan kontainer di mesin yang berbeda berkomunikasi satu sama lain.

Deskripsi:

  • Digunakan dalam pengaturan Docker Swarm atau Kubernetes untuk menghubungkan container di host yang berbeda.
  • Cocok untuk aplikasi terdistribusi.
  • Digunakan untuk menghubungkan container yang berjalan di host yang berbeda dalam cluster Docker Swarm.
  • Memungkinkan komunikasi antar-host melalui jaringan virtual.

Fitur:

  • Menggunakan teknologi tunneling untuk menghubungkan host dalam cluster.

Kapan Digunakan:

  • Untuk aplikasi terdistribusi atau cluster multi-host.

Perintah:

#Membuat overlay networ
docker network create --driver overlay my_overlay_network

#Menjalankan container dalam overlay network:
docker service create --network my_overlay_network nginx

Macvlan

Deskripsi:

  • Menghubungkan container langsung ke jaringan fisik, seolah-olah container adalah perangkat jaringan dengan alamat IP unik.

Kapan Digunakan:

  • Untuk aplikasi yang membutuhkan alamat IP unik di jaringan fisik.

Perintah:

docker network create --driver macvlan \
    --subnet=192.168.1.0/24 \
    --gateway=192.168.1.1 \
    -o parent=eth0 my_macvlan_network

Cara Memilih Driver

Pilih driver berdasarkan kebutuhan aplikasi Anda:

  1. Bridge: Untuk jaringan container lokal di host yang sama.
  2. Host: Untuk kinerja tinggi atau aplikasi yang memerlukan jaringan host langsung.
  3. Overlay: Untuk container di berbagai host dalam cluster Docker Swarm.
  4. None: Untuk isolasi jaringan total.
  5. Macvlan: Untuk aplikasi yang memerlukan alamat IP unik di jaringan fisik.

Basic Command

Menampilkan list jaringan

dokcer network ls

Menampilkan detail jaringan

docker network inspect <network_name>
docker network inspect bridge

Menambahkan container ke jaringan

docker network connect <network_name> <container_name>

Menghapus container dari jaringan

docker network disconnect <network_name> <container_name>

Membuat jaringan baru

docker network create <network_name>

Menghapus jaringan

docker network rm <network_name_or_id>

Communication between-Container

  1. Dalam Bridge Network:
    • Container dalam satu jaringan bridge dapat saling berkomunikasi menggunakan nama container.
docker network create my_bridge_network
docker run --network my_bridge_network --name container1 -d nginx
docker run --network my_bridge_network --name container2 -it alpine sh

#di dalam container2
ping container1
  1. Melalui Host Network:
    • Semua container dapat mengakses jaringan host tanpa pembatasan.
  2. Dalam Overlay Network:
    • Container di host yang berbeda dapat saling berkomunikasi selama berada di overlay network yang sama.

Exposing ports

Membuka Port: Anda dapat memetakan port dari kontainer ke port di host saat menjalankan kontainer menggunakan opsi p atau -publish. Misalnya, docker run -p 8080:80 nginx akan memetakan port 80 dari kontainer ke port 8080 di host.

menjalankan container tanpa jaringan khusus

docker run -d --name my_container nginx

Best Practices

  1. Gunakan Jaringan Bridge untuk Pengaturan Sederhana:
    • Misalnya, aplikasi web dan database lokal.
  2. Gunakan Overlay Network untuk Pengaturan Terdistribusi:
    • Cocok untuk cluster Docker Swarm atau Kubernetes.
  3. Hindari Host Network untuk Keamanan:
    • Kecuali benar-benar diperlukan, karena dapat membahayakan isolasi jaringan.
  4. Gunakan Firewall atau Rules Iptables:
    • Untuk mengontrol akses ke jaringan Docker.
  5. Gunakan Docker DNS:
    • Docker DNS otomatis memungkinkan container saling berkomunikasi menggunakan nama container, menghindari hardcoding IP.

Host network not recomended

Jaringan Host Network di Docker sering tidak disarankan karena menghilangkan isolasi jaringan yang merupakan salah satu fitur utama Docker. Berikut adalah alasan dan contoh kasus mengapa Host Network bisa berbahaya:


1. Kurangnya Isolasi

  • Masalah: Container yang menggunakan Host Network berbagi IP address dan port namespace dengan host. Artinya, jika container memiliki celah keamanan, penyerang dapat mengeksploitasi celah ini untuk mendapatkan akses langsung ke host.
  • Contoh Kasus:
    • Anda menjalankan aplikasi web dalam container menggunakan Host Network:
      • docker run --network host -d myapp
    • Jika aplikasi memiliki celah keamanan, penyerang dapat menjalankan serangan Remote Code Execution (RCE) yang memungkinkan mereka mengakses sistem host, karena tidak ada batasan jaringan antara container dan host.

2. Konflik Port

  • Masalah: Container menggunakan port yang sama dengan layanan lain di host. Jika ada dua container atau aplikasi di host yang memerlukan port yang sama, akan terjadi konflik port.
  • Contoh Kasus:
    • Anda menjalankan dua container yang menggunakan Host Network:
      • docker run --network host -p 80:80 -d nginx
      • docker run --network host -p 80:80 -d apache
    • Karena kedua container berbagi port yang sama (80), hanya satu layanan yang bisa berjalan. Hal ini membuat pengelolaan jaringan menjadi sulit, terutama pada host dengan banyak aplikasi.
conflict port karena port 80 sudah digunakan

3. Eksposur Langsung ke Jaringan Host

  • Masalah: Container dapat langsung mengakses semua antarmuka jaringan host, termasuk jaringan internal yang mungkin bersifat sensitif.
  • Contoh Kasus:
    • Anda memiliki container yang menjalankan aplikasi dengan Host Network:
      • docker run --network host -d myapp
    • Jika aplikasi diretas, penyerang dapat mengakses jaringan internal (misalnya, jaringan perusahaan) melalui container yang tidak terisolasi.

4. Tidak Cocok untuk Pengaturan Multi-Host

  • Masalah: Host Network tidak dapat digunakan untuk container yang berada di host berbeda, sehingga membatasi fleksibilitas pengelolaan jaringan untuk aplikasi terdistribusi.
  • Contoh Kasus:
    • Anda memiliki aplikasi terdistribusi dengan container di dua host. Menggunakan Host Network pada masing-masing host tidak memungkinkan komunikasi langsung antar-container karena Host Network hanya bekerja dalam konteks host lokal.

5. Risiko Keamanan Lain

  • Masalah:
    • Jika container memiliki akses ke semua perangkat jaringan host, itu dapat digunakan untuk serangan network sniffing atau MITM (Man-In-The-Middle).
  • Contoh Kasus:
    • Anda menjalankan container yang tidak tepercaya dengan Host Network:
      • docker run --network host -d untrusted_app
    • Aplikasi yang tidak tepercaya ini dapat memantau lalu lintas jaringan host, termasuk data sensitif seperti kredensial.

Ketika Host Network Dapat Digunakan

Walaupun memiliki risiko, Host Network masih berguna dalam kasus tertentu:

  1. Kinerja Jaringan Maksimal:
    • Jika aplikasi membutuhkan latensi rendah atau throughput tinggi (misalnya, aplikasi real-time seperti VoIP atau streaming media).
    • Contoh:
      • docker run --network host -d video_streaming_app
  2. Aplikasi yang Butuh Akses Langsung ke Jaringan Host:
    • Misalnya, layanan yang menggunakan localhost atau memerlukan perangkat jaringan tertentu seperti VPN atau monitoring tools.
    • Contoh:
      • docker run --network host -d network_monitoring_tool
  3. Testing dan Debugging:
    • Jika Anda perlu memeriksa interaksi aplikasi dengan jaringan host selama pengembangan.

Kesimpulan

Host Network tidak disarankan karena:

  1. Menghilangkan isolasi jaringan.
  2. Rentan terhadap konflik port.
  3. Menyediakan akses langsung ke jaringan host yang dapat dieksploitasi.
  4. Membatasi fleksibilitas dalam pengaturan multi-host.

Gunakan Host Network hanya jika benar-benar diperlukan, seperti untuk kinerja tinggi atau akses langsung ke jaringan host. Namun, untuk kebanyakan kasus, Bridge, Macvlan, atau Overlay Network adalah pilihan yang lebih aman dan fleksibel.

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button
Index