ホーム DoRuby Dockerを試してみる(4)
Dockerを試してみる(4)
 

Dockerを試してみる(4)

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Dockerを試してみる(3)の続きです。今回はDockerfileを試してみます。 前回はdocker-composeについて試したので、順番逆なんじゃね?って感じがしますが置きになさらず

Image と Container

Dockerfileを使う前にあらためて ImageとContainerについておさらいします。

DockerはOS上で軽量の仮想環境(コンテナ(Container)と呼ばれる)を実行するためのエンジンとエンジンを操作するツールを提供したものです。たとえば docker run コマンドでは、次のコマンドでDBコンテナを起動させることができます。

$ docker run -d -e "MYSQL_ROOT_PASSWORD=password" --name mysql mysql:5.6

起動したコンテナは次のコマンドで確認できます。

$ docker ps 
  CONTAINER ID IMAGE     COMMAND                 CREATED         STATUS         PORTS    NAMES
  f78a4be66ee8 mysql:5.6 "docker-entrypoint.sh"  15 seconds ago Up 14 seconds   3306/tcp  mysql

この出力にIMAGEという列があります。これはコンテナの大本となる、ファイルや起動コマンドを定義したイメージと呼ばれるものです。上の出力だと mysql:5.6というイメージを使用しています。docker runコマンドの引数でも指定していますね。

このイメージは、Docker Hubというレポジトリにあるものを利用しています。mysqlやmemcachedなどのDocker Hubにあるイメージを使う(pullする)だけで十分かと思います。

しかししばらくすると自分のアプリケーションもコンテナにしたい、ということがあると思います。
その場合、Dockerfileを使ってオリジナルのイメージを作成することができます。

Dockerfile

Dockerのイメージを作成する際に必要なルールを定義したファイルです。
ソースファイルをコンパイルするときに使うMakefileに似たようなものです。

例と実行方法

Dockerfileの例は以下のとおり。

FROM ruby23

RUN yum -y  install mysql-community-devel

COPY docker-entrypoint.sh /
RUN chmod 755 /docker-entrypoint.sh

ENV RAILS_ENV production
ENV PATH /usr/local/ruby-2.3.3/bin:/usr/local/bin:/bin:/usr/bin
ENV RAILS_SERVE_STATIC_FILES false

VOLUME /usr/src/app
WORKDIR /usr/src/app

ENTRYPOINT ["/docker-entrypoint.sh"]

EXPOSE 8080
CMD ["bundle", "exec", "unicorn", "-E", "production"]

このファイルをdocker buildコマンドを使ってビルドします。

$ cd /some/directory
$ vi Dockerfile
$ docker build -t myapp .

文法

Goというプログラミング言語をベースにしています。
コマンド名 引数 が1コマンドで行の先頭から実行されます。

コマンド

コマンド名内容
FROM基本となるイメージを作成する
RUNイメージ内でシェルコマンドを実行する。yumなどでアプリケーションをインストールする場合などに使う。
COPYローカルのファイルを、イメージ内にコピーする
ADDローカルのファイルやディレクトリを、イメージ内に追加する
ENV環境変数を定義する
EXPOSE公開するポートを明示する
VOLUMEマウントポイントを指定する
ENTRYPOINTコンテナ起動時に実行するコマンド(CMDの前に実行される)
CMD引数なしでコンテナを起動したときに実行されるコマンド

記事を共有

最近人気な記事