* 온프레미스(on-premise): 기업이 데이터 센터를 보유하고 시스템 구축부터 운영까지 모두 수행하는 방식을 온프레미스라고 합니다. 반면 클라우드는 데이터 센터를 보유하지 않아서 탄력적인 인프라 구성이 가능하고 서버나 네트워크 등 초기 시스템 투자에 드는 비용이 적은 대신 시간이 지날 수록 온프레미스에 비해 유지비용이 많이 발생합니다.
* 도커 컨테이너: 도커 이미지가 메모리 위에 상주하여 실제 코드가 수행되는 프로세스
* 도커 이미지: 사용자가 실행할 코드가 들어있는 바이너리. 한번 생성하면 수정이 불가능
* 컨테이너는 휘발성 프로세스 입니다. 컨테이너 내부의 파일시스템에 파일로 저장하였다 하더라도 컨테이너 삭제시 모든 데이터가 사라집니다. 그렇기 때문에 설치하더라도 컨테이너를 종료하면 설치된 패키지가 없어집니다.
* 도커파일 작성
도커이미지를 생성하기 위해서는 Dockerfile이라는 텍스트 문서를 작성해야 합니다.
사용자는 Dockerfile에 특정 명령을 기술하여 원하는 도커이미지를 생성합니다.
특정명령이란,
- Dockerfile에 기반이미지를 지정
- 원하는 소프트웨어 및 라이브러리를 설치하기 위한 명령을 기술
- 컨테이너 실행시 수행할 명령을 기술하는 것
Dockerfile 기초
1. 도커빌드
docker build <PATH> -t <IMAGE_NAME>:<TAG>
ex) docker build . -t hello:1
[DEV][ sfs@localhost /home/sfs/dock ]
$ docker run hello:1
hello guest, my version is 1.0
[DEV][ sfs@localhost /home/sfs/dock ]
$ docker run hello:1 pwd
/root
[DEV][ sfs@localhost /home/sfs/dock ]
$ docker run -e my_ver=1.5 hello:1
hello guest, my version is 1.5
[DEV][ sfs@localhost /home/sfs/dock ]
2. Dockerfile 심화
ARG
Dockerfile 안에서 사용할 수 있는 매개변수를 정의합니다. 파라미터로 넘겨지는 변수의 값에 따라, 생성되는 이미지 내용을 바꿀 수 있습니다.
# Dockerfile
FROM ubuntu:18.04
RUN apt-get update \
&& apt-get install -y \
curl \
python-dev
ARG my_ver=1.0
WORKDIR /root
COPY hello.py .
ENV my_ver $my_ver
CMD ["python", "hello.py", "guest"]
ARG 지시자를 이용하여 my_ver이라는 변수를 생성합니다. 이미지 빌드시 --build-arg 옵션을 이용하여 ARG값을 덮어 씌울 수 있습니다.
CMD와 ENTRYPOINT 차이점
CMD는 쉽게 이해하자면, default command라고 생각하면 됩니다. 사용자가 이미지를 실행할 때 별다른 명령을 파라미터로 넘겨주지 않으면 default로 실행되는 명령이고 언제든지 override할 수 있습니다.
반대로 , ENTRYPOINT는 이미지를 실행가능한 바이너리로 만들어주는 지시자 입니다. 이미지 실행시 무조건호출되고 파라미터를 전달하게 되면 해당파라미터가 그대로 ENTRYPOINT의 파라미터로 전달됩니다.
Volume
컨테이너는 휘발성 프로세스이기 때문에 컨테이너 내부의 데이터를 영구적으로 저장할 수 없습니다.
컨테이너의 데이터를 지속적으로 보관하기 위해서는 볼륨이라는 것을 사용합니다.
컨테이너 실행시 로컬호스트의 파일시스템을 컨테이너와 연결하여 필요한 데이터를 로컬호스트에 저장할 수 있습니다.(볼륨마운트)