Docker初心者のために、簡単に触って理解できるようにまとめてみました。
演習問題も用意しているため、是非問題を試しながら理解を深めていってください。
Dockerとは
概要
- 一言でいうと、軽量な仮想環境
- コンセプトはBuild once, Run anywhere
- Dockerfileと呼ばれる設定ファイルさえあれば、どの環境でもすぐに開発や検証が始められる
用語一覧
- Dockerfile: 設定を記述するファイル
- イメージ: Dockerfileをビルドした状態のファイルシステム
- コンテナ: イメージから作成し、実行できる仮想環境
Dockerをはじめる
命令語一覧
- FROM: ベースにするイメージ
- USER: コマンド実行ユーザーを指定
- ARG: 変数を設定
- RUN: シェルのコマンド
- WORKDIR: ホームディレクトリ指定
実践
事前準備
Docker for Macをインストールしてください。
[演習1]Dockerで作るRuby開発環境
Dockerfileの作成
# ベースとなるイメージを指定
FROM phusion/baseimage:latest
# rootユーザーで実行
USER root
# root以外のユーザーを追加
ARG PUID=1000
ARG PGID=1000
RUN apt-get update -yqq && \
groupadd -g ${PGID} sample && \
useradd -u ${PUID} -g sample -m sample
# 基本コマンドのインストール
RUN apt-get update && \
apt-get install -y pkg-config \
libcurl4-openssl-dev libedit-dev \
libffi-dev libssl-dev libxml2-dev \
libmysqld-dev xz-utils git curl vim && \
apt-get clean
Dockerfileより、コンテナを作成してみます。
tオプションをつけることでイメージに名前をつけれます。
$ docker build -t workspace ./
イメージができたか確認します。
$ docker images
イメージからコンテナを起動し、bashで入ってみます。
$ docker run -it IMAGE_ID bash
Rubyをrbenvからインストールする方法(抜粋)
実際にコンテナ内にはいってみて、コマンドを打っていきます。
うまくインストール等ができたら、それをDockerfileに書き加えていきます。
これの繰り返しでDockerfileを生成していきます。
rbenvのインストール
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc $ echo 'eval "$(rbenv init -)"' >> ~/.bashrc $ exec $SHELL -l $ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
rubyのインストール
$ rbenv install -v 2.4.3 $ rbenv rehash $ rbenv global 2.4.3
bundlerのインストール
$ gem install bundler
先程のDockerfileに追記していく
#####################
# Rubyをインストール
#####################
USER sample
ARG RUBY_VERSION=2.4.3
ENV RBENV_DIR /home/sample/.rbenv
# rbenvとruby-buildから指定したrubyバージョンをインストール
RUN git clone https://github.com/rbenv/rbenv.git $RBENV_DIR && \
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc && \
echo 'eval "$(rbenv init -)"' >> ~/.bashrc && \
git clone https://github.com/rbenv/ruby-build.git $RBENV_DIR/plugins/ruby-build && \
$RBENV_DIR/bin/rbenv install ${RUBY_VERSION} && \
$RBENV_DIR/bin/rbenv global ${RUBY_VERSION}
# Gemにbundlerをインストール
RUN $RBENV_DIR/shims/gem install bundler
# ホームディレクトリを指定
WORKDIR /var/www
実行して、Dockerイメージをビルドできるか試してみます。
$ docker build -t workspace ./
イメージができたか確認します。
$ docker images
イメージからコンテナを起動し、bashで入ってみます。
$ docker run -it IMAGE_ID bash
コンテナ内でrubyが入っているか確認します。
$ ruby -v
[演習2]Dockerfileを編集してみよう
先ほど作ったDockerfileを改変し、Node.jsをインストールできるように追加していきましょう。
ただし、Node.jsはバージョン管理としてnodebrewを入れてインストールしてください。
$ curl -L git.io/nodebrew | perl - setup $ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bashrc $ export PATH=$HOME/.nodebrew/current/bin:$PATH $ nodebrew install-binary v10.9.0 $ nodebrew use v10.9.0
Dockerfileに追記していく
########################
# node.jsをインストール
########################
USER sample
ARG NODE_VERSION=v10.9.0
# nodebrewより、node.jsをインストールする
RUN curl -L git.io/nodebrew | perl - setup && \
echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bashrc && \
export PATH=$HOME/.nodebrew/current/bin:$PATH && \
nodebrew install-binary ${NODE_VERSION} && \
nodebrew use ${NODE_VERSION}
実行して、Dockerイメージをビルドできるか試してみます。
$ docker build -t workspace ./
イメージができたか確認します。
$ docker images
イメージからコンテナを起動し、bashで入ってみます。
$ docker run -it IMAGE_ID bash
コンテナ内でnode.jsが入っているか確認します。
$ node -v
コマンドまとめ
Dockerのバージョン確認
$ docker -v
Dockerサービスの起動
$ sudo service docker start
Dockerfileからイメージを作成
$ docker build -t 名前 ./
イメージの確認
$ docker images
イメージからコンテナを起動し、bashで入る
# -itオプションをつけるとターミナルでコンテナを実行できます。 $ docker run -it IMAGE_ID bash
Dockerのネットワーク一覧取得
$ docker network ls
まとめ
いかがだったでしょうか?
理解したようで理解できていないところがあると思いますので、演習を通して自分の知識の幅と深さを広げていってください。
演習を通してわかったかと思いますが、しっかり慣れてくればDockerは簡単に扱うことができ、便利さがわかってくると思います。
是非みなさんのプロジェクトでも利用してみましょう。