参考
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 アプリを作成・実行しよう
手順
- rubyファイルを作成(例として簡単なWebサーバーを起動したいから作成する)
- Dockerfileを作成(コンテナ内でrubyファイルを実行したいから作成する)
- Dockerイメージをビルド
- Dockerコンテナ作成実行
- コンテナ内のサービスにアクセス
- コンテナの停止と削除
- その他
イメージ(細かいところは間違っているかも)
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
手順
- Gemfileを用意(sinatraをインストールしたい)
- Dockerfileを作成(コンテナに入って作業したいのでCMDは/bin/bashにする)
- Dockerイメージをビルド
- Dockerコンテナ作成実行コンテナに入る(-it)
- buddle設定
- bundleインストール(sinatraがインストール)
- srcフォルダにrubyファイルを作成(実際に開発してみる)
- rubyを実行(WEBサーバが立ち上がる)
- WEBサーバにアクセス
- Dockerfileに上記を反映する
- Dockerイメージをビルド
- Dockerコンテナ作成実行(WEBサーバが立ち上がる)
- 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