More Related Content Similar to Dockerハンズオン (20) Dockerハンズオン4. What’s Docker?
• コンテナ型仮想化技術の一つです
• ホストOSの中にゲストOSを起動するのではなく、ホストOSのリ
ソースにnamespeceを切って分離した空間内でゲストを起動します
(メモリ、プロセス、ディスクなどにnamespeceを設ける技術は昔か
らあります。Dockerはそれらを統合したものです)
• パフォーマンスの劣化が殆ど無く、ゲストの起動が数秒で可能
• GoogleやRed Hat、AWS、Microsoftなどの大手ベンダーが採用
5. Docker Registory
• ビルドしたイメージをホストする場所
• Docker社公式のDockerHubにはCentOSやUbuntuといったベースと
なるイメージや、MySQLやnginxといったミドルウェア、Rubyやjsな
どの実行環境コミのイメージがなどが用意されている
• 本番用のコンテナをホストするには、当然Privateなレポジトリが必
要。SaaSとして提供しているサービスもある(ex: Quay.io)し、自 に
立てるタイプ(ex: Docker Registry)もある
6. • CentOS7(ami-89634988)
• EC2 with PublicIP
• Security Group allowing 22 80 8080 8081
• fyi: CoreOS コンテナのホスティングに特化した軽
量OS. ( http://deeeet.com/writing/
2014/11/17/coreos/ )
Host
7. Install & boot
# yum -y install docker
# docker -v
Docker version 1.6.2, build ba1f6c3/1.6.2
# systemctl start docker
8. download image
# docker pull ubuntu:latest
# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
docker.io/ubuntu latest d2a0ecffe6fa 36 hours ago 188.3 MB
docker.ioからDownloadされる
9. docker run
# docker run -it d2a0ecffe6fa /bin/bash
=> イメージから起動
=> -i : 標準出力 -t : 仮想端末
=> フォアグラウンドで起動
Docker Image
Docker
Container
docker run
Docker
Container
docker run
10. Exit from container
[root@f321de9c1e76 /]# exit
=> コンテナからログアウトする
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f321de9c1e76 7322fbe74aa5:latest "/bin/bash" About a minute ago Exited (0) 1 seconds ago romantic_lalande
=> ログアウトしてもコンテナのプロセスは生きてる
# docker rm f321de9c1e76
=> docker rmで完全に削除する
11. Install nginx
# docker pull nginx
# docker run --name mynginx -d -p 8080:80 nginx
=> -d : バックグラウンドで起動(デーモン)
=> -name : コンテナに名前をつける
=> -p : ホストのポートアクセスをコンテナにフォワード
14. sample redis container
# mkdir -p ~/redis && cd ~/redis
# vi Dockerfile
FROM ubuntu:14.04
RUN apt-get update && apt-get install -y redis-server
EXPOSE 6379
ENTRYPOINT ["/usr/bin/redis-server"]
# docker build -t konpyu/redis .
# docker run -d [image_id]
redisが起動するイ
メージが完成
15. FROM ubuntu:14.04
#=> コンテナのベースとなるイメージを指定する。必ず1行目に書く。
RUN apt-get update && apt-get install -y redis-server
#=> コンテナでコマンドを実行
EXPOSE 6379
#=> そのコンテナが開放するポート。主にデーモンとして動かすとき利用。
ENTRYPOINT [“/usr/bin/redis-server"]
#=> 起動時に自動的に実行するコマンド。主にデーモンとして動かすときに指定
ENTRYPOINTはコンテナ
内でPID 1として実行される
# docker build -t konpyu/redis .
16. Talk with other container
Redis
Container
Client
Container
Host
docker0
TCP: 6379
PrivateIP: 172.17.XX.XX
Docker用のネットワーク
ブリッジが自動作成される
17. Linking container
#docker run --link [container_id]:db -it ubuntu:14.04 /bin/bash
- 先ほど作ったRedisコンテナに接続するためのコン
テナを別に立ててみましょう
- linkオプションで、通信をしたいイメージを指定する
- エイリアスを指定する
18. Connect from Client
Container
#root@container_id:/ # env | grep DB_
DB_NAME=/tender_curie/db
DB_PORT_6379_TCP_PORT=6379
DB_PORT=tcp://172.17.0.7:6379
DB_PORT_6379_TCP=tcp://172.17.0.7:6379
DB_PORT_6379_TCP_ADDR=172.17.0.7
DB_PORT_6379_TCP_PROTO=tcp
エイリアス名を元に環境変
数が自動作成される
21. install docker-compose
@host
#curl -L https://github.com/docker/compose/releases/
download/1.3.1/docker-compose-`uname -s`-`uname -m` > /usr/
local/bin/docker-compose
#chmod +x /usr/local/bin/docker-compose
24. sample: wordpress
- mkdir ~/wp && cd ~/wp
# cat docker-compose.yml
web:
image: wordpress
links:
- db:mysql
environment:
- WORDPRESS_DB_PASSWORD=ageman
ports:
- 8081:80
db:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=ageman
- MYSQL_DATABASE=wordpress
設定しないといけない環境
変数はdockerhubのrepoに記述
されています