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の仕様や操作を理解し、検証環境をサクサク作れるようになりたい。