36
46

More than 3 years have passed since last update.

Docker で CentOS Linux 8 環境を構築して Apache HTTP Server を起動する

Last updated at Posted at 2020-03-21

概要

  • macOS 上の Docker で CentOS Linux 8 環境を構築する
  • Apache HTTP Server を起動してコンテナ内外からアクセスする

今回の環境

  • macOS Catalina
  • Docker Desktop Community 2.2.0.4
  • Docker 19.03.8
  • CentOS Linux 8
  • Apache HTTP Server 2.4.37
$ docker --version
Docker version 19.03.8, build afacb8b

CentOS Linux 8 イメージを Docker Hub から取得

docker pull コマンドでイメージを取得する。

$ docker pull centos:centos8
centos8: Pulling from library/centos
8a29a15cefae: Pull complete 
Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
Status: Downloaded newer image for centos:centos8
docker.io/library/centos:centos8

インストール可能な CentOS Linux のイメージは centos Tags - Docker Hub から探すことができる。

コンテナを作成して起動

コンテナに foobar という名前を割り当てて、バックグラウンドで実行する。
ここではコンテナの80番ポートをホストの8080番ポートに割り当てている。

$ docker run --detach --name foobar --privileged --publish=8080:80 centos:centos8 /sbin/init

run — Docker-docs-ja 17.06.Beta ドキュメント

docker run コマンドは、まず指定されたイメージ上に書き込み可能なコンテナ・レイヤを create (作成)します。それから、指定されたコマンドを使って start (開始)します。この docker run は、 API の /containers/create の後で /containers/(id)/start を実行するのと同じです。

docker run コマンドに --privileged と /sbin/init を指定しないと、systemd を使用する際に以下のようなエラーメッセージが表示されて systemd が使用できなくなるので注意する。

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

CentOS Linux 8 にログイン

docker exec コマンドを使用して、起動したコンテナ内にて bash シェルを実行する。
これで CentOS Linux 8 内に入ることができる。

$ docker exec -it foobar bash

CentOS Linux 8 を使用

シェル内で OS バージョン等を確認する。

[root@29d737551a55 /]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"
[root@29d737551a55 /]# uname -a
Linux 29d737551a55 4.19.76-linuxkit #1 SMP Thu Oct 17 19:31:58 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

vim などのよく使うと思われるソフトウェアがインストールされていない。

[root@29d737551a55 /]# vim
bash: /usr/bin/vim: No such file or directory

vim をインストールする。

[root@29d737551a55 /]# dnf install vim
[root@29d737551a55 /]# vim --version
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Nov 11 2019 19:08:24)
Included patches: 1-1763

シェルから抜けるには exit コマンドを使う。

[root@29d737551a55 /]# exit
exit

コンテナを停止

docker stop コマンドで起動しているコンテナを停止できる。

$ docker stop foobar

コンテナの情報を確認

docker ps コマンドでコンテナの情報を表示できる。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
29d737551a55        centos:centos8      "/sbin/init"        46 minutes ago      Exited (137) 19 seconds ago                       foobar

コンテナを起動

docker start コマンドで停止したコンテナを起動できる。

$ docker start foobar

Apache HTTP Server をインストールする

コンテナ内にシェルを起動してログインする。

$ docker exec -it foobar bash

dnf コマンドで httpd パッケージをインストールする。

[root@29d737551a55 /]# dnf install httpd

これで Apache HTTP Server がインストールできた。
バージョンを確認する。

[root@29d737551a55 /]# httpd -v
Server version: Apache/2.4.37 (centos)
Server built:   Dec 23 2019 20:45:34

systemd で管理するように設定する。

[root@29d737551a55 /]# systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.

systemctl start コマンドで Apache HTTP Server を起動する。

[root@29d737551a55 /]# systemctl start httpd

初期設定ではドキュメントルートが /var/www/html/ になっているので /var/www/html/index.html に HTML ファイルを作成する。

[root@29d737551a55 /]# vi /var/www/html/index.html

今回は以下の内容を記述した。

<html>
<body>
Hello, World!
</body>
</html>

curl コマンドでアクセスすると Apache HTTP Server が HTML ファイルを出力する。

[root@29d737551a55 /]# curl -i http://localhost/
HTTP/1.1 200 OK
Date: Sat, 21 Mar 2020 06:00:04 GMT
Server: Apache/2.4.37 (centos)
Last-Modified: Sat, 21 Mar 2020 05:59:52 GMT
ETag: "2d-5a1571c48ab9e"
Accept-Ranges: bytes
Content-Length: 45
Content-Type: text/html; charset=UTF-8

<html>
<body>
Hello, World!
</body>
</html>

今回はコンテナの80番ポートを Docker ホスト側の8080番ポートに割り当てている。
コンテナ外からホスト側の8080番ポートにアクセスするとコンテナの80番ポートにつながる。

$ curl -i http://localhost:8080/
HTTP/1.1 200 OK
Date: Sat, 21 Mar 2020 06:01:21 GMT
Server: Apache/2.4.37 (centos)
Last-Modified: Sat, 21 Mar 2020 05:59:52 GMT
ETag: "2d-5a1571c48ab9e"
Accept-Ranges: bytes
Content-Length: 45
Content-Type: text/html; charset=UTF-8

<html>
<body>
Hello, World!
</body>
</html>

参考資料

36
46
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
46