InfoSec Log/Docker

[Docker] Dockerfile을 이용하여 도커 컨테이너 환경 구축

GuanJoer 2024. 2. 19. 02:25

Dockerfile은 이미지를 생성하고 특정 작업까지 같이 처리해주는 도구라 볼 수 있다. Dockerfile이라는 이름으로 자신이 설정하고 싶은 환경들을 세팅할 수 있으므로, 해당 파일의 공유만으로도, 타인이 나와 동일한 도커 컨테이너의 환경을 세팅할 수 있게 해준다. 즉 협업 시, 큰 이점을 가지는 도구이다.


Dockefile의 기본적인 형태는 아래와 같다.

FROM [설치할 이미지 파일]
RUN [설치한 이미지 파일 위에서 작동시킬 명령어]
COPY [파일이름] [복사할 컨테이너 내 경로] 
EXPOSE [호스트와 연결할 포트]
CMD [컨테이너 RUN시 실행코드]

 

Kali linux에서 Dockerfile을 이용해보자.

 

 

vim과 같은 텍스트 에디터로, 위의 form을 따라, 파일 이름이 "Dockefile"인 파일을 만든다.

FROM을 통해 우분투 최신 버전의 이미지를 도커 허브로 부터 다운받고, 설치한 도커 이미지 위에, 해당 이미지 내에서 다운로드 가능한 목록을 최신화하고, nginx라는 웹서버 애플리케이션을 다운 받는다. 그 후, COPY를 통해, 현재 경로에 존재하는 index.html 파일을 우분투 이미지의 index.html 기본 경로에 복사해주고, localhost의 80포트와 연결하고, 기본적으로 컨테이너 실행 시, nginx의 daemon을 off 해준다.

FROM ubuntu:latest
RUN apt-get update && apt-get install -y -q nginx
COPY index.html /var/www/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

 

 

내가 설정한 이미지의 환경들을 build 해준다. -t 옵션을 통해, 이미지의 태그를 지정해주고, 만약 도커 파일이 현재 경로에 존재하고 파일 이름이 "Dockerfile"이면 "."을 입력해주고, 만약 다를 경우, -f 옵션을 통해 도커파일을 지정해준다.

docker build -t nginx_v1.0 .

 

 

빌드 명령어를 입력하고 나면, 내가 설정한 환경대로, 이미지가 다운로드되어지며, 그 과정이, Step 1/5 ~ Step 5/5를 통해 보여진다.

 

 

빌드가 끝나고 나면, docker images 명령어를 통해 내가 설정한 환경대로 이미지가 다운로드 되어진 것을 볼 수 있다.

 

 

그 후, 내가 설정한 이미지를 가지고 도커 컨테이너를 생성한다.

 

docker run -itd -p 8080:80 --name=webserver_test nginx_v1.0

 

그 후, 내가 지정한 포트포워딩 local host의 포트 8080으로 접속해보면, 위와 같이 정상적으로 도커파일이 작동함을 볼 수 있다.

http://localhost:8080