티스토리 뷰
docker에 대해 학습한 내용을 기록합니다.
인프런 따라하며 배우는 도커와 CI 환경 강의를 수강하고 있습니다.
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 |