리눅스 컨테이너를 기반으로 하여 특정한 서비스를 패키징하고 배포하는데 유용한 오픈소스 프로그램
팀원 및 서버와 개발 환경을 쉽게 동기화할 수 있다.
→ 기존에 환경 설정으로부터 겪던 고충을 말끔히 해결
Docker Image란 컨테이너를 실행할 수 있는 실행파일, 설정 값 들을 가지고 있는 것
→ Image를 컨테이너에 담고 실행을 시킨다면 해당 프로세스가 동작
Image를 실행한 상태, 응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징 or 캡슐화하여 격리된 공간에서 프로세스를 동작시키는 기술
[쉬운 예시]
Docker Image를 레시피로 생각, Docker container를 레시피로 만든 케이크로 생각
→ 하나의 레시피로 많은 케이크를 구울 수 있는 것처럼, 하나의 Docker Image로 여러 개의 Docker Container를 만들 수 있음.
하지만, 레시피를 바꿔도 기존 케이크의 맛은 변하지 않고, 새로 구운 케이크만 수정된 레시피를 사용.
→ Docker Image를 변경해도 이미 실행 중인 Docker Container에는 영향을 미치지 않음
Dockerfile은 Docker 이미지를 빌드하기 위한 설정 파일입니다. Dockerfile은 이미지를 빌드할 때 필요한 모든 정보를 제공합니다. Dockerfile은 다음과 같은 명령어로 작성됩니다.
- FROM: Docker 이미지를 빌드할 때 사용할 베이스 이미지를 설정합니다.
- RUN: Docker 이미지를 빌드할 때 실행할 명령어를 설정합니다.
- COPY: 호스트 머신의 파일을 Docker 이미지 내부로 복사합니다.
- CMD: Docker 컨테이너를 실행할 때 실행할 명령어를 설정합니다.
Dockerfile 안에서의 명령어는 Dockerfile을 실행하는 환경에서 실행되며, 이미지를 빌드할 때마다 실행됩니다. 따라서 Dockerfile을 사용하여 이미지를 빌드할 때마다 동일한 이미지를 생성할 수 있습니다.
예시)
# Dockerfile
FROM ubuntu:latest
RUN apt-get update && apt-get install -y \\
python3 \\
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY hello-world.py abc.py # local에 있는 hello-world.py를 이미지 안에 abc.py파일로 복사해줌
CMD ["python3", "abc.py"] # = python abc.py
이 Dockerfile은 Python 애플리케이션을 위한 이미지를 빌드합니다. 우분투 최신 버전을 베이스 이미지로 사용하며, Python 및 필요한 라이브러리를 설치합니다. 그런 다음 애플리케이션 코드를 이미지에 복사하고, 필요한 라이브러리를 설치합니다. 마지막으로, 컨테이너가 시작될 때 Python 애플리케이션을 실행합니다.
$ docker build -t [만들고싶은 이미지]
Docker Hub에서는 이미지를 저장하고 관리해줍니다. 위에서도 많은 회사들이 Docker로 소프트웨어를 배포하기 시작했고 공개이미지들을 공유할 수 있습니다. Docker Hub를 이용하면 누구나 쉽게 이미지를 만들고 배포할 수 있습니다. 또한, 손쉽게 pull 받아 컨테이너에 적용 시킬 수 있습니다.
$docker run -it --name [container이름] [image 이름]