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は簡単に扱うことができ、便利さがわかってくると思います。
是非みなさんのプロジェクトでも利用してみましょう。