カニゲーム攻略日記ブログ

beatmaniaIIDXやハースストーンなどのゲーム攻略日記。主にまったり勢。2016年にIIDX皆伝になった

Docker超入門講座をやったメモ(4,5,6)_part2

参考

https://www.youtube.com/watch?v=lZD1MIHwMBY

Dockerは10日ぶりなので復習

目次

4 Dockerを使ってみよう

docker run hello-world

イメージ

graph LR  
    subgraph clint
        c_d["docker run 実行"]
        c_r[Hello form Docker! 表示]
    end

    subgraph host
        h_d["Daemon"]
        h_i[image]
        h_c[container]
    end

    subgraph registry
        r_i[image]
    end

    c_d-->h_d
    h_d-->r_i
    r_i-->h_i
    h_i-->h_c
    h_c-->c_r

registryはDocker Hubなど
Daemonは守護神(バックグラウンドで見守っている)

5 アプリを作成・実行しよう

手順

  1. rubyファイルを作成(例として簡単なWebサーバーを起動したいから作成する)
  2. Dockerfileを作成(コンテナ内でrubyファイルを実行したいから作成する)
  3. Dockerイメージをビルド
  4. Dockerコンテナ作成実行
  5. コンテナ内のサービスにアクセス
  6. コンテナの停止と削除
  7. その他

イメージ(細かいところは間違っているかも)

graph TD
    subgraph DockerContainer
        c_web[WEBサービス]
        c_ruby[ruby]
    end

    subgraph DockerImage
        d_web[WEBサービス]
        i_ruby[ruby]
    end

    subgraph Programmer
        1[1.rubyファイルを作成]
        2[2.Dockerfileを作成]
        3[3.Dockerイメージをビルド]
        4[4.Dockerコンテナ作成実行]
        5[5.コンテナ内のサービスにアクセス]
    end

    1 -->  2
    2 -->  3
    3 -->  4
    4 -->  5

    3-->DockerImage
    4-->DockerContainer
    DockerImage-->|作成| DockerContainer
    5-->c_web

Dockerイメージを使用する利点

環境の差異を最小限に抑えることができる

悪い例:イメージを作成しない。異なる環境でトラブルが発生

良い例:イメージを作成する。異なる環境でも動作する

6 Dockerfileを作ろう

graph 
    subgraph Dockerfile
        a[アプリコード]
        l[ライブラリ]
        bi[ベースイメージ]
    end

    subgraph DockerImage
        
    end

    Dockerfile-->|作成| DockerImage

手順

  1. Gemfileを用意(sinatraをインストールしたい)
  2. Dockerfileを作成(コンテナに入って作業したいのでCMDは/bin/bashにする)
  3. Dockerイメージをビルド
  4. Dockerコンテナ作成実行コンテナに入る(-it)
  5. buddle設定
  6. bundleインストール(sinatraがインストール)
  7. srcフォルダにrubyファイルを作成(実際に開発してみる)
  8. rubyを実行(WEBサーバが立ち上がる)
  9. WEBサーバにアクセス
  10. Dockerfileに上記を反映する
  11. Dockerイメージをビルド
  12. Dockerコンテナ作成実行(WEBサーバが立ち上がる)
  13. WEBサーバにアクセス

10のDockerfileを作成するために
3~9を行っている

イメージ(細かいところは間違っているかも)

graph TD
    subgraph DockerContainer1
        c_web[WEBサービス]
        c_ruby[ruby]
    end

    subgraph DockerImage1
        d_web[WEBサービス]
    end
    
    subgraph DockerContainer2
        c2_web[WEBサービス]
        c2_ruby[ruby]
    end

    subgraph DockerImage2
        d2_web[WEBサービス]
        i2_ruby[ruby]
    end

    subgraph Programmer
        1[1. Gemfileを用意]
        2[2. Dockerfileを作成]
        3[3. Dockerイメージをビルド]
        4[4. Dockerコンテナ作成実行コンテナに入る]
        5[5. buddle設定]
        6[6. bundleインストール]
        7[7. srcフォルダにrubyファイルを作成]
        8[8. rubyを実行]
        9[9. WEBサーバにアクセス]
        10[10. Dockerfileに上記を反映する]
        11[11. Dockerイメージをビルド]
        12[12. Dockerコンテナ作成実行]
        13[13. WEBサーバにアクセス]
    end

    1 -->  2
    2 -->  3
    3 -->  4
    4 -->  5
    5 -->  6
    6 -->  7
    7 -->  8
    8 -->  9
    9 -->  10
    10 -->  11
    11 -->  12
    12 -->  13

    3-->DockerImage1
    DockerImage1-->|作成| DockerContainer1
    4-->DockerContainer1
    5-->DockerContainer1
    6-->DockerContainer1
    7-->c_ruby
    8-->DockerContainer1
    9-->c_web

    11-->DockerImage2
    12-->DockerContainer2
    DockerImage2-->|作成| DockerContainer2
    13-->c2_web