Edited at

今日から始めるDocker【導入編】

More than 1 year has passed since last update.


  • 基本的にはRuby/Node.jsなどのサーバーサイドを中心にお仕事していますが、あるきっかけでプロジェクトへのDocker導入のお手伝い(自分もこの際に初めてDocker触ったんですが...)をさせていただきました。

  • 少しでも後世の役に立てばと思い、その際に学んだことをまとめました。

  • なお、当方は正確な言葉や用語よりもイメージを重視しているので、そこの辺りは優しく読んで頂けますと幸いです。


関連記事


対象読者


  • まだDockerに触れたことがない人

  • Dockerをこれから使いたいなーと思っている人


記載していること


  • Dockerのインストール手順

  • docker上でプログラムを起動する雰囲気の説明


目次


  • Dockerをインストールしてみよう

  • なんとなく動かしてみよう

  • 次のステップ


Dockerをインストールしてみよう


  • Docker for Macをhomebrew経由でインストールします


    • 他のOSを使っている方は適宜、調べてみてください m(__)m



$ brew update

$ brew install docker
$ brew cask install docker # <-これにより、/Applications/Docker.appができる
$ docker --version
Docker version 18.03.1-ce, build 9ee9f40 # インストールしたdockerのバージョンが表示されればok!


  • Docker.appを起動する

  • これで晴れて、Dockerを使う環境が整いました!(簡単ですね!)


なんとなく動かしてみよう


Dockerコンテナを起動してRubyのコードを実行してみる


  • 何はともあれ触ってみないことには始まりません

  • 手始めに、rubyで書いたプログラムをDockerコンテナ上で実行させてみましょう

  • ディレクトリ構成はこんな感じでやっていきます

docker-ruby

├ sample.rb


  • まずは実行したいrubyのコードを書きます

$ mkdir docker-ruby

$ cd docker-ruby
$ touch sample.rb
$ echo "puts 'Hello, from Docker container!'" > sample.rb


  • dockerコマンドを使用してRubyの入ったコンテナを起動し、その中でsample.rbを実行してみます

  • この際の実行ログはおよそ、下記のような感じになります

$ docker run --rm -v "$PWD":/usr/src/sample.rb -w /usr/src/sample.rb ruby:2.5 ruby sample.rb

Unable to find image 'ruby:2.5' locally
2.5: Pulling from library/ruby
cc1a78bfd46b: Pull complete
d2c05365ee2a: Pull complete
231cb0e216d3: Pull complete
3d2aa70286b8: Pull complete
e80dfb6a4adf: Pull complete
9fdce3e4507c: Pull complete
590d63dda050: Pull complete
e6fd54c4bb16: Pull complete
Digest: sha256:15cf422c8a386c5dc4ffc51875d09f3e70a9350575aabe710117de452ec36159
Status: Downloaded newer image for ruby:2.5
Hello, from Docker container!


  • 最後に Hello, from Docker container! と表示されていますね!

  • これはDockerコンテナ上で実行されたsample.rbの実行結果ログです

  • というわけで、コンテナ上でプログラムを実行できました!


上記でやったことの解説


実行コマンドの解説

$ docker run --rm -v "$PWD":/usr/src/sample.rb -w /usr/src/sample.rb ruby:2.5 ruby sample.rb

上記のコマンドにより、ざっくり5つのことをやっています



  1. dockerコンテナを起動する



    • docker run により、コンテナを起動します




  2. ホスト側のディレクトリをコンテナ側のディレクトリにマウント(共有・認識)する



    • -v "$PWD":/usr/src/sample.rb により、ホスト側のファイルをdockerコンテナ上の環境にも反映させます


      • コンテナをただ立ち上げるだけでは中身がカラなので、コンテナの中に入れるもの指定します



    • 書き方としては、 ホスト側のパス:コンテナ側のパス で表記します



      • : が区切れ目ですね




    • $PWD は今いるディレクトリまでのパスを意味します




  3. コンテナ上のワーキングディレクトリを指定する



    • -w /usr/src/sample.rb により、コンテナ上で作業する際のディレクトリを指定します




  4. 使用したいRubyのイメージを指定する



    • ruby:2.5 により、バージョン2.5のRubyのイメージを指定しています




  5. sample.rbを実行する



    • ruby sample.rb により、sample.rbをRubyとして実行しています




ログの解説


  • 下記のログでは、コンテナ起動時に使用するイメージをダウンロードしています

  • 指定したイメージがホスト環境上に存在しない(ダウンロードされていない)ので、リモート(Docker Hub)からダウンロードしています

Unable to find image 'ruby:2.5' locally

2.5: Pulling from library/ruby
cc1a78bfd46b: Pull complete
d2c05365ee2a: Pull complete
231cb0e216d3: Pull complete
3d2aa70286b8: Pull complete
e80dfb6a4adf: Pull complete
9fdce3e4507c: Pull complete
590d63dda050: Pull complete
e6fd54c4bb16: Pull complete
Digest: sha256:15cf422c8a386c5dc4ffc51875d09f3e70a9350575aabe710117de452ec36159
Status: Downloaded newer image for ruby:2.5


  • リモートに存在しないイメージを指定すると、下記のようにエラーが返されます

$ docker run -v "$PWD":/usr/src/sample.rb -w /usr/src/sample.rb ruby:fugafuga ruby sample.rb

Unable to find image 'ruby:fugafuga' locally
docker: Error response from daemon: manifest for ruby:fugafuga not found.
See 'docker run --help'.


  • 起動したコンテナ上のsample.rbの実行結果です

Hello, from Docker container!


次のステップ


  • さて、これまででdockerのインストールと、コンテナ起動の雰囲気を掴みました

  • 上記の手順だと、Rubyをインストールしてコードを実行するだけなのに、長ったらしい呪文を実行しないといけません

  • また、あくまでもコマンドライン上でしていしているので、コードとして管理されていません

  • 次のステップではDockerfile(コンテナの設計図みたいなもの)を使ってコンテナを起動する手順を解説していきます


参考文献