오토에버 클라우드 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: 환경 변수 설정