Saya berencana untuk membagi server monolitik saya menjadi banyak kontainer buruh pelabuhan kecil tetapi belum menemukan solusi yang baik untuk "komunikasi antar kontainer". Ini adalah skenario target saya:
Saya tahu bagaimana menghubungkan kontainer dan bagaimana mengekspos port, tetapi tidak ada solusi yang memuaskan bagi saya.
Apakah ada solusi untuk berkomunikasi melalui nama host (nama wadah) antara wadah seperti di jaringan server tradisional?
networking
docker
Patrick Gotthard
sumber
sumber
Jawaban:
Sunting: Setelah Docker 1.9,
docker network
perintah (lihat di bawah https://stackoverflow.com/a/35184695/977939 ) adalah cara yang disarankan untuk mencapai ini.Solusi saya adalah menyiapkan dnsmasq pada host agar catatan DNS diperbarui secara otomatis: Catatan "A" memiliki nama wadah dan mengarah ke alamat IP wadah secara otomatis (setiap 10 detik). The Script update otomatis yang disisipkan di sini:
Pastikan layanan dnsmasq Anda tersedia di
docker0
. Kemudian, mulai penampung Anda dengan--dns HOST_ADDRESS
menggunakan layanan mini dns ini.Referensi: http://docs.blowb.org/setup-host/dnsmasq.html
sumber
Fitur jaringan baru memungkinkan Anda untuk terhubung ke kontainer berdasarkan namanya, jadi jika Anda membuat jaringan baru, semua kontainer yang terhubung ke jaringan itu dapat menjangkau kontainer lain dengan namanya. Contoh:
1) Buat jaringan baru
2) Hubungkan kontainer ke jaringan
atau
3) Ping container dengan nama
Lihat ini bagian dari dokumentasi;
Catatan: Tidak seperti lama
links
, jaringan baru tidak akan membuat variabel lingkungan, atau membagikan variabel lingkungan dengan penampung lain.Fitur ini saat ini tidak mendukung alias
sumber
docker-compose down,up,restart
?bridge
jaringan karena kompatibilitas mundur tapi ya, saya setuju, itu harus pasti akan diaktifkan secara default!Yang harus apa
--link
bagi , setidaknya untuk bagian hostname.Dengan buruh pelabuhan 1,10, dan PR 19242 , itu akan menjadi:
(lihat bagian terakhir di bawah)
Itulah yang memperbarui
/etc/hosts
detail fileMisalnya, luncurkan server LDAP:
Dan tentukan gambar untuk menguji server LDAP tersebut:
Anda dapat mengekspos '
openldap
' container as 'internalopenldap
' dalam gambar uji dengan --link:Kemudian, jika Anda mengetik 'lds', alias itu akan berfungsi:
Itu akan mengembalikan orang. Makna
internalopenldap
dicapai dengan benar darildaptest
gambar.Tentu saja, buruh pelabuhan 1.7 akan menambahkan
libnetwork
, yang menyediakan implementasi Go asli untuk menghubungkan kontainer. Lihat postingan blog .Ini memperkenalkan arsitektur yang lebih lengkap, dengan Model Jaringan Kontainer (CNM)
Itu akan memperbarui Docker CLI dengan perintah "jaringan" baru, dan mendokumentasikan bagaimana
-net
bendera " " digunakan untuk menetapkan kontainer ke jaringan.buruh pelabuhan 1.10 memiliki bagian baru alias Jaringan-lingkup , sekarang secara resmi didokumentasikan di
network connect
:sumber
EDIT : Ini bukan lagi tepi berdarah: http://blog.docker.com/2016/02/docker-1-10/
Jawaban Asli
Saya berjuang sepanjang malam. Jika Anda tidak takut dengan versi terbaru, versi terbaru mesin Docker dan Docker akan mengimplementasikan libnetwork.
Dengan file konfigurasi yang tepat (yang perlu dimasukkan ke dalam versi 2), Anda akan membuat layanan yang semuanya akan saling melihat. Dan, bonus, Anda dapat menskalakannya dengan docker-compose juga (Anda dapat menskalakan layanan apa pun yang Anda inginkan yang tidak mengikat port pada host)
Berikut adalah contoh file
Dan referensi untuk file compose versi baru ini: https://github.com/docker/compose/blob/1.6.0-rc1/docs/networking.md
sumber
Sejauh yang saya tahu, dengan hanya menggunakan Docker, hal ini tidak memungkinkan. Anda memerlukan beberapa DNS untuk memetakan ip kontainer: s ke nama host.
Jika Anda ingin solusi di luar kotak. Salah satu solusinya adalah dengan menggunakan misalnya Kontena . Muncul dengan teknologi overlay jaringan dari Weave dan teknologi ini digunakan untuk membuat jaringan LAN pribadi virtual untuk setiap layanan dan setiap layanan dapat dijangkau
service_name.kontena.local-address
.Berikut adalah contoh sederhana dari file YAML aplikasi Wordpress dimana layanan Wordpress terhubung ke server MySQL dengan alamat wordpress-mysql.kontena.local:
sumber