Docker初心者のための、簡単に触って理解するDocker講座

Docker初心者のために、簡単に触って理解できるようにまとめてみました。

演習問題も用意しているため、是非問題を試しながら理解を深めていってください。

Dockerとは

概要

  • 一言でいうと、軽量な仮想環境
  • コンセプトはBuild once, Run anywhere
  • Dockerfileと呼ばれる設定ファイルさえあれば、どの環境でもすぐに開発や検証が始められる

用語一覧

  • Dockerfile: 設定を記述するファイル
  • イメージ: Dockerfileをビルドした状態のファイルシステム
  • コンテナ: イメージから作成し、実行できる仮想環境

Dockerをはじめる

命令語一覧

  • FROM: ベースにするイメージ
  • USER: コマンド実行ユーザーを指定
  • ARG: 変数を設定
  • RUN: シェルのコマンド
  • WORKDIR: ホームディレクトリ指定

実践

事前準備

Docker for Macをインストールしてください。

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は簡単に扱うことができ、便利さがわかってくると思います。

是非みなさんのプロジェクトでも利用してみましょう。