0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Docker環境構築(Linux 8)とApache HTTP Serverコンテナの起動

Last updated at Posted at 2020-12-29

#目的
AWS EC2上にDockerの稼働環境を構築し、Apache HTTP Serverコンテナを作成し、動作させる。コンテナの基本的な操作を理解する。(コンテナ内にログインした上で操作するパターンとDocker Fileを用いるパターンの二つを実施する。)

#環境条件

  • Dockerサーバ
    • EC2:t2.micro
    • OS:Red Hat Enterprise Linux 8 (HVM), SSD Volume Type
    • Disk:汎用SSD(GP2) 10GB

セキュリティグループの設定等はいい感じに。

#構築手順

以下の流れで実施する。

  1. EC2上にDockerの動作環境を構築する。
  2. Docker HubからCentOSのイメージをダウンロードする。
  3. ダウンロードしたイメージを起動し、コンテナにログインした上でApache HTTP Serverを動作させる。
  4. 動作確認。
  5. Docker Fileを用い、Apache HTTP Serverのコンテナを作成し、動作させる。
  6. 動作確認。

##1. EC2上にDockerの動作環境を構築する。

Dockerサーバにec2-userでログイン

## rootユーザにスイッチ
sudo su - 
##各種ライブラリのアップデート
dnf -y update
##リポジトリの確認
dnf repolist

repo id repo name rhel-8-appstream-rhui-rpms Red Hat Enterprise Linux 8 for x86_64 - AppStream from RHUI (RPMs) rhel-8-baseos-rhui-rpms Red Hat Enterprise Linux 8 for x86_64 - BaseOS from RHUI (RPMs) rhui-client-config-server-8 Red Hat Update Infrastructure 3 Client Configuration Server 8

##Dockerリポジトリの追加
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Adding repo from: https://download.docker.com/linux/centos/docker-ce.repo

##リポジトリが追加されたことを確認
dnf repolist

repo id repo name docker-ce-stable Docker CE Stable - x86_64 rhel-8-appstream-rhui-rpms Red Hat Enterprise Linux 8 for x86_64 - AppStream from RHUI (RPMs) rhel-8-baseos-rhui-rpms Red Hat Enterprise Linux 8 for x86_64 - BaseOS from RHUI (RPMs) rhui-client-config-server-8 Red Hat Update Infrastructure 3 Client Configuration Server 8

##インストールするDockerライブラリの存在確認
dnf info docker-ce

Last metadata expiration check: 0:00:54 ago on Tue 29 Dec 2020 12:15:56 AM UTC. Available Packages Name : docker-ce Epoch : 3 Version : 20.10.1 Release : 3.el8 Architecture : x86_64 Size : 27 M Source : docker-ce-20.10.1-3.el8.src.rpm Repository : docker-ce-stable Summary : The open-source application container engine URL : https://www.docker.com License : ASL 2.0 Description : Docker is a product for you to build, ship and run any application as a : lightweight container. : : Docker containers are both hardware-agnostic and platform-agnostic. This means : they can run anywhere, from your laptop to the largest cloud compute instance and : everything in between - and they don't require you to use a particular : language, framework or packaging system. That makes them great building blocks : for deploying and scaling web apps, databases, and backend services without : depending on a particular stack or provider.

dnf info docker-ce-cli

Last metadata expiration check: 0:01:00 ago on Tue 29 Dec 2020 12:15:56 AM UTC. Available Packages Name : docker-ce-cli Epoch : 1 Version : 20.10.1 Release : 3.el8 Architecture : x86_64 Size : 33 M Source : docker-ce-cli-20.10.1-3.el8.src.rpm Repository : docker-ce-stable Summary : The open-source application container engine URL : https://www.docker.com License : ASL 2.0 Description : Docker is is a product for you to build, ship and run any application as a : lightweight container. : : Docker containers are both hardware-agnostic and platform-agnostic. This means : they can run anywhere, from your laptop to the largest cloud compute instance and : everything in between - and they don't require you to use a particular : language, framework or packaging system. That makes them great building blocks : for deploying and scaling web apps, databases, and backend services without : depending on a particular stack or provider.

dnf info containerd.io

Last metadata expiration check: 0:01:04 ago on Tue 29 Dec 2020 12:15:56 AM UTC. Available Packages Name : containerd.io Version : 1.4.3 Release : 3.1.el8 Architecture : x86_64 Size : 33 M Source : containerd.io-1.4.3-3.1.el8.src.rpm Repository : docker-ce-stable Summary : An industry-standard container runtime URL : https://containerd.io License : ASL 2.0 Description : containerd is an industry-standard container runtime with an emphasis on : simplicity, robustness and portability. It is available as a daemon for Linux : and Windows, which can manage the complete container lifecycle of its host : system: image transfer and storage, container execution and supervision, : low-level storage and network attachments, etc.

## Dockerライブラリのインストール
dnf -y install docker-ce docker-ce-cli containerd.io
##Dockerサービスの登録
systemctl enable docker

Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.

##Dockerの起動
systemctl start docker
##Dockerの起動確認
systemctl status docker

● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: active (running) since Tue 2020-12-29 00:19:07 UTC; 9s ago Docs: https://docs.docker.com Main PID: 58369 (dockerd) Tasks: 8 Memory: 59.2M CGroup: /system.slice/docker.service └─58369 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

##Dockerのバージョン確認
docker --version

Docker version 20.10.1, build 831ebea

##Hello Worldの実行
docker run hello-world

`Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:1a523af650137b8accdaed439c17d684df61ee4d74feac151b5b337bd29e7eec
Status: Downloaded newer image for hello-world:latest
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/
    `

##2. Docker HubからCentOSのイメージをダウンロードする。

##Dockerイメージの確認
docker images

REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest bf756fb1ae65 12 months ago 13.3kB

##Docker HubからCentOS8のイメージをダウンロード
docker pull centos:centos8

centos8: Pulling from library/centos 7a0437f04f83: Pull complete Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1 Status: Downloaded newer image for centos:centos8 docker.io/library/centos:centos8

##Dockerイメージが追加されていることを
docker images

REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest bf756fb1ae65 12 months ago 13.3kB centos centos8 300e315adb2f 3 weeks ago 209MB

##3. ダウンロードしたイメージを起動し、コンテナにログインした上でApache HTTP Serverを動作させる。

##CentOSコンテナの起動(OSの8080ポートをコンテナの80ポートとマッピング)
docker run --detach --name test --privileged --publish=8080:80 centos:centos8 /sbin/init

b25e9ef1d672f5e802eaa03983457c9730c9a5805a7d1abddb4ad9056ec15a01

##8080ポートがDockerコンテナでLISTENしていることを確認
netstat -nap | grep 8080

tcp6 0 0 :::8080 :::* LISTEN 58798/docker-proxy

##起動したコンテナのプロセス状態確認
docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b25e9ef1d672 centos:centos8 "/sbin/init" 2 minutes ago Up 2 minutes 0.0.0.0:8080->80/tcp test 28a9e2902746 hello-world "/hello" 9 minutes ago Exited (0) 9 minutes ago nervous_wilbur

コンテナにログイン
# docker exec -it test bash

以下、コンテナにログインした状態で実施

##コンテナのOS確認
cat /etc/os-release 

NAME="CentOS Linux" VERSION="8" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="8" PLATFORM_ID="platform:el8" PRETTY_NAME="CentOS Linux 8" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:8" HOME_URL="https://centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" CENTOS_MANTISBT_PROJECT="CentOS-8" CENTOS_MANTISBT_PROJECT_VERSION="8"

##コンテナのカーネルを確認
uname -a

Linux b25e9ef1d672 4.18.0-240.1.1.el8_3.x86_64 #1 SMP Fri Oct 16 13:36:46 EDT 2020 x86_64 x86_64 x86_64 GNU/Linux

## コンテナにApache HTTP Serverをインストール
dnf install -y httpd
## インストールされたApache HTTP Serverのバージョン確認
httpd -v

Server version: Apache/2.4.37 (centos) Server built: Nov 4 2020 03:20:37

##Apache HTTP Serverのサービス登録
systemctl enable httpd

Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.

##Apache HTTP Serverの起動
systemctl start httpd
##Apache HTTP Serverの起動状態確認
systemctl status httpd
##index.htmlの作成
vi /var/www/html/index.html
cat /var/www/html/index.html 
<html>
<body>
Test Container HTML File
</body>
</html>

##4. 動作確認。

##コンテナ内でApache HTTP Serverの動作確認
curl -i http://localhost/

`HTTP/1.1 200 OK
Date: Tue, 29 Dec 2020 00:38:51 GMT
Server: Apache/2.4.37 (centos)
Last-Modified: Tue, 29 Dec 2020 00:37:43 GMT
ETag: "37-5b78f99486ca0"
Accept-Ranges: bytes
Content-Length: 55
Content-Type: text/html; charset=UTF-8

Test Container HTML File `

control + dでコンテナからexit(Macなので)

PCのブラウザから以下、URLにアクセスし、
「このページは動作していませんec2-13-114-50-13.ap-northeast-1.compute.amazonaws.com からデータが送信されませんでした。ERR_EMPTY_RESPONSE」が表示されることを確認
http://<パブリック DNS>:80

PCのブラウザから以下、URLにアクセスし、
Test Container HTML Fileが表示されることを確認
http://<パブリック DNS>:8080

##コンテナの停止
docker stop b25e9ef1d672

b25e9ef1d672

##コンテナプロセスの削除
docker rm b25e9ef1d672

b25e9ef1d672

##5. Docker Fileを用い、Apache HTTP Serverのコンテナを作成し、動作させる。

##Docker File用ディレクトリの作成
mkdir -p docker/httpd
cd docker/httpd/
##Docker Fileの作成(Apache HTTP Serverをインストールし、コンテナ起動時にhttpdプロセスを起動する設定。index.htmlも作成。)
vi DockerFile
cat Dockerfile 
# setting base image
FROM centos:centos8
# Auther
MAINTAINER MARTOON
# install Apache httpd server
RUN dnf install -y httpd
# create index.html
RUN echo "sample httpd container" > /var/www/html/index.html
# enable httpd
RUN systemctl enable httpd
# start httpd
CMD systemctl start httpd
##Docker FileからDocker Imageのビルド
docker build -t sample_httpd:0.1 .
##ビルドしたコンテナイメージの存在確認
docker images

REPOSITORY TAG IMAGE ID CREATED SIZE sample_httpd 0.1 6892219088b3 24 seconds ago 250MB centos centos8 300e315adb2f 3 weeks ago 209MB hello-world latest bf756fb1ae65 12 months ago 13.3kB

##ビルドしたコンテナイメージの起動
docker run --detach --name sample_httpd --privileged --publish=8080:80 sample_httpd:0.1 /sbin/init

d7bd77d61494b97fa00c5664aed59d9080c0b1d210581b2c3a7732f1ab47c94b

##6. 動作確認。

PCのブラウザから以下、URLにアクセスし、
「このページは動作していませんec2-13-114-50-13.ap-northeast-1.compute.amazonaws.com からデータが送信されませんでした。ERR_EMPTY_RESPONSE」が表示されることを確認
http://<パブリック DNS>:80

PCのブラウザから以下、URLにアクセスし、
sample httpd containerが表示されることを確認
http://<パブリック DNS>:8080

##Dockerプロセスの確認
docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d7bd77d61494 sample_httpd:0.1 "/sbin/init" About a minute ago Up About a minute 0.0.0.0:8080->80/tcp sample_httpd

##起動したコンテナの停止
docker stop d7bd77d61494

d7bd77d61494

##起動したコンテナの削除
docker rm d7bd77d61494

d7bd77d61494

##コンテナイメージの確認
docker images

REPOSITORY TAG IMAGE ID CREATED SIZE sample_httpd 0.1 8d1a1edebfdf 3 minutes ago 250MB centos centos8 300e315adb2f 3 weeks ago 209MB hello-world latest bf756fb1ae65 12 months ago 13.3kB

##ビルドしたコンテナイメージの削除
docker rmi 8d1a1edebfdf
##コンテナイメージが削除されたことを確認
docker images

REPOSITORY TAG IMAGE ID CREATED SIZE centos centos8 300e315adb2f 3 weeks ago 209MB hello-world latest bf756fb1ae65 12 months ago 13.3kB

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?