In this Article
Container merevolusi pengembangan perangkat lunak karena menyelesaikan banyak tantangan yang dihadapi programmer. Container membantu menghadirkan produk yang bekerja secara andal dan konsisten di berbagai sistem serta perangkat. Docker, pada gilirannya, membawa container ke tingkat baru karena platform ini membuat proses membangun, mengelola, dan menjalankannya jauh lebih mudah serta cepat. Docker juga mendukung penggunaan proxy pihak ketiga dan menyediakan beberapa metode untuk melakukannya. Mengapa memasangkannya dengan IP alternatif, metode mana yang lebih baik untuk kasus Anda, dan apa tepatnya yang harus dilakukan langkah demi langkah? Terus baca artikel ini untuk mengetahuinya.
Mengapa menggunakan proxy dengan Docker
Jawabannya adalah memastikan akses internet yang stabil, aman, dan terkendali. Terkadang, agar akses dapat tersedia sama sekali.
Docker memerlukan akses ke Web untuk menjalankan tugas seperti menarik image, memasang package, dan sebagainya. Namun, banyak jaringan perusahaan tidak menawarkan koneksi normal, karena lalu lintas keluar dikendalikan atau dibatasi. Alasannya adalah keamanan, tetapi hal ini tetap menghambat pekerjaan developer. Terkadang proxy yang disetujui adalah satu-satunya cara untuk mengakses internet dan menghindari pesan seperti “Koneksi melewati batas waktu” atau “Tidak dapat mengakses www.example.com“.
Selain itu, dalam beberapa kasus, autentikasi diperlukan untuk menggunakan internet. Docker sendiri tidak mendukung autentikasi, jadi proxy eksternal adalah solusinya.
Aplikasi runtime juga mungkin memerlukan koneksi eksternal. Ada situasi ketika container perlu terhubung ke API cloud, database, layanan pihak ketiga, dan sebagainya. Jika aksesnya dilindungi firewall, proxy diperlukan untuk menjangkau endpoint target.
Ada pula alasan lain untuk menggunakan proxy. Merutekan lalu lintas melalui server alternatif dapat menyelesaikan masalah kecepatan dan membantu pemantauan lalu lintas untuk logging, malware, inspeksi SSL, dan lainnya. Proxy juga membantu menjaga konsistensi jaringan di berbagai jenis server dan mesin, serta menyamarkan informasi internal seperti alamat IP, request DNS internal, dan NAT, sehingga keamanan lebih baik.
Cara mengonfigurasi proxy di Docker
Ada empat lapisan berbeda tempat Anda dapat mengonfigurasi proxy: Docker Daemon, atau Docker Engine, Docker Client, container, dan tingkat OS. Ada pula metode berbeda untuk menetapkan proxy pada setiap lapisan. Pilihan Anda akan memengaruhi bagian yang berbeda. Semua opsi memiliki kelebihan masing-masing, dan Anda perlu memilih sesuai use case. Mari bahas satu per satu: opsi mana yang paling sesuai untuk tujuan tertentu dan apa tepatnya yang harus dilakukan.
Lapisan 1: Konfigurasikan Docker Daemon
Proxy yang dikonfigurasi pada tingkat ini mengendalikan penarikan dan pengiriman image, akses ke Docker Hub dan registry privat. Proxy tersebut juga bertanggung jawab untuk menjangkau Docker Swarm.
Kapan memilih opsi ini:
- Anda memerlukan semua operasi image berjalan melalui proxy;
- Perintah seperti docker pull atau docker push gagal;
- Anda harus merutekan seluruh lalu lintas dari mesin Anda melalui proxy perusahaan;
- Akses jaringan eksternal hanya dapat dilakukan dengan proxy;
- Menggunakan Docker Swarm.
Metode ini stabil dan dapat diprediksi, dan jika Anda menggunakan Desktop, proxy mudah dikonfigurasi melalui antarmuka grafisnya. Di sisi lain, pada versi lama (< 17.x) dan beberapa pengaturan yang jarang ditemukan, konfigurasi dapat memengaruhi semua container sehingga memperlambat container yang tidak menggunakan internet. Pada versi modern, proxy Daemon tidak memengaruhi container karena pengaturan tidak diwariskan secara otomatis.
Ada empat cara untuk mengonfigurasi proxy Docker Daemon.
Cara 1: Gunakan daemon.json
Metode ini hanya untuk Linux dan direkomendasikan untuk OS ini. Anda mengonfigurasi perilaku proxy dalam file daemon.json berikut:
{
"proxies": {
"http-proxy": "http://proxy.example.com:3128",
"https-proxy": "https://proxy.example.com:3129",
"no-proxy": "*.test.example.com,.example.org,127.0.0.0/8"
}
}
Setelah mengubah file, mulai ulang Docker agar perubahan mulai berlaku:
sudo systemctl restart docker
Cara 2: Melalui file drop-in systemd
Cara ini juga hanya berfungsi untuk Linux. Anda dapat menjalankannya dalam mode reguler dan rootless.
Mulailah dengan membuat direktori sistem:
sudo mkdir -p /etc/systemd/system/docker.service.d
Kemudian, buat file bernama /etc/systemd/system/docker.service.d/http-proxy.conf yang menambahkan variabel lingkungan proxy.
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:3128"
Jika Anda menggunakan server HTTPS, ubah variabel Anda menjadi “HTTPS_PROXY”. Anda dapat menetapkan beberapa variabel. Lalu simpan dan mulai ulang Docker.
sudo systemctl daemon-reload
sudo systemctl restart docker
Cara 3: Gunakan variabel lingkungan untuk dockerd
Docker Daemon memeriksa variabel lingkungan sebelum berjalan. Namun, metode ini biasanya bukan pilihan pertama.
export HTTP_PROXY=...
dockerd
Cara 4: Docker Desktop
Secara teknis, Docker Desktop bergantung pada Linux Virtual Machine ringan dan menggunakannya untuk mengonfigurasi Docker. Anda mungkin membaca bahwa Docker Desktop hanya tersedia untuk Windows/macOS. Secara teknis, Docker Desktop juga tersedia untuk Linux, tetapi penggunaannya jarang dan bersifat opsional, serta Anda tetap mengelola Daemon di dalam VM, bukan engine native. Karena itu, metode ini tetap lebih disarankan untuk Windows/macOS. Ikuti jalur ini:
Docker Desktop > Pengaturan > Sumber Daya > Proxy.
Lapisan 2: Konfigurasikan proxy Docker Client (CLI)
Docker Client menggunakan proxy untuk membuat request. Ini berlaku untuk panggilan API yang dibuat oleh CLI dan perintah seperti docker login, docker pull, docker push.
Kapan memilih opsi ini:
- Jika Anda memerlukan client untuk melakukan autentikasi melalui proxy;
- Saat ada pembatasan perusahaan pada lalu lintas keluar;
- Saat Anda tidak perlu memengaruhi daemon atau container.
Client cepat dan mudah dikonfigurasi, serta tidak perlu memulai ulang daemon. Namun, metode ini tidak akan berfungsi jika Anda perlu memperbaiki masalah akses saat build atau menjalankan container, atau error push dan pull Daemon.
Biasanya, Docker Client dikonfigurasi menggunakan variabel lingkungan shell.
Bentuknya seperti ini untuk Linux dan macOS:
export HTTP_PROXY=http://PROXY:PORT
atau
export HTTPS_PROXY=http://PROXY:PORT
Gunakan ini untuk Windows:
setx HTTP_PROXY http://PROXY:PORT
Catatan: di Windows, saat menggunakan CMD, mungkin muncul masalah. PowerShell berfungsi.
Ada cara lain, meski jarang digunakan: konfigurasi per perintah.
HTTP_PROXY=http://PROXY docker login
Lapisan 3: Proxy container
Jika memilih metode ini, aplikasi di dalam container akan menggunakan proxy. Anda dapat mengonfigurasi proxy untuk build atau menjalankan container dengan proxy.
Kapan memilih opsi ini:
- Container memerlukan koneksi eksternal;
- Build gagal menjalankan package manager;
- Aplikasi di dalam container perlu merutekan request API melalui proxy eksternal.
Pengaturannya mudah per container dan cocok untuk lingkungan campuran, saat sebagian container memerlukan proxy dan yang lain tidak. Metode ini juga memberikan pemisahan yang jelas dari konfigurasi OS dan daemon. Namun, Anda harus mengonfigurasi proxy secara manual untuk setiap build dan proses menjalankan container. Opsi ini juga bukan yang terbaik untuk deployment skala besar dan memiliki risiko keamanan karena kredensial proxy dapat bocor.
Cara 1: Konfigurasikan proxy per build
docker build \
--build-arg HTTP_PROXY=http://PROXY:PORT \
--build-arg HTTPS_PROXY=http://PROXY:PORT \
-t myimage .
Cara 2: Gunakan Dockerfile
ENV Dockerfile atau variabel lingkungan menyematkan pengaturan Anda ke dalam image. Metode ini memiliki risiko keamanan dan sebaiknya tidak digunakan untuk build.
ENV HTTP_PROXY=http://PROXY:PORT
ENV HTTPS_PROXY=http://PROXY:PORT
Cara 3: Konfigurasikan proxy per proses menjalankan container
docker run \
-e HTTP_PROXY=http://PROXY:PORT \
-e HTTPS_PROXY=http://PROXY:PORT \
image
Cara 4: Pilih Docker Compose
Ini adalah opsi yang aman dan direkomendasikan:
environment:
HTTP_PROXY: http://PROXY:PORT
HTTPS_PROXY: http://PROXY:PORT
NO_PROXY: "localhost,127.0.0.1"
Catatan: Dalam dokumentasi resmi Docker, dua konsep berbeda disebut CLI dan hal ini mungkin membingungkan Anda. Ada proxy Docker CLI yang memengaruhi program client. Ada juga flag Docker CLI yang memasukkan pengaturan proxy ke dalam container. Flag tersebut memengaruhi container, bukan client. Namun, dalam kedua kasus ini, Anda menggunakan alat command-line.
Lapisan 4: Proxy sistem operasi
Anda dapat mengaturnya agar seluruh lalu lintas dari perangkat Anda melalui server proxy. Ini akan memengaruhi Docker Daemon dan Docker Client; terkadang bahkan dapat memengaruhi container dan semua aplikasi lain yang Anda gunakan.
Kapan menggunakan opsi ini:
- Perusahaan mewajibkan penggunaan proxy pada tingkat sistem;
- Ada banyak aplikasi selain Docker yang juga memerlukan proxy.
Metode ini sederhana dan cepat: Anda mengonfigurasi proxy sekali, dan pengaturan tersebut berlaku untuk sebagian besar komponen serta aplikasi. Namun, metode ini tidak khusus untuk Docker dan membuat debugging lebih sulit. Perlu diperhatikan juga bahwa sangat jarang container mewarisi pengaturan tersebut secara otomatis, jadi Anda mungkin tetap perlu mengonfigurasinya secara terpisah.
Di sini, Anda dapat menemukan tutorial langkah demi langkah untuk mengonfigurasi proxy di berbagai OS, termasuk macOS dan Windows.
Anda juga dapat mengunjungi dokumentasi resmi Docker untuk mengetahui detail lebih lanjut tentang setiap metode dan semua variabel yang tersedia.
Konfigurasi proxy Docker Daemon
Cara mengonfigurasi Docker Client
Cara menyesuaikan perubahan proxy Docker Desktop
Apakah Docker memiliki proxy internal?
Docker menawarkan proxy internal HTTP(S) untuk build image saja, dan hal ini membingungkan sebagian orang karena mereka mengira proxy eksternal tidak diperlukan.
Proxy internal BuildKit hanya digunakan untuk build, mempercepat akses, menghilangkan masalah DNS, dan mencegah pengaturan DNS bocor ke dalam build. Namun, proxy ini tidak dapat membantu membuat koneksi keluar yang aman. Anda tidak dapat menggunakannya sebagai pengganti proxy.
Masalah konfigurasi umum dan cara mengatasinya
Memperbaiki error terkait proxy di Docker bisa rumit karena lapisannya beragam. Berikut lima masalah paling umum beserta solusinya.
Error 1: Docker pull/docker push gagal
Jika Anda melihat proxy pull macet atau time out, atau koneksi ditolak, berarti Docker Daemon tidak mengetahui proxy Anda. Untuk memperbaikinya, konfigurasikan proxy pada tingkat engine.
Error 2: Tidak ada koneksi, meskipun Daemon berfungsi
Pada saat yang sama, dicker pull berfungsi, tetapi container tidak dapat menjalankan pip install dan dependensi lainnya. Error seperti kegagalan sementara saat melakukan resolusi dapat muncul. Situasi ini terjadi pada versi Docker modern karena proxy Daemon tidak diterapkan secara otomatis di dalam container. Untuk mengatasinya, terapkan proxy tingkat container di Dockerfile atau Docker Compose.
Error 3: Variabel NO_PROXY tidak berfungsi
Jika Docker masih mencoba merutekan lalu lintas melalui proxy meskipun sudah diatur, container gagal berkomunikasi, atau mirror registry gagal, penyebabnya mungkin sintaks yang salah. Cobalah menggunakan entri yang dipisahkan koma dan jangan mencantumkan protokol saat menyertakan domain.
NO_PROXY=localhost,127.0.0.1,.corp.example.com,registry.internal
Error 4: Kredensial proxy berisi simbol yang tidak didukung
Dalam kasus ini, Docker mungkin gagal dimulai atau gagal merutekan lalu lintas melalui proxy. Untuk mengatasinya, Anda perlu melakukan URL encoding pada simbol seperti @, #, %, :
Hasilnya akan terlihat seperti ini:
Environment=”HTTP_PROXY=http://user:Pa%%23ss@proxy:8080″
Error 5: Docker mengabaikan pengaturan proxy Desktop
Saat Anda menetapkan proxy menggunakan Desktop, tetapi build gagal dan container tidak dapat membuat koneksi, mungkin sudah saatnya menggunakan opsi konfigurasi lain. Desktop memengaruhi Daemon, tetapi tidak secara langsung memengaruhi container. Cobalah menetapkan proxy tingkat container.
Kesimpulan
Docker dan proxy adalah kombinasi andal yang memberikan kecepatan, keamanan, dan deployment yang efektif. Untuk memaksimalkannya, Anda perlu memilih konfigurasi yang sesuai dan tentu saja memilih proxy berkualitas tinggi yang diperoleh secara legal. DataImpulse siap membantu Anda: tersedia lebih dari 90 juta proxy yang bersumber secara etis, serta dukungan manusia 24/7 untuk membantu tugas pengembangan Anda. Silakan hubungi kami di [email protected] atau klik tombol “Coba Sekarang” untuk memulai bersama kami. Klik “Coba sekarang” atau hubungi kami di [email protected] untuk memulai.
