Help us understand the problem. What is going on with this article?

第1回Dockerハンズオン初心者・中級者編で学んだことをまとめてみた

More than 1 year has passed since last update.

はじめに

この記事は、2018年8月4日に新宿で行われた、第1回Dockerハンズオン初心者・中級者編で学んだことを自分なりにまとめた記事になります。

Docker Image

簡単にいうと、Docker Imageはディスクイメージに該当する。インストールされたソフトウェアが入っているような感じ。

docker run(実行)することで、docker container(実行状態となっているもの)が生成される。

Dockerfileとは?

FROM ruby:alpine

RUN apk add --no-cache bash tzdata libxml2-dev libxslt-dev sqlite sqlite-dev nodejs postgresql-dev

WORKDIR /temple

COPY Gemfile .

RUN set -ex \
 && apk add --no-cache --virtual .build-dep build-base \
 && gem install nokogiri \
   -- --use-system-libraries \
   --with-xml2-config=/usr/bin/xml2-config \
   --with-xslt-config=/usr/bin/xslt-config \
 && bundle install \
 && apk del .build-dep

その名の通りDockerのファイル。

ルールとして、各行の先頭は必ず大文字で命令するコマンドを記述する。

コマンド 意味
FROM Docker Imageをどこから引っ張ってくるか
RUN 引数に指定したコマンドを実行する
WORKDIR ディレクトリの指定
COPY コピーの実行

Dockerfileはdocker runではなく、docker buidを実行することで、Docker Imageを作成する。

ビルドする際のコマンドとしては、次の通り。

docker build -t ディレクトリ名 コンテキスト(実行するファイルパスなど)

#example
docker build -t hogehoge .

ビルドがちゃんとできているかどうかは、docker imagesコマンドを実行することで確認可能。

$ docker images
    REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
    temple                              latest              dcb037e1d29b        38 seconds ago      9.5MB
    alpine                                latest              11cd0b38bc3c        3 weeks ago         4.41MB

ビルドによって生成したdocker imageを使って、docker runすることで実行します。

なお、docker runは実行させるごとに新しいコンテナを作成します。

$ docker run --rm ディレクトリ名 uname -a

Dockerfileに記述したコマンドが実行されるごとに、Dockerというコンテナにディスクが積み木のようにどんどん積み重なっていくイメージをすれば感覚が掴みやすいかも。

--rmオプションについて

--rmオプションはdocker runによって実行したコマンドが終了した後に、docker container自体も消去してくれるもの。

ここでちょっと思い出して欲しいのが、docker containerは、実行後に停止する性質を持っているということ。

ただし、停止されるのはプロセス(実行されたプログラム)だけで、docker container自体が停止する訳ではない。

そのため、そのままにしておくと、停止されたdocker containerはdocker rmなどをしない限り、どんどんたまっていってしまう。

--rmオプションをつけることで、後から不要なdocker containerを削除する手間が省けるのがメリットと言えるかな。

dockerfileにrubyをインストールするコマンドを記述する

RUN apk add --no-cache bash ruby

RUNはdocker buildした時に、実行する処理を記述するもの。

ここでは、apkというパッケージ管理ツール(yumやaptみたいなもの)を使って、bashとrubyをインストールする処理を書いている。

ただ、ここで使っているalpineには、ruby用にフォーマットされたdocker imageであるruby:alpineがすでにあるので、それを使うのもあり。

FROM ruby:alpine

docker runでコマンドラインからrubyを実行する

次のようにdocker runの引数にrubyコマンドを渡せば、引数に渡した処理を実行する。

docker run --rm -it temple ruby -e '(0..100).each{|i| print ("\r%3d%% "%i+"|"*i); sleep 0.1}'

ハンズオンで使用した参考サイト

http://youchan.org/docker-handson/#20

https://scrapbox.io/llminatoll/MT_D_handson

yuta-ushijima
自己破産というドン底から28歳で未経験からプログラミングを学び、2018年4月からウェブ系のフリーエンジニアとしてキャリアスタート。 ITスキルと情報発信で、自由な生活をおくる生き方を実践中。 公式ブログはこちら→ https://yuta-u.com
https://yuta-u.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした