技術メモ置き場

とあるSIerのインフラエンジニアが主に技術メモを書き残すブログです。

Dockerfileを利用してDockerコンテナを立ち上げる

Apache HTTPサーバのDockerコンテナを立ち上げるための準備


コンテンツファイルを配置するためのファイルを作成する。

mkdir document
echo "make dockerfile" > document/index.html

Dockerファイルの作成


Dockerfileを作成し、設定項目を記述する。

vim Dockerfile
FROM centos
RUN yum -y update
RUN yum -y install httpd
ADD document/index.html /var/www/html/index.html
EXPOSE 80
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

Dockerイメージを作成


以下のコマンドを実行してDockerイメージを作成する。

docker build -t test/apache .

docker buildにオプションtを渡しているが、これは作成するイメージにタグ付けするものである。 階層構造にすることでどのプロジェクトのイメージかが管理しやすくなる。

実行後、以下のコマンドを実行することでイメージが作成されたことが確認できる。

docker images
REPOSITORY    TAG       IMAGE ID       CREATED              SIZE
test/apache   latest    7090726bdc77   About a minute ago   323MB

Dockerコンテナを起動


作成したイメージからApacheのDockerコンテナを起動する。

docker run -d -p 8080:80 test/apache
docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED              STATUS                      PORTS                  NAMES
5a650ed68be3   test/apache   "/usr/sbin/httpd -D …"   10 seconds ago       Up 9 seconds                0.0.0.0:8080->80/tcp   angry_moser

事前に作成したindex.htmlファイルの内容が反映されているか確認


作成したDockerコンテナに対してHTTPアクセスして実行結果を確認する。

curl -v http://localhost:8080
# コマンド実行結果

*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.64.1
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Fri, 29 Jan 2021 15:51:25 GMT
< Server: Apache/2.4.37 (centos)
< Last-Modified: Fri, 29 Jan 2021 15:21:09 GMT
< ETag: "10-5ba0b8dc5960f"
< Accept-Ranges: bytes
< Content-Length: 16
< Content-Type: text/html; charset=UTF-8
< 
make dockerfile
* Connection #0 to host localhost left intact
* Closing connection 0

以上で無事Apache Dockerコンテナの起動確認までできた。

(番外)Dockerコンテナの中にアクセス


Dockerfileを作成する際、From部分で特にOSバージョンをしてしなかった。 この場合はDocker Hubで公開されているDockerイメージの最新版が指定されるようである。 実際にアクセスして確認してみる。

docker exec -it 5a650ed68be3 /bin/bash

以下のようにプロンプトが切り替わる。

[root@5a650ed68be3 /]# 

コンテナ内で以下のコマンドを実行してOSバージョンを確認する。

cat /etc/redhat-release 
# コマンド実行結果
CentOS Linux release 8.3.2011

2021年1月30日現在、Docker Hubに記載されているバージョンは以下のため、確かにDockerイメージ作成時に最新のOSが指定されている。

latest, centos8, 8, centos8.3.2011, 8.3.2011

コンテナから抜ける際は以下のコマンドを実行すればOK。

exit

まだまだ浅い理解であるが、少しずつDockerの仕様や操作を理解し、検証環境をサクサク作れるようになりたい。