【Docker】Dockerっていうものを使ってみようぜ その1
こんにちは、葛の葉です。
そろそろブログを本格的に初めて1年ほどになりました。そういえば、どんな記事を書いたかな、と思い、振り返ってみたところ、こんな記事を作っていました。
初心に戻り、同じ事柄について記事に書いてみましょうか。
キャラ変わったなぁ…
Dockerとは
コンテナ型仮想環境を構築するソフトウェアのことです。
コンテナ型仮想化とは、環境のみを仮想化しその環境内でソフトウェアを実行します。環境のみを構築するため、その中にOSはありません。その他にも無駄な常駐ソフトウェアが入っておりません。カーネルOSはホストOSのものを使用します。
そのため、使用するメモリやCPUといったリソースの使用量が、今までのOS仮想化環境よりもかなり少なく済みます。
また、コンテナは破棄してもホストOSには何ら影響がありません。そのため、環境を作っては消し、作っては消しを簡単に行なえます。
その他にも、Dockerfile、DockerComposeを使うことでコンテナをコード化出来ます。もちろんこれらはGitHub上に載せることも出来ます。そのため、環境構築込みのコードを共有することが出来ます。
ちょっと試してみようか
alpineというDockerコンテナを作成しましょう。
apline
とはLinuxディストリビューションのことです。非常にコンパクトなものなので、コンテナと相性が良いです。
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 / #
このシェルはコンテナ内のシェルになります。UbuntuやCentOSのそれとほぼ一緒になります。
では、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="世界中の.....
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...