Docker 使ってみた
Docker を理解する
Docker はLinuxコンテナを利用して任意のアプリケーションを簡単に実行できるように整備するためのツール群
VM に似ているけどコンテナを利用するの非常に軽量
ベースとなっている LXC の概念と AUFS 周りは基礎なので理解しておくと良い
vim 使ってるなら Syntax 入れておくと良いです
Docker が動くようにする
に従ってインストールすれば良い
デーモンが動いてないとダメなのでインストール直後にデーモンを起動することを忘れない
超基本的な流れ
-
Dockerfile
に構築手順を書いていく -
docker build
でイメージファイルを作る -
docker run
でイメージを起動する
これだけ
Dockerfile を build
-
RUN
はbuild
する時に動くやつ -
CMD
とENTRYPOINT
はrun
する時に動くやつ
Rails だったら例えばこう
# Master image
FROM centos
# Use Epel
RUN rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# Install middleware
RUN yum -y update
RUN yum install -y which tar patch libffi-devel glibc-headers autoconf gcc-c++ glibc-devel patch readline-devel zlib-devel openssl-devel bzip2 automake libtool bison
RUN yum install -y libyaml libyaml-devel libxml2 libxml2-devel libxslt libxslt-devel
# Create user
RUN adduser docker
# Change user
USER docker
WORKDIR /home/docker
ENV HOME /home/docker
# Install rvm, ruby, bundler
RUN \curl -sSL https://get.rvm.io | bash -s stable
RUN /bin/bash -l -c "rvm requirements"
RUN /bin/bash -l -c "rvm install 2.0.0"
# ちょっとアレ
ENV PATH /home/docker/.rvm/gems/ruby-2.0.0-p481/bin:/home/docker/.rvm/rubies/ruby-2.0.0-p481/bin:$PATH
RUN gem install bundler
# Rails setup (with Bundler Cache)
RUN mkdir -p /home/docker/app
WORKDIR /home/docker/app
ADD Gemfile /home/docker/app/Gemfile
ADD Gemfile.lock /home/docker/app/Gemfile.lock
RUN bundle install
ADD . /home/docker/app
# この辺怪しくてアレ
RUN bundle exec rake db:create
RUN bundle exec rake db:setup
# Expose ports
EXPOSE 3000
# Run
ENTRYPOINT bundle exec rails server
Uploading context 1.146 GB
Uploading context
Step 0 : FROM centos
---> 0b443ba03958
Step 1 : RUN rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
---> Using cache
---> 5d6639f413bc
Step 2 : RUN yum -y update
---> Using cache
---> a94bf0677fb9
...
それぞれのStepで「キャッシュ」していて、コマンドの順番を変えない限りキャッシュが生きる
勿論キャッシュを無効にすることもできる
Dockerfile を編集して build すると変更された箇所から構築がリスタートする
それまでの部分はキャッシュを使ってくれる
ストップしたコンテナは随時削除
sudo docker rm $(sudo docker ps -a -q)
で起動してる奴以外削除できる
Docker 試行錯誤してるとどんどん不要なファイル貯まる
特に構築に失敗したやつはたまりやすい
ディスクスペースに注意
イメージも随時削除
コンテナ以外にベースとなるイメージも随時削除する。
例えばディストリ変えて色々やったりするとイメージもどんどんたまる
sudo docker rmi $(sudo docker images | awk '/^<none>/ { print $3 }')
Dockerfile を run
作成した Dockerfile を run コマンドにて起動する
docker build -t <REPOSNAME> .
シェルに突入 (interactive mode) したければ
docker run -i -t <REPOSNAME> /bin/bash