Docker 치트시트

자주 사용하는 Docker 명령어 파라미터

Page content

다음은 Docker 치트 시트로, 설치를 컨테이너 실행 및 정리까지 아우르는 가장 중요한 명령어와 개념을 다룹니다:

docker logo

이 가이드는 개발 도구: 현대적인 개발 워크플로우 완벽 가이드의 일부입니다.

설치

Ubuntu에 Docker를 설치하는 전체 가이드(공식 APT 저장소, docker.io, Snap, 루트리스(rootless) 모드 및 Compose 플러그인 설정 비교)는 Ubuntu에 Docker 설치를 참조하세요.

설치 후 sudo 없이 명령어를 실행하려면 사용자를 docker 그룹에 추가하세요:

sudo usermod -aG docker $USER
newgrp docker
docker run hello-world

설치 가이드에는 docker 그룹 소속의 보안 tradeoff(상충 관계) 및 루트리스 대안도 포함되어 있습니다.

일반적인 Docker 명령어

버전 및 시스템 정보

docker version          # Docker CLI 및 데몬 버전 표시
docker system info      # Docker 환경 데이터 목록
docker help             # 도움말 인덱스 보기
docker <command> --help # 특정 명령어의 도움말 정보 보기

로그인 및 로그아웃

docker login            # Docker Hub에 로그인
docker logout           # Docker Hub에서 로그아웃

이미지 관리

이미지 목록

docker images           # 모든 이미지 목록
docker images -a        # 중간 이미지 포함 모든 이미지 목록

이미지 가져오기(Pull)

docker pull <image-name:version> # Docker Hub에서 이미지 다운로드

이미지 빌드

docker build -t <image-name> . # 현재 디렉토리의 Dockerfile에서 이미지 빌드
docker build -f <Dockerfile-path> -t <image-name> . # 특정 Dockerfile에서 이미지 빌드
docker build --build-arg foo=bar . # 빌드 인수를 사용하여 이미지 빌드
docker build --pull . # FROM 지시문에서 참조된 이미지의 업데이트된 버전 가져오기
docker build --quiet . # 출력 없이 이미지 빌드

이미지 태그 및 푸시(Push)

docker tag <local-image-name> <username>/<preferred-image-name>
docker push <username>/<preferred-image-name>

이미지 제거

docker rmi <image-name>        # 특정 이미지 제거
docker image prune             # 사용되지 않는 이미지 제거
docker image prune -a          # 모든 사용되지 않는 이미지 제거

떠다니는(dangling) 이미지 제거

docker rmi $(docker images --filter "dangling=true" -q --no-trunc)

이미지 태그 제거(Untag)

docker rmi repository/image-name:tag

컨테이너 관리

컨테이너 실행

docker run -itd --name <container-name> <image-name> # 디아티치드(detached) 모드로 컨테이너 실행
docker run -it -p <host-port>:<docker-port> <image-name> # 포트 매핑과 함께 컨테이너 실행
docker run -it --name <container-name> <image-name> # 인터랙티브 모드로 컨테이너 실행

컨테이너 목록

docker ps                  # 실행 중인 컨테이너 목록
docker ps -a               # 모든 컨테이너 목록
docker ps -s               # CPU 및 메모리 사용량과 함께 실행 중인 컨테이너 목록

컨테이너 시작, 중지 및 재시작

docker start <container-name>   # 중지된 컨테이너 시작
docker stop <container-name>    # 실행 중인 컨테이너 중지
docker restart <container-name> # 컨테이너 재시작

컨테이너 제거

docker rm <container-name>      # 중지된 컨테이너 제거
docker rm -f <container-name>   # 컨테이너 강제 제거
docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q) # 모든 컨테이너 제거

중지된 모든 컨테이너 제거

docker container prune

컨테이너에 연결

docker attach <container-name>  # 실행 중인 컨테이너에 연결
docker exec -it <container-name> bash # 실행 중인 컨테이너에서 명령어 인터랙티브 실행

컨테이너 검사

docker inspect <container-name> # 컨테이너 검사
docker logs <container-name>    # 컨테이너 로그 보기
docker port <container-name>    # 컨테이너 포트 매핑 표시

네트워크 관리

docker network ls            # 모든 네트워크 목록
docker network create <network-name> # 새 네트워크 생성
docker network rm <network-name>    # 네트워크 제거

볼륨 관리

docker volume ls             # 모든 볼륨 목록
docker volume create <volume-name> # 새 볼륨 생성
docker volume rm <volume-name>    # 볼륨 제거
docker run -v <host-path>:<container-path> <image-name> # 볼륨 마운트

Docker Compose

다중 컨테이너 스택 및 일상적인 Compose 명령어는 Docker Compose 치트 시트를 참조하세요. Compose 프로젝트가 부팅 시 시작되고 Linux 서버에서 재부팅을 견디려면 systemd로 Linux 서비스로 Docker Compose 실행에서 유닛 파일 및 운영 관습에 대해 다룹니다.

기본 명령어

docker-compose up           # docker-compose.yml에 정의된 서비스 시작
docker-compose up -d        # 디아티치드 모드로 서비스 시작
docker-compose down         # 서비스 중지 및 제거
docker-compose ps           # 실행 중인 서비스 목록
docker-compose logs         # 서비스 로그 보기
docker-compose start        # 서비스 시작
docker-compose stop         # 서비스 중지
docker-compose pause        # 서비스 일시 정지
docker-compose unpause      # 서비스 일시 정지 해제

Dockerfile 명령어

Dockerfile에서 이미지 빌드

docker build -t <image-name> <Dockerfile-path> # Dockerfile에서 이미지 빌드

Dockerfile 예제

FROM <base-image>
RUN <command>
COPY <source> <destination>
EXPOSE <port>
CMD ["<command>", "<argument>"]

보안 및 시크릿(Secrets)

Docker Secrets

docker secret create <secret-name> <file> # 시크릿 생성
docker secret ls                         # 모든 시크릿 목록
docker secret rm <secret-name>          # 시크릿 제거

Docker 보안

  • Docker 시크릿을 사용하여 민감한 데이터를 중앙에서 관리하고 컨테이너로 안전하게 전송하세요.
  • 시크릿은 전송 중 및 Docker swarm의 휴지 상태(at rest)에서 암호화됩니다.

정리

사용되지 않는 리소스 제거

docker system prune          # 사용되지 않는 데이터(이미지, 컨테이너, 네트워크, 볼륨) 제거
docker image prune           # 사용되지 않는 이미지 제거
docker container prune       # 사용되지 않는 컨테이너 제거
docker network prune         # 사용되지 않는 네트워크 제거
docker volume prune          # 사용되지 않는 볼륨 제거

태그가 없는(untagged) 이미지 제거

때때로 큰 빌드가 완료된 후 docker images 명령어에서 다음과 같은 화면이 나타날 수 있습니다:

lot of untagged images

태그가 있는 이러한 이미지를 제거하려면:

docker rmi $(docker images --filter “dangling=true” -q --no-trunc)

위 방법은 구식이며 호환되지 않습니다. dangling=true 파라미터는_OBSOLETED_되었습니다. 대신 다음을 사용하세요:

docker system prune

다음과 같이 묻습니다:

WARNING! This will remove:
	- all stopped containers
	- all volumes not used by at least one container
	- all networks not used by at least one container
	- all dangling images

이 경고에 대해 Yes라고 결정할 수 있습니다…

이 치트 시트는 Docker 컨테이너, 이미지, 네트워크, 볼륨 등을 관리하는 데 필요한 필수 명령어와 개념을 다룹니다. 더 심화된 내용은 온라인에서 사용할 수 있는 상세 가이드와 튜토리얼을 참조하세요.

유용한 링크

구독하기

시스템, 인프라, AI 엔지니어링에 관한 새 글을 받아보세요.