개발노트

25.02.27 도커와 주요 명령어 본문

DevOps

25.02.27 도커와 주요 명령어

ddong-kka 2025. 2. 27. 23:51

개요

도커에 대해 얕게만 알고있어서 간단하게 도커란 무엇인지 컨테이너가 무엇인지 정리하고

주요 명령어를 정리해본다

 

 

🐳 도커 ( Docker )

컨테이너 기반의 가상화 플랫폼으로, 애플리케이션과 그 실행 환경( 라이브러리, 종속성 등) 을 하나의 컨테이너로 패키징 하여 어디서든 실행할 수 있도록 해주는 도구이다.

 

컨테이너는 가상화에 비해 가볍고, OS에 독립적이며, 빠르게 배포 및 확장이 가능하다는 장점이 있다.

개발 과정에서 다른 라이브러리와 충돌하는 것을 방지가 하지위해 격리된 환경이 필요할 때, 완성된 서비스를 배포할 때,

배포 중인 서비스를 받아와 테스트 실행 할 때도 유용하다.

 


핵심 개념

이미지 ( Image )

  • 컨테이너 실행을 위한 템플릿
  • 애플리케이션과 필요한 실행 환경(운영체제, 라이브러리, 설정 등)을 포함한 불변(Immutable) 파일 시스템
  • 여러 개의 컨테이너를 동일한 이미지로부터 생성 가능
  • 도커 허브 ( Docker Hub)에서 다양한 공식 이미지를 받아와 사용이 가능하다
docker pull nginx  # nginx 이미지를 다운로드

 

컨테이너( Container )

  • 이미지를 실행한 독립된 실행 환경 
  • 컨테이너 내부는 이미지와 동일하지만, 상태 변경이 가능 
  • 프로세스 기반으로 실행되며, 필요할 때마다 빠르게 생성 및 삭제 가능
docker run -d --name my-nginx -p 8080:80 nginx
더보기
더보기
더보기

-d : 백그라운드에서 실행
--name my-nginx : 컨테이너 이름을 지정
-p 8080:80 : 호스트(8080) → 컨테이너(80) 포트 매핑

 

도커 허브(Docker Hub)

  • 도커 이미지 저장소 ( Github처럼 도커 이미지를 공유하는 서비스)
  • 공식 이미지 및 사용자 정의 이미지 업로드 가능
docker login          # 도커 허브 로그인
docker tag my-app mydockerhub/my-app:v1  # 태그 설정
docker push mydockerhub/my-app:v1        # 도커 허브에 푸시

 

Dockerfile

  • 도커 이미지를 생성하기 위한 설정 파일 
  • 컨테이너를 실행하기 위한 환경을 정의 (OS, 패키지 설치, 실행 명령어 등)
# 베이스 이미지 설정
FROM ubuntu:latest

# 패키지 설치
RUN apt-get update && apt-get install -y curl

# 기본 실행 명령어 설정
CMD ["echo", "Hello, Docker!"]
더보기
더보기
더보기

FROM : 기본 이미지 지정
RUN : 컨테이너 빌드 시 실행할 명령어
CMD : 컨테이너가 실행될 때 수행할 기본 명령어

  • 빌드 및 실행
더보기
더보기
더보기

docker build -t my-custom-image .

docker run my-custom-image

 


 

🛠 도커 주요 명령어 정리

도커 기본 명령어

docker --version  # 도커 버전 확인
docker info       # 도커 시스템 정보 확인
docker help       # 사용 가능한 도커 명렁어 목록 출력
docker <명령어> --help # 특정 명령어에 대한 도움말 출력

 

도커 이미지 ( Image ) 관련 명령어

docker images            # 로컬에 저장된 이미지 목록 확인
docker pull <이미지명>    # dockeHub에서 이미지 다운로드
docker search <이미지명>  # dockerHub에서 이미지 검색 
docker rmi <이미지ID>     # 특정 이미지 삭제
docker rmi $(docker images -q) # 모든 이미지 삭제
docker tag <이미지ID> <저장소명:태그> # 이미지에 태그 추가

 

컨테이너 ( Container ) 실행 및 관리

docker run <이미지명>				# 새로운 컨테이너 실행
docker run -d <이미지명>			# 백그라운드 실행
docker run -it <이미지명> bash 		# 컨테이너 내부에서 터미널 실행
docker run --rm <이미지명>			# 컨테이너 종류 자동 삭제
docker run -p 8080:80 <이미지명>	# 포트 매핑하여 실행 ( 호스트:컨테이너 )
docker run --name <이름> <이미지명> # 특정 이름으로 컨테이너 실행
docker run -v /mydata:/data <이미지명> # 볼륨 연결하여 실행

 

예시 )

# 8080 호스트의 80 포트에 my-nginx 라는 이름으로 nginx 이미지를 백그라운드로 실행
docker run -d -p 8080:80 --name my-nginx nginx 

# ubuntu 컨테이너에서 터미널 실행
docker run -it ubuntu bash

 

실행중인 컨테이너 관리

docker ps                     # 현재 실행 중인 컨테이너 목록 조회
docker ps -a                  # 모든 컨테이너 목록 조회
docker stop <컨테이너ID>      # 컨테이너 중지
docker start <컨테이너ID>     # 중지된 컨테이너 시작
docker restart <컨테이너ID>   # 컨테이너 재시작
docker rm <컨테이너ID>        # 컨테이너 삭제
docker rm $(docker ps -aq)    # 모든 컨테이너 삭제

 

예시 )

docker stop my-nginx  # my-nginx 컨테이너 중지
docker rm my-nginx    # my-nginx 컨테이너 삭제

 

컨테이너 내부 접근

docker exec -it <컨테이너ID> bash  # 컨테이너 내부 접속 (Linux)
docker exec -it <컨테이너ID> sh    # Alpine Linux 환경 접근
docker attach <컨테이너ID>         # 실행 중인 컨테이너에 연결
docker cp <컨테이너ID>:<경로> <호스트경로>  # 컨테이너 내부 파일 복사

 

예시 )

docker exec -it my-container bash  # my-container 내부 접근
docker cp my-container:/app/data.txt ./  # 컨테이너에서 파일 가져오기

 

컨테이너 상태 및 로그 확인

docker logs <컨테이너ID>        # 컨테이너 로그 확인
docker logs -f <컨테이너ID>     # 실시간 로그 출력
docker inspect <컨테이너ID>     # 컨테이너 상세 정보 확인
docker stats                   # 실행 중인 컨테이너의 리소스 사용량 확인
docker top <컨테이너ID>        # 컨테이너 내 실행 중인 프로세스 확인
docker diff <컨테이너ID>       # 컨테이너 내부 변경 사항 확인

 

예시 )

docker logs my-container  # 특정 컨테이너 로그 출력
docker stats              # 모든 컨테이너의 CPU, 메모리 사용량 확인

 

도커 네트워크 관리

docker network ls                           # 네트워크 목록 확인
docker network create <네트워크명>           # 사용자 정의 네트워크 생성
docker network inspect <네트워크명>          # 네트워크 상세 정보 확인
docker network connect <네트워크명> <컨테이너명>  # 컨테이너를 네트워크에 추가
docker network disconnect <네트워크명> <컨테이너명>  # 네트워크 연결 해제
docker network rm <네트워크명>               # 네트워크 삭제

 

예시 )

docker network create my-net  # 사용자 네트워크 생성
docker network connect my-net my-container  # 컨테이너 네트워크 연결

 

도커 볼륨 관리 ( 데이터 영구 저장 ) 

docker volume ls               # 볼륨 목록 확인
docker volume create my-vol    # 볼륨 생성
docker volume inspect my-vol   # 특정 볼륨 정보 확인
docker volume rm my-vol        # 특정 볼륨 삭제
docker run -v my-vol:/data ubuntu  # 볼륨을 컨테이너에 마운트하여 실행

 

예시 )

docker volume create data-vol  # 볼륨 생성
docker run -v data-vol:/app ubuntu  # 컨테이너에서 볼륨 사용

 

Dockerfil을 사용한 이미지 빌드

docker build -t <이미지명> .  # 현재 디렉토리의 Dockerfile을 기반으로 이미지 빌드
docker build -t my-app:v1 .   # 특정 태그를 포함하여 빌드
docker history <이미지명>      # 이미지 생성 내역 확인

 

예시 )

도커파일

# Ubuntu 기반 이미지
FROM ubuntu:latest
RUN apt-get update && apt-get install -y curl
CMD ["echo", "Hello, Docker!"]

 

docker 명령어

docker build -t my-ubuntu .
docker run my-ubuntu

 

Docker Compose ( 여러 컨테이너 실행 )

docker-compose up -d    # 모든 서비스 실행 (백그라운드)
docker-compose down     # 모든 서비스 중지 및 컨테이너 삭제
docker-compose logs     # 서비스 로그 출력
docker-compose ps       # 실행 중인 컨테이너 확인

 

예시 ) 

docker-compose.yml

version: '3'
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: postgres
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password

 

docker 명령어

docker-compose up -d  # 웹 + DB 컨테이너 실행
docker-compose down   # 컨테이너 정리

 

 

 

 

자주 사용할 것 같은 명령어들을 간단하게 정리해보았다.

실제로 사용해본적이 별로 없어서 간단한 예제로 실습하면서 익혀봐야겠다.