【Docker】Docker ~ Webサーバ ~

■ はじめに

https://dk521123.hatenablog.com/entry/2022/01/14/102719

の続き。

今回は、DockerコマンドからWebサーバ(Nginx, Apache)を起動してみる。

目次

【0】今回で学べること
【1】Nginx
 1)nginx起動
 2)コンテナ停止
【2】Apache
 1)コンテナの作成と実行
 2)実行状態の確認
 3)動作確認
 4)コンテナの停止
 5)コンテナの再開
 6)後片付け

【0】今回で学べること

Items Explanation
docker container run コンテナ起動
docker container ps 作成したコンテナの実行状態を確認
docker container stop コンテナの停止
docker container start コンテナの開始
docker container rm コンテナの削除
docker image ls コンテナイメージの確認

【1】Nginx

* Dockerコマンドを使用して、nginxサーバを構築する

1)nginx起動

# 以下の一行だけ(!!?)
docker container run -p 8080:80 nginx

# 以下のURLをブラウザで表示してみる

http://localhost:8080/

解説:docker container run [サービス]

 ... 対象サービスのコンテナを起動する

* docker container run nginx => nginx起動
* -p 8080:80 => ポート80を8080として公開

2)コンテナ停止

docker container stop nginx

docker container rm nginx

【2】Apache

1)コンテナの作成と実行

* コンテナを作成して実行する
 => docker container runコマンドを使う
 => docker run でも同じ意味

構文

docker container run --name <ContainerName> <ImageName> <実行したいコマンド>

コマンド例

docker container run --name hello-apache \
 -d -i -t -p 80:80 -v /tmp:/usr/local/apache2/htdocs httpd

オプション

* -d: デタッチモード (バックグラウンドで実行)

* -i: インタラクティブ(--interactive)
 => 標準入出力/標準エラー出力をコンテナに連結する

* -t: 疑似端末を割り当てる(--tty)
 => 疑似端末(pseudo-tty)とは、
  カーソル移動や文字削除などの文字入力をサポートする端末
* -p <ホストのポート>:<コンテナのポート>

* ホストのポートとコンテナのポートを指定
 => 詳細は、後述「補足:コンテナとの通信」を参照
* -v マウント先やボリューム名:コンテナのディレクトリ
* コンテナのディレクトリを、特定のディレクトリにマウント
* --volume でもいい

補足:コンテナとの通信

* Apacheが設定されているコンテナに対して、
 ブラウザでアクセスするには、外界と接続する設定が必要。
 => 母体となる物理マシンのポートとコンテナのポートを紐づけるために
  「-p <ホストのポート>:<コンテナのポート> (e.g. -p 8080:80)」を指定する

2)実行状態の確認

* 作成したコンテナの実行状態を確認する
 => docker container psコマンド を使う
 => docker ps / docker container lsでも同じ意味

コマンド例

docker container ps

CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS                               NAMES
2c97a8027ebc   httpd     "httpd-foreground"   9 minutes ago   Up 9 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   hello-apache

オプション

* -a オプション: 停止中のコンテナも含めて表示する

3)動作確認

[1] /tmp配下に、任意のHTMLファイルを置く
 => 以下「例」参考
[2] ブラウザでそのファイルにアクセスしてみる
 => 例の場合、http://localhost/hello.html

vi /tmp/hello.html
~~~~
<html>
<body>
<h1>Hello, Docker Container</h1>
</body>
</html>
~~~~

4)コンテナの停止

構文

docker stop <ContainerName>

コマンド例

docker stop hello-apache

$ docker container ls
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

$ docker container ls -a <= 停止含めて表示

CONTAINER ID   IMAGE         COMMAND              CREATED          STATUS                      PORTS     NAMES
2c97a8027ebc   httpd         "httpd-foreground"   24 minutes ago   Exited (0) 14 seconds ago             hello-apache
22d971fb7ad4   hello-world   "/hello"             24 hours ago     Exited (0) 24 hours ago               flamboyant_hertz

5)コンテナの再開

構文

docker start <ContainerName>

コマンド例

docker start hello-apache

$ docker container ls
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS         PORTS                               NAMES
2c97a8027ebc   httpd     "httpd-foreground"   30 minutes ago   Up 8 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   hello-apache

6)後片付け

コンテナ廃棄

* コンテナを破棄する
 => docker container rmコマンドを使う 

コマンド例

# 停止させてから削除する
docker container stop hello-apache

docker container rm hello-apache

イメージ破棄

* docker image lsコマンド:コンテナイメージの確認

$ docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
httpd         latest    a8ea074f4566   4 weeks ago    144MB
hello-world   latest    feb5d9fea6a5   5 months ago   13.3kB

docker image rm httpd

参考文献

https://codezine.jp/article/detail/12831

関連記事

Docker ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/04/24/160044
Docker ~ Windows / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2017/09/23/235818
Docker ~ Linux / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2018/04/10/234030
Docker ~ 基本編 / docker network ~
https://dk521123.hatenablog.com/entry/2022/04/30/000000
Docker ~ 基本編 / Data Volume ~
https://dk521123.hatenablog.com/entry/2018/09/08/222100
Docker ~ 基本編 / Dockerfile ~
https://dk521123.hatenablog.com/entry/2020/04/14/000000
Docker ~ 基本編 / dockerコマンド ~
https://dk521123.hatenablog.com/entry/2020/04/13/000000
Docker ~ 基本編 / docker container コマンド ~
https://dk521123.hatenablog.com/entry/2022/01/20/000000
Docker ~ GO言語 ~
https://dk521123.hatenablog.com/entry/2022/01/14/102719
Docker ~ WordPress
https://dk521123.hatenablog.com/entry/2022/04/29/000000
Docker ~ docker-compose ~
https://dk521123.hatenablog.com/entry/2020/04/11/000000
学習用クラウドサービス ~ katacoda ~
https://dk521123.hatenablog.com/entry/2021/07/15/211044