본문 바로가기
Cloud

Docker 간단한 이미지 생성 및 서비스 노출 테스트

by 양눈 2025. 2. 5.
반응형

1. docker hub 및 서비스 배포할 vm 한개를 준비 한다. 

2. 이미지 생성을 위한 파일 설정
- nginx에 간단한 웹서비스를 올릴 예정이라 디렉토리 내에 아래 파일 들을 준비 한다. 

Dockerfile : 도커 빌드를 위한 설정파일 
index.html : web서비스 홈페이지 
default.conf : web서비스 기본 설정 파일
images : 웹페이지에 표시할 이미지 폴더

# touch Dockerfile
# touch default.conf
# touch index.html
# mkdir images 

# ll 
total 20
-rw-r--r--. 1 ec2-user ec2-user  376 Feb  5 05:10 Dockerfile
-rw-r--r--. 1 ec2-user ec2-user  347 Feb  5 05:09 default.conf
drwxr-xr-x. 2 ec2-user ec2-user  150 Feb  5  2025 images
-rw-r--r--. 1 ec2-user ec2-user 1134 Feb  5 05:08 index.html



Dockerfile  설정 내용

FROM nginx:1.23.1-alpine
EXPOSE 80
RUN apt-get update -y && \
  apt-get upgrade -y && \
  apt-get install -y curl && \
  cd /tmp && \
  apt-get install awscli -y && \
  rm -rf /tmp/* && \
  rm -rf /var/lib/apt/lists/*
COPY ./default.conf /etc/nginx/conf.d/default.conf
COPY ./index.html /usr/share/nginx/html/index.html
COPY ./images /usr/share/nginx/html/images
CMD nginx -g "daemon off;"

index.html 설정 내용

<!DOCTYPE html>
<html>
  <head>
    <title> Container Service test </title>
    <style>
      html {
              font-family: Helvetica, Arial, sans-serif;
              font-weight: 600;
              font-size: 20pt;
              text-transform: uppercase;
              text-align: center;
              background: linear-gradient(to bottom, #A7C7E7 0%, #FFB6C1 100%);
              color: white;
      }
      img {
          max-width: 60%;
          height: 80vh;
          border: 2px solid white;
          border-radius: 25px;
      }
    </style>
  </head>
  <h1>New Container Web Page</h1>
  <script language="javascript">
    var imgArray = new Array();
    var bucket =
      "./images/";
    var ext = ".jpg";
    for (i = 0; i < 11; i++) {
      imgArray[i] = bucket + (i + 1) + ext;
    }
    console.log(imgArray);
    function showImage() {
      var imgNum = Math.round(Math.random() * 9);
      console.log(imgNum);
      var objImg = document.getElementById("introImg");
      objImg.src = imgArray[imgNum];
    }
  </script>
    <body onload="showImage()">
      <img id="introImg" border="0" />
    </body>
</html>

default.conf 파일 설정 내용

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    location /web {
        alias   /usr/share/nginx/html;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

image 폴더 안에는 아래와 같이 jpg 이미지

# ll images 
total 2524
-rw-r--r--. 1 ec2-user ec2-user 335384 Jan 13 14:08 0.jpg
-rw-r--r--. 1 ec2-user ec2-user 253717 Jan 13 14:20 1.jpg
-rw-r--r--. 1 ec2-user ec2-user 362125 Jan 13 14:19 10.jpg
-rw-r--r--. 1 ec2-user ec2-user 310377 Jan 13 14:20 2.jpg
-rw-r--r--. 1 ec2-user ec2-user 151819 Jan 13 14:20 3.jpg
-rw-r--r--. 1 ec2-user ec2-user 128015 Jan 13 14:20 4.jpg
-rw-r--r--. 1 ec2-user ec2-user 293366 Jan 13 14:18 5.jpg
-rw-r--r--. 1 ec2-user ec2-user 200521 Jan 13 14:19 6.jpg
-rw-r--r--. 1 ec2-user ec2-user 326974 Jan 13 14:19 7.jpg
-rw-r--r--. 1 ec2-user ec2-user  83074 Jan 13 14:19 8.jpg
-rw-r--r--. 1 ec2-user ec2-user 118852 Jan 13 14:19 9.jpg

파일을 넣어 준다. 

3. 이미지 빌드

#  docker build -t newweb . 
[+] Building 0.1s (10/10) FINISHED                                                                                                                                        docker:default
 => [internal] load build definition from Dockerfile                                                                                                                                0.0s
 => => transferring dockerfile: 474B                                                                                                                                                0.0s 
 => [internal] load metadata for docker.io/library/nginx:latest                                                                                                                     0.0s 
 => [internal] load .dockerignore                                                                                                                                                   0.0s 
 => => transferring context: 2B                                                                                                                                                     0.0s 
 => [1/5] FROM docker.io/library/nginx:latest                                                                                                                                       0.0s
 => [internal] load build context                                                                                                                                                   0.0s 
 => => transferring context: 1.28kB                                                                                                                                                 0.0s 
 => CACHED [2/5] RUN apt-get update -y &&   apt-get upgrade -y &&   apt-get install -y curl &&   cd /tmp &&   apt-get install awscli -y &&   rm -rf /tmp/* &&   rm -rf /var/lib/ap  0.0s 
 => CACHED [3/5] COPY ./default.conf /etc/nginx/conf.d/default.conf                                                                                                                 0.0s 
 => CACHED [4/5] COPY ./index.html /usr/share/nginx/html/index.html                                                                                                                 0.0s 
 => CACHED [5/5] COPY ./images /usr/share/nginx/html/images                                                                                                                         0.0s 
 => exporting to image                                                                                                                                                              0.0s 
 => => exporting layers                                                                                                                                                             0.0s 
 => => writing image sha256:f8809eb2e015f22134cc346e5d615d2e168b3eabf4220edbe87e727e7923c327                                                                                        0.0s 
 => => naming to docker.io/library/newweb  

# docker images newweb
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
newweb       latest    f8809eb2e015   2 hours ago   433MB


4. 이미지 실행

# docker run -d -p 8080:0 --name=web newweb

# docker ps 
CONTAINER ID   IMAGE      COMMAND                  CREATED          STATUS          PORTS                                   NAMES
9c1215e7242c   newweb     "/docker-entrypoint.…"   29 seconds ago   Up 28 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp   web


5. 서비스로 접근 확인 

# curl localhost:8080
또는 웹브라우저로 접근

6. 이미지 Push 

도커 허브 로그인 
# docker login 

이미지 tag 
# docker tag newweb user01/newweb
# docker tag (local image name)   (docker hub username)/(repository_name)

이미지 확인
# docker images | grep newweb
user01/newweb                                                           latest          f8809eb2e015   2 hours ago     433MB
newweb                                                                  latest          f8809eb2e015   2 hours ago     433MB

이미지 푸시
# docker push user01/newweb

반응형

'Cloud' 카테고리의 다른 글

docker 기본 명령어 정리  (0) 2025.02.05

댓글