DevOps/Docker

[DOCKER] Docker 명령어 총정리

Ls._.Rain 2024. 9. 16. 01:44

2024.09.15 - [DevOps/Docker] - [DOCKER] Docker 아키텍처

 

[DOCKER] Docker 아키텍처

2024.09.15 - [DevOps/Docker] - [DOCKER] 도커 설치 및 컨테이너 개념과 동작 원리 [DOCKER] 도커 설치 및 컨테이너 개념과 동작 원리클라우드 네이티브 이해 CNCF(Cloud Native Computing Foundation) : 클라우드 네이

lsdiary.tistory.com

이제 도커와 관련된 일반적인 명령어들을 살펴보자.

 

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.

hub.docker.com

> Docker Hub(Registry)에서도 많은 이미지를 볼 수 있고, 이전에 설치했던 EC2에서 CLI로 볼 수도 있다.

https://docs.docker.com/

 

Home

Docker Documentation is the official Docker library of resources, manuals, and guides to help you containerize applications.

docs.docker.com

> 이 곳에서 명령어를 포함한 많은 정보를 얻을수 있다.

컨테이너 이미지 관리 명령어
  • 이미지 검색 : docker search (docker hub에서만 검색된다)
  • 이미지 다운로드 : docker pull
  • 이미지 목록 보기 : docker images
  • 이미지 히스토리 보기(레이어 정보) : docker history
  • 이미지 세부 정보 보기 : docker inspect
  • 이미지 삭제 : docker rmi
컨테이너 조작 명령어
  • 컨테이너 생성 : docker create
  • 컨테이너 실행 : docker start
  • 컨테이너 종료 : docker stop
  • 컨테이너 강제 종료 : docker kill
  • 컨테이너 삭제 : docker rm
  • 컨테이너 실행 : docker run (create + start)
  • 컨테이너 목록보기 : docker ps
  • 컨테이너 세부 정보 확인 : docker inspect
동작중인 컨테이너 관리
  • 컨테이너 내부 명령어 실행 : docker exec [컨테이너 이름] [실행 명령어]
  • 컨테이너 프로세스 목록 보기 : docker top [컨테이너 이름]
  • 컨테이너 로그 보기 : docker logs [컨테이너 이름]
  • 컨테이너 내부 파일 복사 : docker cp [filename] [컨테이너 이름:/파일이름]
  • 컨테이너 내부 파일 변경 이력 확인 (read/write 레이어에서) : docker diff [컨테이너 이름]
컨테이너 Registry 관리
  • 이미지 빌드 : docker build
  • 이미지 태그 설정 : docker tag
  • Registry 로그인 : docker login
  • Registry 로그아웃 : docker logout
  • 이미지를 아카이브 파일로 저장 : docker save
  • 아카이브 파일을 이미지로 로드 : docker load
  • 이미지 내보내기 : docker export
  • 이미지 가져오기 : docker import

위에 나열한 기본적인 명령어를 바탕으로 여러가지 테스트를 진행한다.

원하는 컨테이너 조회

> /(슬래시) 앞에 글자가 있다면 공식적인 것이 아니라 개인이 따로 만든 이미지 이다.

 

 

> 메뉴바에 Trusted Content라는 메뉴가 있다. 이 세가지중 하나에 해당한다면 믿고 쓸 수 있다.

> 무조건 official 이미지를 사용하자!! 

docker search --filter=stars=3 --no-trunc busybox

> 별 점수가 3개 이상, 설명 줄임표 없는 이미지 출력 예시


컨테이너 이미지 다운로드

 

> /var/lib/docker/overlay2 디렉토리에 받은 이미지 저장

> 초기세팅은 아무것도 없음

> busybox를 pull 해서 다운 받았는데, 해시값이 보임

> 해시값: Pull complete 메시지 하나당 레이어가 한개씩 있다는 의미

docker images

 

> 태그(버전)가 같다면 동일 이미지가 유지된다.

> TAG는 다르게 보이지만 실제 docker hub에 현재 기준(2024.09.16) nginx의 latest는 1.27 태그 이므로 IMAGE ID가 동일한것을 확인 할 수있다.


gallery.ecr.aws Registry

 

 

https://gallery.ecr.aws/

 

ECR Public Gallery

Amazon ECR Public Gallery is a website that allows anyone to browse and search for public container images, view developer-provided details, and see pull commands

gallery.ecr.aws

 

hub.docker.com 에서만 이미지를 다운받을수 있는게 아니다. AWS에서도 이런 컨테이너 기반 서비스를 제공한다.

> 사이트 접속후 apache(nginx와 같은 웹 서버) 검색

> bitnami/apache 클릭 (bitnami에서 만들어진 container는 trust container임)

> Copy

> docker pull [복사한 이미지]

> Registry 마다 이름이 다르게 운영되는걸 확인


docker inspect busybox

> 이미지 세부정보 보기

> Layer 등의 다양한 정보 확인 가능

docker history nginx

> 컨테이너가 어떻게 만들어졌는지 확인

> <missing> 이라고 표시된 부분이 Base Image

docker rmi [이미지 이름]

> 리소스 삭제해서 디스크 공간 확보


컨테이너 관리

 

  1. 컨테이너는 읽기전용의 이미지 레이어(불변의 Union File System(UFS)) + 읽기/쓰기 가능한 컨테이너 레이어를 결합
  2. 컨테이너 생성 (create) : 컨테이너 레이어 생성
  3. 컨테이너 실행 (start)을 하면 격리된 환경에서 프로세스로 동작
cd /var/lib/docker/overlay2

> 레이어 관리 디렉토리로 이동

docker create --name web nginx

> 컨테이너 생성

> 컨테이너 레이어 생성 확인

> 컨테이너를 실행한적은 없다. 다만 생성 했을 뿐

  • 실행 하고 있지 않은 모든 컨테이너를 보고 싶다면?
docker ps -a

> -a 옵션

 

docker start [컨테이너 이름 OR CONTAINER ID]

> 프로세스로 동작 확인

> PORTS 열림

Container의 6가지 Isolation
PID, Network[IP address], Host[hostname], Mount, User, IPC(Shared Memory)
  • 그렇다면 컨테이너의 IP 주소는 어떻게 찾지?
docker inspect [컨테이너 이름]

> IP 주소 확인

> curl 명령으로 nginx 컨테이너 접속

docker stop web

> Exited(0) : 정상종료 되었다는 의미

 

docker rm [컨테이너 이름]

> 레이어가 다시 줄어든것을 확인


Docker run 명령어
  • pull -> create -> start -> attach(이미지가 없다면 연결) 전부 포함
  • 옵션이 굉장히 많음
-d 옵션 : 백그라운드(daemon 모드)로 동작
--name 옵션 : 뒤에 이름 붙일수 있음

 

docker run -d --name web nginx

> create + start 와 같은 결과


Docker exec 명령어 (컨테이너 내부로 들어가기)

 

  • docker exec [options] [container_name OR id] [컨테이너에서 실행하고 싶은 명령어]
-i + -t = -it 옵션 : bash OR shell 명령을 쓸때 무조건 사용
docker exec -it web /bin/bash

> Container ID, IP 주소 확인

cd /usr/share/nginx/html/

> Nginx html 파일인 index.html 파일 확인

exit

> 컨테이너 외부로 나오기


호스트 파일 컨테이너로 복사

 

docker cp index.html web:/usr/share/nginx/html
  • 컨테이너 -> 호스트의 경우 파일 순서만 바꿔서 명령어를 입력해주면 된다.

> 디폴트 nginx 페이지 변경 확인

 


로그 파일 확인
  • docker logs [컨테이너 이름]
--follow 옵션, -f 옵션 : 실시간 로그
--since, --until : 기간에 따라 로그 조회
--tail 옵션 : 제일 마지막 몇 개까지 조회
  • docker top [컨테이너 이름] : 컨테이너 내부에서 어떤 프로세스가 동작 중?

  • docker diff [컨테이너 이름] : Base Image와 생성된 컨테이너 사이에 달라진 부분만 보여줌

> C : Change

> A : Add

> D : Delete


Foreground 컨테이너 설정
  • docker run -it 
Background(Daemon) 실행 : -d 옵션
Foreground(터미널) 실행 : -it 옵션

 

ls /bin

명령어로 쓸 수 있는 명령어 확인

  • exit 하면 바로 컨테이너가 종료됨 (stop 상태)

정~~말 기본적인 Docker 명령어에 대해서 알아봤다! 많은 도움이 되었으면 합니다 :)