Docker mempunyai dua cara untuk menghubungkan antar container yang pertama melalui link
dan yang kedua melalui network
, pada pembahasan kali ini kita akan membahas mengenai link
sedangkan untuk network
akan dibuatkan pembahasannya secara terpisah.
Docker link adalah fitur koneksi dari docker yang digunakan untuk menghubungkan antar container. Link
merupakan fitur lama yang saat ini mulai ditingalkan semenjak diperkenalkannya fitur network
pada docker version 1.9.
Docker sendiri menyarankan untuk mulai beralih menggunakan network
karena ke depan fitur link
akan di hapus dari docker, tetapi tidak ada salahnya kita belajar link
untuk menambah pemahaman kita mengenai docker.
Jika kalian ingin mengetahui lebih lanjut mengenai link
kalian bisa mengunjungi dokumentasinya di sini.
Ketika kita menggunakan link
untuk menghubungkan container satu dengan container lain maka docker akan melakukan dua hal:
-
Pertama docker akan melakukan set
environment variables
pada target container berdasarkan parameter--link
. Tujuannya untuk mengekspos setiapenvironment variables
yang berasal dari source container sebagaienvironment variables
di target container. Contoh setenvironment variables
dari redis sebagai berikut:-
REDISDB_PORT=tcp://172.17.0.2:6379
Docker membuat
environment variables
alias_PORT, variabel ini berisi URL port yang terekspos dari source container. -
REDISDB_ENV_REDIS_VERSION=6.0.9
Docker membuat
environment variables
alias_ENV_name, variabel ini berisi ver redis yang terekspos dari source container.
-
-
Kedua docker akan melakukan update file hosts pada
target container
. Tujuannya untuk memetakan hostname ke IP address dengan memasukan tiga hostname yaitu original, alias dan hash_id. Contoh format update file hosts (IP_address alias hash_id original) sebagai berikut: 172.17.0.2 redisDB 78c26ae78e09 redis-server
Pada skenario ini kita akan menggunakan base image redis, dari base image redis kita akan buat dua container. Satu container sebagai redis server dan satu container sebagai redis client. Redis client akan bertugas untuk memasukan data ke redis server sedangkan redis server bertugas untuk menampung data yang di masukan oleh redis client. Untuk koneksi antar container kita gunakan link
sebagai penghubung.
Pertama buat container redis-server dengan menggunakan base image redis:6.0.9
.
$ docker run -d --name redis-server redis:6.0.9
- -d digunakan untuk menjalankan container di mode
detached
(background). - --name digunakan untuk memberikan nama container redis-server.
- redis:6.0.9 merupakan base image yang digunakan untuk membuat container.
Kemudian buat container redis-client dengan menggunakan base image redis:6.0.9
.
$ docker run -d --name redis-client --link redis-server:redisDB redis:6.0.9
- -d digunakan untuk menjalankan container di mode
detached
(background). - --name digunakan untuk memberikan nama container redis-client.
- --link digunakan untuk
linking
ke redis-server dengan memberikannya alias redisDB. - redis:6.0.9 merupakan base image yang digunakan untuk membuat container.
Pastikan semua container dalam kondisi aktif, untuk mengechecknya gunakan perintah berikut:
$ docker ps
Semua container dalam status up
yang artinya semua dalam kondisi aktif.
Masuk ke dalam container redis-client
$ docker exec -it redis-client /bin/bash
- -it digunakan untuk masuk ke
interactive mode
. - redis-client merupakan nama container yang dijalankan.
- /bin/bash digunakan untuk membuat bash session pada container redis-client.
Setelah menjalankan perintah tersebut kalian akan masuk dalam bash session dengan tampilan prompt sebagai berikut:
root@eb5c13c92285:/data#
Catatan:
- Tanda $ menunjukan prompt dari host machine milik kita.
- Tanda # menunjukan prompt dari container yang kita jalankan (redis-client).
Sesuai dengan cara kerja link
, docker akan melakukan dua hal pertama akan melakukan set environment variables
dan kedua akan melakukan update pada file hosts
.
Lakukan pengecekan environment variables
pada container (redis-client) dengan menjalankan perintah berikut:
# env
Maka akan ditampilkan semua environment variables
, terdapat environment variables yang di ekspos dari source container (redis-server) hasil dari proses linking
.
Kemudian lakukan pengecekan file hosts dengan menjalankan perintah berikut:
# cat /etc/hosts
Maka akan ditampilkan pemetaan tiga hostname (original, alias dan hash_id) ke IP address.
Pertama kita masuk ke redis server, melalui perintah berikut:
# redis-cli -h redisDB
- -h digunakan untuk merujuk ke hostname.
- redisDB merupakan hostname yang tuju. Kita bisa menggunakan salah satu hostname karena hasil dari
linking
menghasilkan tiga hostname (original, alias dan hash_id).
Catatan:
- Tanda $ menunjukan prompt dari host machine milik kita.
- Tanda # menunjukan prompt dari container yang kita jalankan (redis-client).
- Tanda > menunjukan prompt dari redis.
Kemudian lakukan test PING yang akan mendapatkan balasan PONG artinya redis berhasil dipasang dengan benar.
redisDB:6379> PING
PONG
Lakukan operasi menyimpan data dengan key
name untuk menyimpan informasi data nama, lalu data tersebut di print untuk ditampilkan.
redisDB:6379> set name "Joko Purwanto"
redisDB:6379> get name
"Joko Purwanto"
Sampai di sini kita telah berhasil menggunakan link
untuk menghubungkan source container sebagai redis server dengan target container sebagai redis client.