클라우드 + DevOps/Docker

Docker 실습 :: Dockerfile 제작 후 이미지 생성

gamjadori 2024. 3. 1. 10:23
728x90

<Dockerfile 제작 실습>

  • /Labs/ch07 에서 Dockerfile 제작
  • 파이썬 기반의 어플리케이션을 제작한다고 가정
  • 필요 리소스

 

1. Dockerfile 작성

FROM python:3.9.18-alpine3.19
WORKDIR /app
COPY requirement.txt .
COPY app/static static
COPY app/template template
COPY app.py .
RUN pip install --no-cache-dir -r requirement.txt
CMD ["python", "app.py"]

 

2. Dockerfile을 이미지로 생성

  • 이름: myapp:20240117
ubuntu@host1:~/Labs/ch07$ docker build -t myapp:20240117 .

 

3. 컨테이너 생성

ubuntu@host1:~/Labs/ch07$ docker container run -d --name=myapp -p 8000:8000 myapp:20240117
35160e195117875f89b99f95ca2819f893a66f81aa6950ff526e04636cc299d6
ubuntu@host1:~/Labs/ch07$ docker container ps
CONTAINER ID   IMAGE                             COMMAND                   CREATED         STATUS                 PORTS                                       NAMES
35160e195117   myapp:20240117                    "python app.py"           6 seconds ago   Up 5 seconds           0.0.0.0:8000->8000/tcp, :::8000->8000/tcp   myapp
8def3765c57b   nginx:1.25.0-alpine               "/docker-entrypoint.…"   4 hours ago     Up 4 hours             0.0.0.0:8001->80/tcp, :::8001->80/tcp       myweb
0184f485b0e5   mysql:8.0.35-debian               "docker-entrypoint.s…"   4 hours ago     Up 4 hours             3306/tcp, 33060/tcp                         mydb
69db6bdc9620   nginx:1.25.0-alpine               "/docker-entrypoint.…"   7 hours ago     Up 7 hours             80/tcp                                      mginx_mem_1g
fa7bcf3a232b   nginx                             "/docker-entrypoint.…"   7 hours ago     Up 7 hours             80/tcp                                      nginx_mem_1g
20fa045c6714   gcr.io/cadvisor/cadvisor:latest   "/usr/bin/cadvisor -…"   24 hours ago    Up 7 hours (healthy)   0.0.0.0:9559->8080/tcp, :::9559->8080/tcp   cadvisor

 

4. 내가 제작한 Dockerfile이 컨테이너에 성공적으로 적용되었는지 확인

ubuntu@host1:~/Labs/ch07$ curl localhost:8000
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flask App</title>
</head>
<body>
    <img src="/static/hangaramit.png" alt="Image">
    <h1>Welcome HangaramIT</h1>
</body>
</html>