반응형
Dockerfile
IaC란 ?
- 코드형 인프라(IaC)는 인프라 관리를 데이터 센터의 물리적 하드웨어에서 가상화, 컨테이너, 클라우드 컴퓨팅으로 전환할 수 있도록 지원합니다
- IaC는 높은 수준의 설명적인 코딩 언어를 사용하여 IT 인프라 프로비저닝을 자동화하고 수작업 관리와 서버, 스토리지, 데이터베이스 연결과 같은 인프라 요소 프로비저닝이 필요하지 않습니다.
- 프로그래밍형(코드형)인프라 개발은 탄력성, 확장성, 반복성을 부여하여 동일한 환경을 보유한 서버를 수십에서 수백 대까지 운영,관리하게 해줍니다. 이러한 IaC지원 도구로 도커, 엔서블, 쿠버네티스가 있습니다.
Docker
- 도커 이미지는 컨테이너가 실행할 환경을 제공하는 일종의 파일 시스템 역할을 합니다.
- 개발하는 모든 컨테이너 환경은 획일적이고 동일하게 움직이지 않고 다양하게 개발됩니다. 애플리케이션에 적용되는 새로운 환경을 사용자가 직접 정의해서 아이디어를 실현할 수 있는 것이 바드 코드로서 인프라 환경을 프로비저닝하는 Dockerfile 입니다.
Dockerfile
- 애플리케이션의 파일 시스템 역할을 하는 도커 이미지를 생성하기 위해서는 Dockerfile이라는 이미지 빌드용 DSL 파일을 사용합니다. 이는 특정 컨테이너를 위한 이미지를 개발할 경우 필요한 모든 설정내용을 담은 파일입니다.
- 효율적인 Dockerfile 작성을 위해 기본적으로 빌드 시간, 이미지 크기, 재사용성, 보안, 유지보수성 등을 고려해야합니다.
- 경량의 컨테이너 서비스를 제공
- 경량의 가상화 서비스를 구성
- Dockerfile에 담기는 레이어(계층)를 최소화
- 레이어 수가 많을수록 이미지를 생성하는 빌드 시간은 길어지고, 파일 용량도 커짐, 이를 줄일 수 있도록 Dockerfile 명령어 사용법을 정확히 알아야함.
- 캐시(cache) 기능을 활용
- 동일한 명령의 실행은 캐싱을 통해 재사용이 되기 때문에 빌드 속도를 빠르게 합니다.
- IaC 환경 개발은 디렉터리 단위
- 이미지 빌드 시 현재위치로부터 하위경로의 모든 디렉터리와 파일을 도커 context에 저장한뒤 작업이 진행됩니다.
- 서버리스 환경으로 개발
- Dockerfile을 통해 미리 설정된 환경을 서버리스 애플리케이션 환경이라 하고, 이러한 환경은 사용자가 서버를 프로비저닝, 확장, 관리할 필요가 없어집니다.
- 경량의 컨테이너 서비스를 제공
명령어 | 설명 |
---|---|
FROM | 생성하려는 이미지의 베이스 이미지 지정으로 hub.docker.com에서 제공하는 공식(official, 오피 셜)이미지를 권장하며 이미지 태그는 도커 허브에서 여러 태그가 버전 정보처럼 제공된다 ex) FROM ubuntu:20.04 FROM python:3.9-slim-buster |
MAINTAINER | 일반적으로 이미지를 빌드한 작성자 이름과 이메일을 작성한다. ex) MAINTAINER kevin.lee hylee@dshub.cloud |
LABEL | 이미지 작성 목적으로 버전, 타이틀, 설명, 라이선스 정보 등을 작성한다. ex) LABEL purpose = 'Nginx for webser' LABEL version = '1.0' |
RUN | 설정된 기본 이미지에 패키지 업데이트, 각종 패키지 설치, 명령 실행 등을 작성한다. 1개 이상 작성 가능합니다. ex) RUN apt update RUN apt -y install vim |
CMD | 생성된 이미지를 컨테이너로 실행할 때 실행되는 명령이고, ENTRYPOINT 명령문으로 지정된 커맨드에 디폴트로 넘길 파라미터를 지정할 때 사용된다. |
ENTRYPOINT | CMD와 마찬가지로 생성된 이미지가 컨테이너로 실행될 때 사용되지만, 컨테이너가 실행될 때 명령어 및 인자 값을 전달하여 실행한다는 점이 다릅니다.여러 개의 CMD를 사용하는 경우 ENTRYPOINT 명령문과 함께 사용합니다. |
COPY | 호스트 환경의 파일, 디렉터리를 이미지 안에 복사하는 경우 작성한다. ex) COPY index.html /usr/share/nginx/html |
ADD | 호스트 환경의 파일, 디렉터리를 이미지 안에 복사하는 경우뿐만 아니라 URL 주소에서 직접 다운로드하여 이미지에 넣을 수도 있습니다. |
VOLUME | 볼륨을 이미지 빌드에 미리 설정하는 경우 작성합니다. VOLUME으로 지정된 컨테이너의 경로의 볼륨의 기본 경로 /var/lib/docker와 자동으로 연결됩니다. ex) VOLUME /var/log VOLUME /var/www/html |
STOPSIGANL | docker stop 명령은 컨테이너에게 SIGTERM을 보내 정지합니다. 이때 다른 시그널을 넣고자 하는 경우 작성합니다. ex) STOPSIGNAL SIGKILL |
HEATHCHECK | 컨테이너의 프로세스 상태를 체크하고자 하는 경우에 작성합니다. |
Dockerfile 빌드
- 이미지 빌드
docker build [옵션] 이미지명:[태그] 경로 | URL | 압축 파일(tar | tar.gz)
- 옵션: 도커 문서에는 많은 옵션이 있습니다. 주로 사용하는 옵션은 2개정도 있습니다.
- -t:(tag) "이미지명:태그"를 지정합니다
- -f:(file) Dockerfile이 아닌 다른 파일명을 사용하는 경우입니다.
- 이미지명:[태그]
- 생성할 이미지 이름과 태그를 지정합니다.
- 버전관리 차원으로 사용됩니다.
- URL
- Dockerfile이 포함된 깃허브 URL을 제공하는 경우 등이 있습니다.
- docker build -t phpserver:2.0 github.com/brayanlee/docker-phpserver
- 압축 파일
- 압축 파일 내에 Dockerfile이 포함된 경우입니다.
- docker build -f app1/Dockerfile http://server/app1.tar.gzDockerfile 작성 라이프사이클
- Dockerfile은 인프라 구성을 위해 필요한 명령을 담은 일반 텍스트 문서입니다. docker build 명령을 통해 Dockerfile에 작성한 명령을 순서대로 읽으며 자동으로 이미지를 빌드합니다. 이때 주의할 것은 이미지 빌드는 사용자와의 대화식 처리가 아닌 자동화 빌드라는 것입니다.
'Cloud > Docker&Containers' 카테고리의 다른 글
가상머신(Virtual machine)과 컨테이너(Containers) (0) | 2022.11.23 |
---|