티스토리 뷰
도커 파일 작성 명령어
먼저 도커 파일 작성시 주로 사용되는 명령어를 먼저 정리하고 넘어가겠다.
$ RUN
# 리눅스 명령어로 도커이미지 만들 때 사용
$ CMD
# 도커 파일에서 한번만 사용가능하며, 컨테이너가 실행될 때 사용된다.
$ ENTRYPOINT
# docker container run 명령시 실행된다.
# 도커파일에서 한번만 사용 가능하다.
# * CMD 와 ENTRYPOINT를 같이 사용하는 경우 CMD 명령은 ENTRYPOINT의 default 인수로 사용된다.
$ ONBUILD
# 도커 이미지를 베이스 이미지로 사용해서 빌드하면 실행된다.
$ ADD
# tar 아카이브를 도커이미지 내부로 복사하며 tar 아카이브가 풀려서 저장된다
$ COPY
# tar 아카이브를 풀지 않고 그대로 도커 이미지 내부로 복사한다.
# 호스트의 파일을 도커이미지 내부로 복사
$ WORKDIR
# 현재 작업 디렉토리 결정
$ EXPOSE
# container port 번호를 알려주는 역할
$ AGR
# Dockerfile안에서 변수 설정
# ENV와 다르게 ARG변수는 Dockerfile안에서만 사용이 가능하다.
$ VOLUME
# 도커이미지에 볼륨할당
- 공식 홈페이지를 참고해 작성했다.
https://docs.docker.com/reference/dockerfile/
Dockerfile reference
Find all the available commands you can use in a Dockerfile and learn how to use them, including COPY, ARG, ENTRYPOINT, and more.
docs.docker.com
실습 1
기본적인 명령어만 그냥 봐서는 어떻게 쓰이는지 사실 감이 잘 안올것이다.
간단한 실습을 통해 어떻게 활용이 가능한지 확인 해보도록 하겠다.
예제: 파이썬 이미지를 받아 로또 번호를 생성하는 프로그램을 실행시키는 Dockerfile 작성
먼저 파이썬 이미지를 확인해보도록 하겠다.
https://hub.docker.com/_/python
python - Official Image | Docker Hub
python •• Python is an interpreted, interactive, object-oriented, open-source programming language.
hub.docker.com
도커허브에서 검색을 통해 확인해보면 Dockerfile을 작성하는 방법도 친절히 알려준다.
그럼 작성 요령을 알았으니 이미지로 실행할 python 소스만 작성해주면 되겠다.
$ vim lotto.py
import random
result = []
while len(result) < 6:
num = random.randint(1, 45) # 1~45 사이의 숫자중 임의의 숫자 생성
if num not in result: # 중복 숫자 뽑기 방지
result.append(num)
print(result) # 무작위 생성된 6개의 숫자 출력
이제 도커 파일을 도커허브에적힌 레퍼런스를 보고 작성하면 된다.
FROM python:3
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "python", "./lotto.py" ]
이제 모든 준비가 끝났으니 실행해보도록 하겠다.
$ docker build -t lotto:latest .
$ docker run lotto:latest
실습 2
간단한 예제를 실습해봤으나 아직은 실무에서 쓰긴 아쉬운 수준의 실습이므로
조금 난이도를 올려 추가적인 실습을 진행해보도록 하겠다.
예제: 스프링 프로젝트 서비스를 외장 톰캣을 사용해 컨테이너에 올리기
최근에는 spring boot를 많이들 사용하고 있어 내장 톰켓이 지원되어 스프링기반의 웹서비스를 올리는
베이스 이미지는 jar파일을 실행시킬수 있는 openjdk 이미지를 사용해 쉽게 배포가 가능하지만
legacy project들은 spring framework를 사용하므로 war파일을 별도로 말아서 외장 톰켓에 넣어
서비스를 올리는 방식을 사용하기도 한다.
이 후자의 방식을 도커 이미지로 만드는 과정을 통해 실습해보도록 하겠다.
먼저 간단한 레거시 프로젝트를 하나 생성해준다.
이미 샘플로 쓸만한 프로젝트가 존재한다면 재탕해도 좋다.
build 후 war파일을 생성한다.
개발환경에서 사용한 톰켓설정과 war파일을 배포환경으로 가져온다.
mobaxterm을 사용한다면 sftp를 지원하므로 그냥 드래그엔 드랖으로 배포할 디렉터리로 가져오면 된다.
이제 도커파일을 작성할것인데 베이스 이미지는 톰켓이미지를 활용한다.
https://hub.docker.com/_/tomcat
tomcat - Official Image | Docker Hub
Docker Official Images are a curated set of Docker open source and drop-in solution repositories. Why Official Images? These images have clear documentation, promote best practices, and are designed for the most common use cases.
hub.docker.com
도커파일에서는 베이스 이미지를 가져오고,
기존 서버설정을 복사해 이미지에 넣어준뒤,
war 파일을 넣어 주고
이미지를 생성하면 끝이다.
그럼 말한 그대로 위에서 적은 명령어와 도커허브의 레퍼런스를 참조해서 바로 작성해보겠다.
FROM tomcat:9.0
COPY ./config/context.xml /usr/local/tomcat/conf/context.xml
COPY ./config/server.xml /usr/local/tomcat/conf/server.xml
COPY ./war/SampleProj.war /usr/local/tomcat/webapps/
EXPOSE 8088
CMD ["catalina.sh", "run"]
빌드 후 실행 해보겠다.
$ docker build –t sample:latest .
$ docker run –d –p [port]:[port] sample:latest
의도한 대로 프로젝트가 올라옴을 확인할수 있다.
여기서 더 나아간다면 github actions를 사용해 배포자동화도 가능한데 이 부분은
따로 github actions에 대해 정리할 때 작성하겠다.
'INFRA > Docker' 카테고리의 다른 글
Docker tutorial 3: 도커 이미지 (0) | 2024.12.08 |
---|---|
Docker tutorial 2: 컨테이너와 도커 구조 (0) | 2024.11.24 |
Docker tutorial 1: 도커 설치와 기본 명령어 정리 (0) | 2024.11.23 |
Docker tutorial 0: 실습환경 구축 (1) | 2024.11.22 |