Application Modernization/Container & PaaS

Dockerfile 로 docker image 작성

Cloud Applicaiton Architect 2021. 9. 14. 08:31
반응형

이 글은 2018년에 네이버 블로그에 포스팅했었던 글을 리포스팅한 글입니다.

 

현재 실행중인 컨테이너 이미지를 통해 Docker Image를 만드는 명령어로 commit이 있습니다. 하지만 개발 환경에 따라 동적으로 도커 이미지를 만들고자 할 때 commit을 통해 이미 사용 중인 이미지를 배포하는 방식보단 Dockerfile은 이용해 동적 이미지 생성이 효율적일 수 있습니다.

 

Dockerfile은 eclipse, gradle과 함께 개발자 배포 환경에 자주 사용됩니다. 여기서는 이러한 Dockerfile에 대해 간략히 알아보도록 하겠습니다.

 

다음의 Dockerfile 파일 샘플을 확인해 보도록 합니다.(파일명 Dockerfile)

FROM bridg/java8


ENV http_proxy 'http://proxy.*****.co.kr:8080'
ENV https_proxy 'http://proxy.*****.co.kr:8080'
RUN export http_proxy=$http_proxy && export https_proxy=$https_proxy


ADD http://mirror.navercorp.com/apache/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-8.5.38.tar.gz . 
RUN ["tar", "-zxvf", "/apache-tomcat-8.5.38.tar.gz"]
COPY sample.war /apache-tomcat-8.5.38/webapps/


WORKDIR "/apache-tomcat-8.5.38"
ENTRYPOINT ["sh", "/apache-tomcat-8.5.38/bin/catalina.sh","run"]
EXPOSE 8080

1. DockerHub 혹은 로컬 레파지토리에 있는 bridg/java8로부터 새로운 docker image를 만든다.

* 이 이미지는 JDK 8.0이 설치된 docker image입니다.

FROM bridg/java

 

2. 이렇게 생성된 docker image에서 외부 인터넷 통신을 위해 Proxy 설정을 한다.(운영환경에 따라 옵션)

ENV http_proxy ~

RUN export ~

 

3. 인터넷의 톰캣 다운로드 사이트에서 tomcat 8.5.38을 새로 생성되는 bridg/java image에 다운 받는다.

 

4. 다운로드한 파일의 압축을 풉니다.(이 모든 일은 bridg/java로부터 만들어진 이미지 내부에서 이루어집니다.)

 

5. HOST 컴퓨터(여기서는 윈도우입니다.)의 sample.war 파일을 bridg/java로부터 만들어지는 새로운 이미지의 apache-tomcat-8.5.38/webapps로 복사해 둡니다.

 

6. 새로 만들어지는 bridg/java 이미지의 Working Directory를 설정합니다. 이 디렉토리는 exec 명령으로 접근할 때 기본 디렉토리가 됩니다.

 

7. 설치된 톰캣을 기동 합니다.

 

8. 톰캣이 기동될 TCP 포트를 설정합니다.

 

※ Dockerfile에 사용되는 명령어는 다음의 링크에서 확인해 보실 수 있습니다.

 

Dockerfile로부터 신규 컨테이너 생성

현재 PC에서 실행된 Docker 컨테이너를 확인해 봅니다. (Docker ps –a)

Dockerfile을 실행 시키기 위한 호스트 컴퓨터(저는 윈도우를 쓰고 있습니다.)의 디렉토리는 다음과 같이 Dockerfile과 Copy를 위해 사용할 sample.war 파일을 같은 디렉토리 안에 넣어야 합니다.

(sample.war 파일은 첨부)

C:\Users\FKL>tree/f Temp
폴더 PATH의 목록입니다.
볼륨 일련 번호는 985C-8D25입니다.
C:\USERS\FKL\TEMP
Dockerfile
sample.war

Dockerfile 작성이 완료되고 sample.war파일이 준비되었다면 다음과 같이 docker build 명령어로 Dockerfile로부터 새로운 이미지를 만들도록 합니다.

  • docker build –t [새로 만들 이미지 이름] [Dockerfile 위치]
C:\Users\FKL\Temp>docker build -t simple-web .
Sending build context to Docker daemon 5.12kB
Step 1/10 : FROM bridg/java8
---> affe9783262d
Step 2/10 : ENV http_proxy 'http://proxy.unknown.co.kr:8080'
---> Running in 3ffa2c870fa8
Removing intermediate container 3ffa2c870fa8
---> f02ea5b5c4fb
Step 3/10 : ENV https_proxy 'http://proxy.unknown.co.kr:8080'
---> Running in b07430e49396
Removing intermediate container b07430e49396
---> f86fc39044b4
Step 4/10 : RUN export http_proxy=$http_proxy && export https_proxy=$https_proxy
---> Running in 749066e97863
Removing intermediate container 749066e97863
---> 87569a139b95
Step 5/10 : ADD http://mirror.navercorp.com/apache/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-8.5.38.tar.gz .
Downloading [==================================================>] 9.672MB/9.672MB
---> 521e9654b7a2

Removing intermediate container df0fa541d606
---> 5054a2d905cf

Successfully tagged simple-web:latest
C:\Users\FKL\Temp>

Dockerfile로부터 image 파일을 생성했다면 docker images 명령어로 생성한 이미지가 생성 되었는지 확인하시기 바랍니다. 여기서는 simple-web이라는 이름으로 docker image를 생성했습니다. (Ex: docker build –t simple-web . )

Docker image를 이용한 Container 실행

docker run –d –t –I –-name [이미지로부터 생성될 컨테이너명] –p 호스트컴퓨터 TCP포트:이미지에서 EXPOSE된 TCP포트 [컨테이너를 만들 이미지명]

EX: docker run -d -t -i --name simple-web -p 8080:8080 simple-web

정상적으로 컨테이너가 실행되었는지 docker ps를 통해 확인해 봅니다.

 

모든 상황이 정상적으로 진행되었다면 웹브라우저를 통해 URL을 아래와 같이 입력해 웹 어플리케이션이 배포된 것을 확인할 수 있습니다.

EX: http://localhost:8080/sample/index.jsp

이상입니다.

감사합니다.

 

 

P.S: 이 예제에서 사용된 예제 파일은 아래의 git에서 받을 수 있습니다.

 

 

GitHub - sharplee7/dockerfile-example

Contribute to sharplee7/dockerfile-example development by creating an account on GitHub.

github.com

 

반응형

'Application Modernization > Container & PaaS' 카테고리의 다른 글

Docker Private Container Registry 만들기  (0) 2021.09.29
자주쓰는 Dockerfile 명령어  (0) 2021.09.14
Docker로 Tomcat MySQL 실행  (0) 2021.09.14
Docker로 Tomcat 실행  (2) 2021.09.14
Docker 개념  (0) 2021.09.07