こんにちは。TECH DRIVEの齋藤です。
前回の 「Docker概要、メリットをざっくりと」
に続きDockerfileを使ってRuby on Railsの開発環境を作成していきましょう。
前回の章立ての中では1エントリーで「DockerfileでRuby on Railsの開発環境を作成する」ところまで書こうかと思っていたのですが
1エントリーで書ききれなかったことと、その前にDockerfileの基本的な部分を抑えておくためにも準備編を追加しました。
まず、Dockerfileの作成に入る前にDockerの基本用語であるDocker イメージついて触れてみたいと思います。
Docker イメージ
前回の記事でDockerを使えば「コンテナ」と呼ばれる仮想的なマシンが構築できると紹介したかと思います。
「 Docker イメージ」はそのコンテナの雛形になります。Dockerではこの「イメージ」を元にコンテナを生成します。
Docker イメージ の使い方とDockerfileについて
Docker イメージを使用してコンテナを生成し、そのコンテナ内で手作業でOSやミドルウェアの設定をする方法と、
元になるDocker イメージの指定とOSやミドルウェアの設定をファイルにまとめて、それを元にイメージの作成 + コンテナの生成をする方法があります。
今回ご紹介するDockerfileは後者の方法です。毎回手作業でインフラを構築するのは単純に時間がかかることもありますし、
ミスも必然的に多くなります。Dockerfileを使えば設定はコードとしてファイルにまとめることができコマンドを使って
簡単に設定情報通りのイメージを構築することができます。これでより管理がしやすくなり時間とミスを減らすことにつながるというわけです。
Dockerfileの書き方
ではDockerfileの書き方に簡単に触れてみようと思います。
まずDockerfileという名前のファイルを用意します。Dockerfileには元になるイメージの名前と
その設定情報をコードで書いていきます。コードは「命令 + 引数」という形です。
FROM命令
元になるイメージの指定は「FROM 元になるイメージ名」という形で書きます。
こんな感じです。
FROM centos
このイメージ名は誰が決めているの?置いてある場所は?という疑問があると思います。
イメージ名はイメージを作った人が決めています。置いてある場所はDocker Hubです*1。
このFROMの感覚はGitでいうCloneに近い気がします。イメージ名はGitでいうリポジトリ名。DockerHubはGitHubのような感じです*2。
ちなみに「centos」は公式のリポジトリとして公開されているイメージ名です。
RUN命令
もうひとつほとんどのDockerfileで使う命令が
「RUN 実行するコマンド」の書き方になります。
こんな感じです。
RUN yum -y install git
「yum -y install 」はよくみるコマンドですね。試しに今回はこの状態でイメージを作成してみましょう。
今のDockerfileの中身はこの状態です。
FROM centos RUN yum -y install git
Dockerfileからイメージを生成
Dockerfileからイメージを生成するには「docker build」を使います。
Dockerfileを置いたディレクトリで
$ docker build -t sample:1.0 .
と打ってみましょう。イメージが生成されます。ここでの「sample」はイメージ名で「1.0」はタグになります。イメージを作成する時はタグをつけると管理がしやすくなります。
イメージの一覧を確認するためには「docker images」コマンドを使います。
$ docker images
元になるイメージ「centos」と今作ったイメージ「sample」が表示されるはずです。
REPOSITORY TAG IMAGE ID CREATED SIZE sample 1.0 929b83ac4d62 11 seconds ago 315 MB centos latest 67591570dd29 2 months ago 192 MB
イメージからコンテナを生成
コンテナの生成+起動には「docker run」を使います。
$ docker run -it --name "test01" sample:1.0 git --version
git version 1.8.3.1 (こんな表示がされるはず)
「--name "test01"」はコンテナ名「test01」をつけるオプション、「sample:1.0」はイメージ名とタグ、「git --version」はコンテナで実行するコマンドです。「-it」オプションを使うと結果をコンソールに表示することができます。
コンテナの一覧は「docker ps」を使います。
$ docker ps -a
「-a」は起動していないコンテナも表示するためのオプションです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f1a8f40b1113 sample:1.0 "bin/bash" 3 minutes ago Exited (0) About a minute ago test01
「gitがインストールされたcentosのイメージ」のコンテナ「test01」が生成されたのが確認できるはずです。
作成したコンテナを削除してしまいましょう。
削除は「docker rm コンテナ名」です。
$ docker rm test01
今回はDockerfileを使ったRuby on Rails開発環境の構築に入る準備編を書きました。
最後に今回のコマンド一覧を書きます。
$ ls Dockerfile $ cat Dockerfile FROM centos RUN yum -y install git $ docker build -t sample:1.0 . (色々表示される) $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE sample 1.0 929b83ac4d62 11 seconds ago 315 MB centos latest 67591570dd29 2 months ago 192 MB $ docker run -it --name "test01" sample:1.0 git --version git version 1.8.3.1 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f1a8f40b1113 sample:1.0 "bin/bash" 3 minutes ago Exited (0) About a minute ago test01 $ docker rm test01 test01 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES $ docker images ( docker rm コンテナ名 でコンテナは削除されるがイメージは残る) REPOSITORY TAG IMAGE ID CREATED SIZE sample 1.0 929b83ac4d62 26 minutes ago 315 MB centos latest 67591570dd29 2 months ago 192 MB
次回は実際にRuby on Rails開発環境の構築とDockerfileのより細かい説明をしていきたいと思います。