도커 ( Docker )
[ 도커(Docker)란 무엇인가? ]
도커는 컨테이너 기반의 오픈소스 가상화 플랫폼을 말한다.
컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있으며,
이를 활용하여 환경에 구애받지 않고 어플리케이션을 신속하게 배포 및 확장할 수 있다.
즉, 어떤 환경의 PC나 서버에서도 안정적으로 구동할 수 있게 도와주는 툴인 것이다.
[ 도커의 특징 ]
Hyper-V를 통해 게스트 OS 환경 위에서 어플리케이션이 구동되는 가상 머신(Virtual Machine)과 달리 도커는 게스트 OS가 필요 없이 어플리케이션을 구동하는데 필요한 패키지만 존재한다면 구동시킬 수 있다.
도커의 컨테이너는 리눅스 자체 기능을 사용하여 프로세스 단위로 격리 환경을 만들기 때문에 성능 손실이 거의 없다는 장점이 있다. 또한, 가상머신과 달리 어플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 용량이 매우 작고, 이미지로 만들어 배포하는 시간이 매우 빠른 장점도 있다.
[ 도커의 구조 ]

도커도 일반적인 다른 서버와 마찬가지로 물리 서버 + 운영체제가 존재한다.
일반적인 서버는 운영체제 위에 프로그램 또는 데이터가 직접 올라가지만, 도커는 운영체제 위에 도커 엔진이 작동하고
그 위에서 컨테이너들이 동작하는 방식이다.
[ 도커 파일 ]
도커 파일은 도커에서 이미지를 생성하기 위한 용도로 작성하는 파일을 말한다.
도커 파일에는 컨테이너에 설치해야하는 패키지, 소스코드, 명령어, 환경변수 등이 들어있는 하나의 파일이다.
이를 빌드하면 자동으로 도커 이미지가 생성된다.

도커 파일의 구성
# FROM : 베이스 이미지 지정
# COPY : 현재 경로에 존재하는 파일들을 모두 추가
# WORKDIR : 작업 디렉토리 변경. cd 와 같은 기능
# RUN : 명령어 실행
# CMD : 컨테이너 시작 시 실행되는 명령어이며, 한 번만 사용 가능
기본적인 구성은 아래와 같다.
FROM {이미지 이름} {태그}
RUN 추가 명령어
CMD ["echo", "hello world"]
이렇게 만들어진 도커 파일을 build 하면 이미지가 생성이 되는 것이다.
docker build [옵션] <도커파일경로>
만약, 삭제하고 싶다면 이미지를 확인한 후, 삭제하면 된다.
docker images
docker rmi [이미지 id]
[ 도커 컴포즈 ]
도커 컴포즈 (Docker Compose) 는 여러 개의 컨테이너로 이루어진 시스템을 정의하고 실행하기 위한 도구이다.
컴포즈를 사용하면 YAML 파일을 사용하여 어플리케이션의 서비스를 구성할 수 있고,
명령어 한 번으로 시스템 전체를 실행하고 삭제할 수 있다.
컴포즈의 구조
컴포즈의 파일명은 docker-compose.yml 이다.
컴포즈 파일을 작성하는 법은 다음과 같다.
- 컴포즈 버전을 명시하고, services, networks, volumes를 기재한다.
- 상하 관계는 들여쓰기로 표시한다.
- 여러 항목을 기재하려면 앞에 '-'를 기재한다.
- 주석은 # 를 사용한다.
- 문자열은 ' ' 혹은 " " 로 표시한다.
| services | 컨테이너 정의 |
| networks | 네트워크 정의 |
| volumes | 볼륨 정의 |
| image | 이미지 지정 |
| ports | 포트 설정 |
| environment | 환경변수 설정 |
| depends_on | 다른 서비스에 대한 의존 관계 정의 |
| restart | 컨테이너 종료 시 재시작 여부 |
위 표는 일부 항목들에 대한 설명이다.
이외에도 많은 항목들이 존재하기 때문에, 자세한 설명은 공식 문서를 참조하는 것이 좋을 것이다.
[ 도커 컴포즈 공식 문서 ]
[ 도커 컴포즈 명령어 ]
이미지와 컨테이너 생성
docker-compose up
이미지 실행 종료 및 컨테이너 삭제
docker-compose down
볼륨 포함 삭제
docker-compose down -v
[ 도커 명령어 ]
컨테이너 생성
docker create <옵션> --name <컨테이너 이름> <이미지 Repository>
컨테이너 삭제
docker rm <컨테이너 이름>
컨테이너 접속
docker exec -it <컨테이너 이름> /bin/bash
컨테이너 빠져나오기 - 01
1) 종료하면서 빠져나오기
exit 또는 Ctrl+D
2) 가동되는 상태에서 접속만 종료하기
Ctrl + P 후 Q
컨테이너 실행 또는 종료
docker start <컨테이너 이름>
docker stop <컨테이너 이름>
컨테이너 목록 확인 (가동 중)
docker ps
모든 컨테이너 목록 확인
docker ps -a