【Docker】コンテナ基本操作(イメージのダウンロード、作成、実行、削除)

Dockerとは、Docker社が開発したコンテナ型仮想化を用いて、アプリケーションの開発、実行ができるOSS(オープンソフトウェア)です。

コンテナ型仮想化では、従来のOS仮想化(仮想マシン)とは違い、OSのメイン部分であるカーネルをコンテナと共有することで、軽量化と高速化を実現します

スポンサーリンク

従来の仮想マシン(VM)との違い

OSは、大きく分けて、ハードウェアの制御を行うカーネルとそれ以外(ディストリビューションのライブラリなどのプログラム)に分かれます。OSの中でカーネルの占める容量の割合は大きく、起動や処理に時間がかかります

従来の仮想マシンは、ハイパーバイザにより物理的なハードウェアを仮想化することで、仮想マシン(ゲスト)を実装します。仮想マシン内のOSは、大容量のカーネルを含める必要があり、ハードウェアを圧迫します。

Dockerコンテナの場合、Docker Engineをインストールすることで、OSのカーネルを分離し、その他ライブラリとアプリケーションをコンテナとして、まとめます各コンテナは、ホストOSのカーネルを共有して使用します

コンテナにはカーネルが含まれていないので、処理が軽いです。そして、それぞれのコンテナは隔離されているので、同じアプリケーションを入れることができるなど、独立した空間で、1つの物理サーバに複数のコンテナを作成することができます。コンテナはイメージ化でき、他の環境に複製することで、開発環境を統一することもできます。

この記事では、WebサーバであるNginxのイメージからコンテナを作成し、ローカルPCよりWebアクセスできるところを確認します。その後、コンテナ、およびイメージを削除します

スポンサーリンク

Dockerのインストール

私はMACを使用していますので、以下のサイトのInstall Docker Desktop on Mac よりダウンロード&インストールします。

>> Get Docker (https://docs.docker.com/get-docker/)
スポンサーリンク

イメージのダウンロード

公開されているDockerイメージをリポジトリ(Docker HUB)からダウンロードします。ダウンロードできるイメージは以下のリンクから確認できます。

>> https://hub.docker.com/search?q=&type=image

今回はNginx(最新版)をダウンロードします。

書式:イメージのダウンロード

docker pull <イメージ名>:<Tag名>

$ docker pull nginx:latest
latest: Pulling from library/nginx
f7ec5a41d630: Already exists
aa1efa14b3bf: Already exists
b78b95af9b17: Already exists
c7d6bca2b8dc: Already exists
cf16cd8e71e0: Already exists
0241c68333ef: Already exists
Digest: sha256:75a55d33ecc73c2a242450a9f1cc858499d468f077ea942867e662c247b5e412
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
$

イメージがダウンロードされたか確認するには、docker image ls 、もしくは docker images コマンドを実行します。

$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        latest    62d49f9bab67   4 days ago   133MB
$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        latest    62d49f9bab67   4 days ago   133MB
スポンサーリンク

イメージからコンテナを起動

ダウンロードしたnginxのイメージからコンテナを作成し、起動するには、docker runコマンドを実行します。

書式:イメージからコンテナの実行

docker run [オプション] イメージ名:タグ名 

  • -d:バックグラウンドで起動(detach)
  • -p : ポート番号を指定。<ローカルホスト側のポート番号>:<コンテナ側のポート番号>と表記。ローカルPCからポート番号8000番への接続をnginx起動時に公開されているポート番号80にマッピング
  • — name :作成時のコンテナの名前 を指定

Nginxのコンテナを作成し、起動してみます。

$ docker run -d -p 8000:80 --name nginx_1  nginx:latest
c932e5f486f5e60c4764d93aae20bdffc264f351668f2a2d938bfd8243aa1f06

ホスト側のポート番号8000をコンテナ側のポート番号80とつないでいます

起動中のコンテナを確認するには、docker ps を実行します。

$ docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                  NAMES
c932e5f486f5   nginx:latest   "/docker-entrypoint.…"   39 seconds ago   Up 37 seconds   0.0.0.0:8000->80/tcp   nginx_1
スポンサーリンク

コンテナへのアクセス確認

ローカルホスト(MAC)のブラウザからhttp://localhost:8000 でアクセスすると、nginxのトップ画面が表示されます。

コンテナ(nginx_1)のログを確認するには docker logs コマンドを実行します。

$ docker logs nginx_1
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
172.17.0.1 - - [18/Apr/2021:05:33:03 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36" "-"
172.17.0.1 - - [18/Apr/2021:05:33:03 +0000] "GET /favicon.ico HTTP/1.1" 404 556 "http://localhost:8000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36" "-"
スポンサーリンク

コンテナ内のシェルへ入る

コンテナでのコマンド実行は、docker exec コマンドを使用します。

書式:コンテナでのコマンド実行

 docker exec [オプション] コンテナ名 [コマンド] 

  • -i (interactive) : 標準入力(stdin)をオープンにしたままにする
  • -t(tty): :擬似的な端末デバイス(TTY:teletypewriter)の割り当て
$ docker exec -it nginx_1 bash
root@c932e5f486f5:/#

-it で SSHで接続したかのようになり、 接続後、bashが実行されます。

コンテナのシェルから抜けるには、exit を実行します。

$ docker exec -it nginx_1 bash
root@c932e5f486f5:/# exit
exit
$
スポンサーリンク

コンテナのメタデータの確認

コンテナのメタデータを確認するには、docker inspect コマンドを実行します。

書式:コンテナのメタデータを確認

docker inspect [オプション] コンテナ名

$ docker inspect nginx_1
[
    {
        "Id": "c932e5f486f5e60c4764d93aae20bdffc264f351668f2a2d938bfd8243aa1f06",
        "Created": "2021-04-18T05:30:00.191827607Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
・・・
スポンサーリンク

コンテナの停止

コンテナを停止するには、docker stop コマンドを実行します。

書式:コンテナの停止

docker stop [オプション] コンテナ名

nginx_1を停止します。

$ docker stop nginx_1
nginx_1
$

docker ps を確認すると、起動中のコンテナがないことを確認できます。

$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
$

停止中のコンテナも確認するには、docker ps にオプション -a (all)をつけて実行します。

$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED       STATUS                          PORTS     NAMES
c932e5f486f5   nginx:latest   "/docker-entrypoint.…"   2 hours ago   Exited (0) About a minute ago             nginx_1
スポンサーリンク

コンテナの削除

コンテナを削除するには、docker rm コマンドを実行します。

書式:コンテナの削除

 docker rm  [オプション] コンテナ名

$ docker rm nginx_1
nginx_1
$

docker ps -a を実行すると、nginx_1が削除されていることを確認できます。

$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
$
スポンサーリンク

イメージの削除

nginxのイメージを削除するには、docker rmi コマンドを実行します。

書式:イメージの削除

docker rmi  [オプション] イメージ名

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        latest    62d49f9bab67   4 days ago   133MB

$ docker rmi nginx
Untagged: nginx:latest
Untagged: nginx@sha256:75a55d33ecc73c2a242450a9f1cc858499d468f077ea942867e662c247b5e412
Deleted: sha256:62d49f9bab67f7c70ac3395855bf01389eb3175b374e621f6f191bf31b54cd5b

$ docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
$
スポンサーリンク

まとめ

Dockerのコンテナ型仮想化について解説しました。Dockerコンテナは、従来のOS仮想化に比べて軽量で高速であり、ホストOSのカーネルを共有するため、独立した空間で同じアプリケーションを複数のコンテナに展開することができます。この記事では、Nginxのイメージを使用してコンテナを作成し、ローカルPCからWebアクセスする方法や、コンテナの起動、停止、削除方法などが紹介しました。

コメント