😘

dockerでコンテナ開発

2021/02/04に公開

はじめに

くーばねてすをやっつけるためにこれまでにLinuxさんとAWSさんと仲良くさせていただいたが、新たなステージに上がるためについにdockerさんに会いに行くことにした。dockerさんと仲良くなることでコンテナシステムの仕組みの理解とくーばねてすを倒すための調査をする。
今回はdockerさんでコンテナを開発して、くーばねてすでの構築の基礎的な部分を理解する。

概要

■dockerfileからイメージを作成してコンテナ起動まで

をまとめた!(^_-)-☆

■dockerfileからイメージを作成してコンテナ起動まで

dockerfileからイメージを作成してコンテナ起動までのながれはざっくりとこんな感じ。
①コンテナのイメージを集める
②dockerfileを編集する
③ファイルを作成する
④イメージをビルドする
⑤コンテナを実行して動作確認をする

①コンテナのイメージを集める

dockerfileとはDockerコンテナーの構成内容をまとめて記述するシンプルなテキスト形式のファイルだ。
dockerを起動するためのイメージファイルをDockerfileという。
ベースイメージ、実行ファイル、コンテナ起動直後に実行されるコマンドなどコンテナ作成イメージをまとめてファイルに記述する。

dockerfile記述形式
# コメント
命令 引数

dockerfile記述形式
1行につき1つの操作を 命令(コマンド) と 引数 でスペースで区切り記述する。
「#」から始まる行はコメントとして処理される。(実行されない)
命令(コマンド)は小文字で入力してもよいが、区別をつけやすくするために大文字で入力するのとわかりやすい。

コンテナのイメージを集めるディレクトリ、ファイルを作成し、そこにdockerfileを作成する。

$ mkdir dockertest
$ cd dockertest
$ vim Dockerfile

dockerfile命令(コマンド)、意味ざっくり
|コマンド|意味|
| --- | --- | --- |
|FROM イメージ:タグ|コンテナのベースイメージ|
|RUN コマンド|FROMのベースイメージで実行するコマンド|
|ADD ソース コンテナ内宛先|ソースをコンテナ内宛先へコピーする|
|ENTRYPOINT |コンテナが実行するファイルを指定する|
|CMD|コンテナの実行時に実行されるコマンドを指定する|
|ENV <key>=<Value>|環境変数をセットする|
|EXPOSE <port>|公開ポートを設定する|
|USER <ユーザ名>|RUN,CMD,ENTRYPOINTの実行ユーザを指定する|
|VOLUME["/path"]|共有可能なボリュームをマウントする|
|WORKDIR /path|RUN,CMD,ENTRYPOINT,COPY,ADDの作業ディレクトリを指定する|
|ARG <名前>[=<デフォルト値>]|ビルド時の引数を定義する--bild-arg<引数>=<値>|
|LABEL <key>=<value> <key>=<value>|イメージのメタデータにラベルを追加する|
|MAINTAINER<名前>|イメージのメタデータに製作者を追加する|
ルールがたくさんある!('_')
※「ENTRYPOINT」および「CMD」を記述することで実行するコマンドおよび引数を事前に定義でき、「docker run」コマンド実行時に省略できるようになる。
※「CMD」の場合は「docker run」で実行するコマンドを上書きできる。
※「ENTRYPOINT」の場合は「docker run」で実行するコマンドを上書きできない。
※1つのDockerfile にCMD、ENTRYPOINT は1度のみ指定できる。
※ 複数記載されている場合、最後の1個が実行されてしまう。
※ENTRYPOINT とCMD の両方が書いてある場合、CMD に書かれている内容が、ENTRYPOINT に書いてあるコマンドオプションになる。
※ENTRYPOINT とCMD の両方が書いてありdocker run 時に引数をつけた場合、CMD の内容が上書きされENTRYPOINT に書いてあるコマンドが実行される。

。。。('_')今回は細かい設定方法は抜きにしてdockerfileから起動までをざっくりやろうと思う。

③ファイルを作成する

作成したい内容をdockerfileに記述していく。
dockerfileにベースイメージにalpineを指定して、アップデート&コマンドインストール、ファイルの出力された文字列をアスキーアートに変換するコマンドを実行するコンテナを作成する。

dockerfile
#ベースイメージ
FROM alpine:latest
#ベースイメージで実行するコマンド
RUN apk update && apk add figlet
#コンテナに追加(カレントディレクトリからコンテナのディレクトリに)
ADD ./message /message
# 起動直後に実行するコマンド
CMD cat /message | figlet

dockertestディレクトリにmessageファイルを作成して文字を入力する

$ cd ./dockertest
$ vim message
HELLO DOCKER!

④イメージをビルドする

dockerfileからイメージを作成する。
イメージを作成するときに作成に問題がないか自動でテストされ問題なければイメージが作成される。

dockerfileからイメージを作成する(名前、タグもつける)
$ docker built -t 名前(:タグ) .

やってみる

$ docker built -t docker-test:1 .
[+] Building 7.1s (8/8) FINISHED  ※作成された!
$ docker images ※イメージが作成されたか確認
REPOSITORY                   TAG             IMAGE ID       CREATED          SIZE
docker-test                  1               51b0f20c9c53   11 seconds ago   8.26MB

⑤コンテナを実行して動作確認をする

$  docker run docker-test:1                                                                    _   _ _____ _     _     ___    ____   ___   ____ _  _______ ____  _
| | | | ____| |   | |   / _ \  |  _ \ / _ \ / ___| |/ / ____|  _ \| |
| |_| |  _| | |   | |  | | | | | | | | | | | |   | ' /|  _| | |_) | |
|  _  | |___| |___| |__| |_| | | |_| | |_| | |___| . \| |___|  _ <|_|
|_| |_|_____|_____|_____\___/  |____/ \___/ \____|_|\_\_____|_| \_(_|
								    

まとめ

できた~(>_<)

Discussion