このサイトは、只今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

kindleストア7周年記念セール中!技術書なども40%OFF以上でお買い得!(11/7まで)

イベント

2019.10.28

あと10日で「jsdo.it」のサービスが終わってしまう!! ソースダウンロードまだの方は急げぇ〜!

JavaScript

2019.10.21

Arduino IDEとArduino接続して、サクッと設定。

電子工作

2019.08.15

ついに、M5Stack Gray 購入!! その他諸々、購入したボードの振り返りなど。

電子工作

2019.08.12

正規表現 先読み後読み 論理積

JavaScript

2019.07.28

PythonでGUIアプリ開発「PyQt」を使った感想

Python

2019.07.18

「二段階認証?」という方も 5分で覚える パスワードレス WebAuthnのまとめ

JavaScript

2019.07.07

上級者向け JavaScript 問題集 「javascript-questions」日本語翻訳担当してます。

JavaScript

2019.06.22

Wordpress サイトで、長時間 500 Internal Server Error発生。解決した方法とは。

WordPress

2019.06.18

Ubuntu 18.04 LTSで OpenGL開発

ubuntu

2019.05.20

MacOS Mojave (10.14.4)の Xcode に、過去のMacOSのSDKをインストール

C++

2019.05.19

クローンソフトの「EaseUS Disk Copy」を使って、OSのバックアップを取ってみた。

tool

2019.05.06

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

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

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

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

FOLLOW US