저번 시간에는 Ubuntu 리눅스 이미지를 다운받고, 컨테이너 실행을 해보았다.(docke run)
이번 시간에는 웹 서버 이미지를 만들어서 컨테이너를 실행해보자.
먼저 시나리오는 다음과 같다.
1. Python http.server 모듈을 이용
2. server.py 작성
3. index.html 작성
이때, Web server code는 server.py와 index.html이 있다.
4. Dockerfile 작성
5. 도커 이미지 생성
6. 도커 컨테이너 생성 및 실행
+7. Docker YML 파일로 실행
먼저 C드라이브에 python-network라는 폴더를 생성 후, 그 안에 docker 폴더를 생성해주었다.
그 후, docker 폴더에 server.py을 작성했다.
#!/usr/bin/python3
from http.server import BaseHTTPRequestHandler, HTTPServer
import time
import json
from socketserver import ThreadingMixIn
import threading
hostName = "0.0.0.0"
serverPort = 80
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
# curl http://<ServerIP>/index.html
if self.path == "/":
# Respond with the file contents
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
content = open("index.html", "rb").read()
self.wfile.write(content)
else:
self.send_response(404)
return
class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
"""Handle requests in a separate thread."""
if __name__ == "__main__":
webServer = ThreadedHTTPServer((hostName, serverPort), Handler)
print("Server started http://%s:%s" % (hostName, serverPort))
try:
webServer.serve_forever()
except KeyboardInterrupt:
pass
webServer.server_close()
print("Server stopped.")
그 후, index.html을 작성했다.
<!DOCTYPE html>
<html>
<body>
Hello World !
Computer Network is fun !!!
</body>
</html>
같은 경로에 Dockerfile을 작성해준다.
FROM python:3
ADD index.html index.html
ADD server.py server.py
EXPOSE 80
ENTRYPOINT ["python", "server.py"]
Dockerfile로 'web-server-test'라는 이름의 도커 이미지를 생성해준다.
docker build -f Dockerfild . -t web-server-test
'web-server-test'라는 도커 이미지로 'web-server' 컨테이너를 실행한다.
docker run --rm -p 9999:80 --name web-server web-server-test
이후, 웹 브라우저에서 127.0.0.1:9999로 들어가면, 다음과 같은 화면이 나온다.

추가로 Docker YML파일로 실행할 수도 있다.
아까 만들어놓은 폴더에 docker-compose.yml을 작성해주자.
version: "3.8"
services:
web-server-test:
build: .
ports:
- "8080:80"
그 후, docker-compose.yml 파일 내용에 따라 image, container 설정해주자.
docker compose up --build
이제, 브라우저에서 http://localhost:8080에 접속하면 마찬가지로 웹 브라우저에서 HTML 페이지가 보이게 된다.
정리해보자.
이번 시간에는 도커 이미지 작성과 도커 컨테이너 실행을 실습해보았다.
| 항목 | Dockerfile | YAML 파일 |
| 목적 | 컨테이너 이미지 빌드 정의 | 컨테이너 실행 / 구성/ 자동화 정의 |
| 예시 | Dockerfile | docker-compose.yml, autograde.yml 등 |
| 사용하는 곳 | docker build에 사용(Dockerfile->image) | docker compose up, GitHub Action, Kubernetes 등 |
| 사용 형식 | RUN, COPY 등의 도커 명령어 중심 | Key-Value 트리 구조의 구조적 데이터 방식 |