Pocket

こんにちは、渡邉です。

最近、仕事で他社様の開発環境を頂いて改修作業をするというようなケースが多いのですが、みなさんDockerを活用して環境を構築することが多いように感じます。

Dockerはデファクトですね。
なので、今回はDockeの基礎と復習を兼ねて下記の内容でブログ書きたいと思います。

  • Dockerの基礎を学ぼう
  • Dockerをインストールしよう
  • Dockerの基本はコマンド操作

Dockerの基礎を学ぼう

Dockerは、Wikipediaによると下記のように説明をしています。

Dockerはコンテナ型の仮想化環境を提供するオープンソースソフトウェアである。VMware製品などの完全仮想化を行うハイパーバイザ型製品と比べて、ディスク使用量は少なく、仮想環境 (インスタンス) 作成や起動は速く、性能劣化がほとんどないという利点を持つ。

Docker – Wikipedia
昔よく聞いた「VMware」などは完全仮想化を行うので、VMware内でハードウェアデバイスをエミュレートするので動作が遅いです。
一方でDockerはコンテナ(完全仮想化で言う「ゲストOS」)からハードウェアを操作する際はコンテナがホストOSにリクエストを送るので動作が軽いという特徴があります。

Dockerをインストールしよう

DockerはWindows、MacOS、Linuxなどにインストールすることが出来ます。
Get Started with Docker | Docker

Windowsの場合はWindws 10からの対応となるのと、Oracle Virtual BoxがインストールされているPCにはインストールできないので注意が必要です。
Install Docker for Windows | Docker Documentation

Dockerの基本はコマンド操作

Dockerの操作はコマンドで行うのが基本です。
なので最低限のものは覚えるか、このページをブックマークしてチートシートとしてご利用ください。

イメージの取得

docker pull イメージ名

Dockerはイメージを基にコンテナを起動します。
まずはイメージを取得しましょう。

イメージはDocker Hubから取得します。
まずは手始めに「hello-world」というイメージを取得します。
hello-worldは、Docker Hubの下記にあります。
library/hello-world – Docker Hub

$ docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
d1725b59e92d: Pull complete
Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
Status: Downloaded newer image for hello-world:latest

取得に成功したようです。

イメージ一覧の表示

docker images

Dockerは起動するコンテナの基となるイメージを保持します。
このイメージをコピーしコンテナとして起動します。

$ docker images
REPOSITORY                  TAG                  IMAGE ID            CREATED             SIZE
hello-world                 latest               4ab4c602aa5e        3 weeks ago         1.84kB

一覧の中に先ほど取得した「hello-world」があるのが分かりますね。

イメージの起動

docker run コンテナ名

取得したイメージを基にコンテナを起動します。
先ほど取得したhello-worldを起動してみましょう。

$ docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

お試し用のコンテナなのですぐに終了します。
コンテナはカスタマイズが可能なので、実際に利用するときは色々なアプリを入れ設定を施した状態で起動させます。

起動中のコンテナ一覧の表示

docker ps

hello-worldはすぐに終了するコンテナでした。
なので、この起動中のコンテナ一覧を表示するコマンドでは何も出力されません。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

作成済みのコンテナ一覧の表示

docker ps -a

先ほどコンテナはイメージを基に作ると説明しました。
なので、hello-worldのようにすぐに終了するコンテナでも、コンテナ自体は作成され保存もされています。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
2f4a8645ab23        hello-world         "/hello"            5 minutes ago       Exited (0) 5 minutes ago                       optimistic_kapitsa

作成済みのコンテナを削除

docker rm コンテナID

コンテナを削除することもできます。
不要になったコンテナを削除することで、ディスクの節約になるでしょう。

$ docker rm 2f4a8645ab23
2f4a8645ab23

イメージの削除

docker rmi イメージID

登録されたDockerイメージを削除する際に実行するコマンドです。
削除する際はイメージの名前ではなくIDを指定します。
上の一覧からnginxを削除する際は下記のコマンドを実行します。

$ docker rmi 4ab4c602aa5e
Untagged: hello-world:latest
Untagged: hello-world@sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
Deleted: sha256:4ab4c602aa5eed5528a6620ff18a1dc4faef0e1ab3a5eddeddb410714478c67f
Deleted: sha256:428c97da766c4c13b19088a471de6b622b038f3ae8efa10ec5a37d6d31a2df0b

最後に

いかがでしたか?
dockerコマンドを使いこなすことがDockerをマスターする近道かと思います。
ヘルプや公式サイトを見ながら、いろいろ試してみると良いと思います。