Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Ruff! Ruff!

[오픈소스] - Docker 사용법 본문

CS

[오픈소스] - Docker 사용법

maeng-kim 2024. 10. 8. 20:54

< Docker 명령어 활용>

도커 이미지 관련 명령어 도식화 

 

도커 컨테이너 관련 명령어 도식화

 

 

1. Docker 이미지 명령어 구성

- 이미지 검색
   docker search 이미지명[:TAG]
   -> 도커 허브에서 이미지 검색해보기
   -> 보통 ubuntu, centos, redis 등 os나 프로그램 이름을 가진 이미지가 공식 이미지, 나머지는 사용자들이 만들어서 공개한 이미지

 

- 도커 이미지 내려받기

   docker [image] pull [options] 이미지명[:tag]

    -> 이미지의 기본 형식 <네임스페이스>/<이미지명>:<태그>  : 도커 허브의 라이브러리가 기본 네임스페이스

    -> 이미지명 뒤에 :tag 를 포함하지 않으면 자동으로 latest로 지정

    -> 다운로드한 이미지는 여러 레이어로 구성 + 각각의 레이어는 해시 값으로 구분

    -> 다이제스트 값은 docker 레지스트리에서 관리하는 이미지 고유 식별값

   * 주의사항 : 웹 주소 url에서 http://를 붙이지 않고 이미지 주소 작성해야함

 

- 도커 이미지 목록 출력하기

  docker image ls
  docker images

  -> 다운로드한 이미지 정보 조회

  -> 이미지 이름을 설정하면 이름은 같지만 태그가 다른 이미지가 출력됨

 

- 도커 이미지 세부 정보 조회하기

   docker image inspect [options] 이미지명[:tag]

   -> 구성

  - “Id”: 이미지 ID
  - “Created”: 생성일
  - “DockerVersion”: Docker 버전
  - “Architecture”: CPU 아키텍처
  - “RootFS”: 이미지 다이제스트 정보
  - “GraphDriver”: 이미지 레이어 저장 정보

 

- 도커 이미지 히스토리 조회하기

   docker image history [options] 이미지명[:tag]

   -> 이미지 구성 레이어의 수행 명령, 크기 등 조회 (위쪽 내용이 최신 변경 내역)

   -> image != Layer

   -> 이미지로 다운하면 중복되는 레이어까지 다운받게 되어 저장공간 효율성 떨어짐 -> 레이어로 다운하면 중복되는 건 서로 공유 -> 공간 효율 굿

 

- 이미지 태그 설정하기

   docker tag 원본이미지명[:tag] 참조이미지명[:tag]

   -> 도커 허브와 같은 레지스트리에 업로드 하는 경우 저장소명과 함께 태그 지정

 

- 도커 이미지 삭제하기

   docker image rm [옵션] {이미지명[:tag] | 이미지ID}

   -> 컨테이너가 실행 중인 이미지는 삭제 불가 -> 구동 중인 컨테이너를 멈추고 삭제한 이후 이미지 삭제 가능

 

- 모든 도커 이미지 삭제하기

   docker image prune

   -> 로컬에 다운로드한 이미지 중 하나 이상의 컨테이너가 연결되지 않은 모든 이미지를 제거

   -> Dangling 이미지 모두 삭제 (태그가 붙지 않은 이미지/ 어떤 컨테이너도 참조하지 않는 이미지)

   -> "-a" 옵션을 이용하면 사용 중이 아닌 모든 이미지가 제거

   

2. Docker 로그인

- 도커 로그인 하기

   docker login

   -> 호스트에서 도커 허브에 이미지를 업로드하기 위해서는 로그인 필요

   -> 암호화 알고리즘이 아닌 베이스64 인코딩을 통한 암호 키값 저장. 디코딩이 가능하므로 노출 주의해야함

 

- 도커 로그아웃 하기

   docker logout

   -> 도커 허브 레지스트리로부터 로그아웃

 

 

3. Docker 컨테이너 명령어

- 컨테이너 목록 확인하기

  docker container ls

  -> 컨테이너 목록을 출력함

  -> "-a"옵션을 사용하면 정지된 컨테이너까지 모두 출력

  -> 옵션을 사용하지 않으면 실행되고 있는 컨테이너만 출력

 

- 컨테이너 실행하기

   docker [container] run [옵션] 이미지명 [실행명령]

   -> 이미지를 기반으로 컨테이너 실행

   -> [pull] + create + start + [command]

 

- 컨테이너 생성하기

  docker [container] create [옵션] 이미지명

  -> 이미지 기반으로 컨테이너 생성

 

- 컨테이너 시작하기

    docker [container] start [옵션] 컨테이너명

    -> 이미 생성한 컨테이너를 시작

 

- 컨테이너 접속하기

   docker [container] attach [옵션] 컨테이너명

  -> 동작 중인 컨테이너에 접속

   -> bash 쉘에서 exit 또는 ctrl+D 를 입력하면 컨테이너가 정지됨

 

- 컨테이너 삭제하기

   docker [container] rm [옵션] 컨테이너명

   -> 컨테이너를 삭제

   -> "-f"옵션을 통해 동작 중인 컨테이너도 삭제 가능 (SIGKILL)

 

- 컨테이너를 정지할 때 함께 삭제하기

   docker [container] run --rm [옵션] 이미지명

   -> 정지된 컨테이너를 디스크에 유지할 필요 없는 경우

   -> docker run --rm 은 실행이 끝나면 자동으로 파기

 

- 실행 중이지 않은 모든 컨테이너 파기하기

  docker container prune [옵션]

  -> 실행 중이 아닌 모든 컨테이너 일괄 삭제

 

 

** run / start 차이

    -> run : 새로운 컨테이너를 이미지로부터 만듦

    -> start | stop : 기존에 실행되었던 컨테이너를 중지시키거나 실행시킴

 

- 컨테이너 정지하기

   docker [container] stop 컨테이너명

   -> 실행 중인 컨테이너를 정지

   -> SIGKILL 시그널 전송해서 프로세스를 죽인다

 

- 컨테이너 재시작

   docker [container] restart 컨테이너명

   -> 기존 프로세스를 정지하고 새로운 컨테이너 프로세스를 시작

   -> 컨테이너 동작에는 영향을 주지 않고, 호스트의 PID만 변경함 

 

- 외부에서 컨테이너 안의 명령 실행

   docker [container] exec 컨테이너명 실행명령

   -> 외부에서 컨테이너 안의 명령 실행하기

   -> 컨테이너가 실행되고 있는 상태에서만 사용할 수 있으며 정지된 상태에서는 사용 불가

  -> 패키지를 설치하거나 각종 daemon을 실행할 때 사용

 

- 컨테이너 표준 출력 호스트에 연결하기

  docker [container] logs 컨테이너명

  -> 현재 실행 중인 특정 도커 컨테이너의 출력 내용을 확인

  -> "-f" 옵션 사용시 새로 출력되는 내용 계속 출력

 

- 컨테이너와 호스트 간 파일 복사하기

   docker [container] cp 컨테이너명:원본파일 대상파일

   -> 실행/ 정지 상태의 컨테이너와 호스트 간에 파일을 복사하기 위한 명령

 

- 컨테이너 사용 현황 확인하기

  docker [container] stats 컨테이너명

  -> 컨테이너들의 시스템 리소스 사용 현황 확인

 

- 컨테이너에서 변경된 파일 확인

   docker [container] diff 컨테이너명

   -> 컨테이너가 실행되면서 변경된 파일 및 디렉토리 목록을 출력

   -> A: 추가된 파일 / C: 변경된 파일 / D: 삭제된 파일

   -> 컨테이너를 생성한 이미지 내용 기준 비교

 

- 컨테이너 세부 정보 확인

    docker [container] inspect 컨테이너명

    -> 컨테이너의 세부 정보를 출력 (할당 ip주소 등)

 

- 컨테이너의 변경사항을 이미지로 생성

  docker [container] commit [옵션] 컨테이너명 이미지명[:태그]

  -> "-a" : Author

  -> "-m" : commit 메세지