Post

오토에버 클라우드 2기 32일차

오토에버 클라우드 2기 32일차

도커(Docker) 명령어 및 개념 상세 설명

1. 도커 개요

컨테이너 기술

  • 애플리케이션과 그 실행에 필요한 모든 것(라이브러리, 종속성 등)을 ‘컨테이너’라는 표준화된 단위로 패키징하는 기술

  • 이를 통해 어떤 환경에서든 애플리케이션을 빠르고 일관되게 실행 가능

이미지와 컨테이너

  • 이미지(Image): 컨테이너 실행에 필요한 파일과 설정값을 포함한 읽기 전용 템플릿, 컨테이너를 생성하기 위한 설계도

  • 컨테이너(Container): 이미지를 기반으로 생성된 실행 가능한 인스턴스, 격리된 환경에서 애플리케이션을 실행

 

2.주요 명령어

docker run: 컨테이너 생성 및 실행

  • 이미지를 사용하여 새로운 컨테이너를 생성하고 실행하는 명령어

주요 옵션

  • -d (–detach): 컨테이너를 백그라운드 모드로 실행하고 컨테이너 ID를 출력

  • -i (–interactive): 컨테이너의 표준 입력(stdin)을 활성화, 컨테이너와 상호작용 가능

  • -t (–tty): 가상 TTY(터미널)를 할당, 일반적으로 -i와 함께 사용하여 컨테이너의 셸에 접속
    • 사용 예: docker run -it ubuntu /bin/bash -> ubuntu 이미지로 컨테이너를 실행하고 내부 셸에 접속
  • -p (–publish): 호스트와 컨테이너의 포트를 연결 (포트 포워딩)
    • 사용 예: docker run -p 8080:80 nginx -> 호스트의 8080 포트를 컨테이너의 80 포트와 연결
  • –name: 컨테이너에 고유한 이름을 부여
    • 사용 예: docker run –name my-web-server nginx
  • -v (–volume): 호스트의 디렉터리나 도커 볼륨을 컨테이너의 디렉터리에 마운트

  • –rm: 컨테이너 실행이 종료될 때 자동으로 컨테이너를 삭제

 

docker ps: 컨테이너 목록 확인

  • 현재 실행 중인 컨테이너 목록을 출력

주요 옵션

  • -a (–all): 실행 중이지 않은 컨테이너를 포함한 모든 컨테이너 목록을 출력

  • -q (–quiet): 컨테이너 ID만 출력

 

docker stop: 컨테이너 중지

​ 실행 중인 컨테이너를 정상적으로 중지시킴

활용 예

  • docker stop [컨테이너 ID 또는 이름]

  • 모든 컨테이너 중지: docker stop $(docker ps -a -q)

    • docker ps -a -q가 모든 컨테이너 ID 목록을 반환하고, docker stop이 이 목록을 받아 모든 컨테이너를 중지시킴

 

docker rm: 컨테이너 삭제

  • 중지된 상태의 컨테이너를 삭제

활용 예

  • docker rm [컨테이너 ID 또는 이름]
  • 모든 컨테이너 삭제: docker rm $(docker ps -a -q)
    • docker stop과 유사한 방식으로, 모든 컨테이너 ID를 docker rm에 전달하여 삭제
  • 실행 중인 컨테이너 강제 삭제: docker rm -f [컨테이너 ID]

 

docker images: 이미지 목록 확인

  • 로컬 시스템에 저장된 도커 이미지 목록을 출력

 

docker rmi: 이미지 삭제

  • 로컬 시스템에 저장된 이미지를 삭제

활용 예

  • docker rmi [이미지 ID 또는 이름:태그]

  • 사용하지 않는 모든 이미지 삭제: docker image prune -a

 

docker exec: 실행 중인 컨테이너에 명령어 전달

  • 실행 중인 컨테이너 내부에서 특정 명령어를 실행

활용 예

  • docker exec -it [컨테이너 ID 또는 이름] /bin/bash -> 실행 중인 컨테이너의 셸에 접속

 

docker logs: 컨테이너 로그 확인

  • 컨테이너의 표준 출력(stdout) 로그를 확인

활용 예

  • docker logs [컨테이너 ID 또는 이름]
  • -f (–follow): 실시간으로 로그를 스트리밍

 

3. 데이터 관리 (마운트)

컨테이너는 삭제 시 내부 데이터가 함께 사라지므로, 데이터를 영구적으로 보존하기 위해 마운트 사용

1. 볼륨 마운트 (Volume Mount)

도커가 관리하는 호스트의 특정 영역(/var/lib/docker/volumes/)에 데이터를 저장

컨테이너와 독립적으로 생성 및 관리되므로 가장 권장되는 방식

사용법: docker run -v [볼륨 이름]:[컨테이너 경로] [이미지]

예시: docker run -v my-volume:/app/data nginx

 

2. 바인드 마운트 (Bind Mount)

호스트 머신의 파일이나 디렉터리를 컨테이너에 직접 마운트

호스트의 경로를 직접 지정하므로 개발 환경에서 소스 코드 공유 시 유용함

사용법: docker run -v [호스트 절대 경로]:[컨테이너 경로] [이미지]

예시: docker run -v /home/user/project:/usr/src/app my-app

 

3. 임시 마운트 (tmpfs Mount)

데이터를 호스트의 메인 메모리에만 저장

컨테이너가 중지되면 데이터는 완전히 사라짐

보안 정보나 임시 상태 파일 등 비영구적인 데이터를 다룰 때 사용

사용법: docker run –mount type=tmpfs,destination=[컨테이너 경로] [이미지]

예시: docker run –mount type=tmpfs,destination=/app/temp nginx

 

4. Dockerfile

도커 이미지를 생성하기 위한 지침을 담은 텍스트 파일

docker build 명령어를 통해 Dockerfile을 읽어 자동화된 이미지 생성을 수행

주요 명령어

  • FROM: 베이스가 될 이미지를 지정

  • WORKDIR: 명령어(RUN, CMD 등)를 실행할 기본 디렉터리 설정

  • COPY: 호스트의 파일이나 디렉터리를 이미지 파일 시스템으로 복사

  • ADD: COPY와 유사하지만 압축 파일 해제, URL에서 파일 다운로드 등 추가 기능 보유

  • RUN: 이미지 빌드 과정에서 실행할 명령어 (소프트웨어 설치 등)

  • CMD: 컨테이너가 시작될 때 실행될 기본 명령어, Dockerfile 내에서 한 번만 사용 가능

  • ENTRYPOINT: CMD와 유사하지만, 컨테이너 실행 시 전달된 인자를 받아 스크립트처럼 동작

  • EXPOSE: 컨테이너가 외부와 통신할 포트를 지정

  • ENV: 환경 변수 설정

This post is licensed under CC BY 4.0 by the author.