LoginSignup
2
4

More than 5 years have passed since last update.

【Azure】Dockerからkubernetesまで実践入門(ハンズオン) に参加してきました

Last updated at Posted at 2018-03-07

参加イベント

参加目的

  • Docker, kubernetes について興味はあったが、触ったことはあまりなかった
  • コンテナを扱う第一歩を踏み出すために参加
  • できれば、今後コンテナというものをうまく使っていきたいと思っている

イベント概要

当日の流れ

前半:コンテナの概要・Docker
後半:kubernetes

説明を聞きながら、都度ハンズオンでやってみるとういう流れでした。

資料

公開されてますので、詳しくはこちらをご参照ください。

ハンズオン内容(知識的なところを抜粋)

コンテナの概要

  • コンテナはアプリケーションを動かす小さな基盤、仮想化ではない
  • centos とか ubuntu 環境のコンテナを動かしたとしても、実際動かすのは、ホストの kernel
  • コンテナの ps 1 が initプロセス。ホストからみると全く違う pid で動いてる
  • 1コンテナ、1種類のプロセスだけ動作させるべき
メリット
  1. 高いポータブル性

    • 事業継続性の向上
    • ステージング、開発、本番、同じ環境で実施できる(環境差異をなくす)
      ⇒ paas, サーバレス (開発等をとにかく楽に)というのとはちょっと違う
  2. コンピュータ資源の効率的利用

    • 負荷分散、冗長化までやってくれる (k8s)
  3. DevOps 対応しやすい

    • インフラの構成もコード管理できる
    • GitHub と連携の仕組み
  4. 簡単に作って、消すことができる手軽さ

主な利用シーン
  1. アプリケーションを動作させる
    • アプリケーションサーバ、Webサーバ等
  2. ツールなどユーティリティを動作させる
    • 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 ライフサイクル
  1. build
    • pull / build
    • commit
    • rm / rmi
  2. ship
    • push # レジストリに登録
  3. run
    • run / stop / kill
docker run

$ docker run -it *****
シェル対話型: -it オプション
名前とタグが一致すれば、ローカルにあるときはそのイメージを利用する
イメージがなかったらリモート上からとってくる

docker exec

$ docker exec -it [id] sh
デーモンとして動いている中にはいれる
debug 等でよく使う

自分用のコンテナ作成
Dockerfile
  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 の導入として、とてもありがたい機会でした。
内容が盛りだくさんで、少し時間が短かかったなという印象です。
講師の方の説明もわかりやすく、理解しやすかったです。
これから自分で環境をつくって、色々と検証していこうと思います。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4