83
59

More than 3 years have passed since last update.

Docker初心者未満向け

Last updated at Posted at 2019-10-26

はじめに

  • 自己紹介:UbuntuでPythonを書いてデータ分析とか異常検知してます
  • CUDAのバージョン管理のためにDockerをやろうと思った
  • 専門用語が多すぎて脳が混乱したので用語集を作った
  • これからDockerを始めたいけどガチで何もわからないという人向けにまとめた
  • PCで見てほしい(スマホQiita勢、いるのか…?)

Dockerことはじめ

  • いろんな仮想環境構築が簡単にできて嬉しいシステム
    • 仮想環境とは:好きなOS+好きなソフトと思っとけばOK
  • 今までの仮想化(ホストOS型仮想化)の悪いところ
    • 仮想環境がホストOSや仮想化ソフトウェアのバージョンに依存してしまう
      • DockerはホストPCの中に全く別のPCを用意する様なものなのでホストの環境に依存しない
      • つまり、いつ誰が使っても同じ結果になる=これを「冪等性」という
      • 冪等性がなくてつらいことになる例
        • web系の人:開発環境と本番環境が違って動かない
        • 機械学習の人:CUDAとかミドルウェアのバージョン管理が死ぬほどめんどくさい
    • 動作がもっさり、ファイル容量が大きいので共有が大変
      • Dockerは仮想環境(Container)の型(Image)を保存・配布する方式なので、管理や共有が楽

Docker運用の流れ

  • ホストPCにDockerをインストール
  • Dockerfileを書く
  • Dockerfileを元に、Docker Imageを作る(build)
  • Docker Imageを元に、Docker Containerを作り、仮想環境を有効にする(run)
  • 仮想環境内でなんやかんや好きなことをする
  • 終わったらContainerを停止させ(stop)、削除する(rm)
  • 「この前と同じ仮想環境作りたいな〜」と思ったら、同じImageを元にContainerを作る(run)
  • Tips
    • Imageは基本的に削除しないけど、もう使わないものがあまりに増え過ぎたら消してOK
    • Docker HubというGithub的なリポジトリから既存のImageをダウンロードできる(pull)

用語集(超基礎)

  • Dockerfile
    • 拡張子のないテキストファイル。DSLというDocker用言語を使って「どんな仮想環境を作りたいか」を書くもの
    • 「DSL」はDomain Specific Language(あるドメインに特化した固有言語)という意味でした。すみません(2020/2/13追記)
    • DSL言語Dockerfileで使うコマンドの例
      • FROM:どのOSやミドルウェアの環境を作るか
      • RUN:Imageを作る時に、どういうコマンドを実行するか
      • COPY:どのファイルをホストPCからコンテナに移動させるか
  • Docker Image
    • Dockerfileを基に作られるもの。後述のContainerの型のようなもの
    • Imageを作ることをbuildと言う
    • オブジェクト指向的に言えばクラス
    • Docker Hubで公開されてるImageをDLしてきてもOK。これをpullという
  • Docker Container
    • Docker Imageを基に作られる仮想環境そのもの
    • オブジェクト指向的に言えばインスタンス
    • Containerを作り実行することをrunという
    • Imageの形で保存・配布して、仮想環境を作りたくなったらContainerにしてね〜という感じ
    • やりたい事が終わったら消す。Imageは残しておき、同じ環境が作りたくなったらまたrunさせる

用語集(ちょっとむずかしい)

  • Docker Engine
    • 常駐アプリ。Dockerシステムの親玉
  • Docker Compose
    • yml形式のテキストファイル
    • 1個のホストPC上で複数個のコンテナを動かす時、その方法を指示する
    • 複数個のコンテナをいっぺんに起動とかもできて便利
  • Docker Machine
    • 「Dockerを持つホストPC」の中に「Dockerを持つPC」環境を作れる
    • クラウド上にDocker環境作る時に便利
  • Docker Swarm
    • 複数台のホストPCがある時、それらをまとめて制御できる
    • 例えば、ホストをまたいだコンテナ間の通信をどう制御するかなど
    • これを「オーケストレーションシステム」という
  • Service
    • ホストPCが1台&コンテナが1個 → container runコマンドでコンテナを起動
    • ホストPCが1台&コンテナが1個 → Composeを使ってまとめてコンテナを起動
    • ではホストPCが複数台のときは? → Serviceというコンテナのまとまりを作って起動
    • 1つのアプリしか扱えない
  • Stack
    • Serviceのまとまり
    • 複数のServiceを扱うことで、複数のアプリを扱うことができるようになる
  • Kubernetes
    • Swarmと同じく、オーケストレーションシステムの1つ
    • Compose, Swarm, Stackを合わせたような便利なやつ

Dockerにおけるデータ管理

  • データ管理関連
    • 仮想環境作ってからいちいちデータをダウンロードしてたらめんどくさい
    • ホストPC上にデータを管理して、それをコンテナにマウントする手法が取られる
  • データ通信関連
    • コンテナ間で通信できるし、ホストをまたいで通信する事もできる

Dockerを勉強しててひっかかったところ

  • 「Dockerfile」という名前の情報のなさ
    • Dockerfileという固有名詞があると最初わからなかった
    • Docker関係のファイル全般のことだと思ってた
  • Docker Imageもコンテナっぽいこと
    • Imageに「OS+ミドルウェア+アプリ」を放り込むんだからコンテナ感あるよね
    • あくまでContainerは仮想環境の実体、Imageはその型

おわりに

  • 自分の理解が進んだら随時追記します
  • 「ここがわからなかった」「ここがまちがってる」「わかりやすかった」などコメントお待ちしてます

参考

83
59
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
83
59