Docker入れてみました
どうでもいい話
開発環境をリニューアルしたくてMac買いました。
iPhoneアプリとか開発したいなーという感じです。
この機会にDocker入れて開発環境の構築を検討してみようかと思い、とりあえずまだ触りだけだけどメモ。
インストール
Docker for Macをインストールします。
公式サイトからダウンロードだけど、アドレス、アカウント、パスが必要なアカウント登録が必要でした。
ちなみに複数のコンテナを管理するDocker ComposeもすでにDocker for Mac入ってます。
Install Compose on macOS
Docker for Mac and Docker Toolbox already include Compose along with other Docker apps, so Mac users do not need to install Compose separately.
起動
バージョン確認のコマンドでちゃんと起動していることが確認できました。
$ docker version Client: Version: 18.03.1-ce API version: 1.37 Go version: go1.9.5 Git commit: 9ee9f40 Built: Thu Apr 26 07:13:02 2018 OS/Arch: darwin/amd64 Experimental: false Orchestrator: swarm Server: Engine: Version: 18.03.1-ce API version: 1.37 (minimum version 1.12) Go version: go1.9.5 Git commit: 9ee9f40 Built: Thu Apr 26 07:22:38 2018 OS/Arch: linux/amd64 Experimental: true
Dockerの用語の解釈
いろいろ調べた結果のあくまで個人的な解釈です。ご意見あればください。
イメージ
オブジェクト指向のクラスのようなものという解釈。アプリケーションが動くための情報が提供される感じ。
コンテナ
オブジェクト指向のインスタンスのようなものという解釈。イメージをもとに作成されてアプリケーションが動く実際の環境。
Dockerfile
イメージの作り(動作?)を記載するもの。ソースコード的な位置づけ?
触ってみる
イメージをとってくる
試しにrubyのイメージをとってくる。
とってくる先はデフォルトではDockerHub。
$docker pull ruby
とってきているイメージの確認。
$docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE ruby latest 857bc7ff918f 2 weeks ago 869MB
特に指定がない場合は最新(latest)がとって来れるもよう。バージョンを指定したい場合はruby:{バージョン}でいける。
コンテナを作る
とってきたrubyのイメージからコンテナを作成してみる。
$docker run ruby ruby --version ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
これはrubyのイメージからコンテナを作成し、ruby --versionコマンドを実行したというコマンド。
ちなみにDockerHubにある最新(2018/6/27時点)のrubyのバージョンは2.5.1p57ということがわかった。
存在するコンテナの確認は以下のコマンド。
停止している(今回の場合はruby --versionが完了したら停止する)ものも含めての表示の場合は-aオプションが必要。
$docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6f5fbb0441bc ruby "ruby --version" 6 minutes ago Exited (0) 6 minutes ago loving_noyce
さらにもう一度同じコマンドでコンテナを作成した場合は別のコンテナが作成、実行される。
$ docker run ruby ruby --version ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux] $ docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9ed7ce97548e ruby "ruby --version" 2 seconds ago Exited (0) 1 second ago upbeat_yalow 6f5fbb0441bc ruby "ruby --version" 9 minutes ago Exited (0) 9 minutes ago loving_noyce
コンテナの削除
コンテナの削除は以下のコマンドで可能
$ docker container rm {CONTAINER ID}
イメージの削除
イメージの削除は以下のコマンドで可能
$ docker image rm {IMAGE ID}
Dockerfile
Dockerfileを作成してrubyにてHello World!を出力してみます。
Dockerfileを作成する用の空のディレクトリを切り(推奨 ※公式も)、以下のファイルを配置します。
今回はそのディレクトリをカレントディレクトリにします。
hello.rb
puts "Hello World!"
Dockerfile
FROM ruby ADD hello.rb /test/ WORKDIR /test ENTRYPOINT ["ruby", "hello.rb"]
ちなみにDockerfileの意味は以下の通りです。
命令 | 解説 |
---|---|
FROM | ベースのイメージを記載します。 |
ADD | ホストPCのファイルをイメージにコピーします。 |
WORKDIR | 以下ENTRYPOINT等のコマンドを実行するディレクトリ |
ENTRYPOINT | docker run時の実行コマンド |
Dockerfileをもとにイメージを作成します。
コマンドの最後のドットはDockerdileの場所を指定(今回はカレントディレクトリ)。
$ docker build .
作成されればこんな感じで確認できます。
今回はオプションをつけてないので、REPOSITORYもTAGもnoneです。
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> b8c5ba4a7800 13 minutes ago 869MB ruby latest 857bc7ff918f 2 weeks ago 869MB
ちなみにDockerfileの記載ミスでbuildが途中で失敗した場合もイメージが作成されていたので、その場合は要注意。
最後にrunコマンドでコンテナを作成し、実行します。(IMAGE IDで実行)
$ docker run b8c5ba4a7800 Hello World!
終わりに
触りとしてはそれなりにやれたかな思ってます。
感覚はつかめたのでこれをベースにrubyの開発環境構築を検討しようかな。