参加イベント
- Azure Antenna:https://azure.connpass.com/event/77515/
参加目的
- Docker, kubernetes について興味はあったが、触ったことはあまりなかった
- コンテナを扱う第一歩を踏み出すために参加
- できれば、今後コンテナというものをうまく使っていきたいと思っている
イベント概要
当日の流れ
前半:コンテナの概要・Docker
後半:kubernetes
説明を聞きながら、都度ハンズオンでやってみるとういう流れでした。
資料
公開されてますので、詳しくはこちらをご参照ください。
ハンズオン内容(知識的なところを抜粋)
コンテナの概要
- コンテナはアプリケーションを動かす小さな基盤、仮想化ではない
- centos とか ubuntu 環境のコンテナを動かしたとしても、実際動かすのは、ホストの kernel
- コンテナの ps 1 が initプロセス。ホストからみると全く違う pid で動いてる
- 1コンテナ、1種類のプロセスだけ動作させるべき
メリット
-
高いポータブル性
- 事業継続性の向上
- ステージング、開発、本番、同じ環境で実施できる(環境差異をなくす)
- ⇒ paas, サーバレス (開発等をとにかく楽に)というのとはちょっと違う
-
コンピュータ資源の効率的利用
- 負荷分散、冗長化までやってくれる (k8s)
-
DevOps 対応しやすい
- インフラの構成もコード管理できる
- GitHub と連携の仕組み
簡単に作って、消すことができる手軽さ
主な利用シーン
- アプリケーションを動作させる
- アプリケーションサーバ、Webサーバ等
- ツールなどユーティリティを動作させる
- azure の CLI ツールも Docker イメージになっていて、 python とか適正なバージョンのものが梱包されている
★ コンテナのデファクトスタンダードが Docker
Docker
docker コマンド
大事なのは /var/run/docker.sock
これに権限があるユーザのみ docker コマンドを実行できる
docker インストール
docker.io パッケージ # docker パッケージとは全く別物なので注意
$ sudo apt update && sudo apt install docker.io -y
docker イメージの検索
$ docker search ***
STARS: いいねみたいな感じの指標
OFFICIAL : / がないのは、開発社が出してるもの
:タグ名
タグは管理面でも重要
何もつけなければ、latest が自動補完される
ホスト上に Docker コンテナのポートを割り当て
例えば、ホストの 80 を コンテナ内の 80 に bind するとか
このポートの転送は iptables(nat) で実現している
主な docker コマンド
$ docker run ****
$ docker ps
$ docker ps -a
$ docker images
$ docker pull ****
$ docker stop [UUID]
docker ライフサイクル
- build
- pull / build
- commit
- rm / rmi
- ship
- push # レジストリに登録
- run
- run / stop / kill
docker run
$ docker run -it *****
シェル対話型: -it オプション
名前とタグが一致すれば、ローカルにあるときはそのイメージを利用する
イメージがなかったらリモート上からとってくる
docker exec
$ docker exec -it [id] sh
デーモンとして動いている中にはいれる
debug 等でよく使う
自分用のコンテナ作成
FROM alphine
MAINTENER なくてもいい
RUN コマンド ex) apt install python2 apache2
CMD ["command"] # メインプロセス docker 起動時の最後のコマンド
ex) CMD [ "httpd -DFOREGROUND" ]
$ docker build -t myapache2 ./
同じ作業するときはキャッシュが使われる
Dockerfile 変更したら build すること
覚えておくべき注意点
- コンテナ内での変更は保存されない [immutable]
- データベースサーバとしては使うべきではない(コンテナ内への保存はだめ)
- コンテナとイメージは消さないと残る
$ docker stop
# docker のプロセスは消える$ docker ps -a
でみれるのは、起動してないコンテナが残ってる- 停止状態のコンテナは残り続ける。イメージも残り続ける。それぞれ、下記パスに残る
/var/lib/docker/
/var/lib/docker/image/aufs
- コンテナビルド時はキャッシュが使われる
- 意図せず変更が反映されないこともあります
- ホスト再起動のときは、コンテナは勝手に起動してくれない
- docker run するときに --restart=always オプションをつけて実行すればいい
- 出力したいログは標準出力/エラー出力する
- ログファイルには出さない
- メインで実行したいプロセスを foreground で実行して終了させない
- コマンドプロンプトが戻ってこない状態にしておく、デーモン化しない
- ⇒ k8s でもこれを前提に設計されている
- 標準出力、標準エラー出力をみるには
$ docker logs -f [uuid]
alpine linux
コンテナ用に最適化された超軽量linux
パッケージ管理ツールは apk
# apk update
# apk add
# apk search
ubuntu とかに比べるとサイズが断然小さい
タグを検索したときに -alpine とかついたものは軽量版。alpine ベースになってる
Docker の構造
Docker は linux 2.6.32-431 以上で使える
cgroups, namespace, chroot 等を利用
読み書き領域 |
---|
差分イメージ |
差分イメージ |
ベースイメージ |
ベースイメージ(ubuntu とか)があって
build することで、差分イメージがいくつも層を重ねて、
run すると、読み書き層をくっつけるという感じ
kubernetes
また、別ページで書きます。
感想
docker, kubernetes の導入として、とてもありがたい機会でした。
内容が盛りだくさんで、少し時間が短かかったなという印象です。
講師の方の説明もわかりやすく、理解しやすかったです。
これから自分で環境をつくって、色々と検証していこうと思います。