このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

Archives Details

2018年 Docker 使い方 まとめ その2

Docker

2018.12.16

この記事は最終更新日から1年以上が経過しています。

 

どもです。

前回の「2018年 Docker 使い方 まとめ その1」の続きになります。

Docker公式サイト

www.docker.com

Docker イメージ

それでは、今回は「Docker イメージ」についてから。

そもそも、Docker イメージとはなんぞや?

ってところですが、Docker イメージは OSや実行環境など、コンテナ実行に必要なファイルをまとめられた、ファイルシステムとなります。

DockerコンテナはDockerイメージを元に作成されます。

例えば、nginxはこちらのDockerHubレポジトリにあり、PHPはこちら、Wordpressはこちらと、沢山のイメージが用意されています。

これらはAUFSなどの特殊なファイルシステムとなっており、読み込み専用となっております。

また、自分で作成することも可能となっております。

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

Dockerイメージを元にコンテナを起動すると、新たにコンテナレイヤーが生成され、

このレイヤーは「読み書き可能」なレイヤーとなります。

このコンテナをイメージとして保存することも可能となっております。

注意点は、過去のレイヤーでファイルを追加してコンテナレイヤーで削除し新規でイメージを作成したとしても、

過去のレイヤーは履歴が残ったままになるので、削除されることはありません。

なので、あるレイヤーで追加されたファイルは残り続けるのでイメージを作成する際は、注意が必要です。

 

Docker イメージ継承

UbuntuのベースイメージにRubyの実行環境をインストールしたイメージを作成する例となります。

更に Ruby on Railsのイメージを作成した場合。

このように、イメージを継承していくことで、アプリケーションレイヤーを追加していくことも可能です。

また、全く同じDockerイメージを継承する場合、新しく生成されるのではなく、

元 からあるイメージを参照する形となっているので、容量も抑えられる作りとなっております。

 

Docker 公式チュートリアルイメージ「whalesay」

Docker社が用意しているチュートリアルイメージ「whalesay」を利用してみます。

クジラのアスキーアートに好きなメッセージを喋らせることが可能なイメージとなっております。

 

$ docker run docker/whalesay cowsay HelloWorld!

 

docker/whalesayの後の、「cowsay HelloWorld! 」が、コンテナ内で呼び出されるコマンドとなります。

cowsayの後に任意のメッセージを記述します。

docker/whalesayイメージが存在しない場合は、DockerhubよりPullされ実行されます。

 

Dockerイメージの管理

Dockerイメージの各コマンド一覧となります。

 

ダウンロード済みのイメージ一覧を表示

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 4ab4c602aa5e 4 months ago 1.84kB
mysql 5.7.22 6bb891430fb6 5 months ago 372MB
nginx 1.13.5-alpine ea7bef82810a 14 months ago 15.5MB
mysql 5.7.19 3e3878acd190 15 months ago 412MB
php 7.1.9-fpm-alpine 5ec2c0136450 15 months ago 68.3MB

イメージにタグ付けするコマンド

$ docker tag  docker/whalesay my_whalesay

タグ付けサブコマンド: イメージ名:新しいイメージ名

任意のイメージ名(エイリアス名)を設定することが可能。

$ docker tag  docker/whalesay my_whalesay:1.0.0
docker/whalesay latest 6b362a9f73eb 3 years ago 247MB
my_whalesay 1.0.0 6b362a9f73eb 3 years ago 247MB
my_whalesay latest 6b362a9f73eb 3 years ago 247MB

詳細情報確認

$ docker inspect my_whalesay

ローカルのイメージを削除するコマンド

$ docker rmi docker/whalesay

強制的に削除実行

$ docker rmi -f docker/whalesay

イメージを取得

$ docker pull docker/whalesay

イメージビルド

Dockefileから生成(ビルド)する方法です。

任意のエディタで「Dockefile」を作成します。

$ vim Dockerfile

FROM: 元になるイメージの指定
RUN:イメージビルドの際に実行するコマンド
CMD :コンテナ生成後に実行するコマンド

Dockerfile

From docker/whalesay:latest

RUN apt-get -y update && apt-get install -y fortunes

CMD /usr/games/fortune | cowsay

上記は、fortunesパッケージをインストール(ランダム名言生成パッケージ)し、

docker/whalesayイメージを利用して、クジラに喋らせるDockerfileとなります。

ビルドコマンド

上記のDockerfileの記述が終わったら、早速イメージ生成のbuildコマンドを実行します。

$ docker build -t docker-whale .

イメージをビルドするサブコマンド、 「-t」はタグ名の指定となります。

「docker-whale」はビルド後のイメージ名となります。

最後の「.」は、ビルドコンテキストの指定となります。

ビルドコンテキストの指定がカレントディレクトなので、カレントのDockerfileを参照する形となります。

ビルドコンテキストにあるファイルを一度dockerデーモンに送信されるので、

不要なファイルが多々あったり、重いファイルが存在すると実行(送信)が遅くなるので注意が必要です。

 

イメージビルドの実行

$ docker build -t docker-whale .

上記のビルドコマンドを実行すると、ビルドが開始されます。

Sending build context to Docker daemon 2.048kB
Step 1/3 : From docker/whalesay:latest
...

Dockerデーモンに送信される容量や、step数などがコンソールに表示され確認することができます。

Dockerビルドが無事終了すると、イメージが生成されますので 「docker images」コマンドで確認します。

$ docker images
$ docker-whale latest 1f66ccaba0ef 8 minutes ago 278MB

無事生成されているのが、確認できました。

それでは、実行してみます。

$ docker run docker-whale

くじらさんが名言を喋ってくれたら成功です。

ビルドキャッシュ

DockerFileで、apt-getなど指定していると、ビルドされないとパッケージの最新を取得できないことになります。

実際に、再度Dockerビルドコマンドを実行すると

Step 2/3 : RUN apt-get -y update && apt-get install -y fortunes
---> Using cache
---> c9aff62f2bf4
Step 3/3 : CMD /usr/games/fortune | cowsay
---> Using cache
---> da232ab708a4

Using cache」と、キャッシュが利用されているのが確認できます。

キャッシュを利用せず、docker buildを行うオプションは「—no-cache」となります。

以下のコマンドを実行すると、再度 docker pull を行い、DockerFile内のコマンドを実行する形となります。

 

ノンキャッシュ

$ docker build —no-cache -t docker-whale .

 

と、言った 感じでクジラに名言を喋らせることができましたので、続きは次回にでも。

またまたぁ。

Comment

Related Article

2018年 Docker 使い方 まとめ その3

2018.12.17

2018年 Docker 使い方 まとめ その2

2018.12.16

2018年 Docker 使い方 まとめ その1

2018.12.15

忙しい人向けの Docker Composeで作る nginx + PHP7-fpm + mysql + phpMyAdmin の環境構築

2017.02.13

CATEGORY LIST

LATEST NEWS

JavaScriptで、DOMを放り投げる処理

JavaScript

2024.07.27

Rustで創る MOS 6502 CPU その2

Rust

2024.07.23

Rustで創る MOS 6502 CPU その1

Rust

2024.07.19

汎用 3D mesh/model viewerを求め。と、簡単に、FBXファイルをglTF(glb)に変換ツールを求め。

C++

2024.06.06

M1 Macで、OpenGL GLUTを使ってコンパイルする

C

2024.04.27

Rust - Actix Web mongo ユーザー登録 JWT認証

Rust

2024.03.24

Rust - Actix Web JWT 認証認可 APIの作成

Rust

2024.02.25

Rust - Actix Web × JSON 静的ファイルをAPIで返却

Rust

2024.01.19

Rust - Actix Web × MongoDB環境をサクッと起動

Rust

2024.01.18

5分で学ぶ RustでWave Function Collapse (波動関数崩壊アルゴリズム)

Rust

2024.01.15

LLaMAモデル GGMLフォーマット(llama.cpp)をRustフレームワーク Leptosを用いて M1MacMiniでサクッと動かす。

Rust

2024.01.11

2024年 狙っているモバイルノートPC

tool

2024.01.07

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、主に、ゲーム制作中心に港区六本木界隈で活動中。

FOLLOW US