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?

Dockerを使ってWeb Serverを立ち上げてみる

Posted at

はじめに

Dockerを最近学習していたので勉強がてら書いていきます。
かなり簡単に実施するので実際の現場で使うものとは違いますが、どんなことができるのか考え方について触れていきます。

やりたいこと

Dockerコンテナで、pythonのhttp.serverを使用して簡単なHTMLのページを表示する。
今回はコンテンツの内容ではなく、Dockerでウェブサーバーを構築する考え方や手順について記載していきます。
かなり初歩的な内容になりますのでご了承ください。

ファイル構造

全体のファイル構造としては以下です。

.
├── docker-compose.yml
├── dockerfile
├── index.html
└── server.py

server.py

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print(f"Serving at port {PORT}")
    httpd.serve_forever()

import http.server
pythonの標準ライブラリの一つで、HTTPリクエストに対して同ディレクトリのHTMLファイルを返せるようになります。
import socketserver
これもpythonの標準ライブラリの一つで、PORTで指定したポート番号で待機し、クライアントからリクエストが来た際にTCP通信が可能になります。
今回ではDockerでコンテナを起動した際にこのファイルを実行させるようにしていきます。

index.html

クライアントからのHTTPリクエストが来た際に表示されます。今回はおなじみのHello Worldにします。

<!-- index.html -->
<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Simple Web Server</title>
</head>

<body>
    <h1>Hello World</h1>
</body>

</html>

Dockerfile

FROM python:3.9-slim

WORKDIR /app

CMD ["python" , "server.py"]

FROM python:3.9-slim
ここではベースイメージを指定しています。
この行で指定したベースイメージを元に、このあと、dck-compose.ymlでイメージの作成を行います。
WORKDIR /app
ここではコンテナを起動させた際の作業ディレクトリを指定します。
後でdocker-compose.ymlファイルで、ここで指定した作業ディレクトリ(app)に、カレントディレクトリを同期させます。
CMD ["python" , "server.py"]
コンテナ起動時に実行するコマンドを指定します。
上記では、python server.pyが実行されます。

docker-compose.yml

version: '3'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8080:8000"
    volumes:
      - .:/app  
services:
  app:

ここでは複数のコンテナを起動させることができます。
今回はappという名前でコンテナを起動させます。

    build:
      context: .
      dockerfile: Dockerfile

イメージをビルドします。contextでカレントディレクトリを指定し、dockerfikeでファイル名を指定します。
カレントディレクトリにある、Dockerfileを使用してイメージをビルドします。

ports: - "8080:8000"
ポートマッピングを行います。ローカルの8080ポートにアクセスすると、Dockerコンテナの8000ポートに通信が転送されます。
volumes: - .:/app
ここではローカルのカレントディレクトリを、Dockerのappディレクトリにマウントします。
このappはDockerファイルのWORKDIR /appで指定したディレクトリです。

実践

docker-compose up -d
上記コマンドでDockerコンテナをバックグラウンドで起動させます。

具体的には以下のような処理が行われます。

  1. buildで指定したDockefileを元にイメージをビルド
  2. イメージからコンテナを作成
  3. 作業ディレクトリ/appにローカルのカレントディレクトリがマウント(同期)される
  4. python server.pyを実行
  5. 8000ポートでHTTPリクエストを受け付けるようになる

http://localhost:8080にアクセスすると、8080ポートは8000ポートに転送され、Dockerコンテナで実施したserver.pyによってリクエストが処理されます。
今回はHello Worldが表示されればOKです。

最後にdocker-compose downでコンテナを停止させます。

終わりに

Dockerは実務でもよく目にするのでしっかり理解していきたい。。
次回はDockerでよく使うコマンドも少しまとめようかと思います!

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?