DockerでNginxコンテナを使ってWebサーバを立ち上げる方法

プログラミング

普段仕事で開発する際に使用しているDocker🐳

開発環境の構築手順書が整っているおかげで、Dockerについて無知な私でもありがたく使用させていただいているのですが、この度ついにDockerfileをいじる機会が回ってきたため、Dockerについての基本を勉強してみました。

Dockerでnginxコンテナを立てて、そこで昔作ったポートフォリオサイトを表示させてみたので、その手順について記録していきます。

スポンサーリンク

Dockerとは?

Dockerとは、コンテナ型仮想環境を作成・実行・管理するためのプラットフォームです。

コンテナ型仮想環境は、以下の図の右側のような構成になっており、ホストPC上に複数の環境をコンテナという形で立ち上げることができます。

OSは、ホストOSのカーネルを利用するため、ゲストOSが不要となり、軽量で動作が早くリソースの使用率が少なくて済むのが特徴です。

出典:ゼロからはじめる Dockerによるアプリケーション実行環境構築

DockerDesktopをインストール

Dockerを使うためには、DockerDesktopをインストールする必要があります。

インストールはこちらのサイトから行います。

Docker Desktop for Mac and Windows | Docker
Learn why Docker Desktop is the preferred choice for millions of developers building containerized applications. Download for Mac or Windows.

インストールが完了したら、DockerDesktopを起動します。

起動できると、Macの場合は画面右上にくじらマークのアイコンが表示されます。

Dockerでコンテナを実行

Dockerをインストールしたので、まずは手始めにdocker runコマンドを使って、hello-worldコンテナを起動してみます。

Dockerを操作するとき、Macの場合はターミナル、Windowsの場合はコマンドプロンプトやパワーシェルを使って実行していきます。

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が無事インストールできたことを確認できました。

ちなみにdocker runコマンドは、新しいコンテナを作成・起動する命令です。コマンド実行すると、DockerHubというDockerイメージの置き場からイメージの取得を行い、そのイメージを元にコンテナを作成・起動します。

出典:ゼロからはじめる Dockerによるアプリケーション実行環境構築

docker runコマンドは、以下の3コマンドを実行するのと同じ動作を行います。

  • docker pull:イメージの取得
  • docker create:コンテナの作成
  • docker start :コンテナの起動

Nginxイメージを使ったWebサーバ構築

次に、Nginxイメージを元にコンテナを起動し、初期画面を表示させてみます。

DockerHubでNginxのリポジトリページにアクセスし、「Exposing external port」の部分に記載されているdockerコマンドを、ターミナルで実行します。

Docker Hub

コマンドの説明は以下の通りです。コンテナ名は任意の名前をつけてOKです。

docker run --name <コンテナ名> -d -p <ホスト側のポート番号>:<コンテナ側のポート番号> <イメージ名>
$ docker run --name test-nginx -d -p 8080:80 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
45b42c59be33: Pull complete 
8acc495f1d91: Pull complete 
ec3bd7de90d7: Pull complete 
19e2441aeeab: Pull complete 
f5a38c5f8d4e: Pull complete 
83500d851118: Pull complete 
Digest: sha256:f3693fe50d5b1df1ecd315d54813a77afd56b0245a404055a946574deb6b34fc
Status: Downloaded newer image for nginx:latest
86580328a611c6cfa51109f6b5d12067db602754786a969714c766421dc7785d
$ 
$ docker images
REPOSITORY                TAG          IMAGE ID       CREATED          SIZE
nginx                     latest       35c43ace9216   9 days ago       133MB
$

docker runコマンドでコンテナを起動したら、イメージ作成とコンテナ作成・起動が行われ、初期画面が表示されました!

コンテナの停止と削除

Nginxイメージのコンテナにポートフォリオを紐付けて起動したいので、先程起動したコンテナは一旦停止と削除を行います。

コンテナの停止は、docker stopコマンドで行います。

docker stop <コンテナID もしくは コンテナ名>
$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
86580328a611   nginx     "/docker-entrypoint.…"   28 seconds ago   Up 26 seconds   0.0.0.0:8080->80/tcp   test-nginx
$ 
$ docker stop test-nginx
test-nginx
$ 
$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
$

コンテナの削除は、docker rm コマンドで行います。

docker rm <コンテナID もしくは コンテナ名>
$ docker ps -a
CONTAINER ID   IMAGE                     COMMAND                  CREATED          STATUS                     PORTS                    NAMES
f0fcdfd55836   nginx                     "/docker-entrypoint.…"   13 minutes ago   Exited (0) 4 seconds ago                            test-nginx
$ 
$ docker rm test-nginx
test-nginx
$ 
$ docker ps -a
CONTAINER ID   IMAGE                     COMMAND                  CREATED         STATUS                    PORTS                    NAMES
$ 

ポートフォリオをWebサーバで起動する

今度は、ホストマシン上のディレクトリをコンテナにマウントすることで、ポートフォリオをコンテナで公開してみます。

マウントする際のコマンドの説明は以下の通りです。

docker run --name <コンテナ名> -v <ホスト側のディレクトリ>:<コンテナ側のマウントポイント>:<オプション> -d -p <ホスト側のポート番号>:<コンテナ側のポート番号> <イメージ名>

ホストマシンの/Users/haruppo/Desktop/portfolioにポートフォリオのindex.htmlが配置されているので、それをコンテナ側の/usr/share/nginx/htmlにマウントして起動します。

$ docker run --name first-nginx -v /Users/haruppo/Desktop/portfolio:/usr/share/nginx/html:ro -d -p 8080:80 nginx
29aa6f2c98de7af50dda44e4f7ebfc8e60e0c1198e6c1f6cda5107766e3a239d
$

コンテナにちゃんとマウントされて、ポートフォリオが表示されました!

まとめ:あっという間にDockerで開発環境構築ができた!

Dockerをインストールすることで、たった1時間以内でWebサーバを立ち上げ、開発環境を構築することができました!

今回はdocker runコマンドのオプションで、ホストマシン上のディレクトリをコンテナにマウントしましたが、Dockerfileに記載してマウントさせることもできます。

Dockerfileで実現する方法は、また後日やってみようと思います!

コメント

タイトルとURLをコピーしました