Docker에 대해 공부를 해보고, 실제 Django에서 Docker를 어떻게 사용하는지 알아보도록 했다.
Docker, 도커
- 컨테이너(Container) 기반의 가상화 플랫폼
- 개발 및 배포, 서비스 운영에서 실행환경, 코드, 라이브러리, 설정 파일 등을 관리하기 위한 도구
- 독립된 환경을 이용하여 하드웨어를 효율적으로 관리 및 활용하는 기술
- Container, Image, Registry로 구성되어 있다.

Docker에서 중요한 핵심 개념은 컨테이너(Container)와 이미지(Image)라고 할 수 있는데, Docker의 개념 3가지에 대해서 짧게 알아보도록 하자.
Docker 개념 3가지
1. Container
- 애플리케이션의 개발, 실행, 배포 등을 위한 표준화된 단위의 패키지
- 해당 애플리케이션이 한 환경에서 빠르고 안정적으로 실행될 수 있게 해주는 표준 소프트웨어 장치
2. Image
- 컨테이너(Container)를 빌드하는 데 사용되는 읽기 전용 템플릿
- 애플리케이션을 저장하고 보내는 데 사용된다.
- 이미지는 변경할 수 없으며, 이미지를 변경하기 위해서는 새로운 이미지를 생성해야 된다.
3. Registry
- 이미지들을 업로드 및 다운로드하기 위한 공간 (push & pull)
- 이미지의 액세스 관리 및 보안 개선을 지원하고, 이미지 배포를 관리할 수 있다.
앞서 Docker에 대한 개념들에 대해서 알아보았다.
이제 실제 Docker에서 사용하는 명령어들 중 Docker Container에서 사용하는 명령어에 대해서 알아보도록 하자.
Docker Container 실행하기
> docker run [options] [image_name] [command]
도커를 실행하는 명령어로는 'docker run' 명령어가 있다.
이때 들어가는 옵션들 중 간단하게 사용되는 옵션으로 -p 옵션과 -d 옵션을 사용한다.
-p 옵션은 '-p [host_port]:[contaioner_port]'와 같은 형태로 사용하는데, 해당 명령어는 host_port와 container_post를 연결해주는 옵션이다.
-d 옵션은 실행시킨 Docker Container를 백그라운드로 실행할 수 있게 해주는 옵션이다.
이외에도 더 많은 Docker 실행 옵션을 알아보고 싶다면 다음 명령어를 사용해주면 된다.
Docker Container 실행 명령어들 확인하기
> docker run --help

다음은 현재 실행 중인 Docker Container를 확인하고 싶을 때 사용하는 명령어이다.
실행 중인 Docker Container 확인하기
> docker ps
만약 해당 Docker Container가 실행이 중지된 상태일 때 'docker ps' 명령어만 사용하게 되면 표시가 되지 않는다.
중지된 Docker Container를 포함한 모든 Docker Container를 확인하고 싶다면 'docker ps -a' 명령어를 사용하면 된다.
위 명령어들을 사용한다면 Docker Container를 실행하고 해당 프로세스를 확인하는 것까지 알아볼 수 있었다.
이제 해당 Docker Container를 중지시키거나 중지된 Docker Container를 다시 시작하는 명령어들에 대해서 알아보자.
Docker Container 중지하기
> docker stop [container_id 또는 container_name]
Docker Container 강제로 중지하기
> docker kill [container_id 또는 container_name]
Docker Container 다시 시작하기
> docker restart [container_id 또는 container_name]
이렇게 Docker Container를 사용하고 난 뒤 사용 여부가 없어진 Container를 삭제하고 싶다면 다음 명령어를 사용해주면 된다.
Docker Container 삭제하기
> docker rm [container_id]
이외에도 많은 Docker 명령어가 존재하는데, 더 많은 Docker 명령어 레퍼런스를 알아볼 수 있는 사이트 링크를 남겨두겠다.
도커 명령어 레퍼런스 Link : https://docs.docker.com/engine/reference/commandline/cli/
Use the Docker command line
docs.docker.com
앞서 Docker Container에 대해 자세하게 알아보는 과정을 거쳤다.
다음으로는 Docker Image에 대해 알아보도록 하자.
Docker Image는 보통 Dockerfile이라는 이름을 가진 파일 내에서 다음 명령어들과 같이 사용된다.
Dockerfile
- Docker Image를 생성하기 위한 파일
명령어
- FROM : base 이미지를 지정, 보통 Dockerfile의 가장 최상단에 위치한다.
- ADD : 호스트 머신에 있는 파일 또는 폴더를 특정 위치에 저장한다.
- RUN : 명령 쉘(Shell)과 같이 커맨드를 실행하기 위해 사용한다, Docker에서는 보통 특정 소프트웨어를 설치하기 위해 많이 사용된다.
- CMD : 이미지 실행 시 어떤 것이 기본으로 실행될 것인지 정의한다.
명령어 사용 형태
FROM [image:tag]
ADD [file 또는 folder] [path]
RUN [command]
CMD [command]

이외에도 Dockerfile 내에서 사용하는 명령어들은 WORKDIR, ENTRYPOINT, EXPOSE, COPY, ENV, ARG 등이 존재한다.
이제 Docker Image를 빌드하는 명령어에 대해 알아보자.
Docker Image 빌드하기
> docker build [options] [path]
이때 들어가는 옵션들 중 -t 옵션이 있는데, 해당 옵션은 '-t [image_name]:[tag]' 형태로 사용할 수 있으며 [tag]를 붙이지 않을 경우 자동으로 latest로 설정이 된다.
이외에도 더 많은 명령어를 알고 싶다면 Docker Container 옵션들을 확인하는 것처럼 다음 명령어를 사용하면 된다.
Docker Image 빌드 옵션 확인하기
> docker build --help

Docker Image를 빌드하고 난 뒤 생성된 이미지들을 확인해보고 싶다면 다음 명령어를 사용한다.
Docker Image 확인하기
> docker images
만약 사용을 마쳤거나 필요가 없어진 Docker Image가 있다면 다음 명령어를 사용하여 삭제를 진행하면 된다.
Docker Image 삭제하기
> docker rmi [image_name]:[tag] 또는 [image_id]
다음으로는 volume과 bind mount에 대해 알아보도록 하자.
해당 기능들은 Docker Container가 종료될 때 DB 데이터가 함께 사라지게 되는데, 해당 DB 데이터를 유지하거나 다른 Container끼리 데이터를 공유하기 위해 사용하는 방법이다.
volume 생성하기
> docker volume create [volume_name]
volume 목록 확인하기
> docker volume ls
확인하고 싶은 volume 상세 정보 확인하기
> docker volume inspect [volume_name]
bind mount 사용하기
> docker run -v [host_port]:[container_port] [image_name]
이러한 방법들로 DB 데이터를 관리할 수 있는데, 해당 두 가지 방법들에는 각 차이점이 존재한다.
volume은 호스트 시스템의 Docker Storage에 새로운 디렉토리를 생성하여 관리한다는 점이고, bind mount는 호스트 시스템의 파일 또는 디렉토리가 컨테이너에 직접 마운트 된다는 차이점이 있다.
bind mount에 비해 volume이 가지는 장점들이 존재하는데, 자세한 내용들을 알아보고 싶다면 다음 사이트 링크에서 확인을 해보도록 하자.
https://docs.docker.com/storage/volumes/
Use volumes
docs.docker.com
다음으로는 Docker Compose에 대해 알아보도록 하자.
Docker Compose
- 다수의 Docker Container를 정의하고 실행하기 위한 도구
- yaml 파일을 사용하여 필요한 옵션들을 설정하고 Container를 실행할 수 있다.
- yaml 파일 이름을 docker-compose.yaml으로 만들어주면 Docker Compose 사용 시 기본으로 해당 파일을 사용하도록 한다.
Docker Compose를 사용하기 위해 docker-compose.yaml 파일 내에 설정해주는 옵션들에 대한 예시는 다음과 같다.
# docker-compose.yaml
version: "3.9"
services:
flask:
build:
context: .
ports:
- "5000:5000:
mongo:
image: mongo:latest
ports:
- "27017:27017"
Docker Compose는 다수의 Container를 지원하고자 만든 것이기 때문에 하나의 yaml 파일의 설정을 통해 network를 사용할 수 있다는 장점이 있다.
해당 docker-compose.yaml 파일을 사용하여 설정을 마친 뒤 Docker Container를 띄우거나 삭제하고 싶다면 다음 명령어를 사용하면 된다.
Docker Container 띄우기
> docker-compose up
Docker Container 삭제하기
> docker-compose down
Docker에 대해 짧게 알아보는 시간을 가졌다.
이전에도 Docker에 대해 공부하는 시간을 가졌었는데, 이번에는 짧게 다뤄본 것 같다.
전에 공부했던 내용을 알고 싶다면 다음 링크에서 알아보도록 하자.
Docker 1 : https://sdrtst.tistory.com/81
[TIL] 2022.07.11 (Docker, 도커(1))
현재 프로젝트 진행 기간이지만 Docker, 도커 강의가 주어진 상태이다. 도커 강의가 주어진 지금 해당 강의 내용을 공부하면서 정리를 하게 되었는데, 오늘은 팀원분들과 상의 하에 도커 강의를
sdrtst.tistory.com
Docker 2 : https://sdrtst.tistory.com/82
[TIL] 2022.07.12 (Docker, 도커(2))
오늘은 어제에 이어서 Docker에 대해 공부하는 시간을 가져보았다. 여태까지 도커에 대해 명령어를 쳐보면서 container, image, network, volume 등을 만들어보고 공부를 하는 시간을 가졌다. 이제 사용을
sdrtst.tistory.com
'개발 > Docker' 카테고리의 다른 글
| [Docker] Django 프로젝트를 EC2에 Docker 적용하기 (0) | 2022.08.09 |
|---|---|
| [Docker] Django에서 Docker 사용해보기 (0) | 2022.08.08 |