これは何 †
- 同一ホスト内の他のコンテナで動いているサービスのポート番号を環境変数として取り込める
- 本当にホストの外側に公開するポート番号のみを指定、Docker コンテナ群の中では自動割付にする
- nginx のみ 10080:80 を指定する
- glassfish, postgresql のポート変換は Docker が自動割付
- "link" を使うことにより、nginx は環境変数で glassfish のポートを知ることができる。同様に、glassfish は、postgresql のポートを知ることができる。
- で?
- Kubernates を使うときに使う。
- Kubernetes は、サービスの単位となるコンテナ群を Pod として管理する。Pod 内部の通信に link を使う
- Kubernates は、Pod をクラウドの中で自動的にクラスタ化して、負荷分散をやってくれる
とりあえず memcached を実行するコンテナを作る †
- Dockerfile
FROM ubuntu:14.10
MAINTAINER Atsushi HONDOH <kagyuu@hondou.homedns.org>
## Proxy
# ENV http_proxy http://foo%40bar.com:password@proxy.bar.com:3124/
# ENV https_proxy http://foo%40bar.com:password@proxy.bar.com:3124/
RUN apt-get -y update && apt-get -y upgrade
RUN apt-get install -y memcached
RUN useradd memcached
## Expose ports
EXPOSE 11211
## Execute monit
CMD ["/usr/bin/memcached","-u","memcached"]
- buildと実行
$ docker build -t atsushi/memcached ./
$ docker run -d -t atsushi/memcached
f53ec39cc153ed6fa55f727cfe5b6a651230539d861bcb0f52aa3ef975b3e9ba
core@localhost ~/git/DockerExam/memcached $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f53ec39cc153 atsushi/memcached:latest "/usr/bin/memcached 18 seconds ago Up 17 seconds 11211/tcp high_poincare
61dda6fa39bd registry:latest "/bin/sh -c 'exec do 24 hours ago Up 24 hours 0.0.0.0:5000->5000/tcp evil_bohr
- 今回はたまたま、11211 のポート変換が起きなかった
- memcached は root で実行できない。メモリ "-m 1024m"。"-d" でデーモン起動だが、Docker なのでインタラクティブモード(-d なし)で起動
- docker run の引数に "--name NAME" をつけると、インスタンス名をつけることができる
--link で、memcached の IP アドレスと Port 番号を調べる †
core@localhost ~/git/DockerExam/memcached $ docker run --rm --link high_poincare:MEMCACHED -i -t busybox ash
/ # env
HOSTNAME=6efaebb90920
SHLVL=1
HOME=/
MEMCACHED_PORT_11211_TCP_ADDR=172.17.0.7
MEMCACHED_PORT_11211_TCP_PORT=11211
MEMCACHED_PORT_11211_TCP_PROTO=tcp
TERM=xterm
MEMCACHED_PORT=tcp://172.17.0.7:11211
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MEMCACHED_NAME=/agitated_bartik/MEMCACHED
MEMCACHED_PORT_11211_TCP=tcp://172.17.0.7:11211
PWD=/
/ # telnet $MEMCACHED_PORT_11211_TCP_ADDR $MEMCACHED_PORT_11211_TCP_PORT
set data1 0 0 3
abc
STORED
get data1
VALUE data1 0 3
abc
END
/ # exit
- ふむふむ、ちゃんと memcached に対してデータの登録と検索ができてる
Docker