LoginSignup
28
28

More than 5 years have passed since last update.

Docker 使ってみた

Last updated at Posted at 2014-06-06

Docker 使ってみた

Docker を理解する

Docker はLinuxコンテナを利用して任意のアプリケーションを簡単に実行できるように整備するためのツール群
VM に似ているけどコンテナを利用するの非常に軽量

ベースとなっている LXC の概念と AUFS 周りは基礎なので理解しておくと良い

vim 使ってるなら Syntax 入れておくと良いです

Docker が動くようにする

に従ってインストールすれば良い
デーモンが動いてないとダメなのでインストール直後にデーモンを起動することを忘れない

超基本的な流れ

  • Dockerfile に構築手順を書いていく
  • docker build でイメージファイルを作る
  • docker run でイメージを起動する

これだけ

Dockerfile を build

  • RUNbuild する時に動くやつ
  • CMDENTRYPOINTrun する時に動くやつ

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
28
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
28