Docker 개념 및 주요 명령어

이종경·2025년 4월 18일
0
post-thumbnail

Docker란?

Docker는 컨테이너 기반의 가상화 플랫폼으로, 애플리케이션을 격리된 환경에서 실행할 수 있게 해줍니다. 이를 통해 애플리케이션을 다양한 환경에서 일관되게 실행하고 배포할 수 있습니다.

Docker 개념

1. 컨테이너 (Container)

  • Docker 컨테이너는 애플리케이션 및 그 의존성(라이브러리, 환경 설정 파일 등)을 포함하는 격리된 실행 환경입니다. 각각의 컨테이너는 독립적으로 실행되며, 호스트 시스템의 자원을 공유합니다.

2. 이미지 (Image)

  • Docker 이미지는 애플리케이션을 실행하기 위한 파일 시스템 스냅샷입니다. 애플리케이션, 라이브러리, 설정 파일, 의존성 등이 포함되어 있으며, 컨테이너는 이미지를 기반으로 실행됩니다.
  • 이미지는 읽기 전용이고, 컨테이너는 이미지를 기반으로 실행되면서 읽기/쓰기가 가능합니다.

3. Dockerfile

  • Dockerfile은 이미지를 만들기 위한 설정 파일입니다. 이 파일 안에는 이미지 빌드를 위한 단계별 명령어들이 포함됩니다. 예를 들어, 베이스 이미지 선택, 애플리케이션 복사, 패키지 설치 등이 포함될 수 있습니다.
  • FROM : 베이스 이미지 지정 (필수)
  • WORKDIR : 작업 디렉토리 지정 (cd 명령어)
  • COPY : 호스트에서 컨테이너로 파일 및 디렉토리 복사
  • RUN : 쉘 명령어 수행
  • ENV : 환경 변수 설정
  • ARG : 빌드 시 인자 설정 (빌드 후 제거)
  • CMD : 컨테이너 시작 시 실행할 기본 명령어
  • ENTRYPOINT : CMD 와 비슷하나, 고정 명령

.dockerignore

  • .gitignore 처럼 docker build 시 Container 내부에 복사하지 않도록 지정하는 파일
  • dockerfile 과 같은 경로에 위치
  • 민감 정보 유출 방지
  • 불필요한 파일을 제외하여 빌드 속도 상승

4. Docker Hub

  • Docker Hub는 Docker 이미지의 레지스트리입니다. 사용자는 여기서 이미지를 다운로드하거나, 자신이 만든 이미지를 업로드할 수 있습니다.

5. 도커 네트워크

도커의 기본 네트워크 모드는 Bridge이고 이외에 Host, None 이 추가적으로 존재합니다. 외에도 macvlan, ipvlan, overlay와 같은 네트워크 플러그인을 사용할 수 있습니다.

docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
5d4ec64ed746   bridge    bridge    local
71da3212e9dc   host      host      local
90a304de3e67   none      null      local

docker info | grep Network
  Network: bridge host ipvlan macvlan null overlay

도커 네트워크

Bridge 모드

도커에서 기본적으로 쓸 수 있는 네트워크입니다.

  • 컨테이너 기본 생성 시 자동으로 docker0 브리지를 사용하게 됩니다.
  • 기본 172.17.0.0/16 대역을 컨테이너가 사용하며, 대역 변경 설정이 가능합니다.
  • 도커 컨테이너 간 상호 통신을 허용하며, 호스트 컨테이너 간 통신 또한 허용합니다

Host 모드

호스트의 환경을 그대로 사용하는 것을 의미합니다.

  • 애플리케이션 별도 포트 포워딩 없이 바로 서비스 가능합니다.
  • 컨테이너의 호스트 이름도 호스트 머신의 이름과 동일합니다.

None 모드

아무런 네트워크를 쓰지 않는 것을 의미합니다.

  • 외부와의 연결이 단절됩니다.
  • 컨테이너 내부에 lo 인터페이스만 존재합니다.

6. 멀티스테이지 빌드

  • 멀티 스테이지 빌드
    • 빌드 만을 위한 파일과 어플리케이션 실행을 위한 파일을 분리하여 실행 컨테이너 크기 축소

7. 멀티 플랫폼 / 아키텍처

  • 하나의 빌드 이미지, 태그를 통해 각기 다른 CPU 아키텍처에서 사용할 수 있는 이미지를 생성하는 것

8. Docker Compose

  • Docker Compose는 여러 개의 Docker 컨테이너를 정의하고, 동시에 실행할 수 있도록 도와주는 도구입니다. 여러 서비스로 구성된 애플리케이션을 쉽게 배포하고 관리할 수 있습니다.
  • linux/amd64, linux/arm64, windows/amd64

Docker CLI

Basic

버전 확인

  • Docker의 현재 버전 확인
docker --version

Image

이미지 빌드

  • Dockefile을 사용해 이미지를 빌드
docker build -t <이미지이름>:<태그> .(위치)

이미지 다운로드

  • Docker Hub에서 이미지 다운로드
docker pull <이미지이름>

이미지 목록 확인

docker images

이미지 제거

docker rmi <이미지이름>

이미지 존재 여부 확인

docker manifest inspect <이미지이름>:<이미지태그>

Container


컨테이너 생성

docker create <이미지이름>:<태그>

이미지 다운 및 컨테이너 생성

  • 이미지를 기반으로 컨테이너를 생성하고 실행
  • docker run -d -p 8080:80 nginx (nginx 이미지로 컨테이너 실행, 80번 포트를 8080번 포트로 매핑)
docker run <옵션> <이미지이름>
# 필수로 알아야 하는 옵션
-d        : [Detach] 백그라운드에서 컨테이너 프로세스 실행 (nohup &)
-i        : [Interactive] 표준입력 연결 (입력) (-it 는 세트)
-t        : [tty] 가상 터미널 생성 - 상호작용 (출력) (-it 는 세트)
--name    : 컨테이너 이름 지정
-p        : [Publish] 호스트 포트와 컨테이너 포트 매핑
--restart : 재시작 정책 [always 항상, on-failure 에러 코드 0이 아닌 경우, unless-stopped 수동으로 중지하지 않는 한]
-v        : [volume] 호스트 볼륨 마운트

# 알아두면 좋은 옵션
-u        : [user] 컨테이너 내부 실행 유저
--rm      : 컨테이너 종료 시 자동 삭제, 임시 사용 [restart 와는 동시 사용 불가]

## 참고
# --restart 와 --rm 은 같이 사용할 수 없다.
# -d 와 -it 는 함께 사용할 수 없다. (docker exec -it 활용)

컨테이너 목록 조회

  • 실행중인 컨테이너 목록 조회
  • -a 옵션으로 모든 컨테이너 조회
docker ps <옵션>

컨테이너 실행 중지

docker stop <컨테이너ID>

컨테이너 삭제

docker rm <컨테이너ID>
docker rm $(docekr ps -aq) # 전체 삭제

컨테이너 로그 확인

docker logs <컨테이너ID>

실행중인 컨테이너에 명령어 실행

  • docker exec -it <컨테이너ID> bash (컨테이너 내에서 bash 쉘 실행)
docker exec -it <컨테이너ID> <명령어>
profile
작은 성취들이 모여 큰 결과를 만든다고 믿으며, 꾸준함을 바탕으로 개발 역량을 키워가고 있습니다

0개의 댓글