티스토리 뷰

기타

[Docker] 도커 명령어 정리

rimo (리모) 2023. 12. 14. 05:53

 

docker에 대해 학습한 내용을 기록합니다.

인프런 따라하며 배우는 도커와 CI 환경 강의를 수강하고 있습니다.

 

 

 

[Docker] 도커 시작하기

docker에 대해 학습한 내용을 기록합니다. 인프런 따라하며 배우는 도커와 CI 환경 강의를 수강하고 있습니다. docker란 무엇이고 어떻게 등장한 기술인가? Docker: Accelerated Container Application Development D

munak.tistory.com

 

 

docker 명령어 익히기

 


 

이미지로 컨테이너 생성 및 실행

run 명령어로 이미지를 이용해 컨테이너를 생성하고 실행시킬 수 있습니다.

docker run 이미지-이름

 

 

컨테이너의 생성 및 실행은 아래와 같은 과정을 거칩니다.

 

1. 이미지에 저장되어있는 스냅샷을 컨테이너의 하드디스크에 올린다.

2. 시작 명령어를 이용해 커널 애플리케이션을 실행한다.

#1
docker create 이미지-이름

#2
docker start -a 컨테이너-ID
docker start -a 컨테이너-이름

 

create는 1번, start는 2번입니다.  사실 run은 create-start를 묶은 기능이죠.

*a : attach

 

 

 

컨테이너 포트 매핑

 

p옵션을 사용해 컨테이너의 포트번호를 지정할 수 있습니다.

docker run -p 호스트포트번호:컨테이너포트번호 이미지이름

 

호스트의 네트워크와 컨테이너의 네트워크를 연결할 수 있습니다.

 

 

 

실행중인 컨네이너 확인

ps 명령어로 컨테이너 목록과 상태를 확인할 수 있습니다.

docker ps

 

*ps: process status

 

  • CONTAINER ID : 컨테이너의 고유한 아이디 해시. 실제로는 더욱 길지만 일부분만 출력된다.
  • IMAGE : 컨테이너 생성시 사용한 도커 이미지.
  • COMMAND : 컨테이너 시작시 실행될 명령어. 대부분 이미지에 내장되어있어 별도의 설정은 필요없다.
  • CREATED : 컨테이너가 생성된 시간 
  • STATUS : 컨테이너의 상태 (실행중: Up, 종료: Exited, 일시정지: Pause)
  • PORTS : 컨테이너가 개방한 포트와 호스트에 연결한 포트. 설정을 하지 않은 경우 출력되지 않는다.
  • NAMES : 컨테이너의 고유한 이름. 컨테이너 생성시 --name 옵션으로 설정하지 않으면 도커 엔진이 임의로 형용사와 명사를 조합해 설정한다. id와 같이로 unique한 값을 가진다.

 

이름(NAME) 재설정

docker rename 기존이름 새이름

 

 

원하는 항목만 출력

# --format 옵션으로 특정항목만 출력할 수 있다.
docker ps --format 'table{{.항목이름}}'

# 항목이름은 첫글자만 대문자로 입력
# ex)
docker ps --format 'table{{.Names}}'

# 여러개도 가능하다.
docker ps --format 'table{{.항목이름1}}table{{.항목이름2}}'

# 보기 편하게 \t(tab)으로 연결 가능
docker ps --format 'table{{.항목이름1}} \t table{{.항목이름2}}'

 

 

 

모든 컨네이너 확인

a옵션을 주면 실행하지 않고 있는 컨테이너까지 모두 출력합니다.

docker ps -a

 

*a : all

 

 

 

 

컨테이너 중지

stop과 kill 명령어를 사용해 컨테이너를 중지시키는 것이 가능합니다.

docker stop 컨테이너-ID
docker stop 컨테이너-이름

docker kill 컨테이너-ID
docker kill 컨테이너-이름

 

 

stop과 kill의 차이점

stop은 컨테이너를 Greacefully하게 종료시킵니다. 즉 진행되고 있던 로직을 전부 처리한 뒤 종료합니다.

반면 kill은 작업을 기다리지 않고 컨테이너를 종료시키죠.

 

*stop은 SIGTEARM(Grace Period: 정리하는 시간)을 가진 후 SIGKILL을 Main Process로 보내 종료합니다. kill은 바로 SIGKILL을 Main Process로 보내 종료합니다!

 

 

컨테이너 삭제

컨테이너 삭제는 rm 명령어를 사용합니다.

*중지된 컨테이너들만 삭제가 가능합니다. 실행중인 컨테이너는 삭제할 수 없습니다 ⭐

 

docker rm 컨테이너-ID
docker rm 컨테이너-이름

# 모든 컨테이너 삭제
docker rm `docker ps -a -q`

 

 

 

 

 

이미지 삭제

docker rmi 이미지-ID

 

 

prune

한번에 컨테이너, 이미지, 네트워크, 캐시를 모두를 삭제하고 싶다면 prune 명령어를 사용할 수 있습니다.

docker system prune
WARNING! This will remove :
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache

 

prune 명령어 또한 실행중인 컨테이너에는 영향을 주지 않습니다.

 

 

 

 

실행중인 컨테이너에 명령어를 전달

실행중인 컨테이너에는 exec로 명령어를 실행할 수 있습니다.

*run은 컨테이너를 새로 만들어서 실행, exec는 이미 실행중인 컨테이너에서 명령어를 실행해야 하기 위해 사용합니다.

docker exec -it 컨테이너-ID 명령어
docker exec -it 컨테이너-이름 명령어

 

* it : interactive termianl, 보통 이어서 명령어를 작성하기 위해 it 옵션을 사용하거나 컨테이너의 쉘로 접속합니다.

# 쉘에서 나오고 싶다면 Ctrl+d를 사용합니다.
docker exec -it 컨테이너 sh
docker exec -it 컨테이너 bash
docker exec -it 컨테이너 zsh
docker exec -it 컨테이너 powershell

 

 

 

 

감사합니다.

 

 


 

 

공부한 내용을 복습/기록하기 위해 작성한 글이므로 내용에 오류가 있을 수 있습니다.

'기타' 카테고리의 다른 글

[Git] Git 브랜치 전략  (0) 2024.03.27
[Docker] Dockerfile로 이미지 생성하기  (0) 2023.12.19
[Docker] 도커 시작하기  (0) 2023.12.08
[Git] .gitignore이란?  (0) 2023.11.03
[Git] Github 시작하기  (0) 2023.10.31
댓글
«   2025/01   »
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
Total
Today
Yesterday