Kuzunoha-NEのブログ

プログラミングなどの勉強をしてます

【Docker】Dockerっていうものを使ってみようぜ その1

こんにちは、葛の葉です。

そろそろブログを本格的に初めて1年ほどになりました。そういえば、どんな記事を書いたかな、と思い、振り返ってみたところ、こんな記事を作っていました。

kuzunoha-ne.hateblo.jp

初心に戻り、同じ事柄について記事に書いてみましょうか。

キャラ変わったなぁ…

Dockerとは

コンテナ型仮想環境を構築するソフトウェアのことです。

コンテナ型仮想化とは、環境のみを仮想化しその環境内でソフトウェアを実行します。環境のみを構築するため、その中にOSはありません。その他にも無駄な常駐ソフトウェアが入っておりません。カーネルOSはホストOSのものを使用します。

そのため、使用するメモリやCPUといったリソースの使用量が、今までのOS仮想化環境よりもかなり少なく済みます。

また、コンテナは破棄してもホストOSには何ら影響がありません。そのため、環境を作っては消し、作っては消しを簡単に行なえます。

その他にも、Dockerfile、DockerComposeを使うことでコンテナをコード化出来ます。もちろんこれらはGitHub上に載せることも出来ます。そのため、環境構築込みのコードを共有することが出来ます。

ちょっと試してみようか

alpineというDockerコンテナを作成しましょう。

aplineとはLinuxディストリビューションのことです。非常にコンパクトなものなので、コンテナと相性が良いです。

ja.wikipedia.org

Dockerコンテナを作成するにはDockerイメージをダウンロードする必要があります。

docker pull alpine

プログレスバーが沢山動いて、問題なくコマンドが返ってきたら次のコマンドでコンテナを作成します。

docker run -it alpine

そうするとシェルが返ってきたと思います。

[kuzunoha@:10:14:39:~]$docker run -it alpine
/ # 

これでコンテナを作成することに成功しました。

DockerコンテナとDockerイメージについて

さて、DockerコンテナとDockerイメージという二人の登場人物が出てきたと思います。

Dockerコンテナは先に説明した仮想的な領域そのものをいいます。

では、Dockerイメージはなんであるかというと、そのDockerコンテナを作成する設計図になります。

設計図を元に複数同じものを作ることが可能なように、Dockerイメージを元にDockerコンテナを複数作ることも可能です。

例えばMySQLの入ったDockerイメージを元にMySQLのコンテナを複数作成することも出来ます。

コンテナをカスタマイズする。

さて、いまはコンテナのシェルが立ち上がったところで止まっているかと思います。

[kuzunoha@:10:14:39:~]$docker run -it alpine
/ # 

このシェルはコンテナ内のシェルになります。UbuntuCentOSのそれとほぼ一緒になります。

では、curlを使ってみましょうか。

/ # curl https://www.google.com
/bin/sh: curl: not found

curlコマンドが無いと言われてしまいました。aplineコンテナはほとんどの機能をもっていませんが、色々と機能を追加してあげることができます。

apk add PACKAGE_NAMEで追加出来ます。

apk add curl

curlコマンド追加します。

/ # apk add curl
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
(1/5) Installing ca-certificates (20190108-r0)
(2/5) Installing nghttp2-libs (1.35.1-r0)
(3/5) Installing libssh2 (1.8.2-r0)
(4/5) Installing libcurl (7.64.0-r1)
(5/5) Installing curl (7.64.0-r1)
Executing busybox-1.29.3-r10.trigger
Executing ca-certificates-20190108-r0.trigger
OK: 7 MiB in 19 packages

curlを組み込むと以下のコマンドが実行できます。

/ # curl https://www.google.com
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="ja"><head><meta content="&#19990;&#30028;&#20013;&#12398;&#12.....

curlが実行できるようになりました。

では、exitしてシェルから帰ります。

/ # exit
[kuzunoha@:10:16:28:~]$

お掃除

docker ps -aと打つとコンテナの一覧が出てきます。

[kuzunoha@:10:29:11:~]$docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
5c97080be58b        alpine              "/bin/sh"           12 minutes ago      Exited (127) 12 minutes ago                       elated_sammet

これは先程まで動かしていたコンテナの死骸です。この子を使ってDockerイメージを作ることも出来ます。

が、今回はちょっと邪魔なのでクリーンしましょう。

docker rm CONTAINER_IDで削除できます。

[kuzunoha@:10:31:41:~]$docker rm 5c97080be58b
5c97080be58b
[kuzunoha@:10:31:49:~]$

もう一度docker ps -aで消えたか確認します。

[kuzunoha@:10:31:54:~]$docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

消えました。

To Be Continued...