본문 바로가기

GitOps/Docker

[Docker] 컨테이너

컨테이너

컨테이너 실행

  1. docker engine이 이미지를 로컬에서 탐색
  2. 있으면 실행하고, 없으면 docker registry 탐색
  3. 기본 registry인 docker hub에서 동명의 이미지를 내려 받음
  4. 컨테이너 실행

관련 명령어

  • docker container run <이미지> <명령어>: 이미지를 컨테이너화하고 명령어를 실행
  • docker container start <컨테이너 ID>(or <컨테이너 이름>): 특정 컨테이너를 시작함.
  • docker container ls: 실행 중인 컨테이너 목록 확인
  • docker ps: 위 명령어와 동일
  • docker container ls -a: 실행됐던 모든 컨테이너 목록 확인
  • docker container exec <컨테이너 ID>(or <컨테이너 이름>) <명령어>: 특정 컨테이너에 명령어를 실행

참고

  • docker container로 된 명령들은 container를 생략할 수 있다.

컨테이너 라이프 사이클

관련 명령어

  • docker create --name <컨테이너 이름> <이미지>: 컨테이너를 생성함
  • docker start <컨테이너 ID>(or <컨테이너 이름>): 컨테이너를 실행함
  • docker run --name <컨테이너 이름> <이미지>: create + start
  • docker pause <컨테이너 ID>(or <컨테이너 이름>): 컨테이너를 일시 중지
  • docker unpause <컨테이너 ID>(or <컨테이너 이름>): 컨테이너 일시 중지 해제
  • docker stop <컨테이너 ID>(or <컨테이너 이름>): 컨테이너를 정지
  • docker stop $(docker container ls -aq): 실행 중인 모든 컨테이너 정지
  • docker rm <컨테이너 ID>(or <컨테이너 이름>): 컨테이너를 삭제. stop이 선행되어야 함.
  • docker kill <컨테이너 ID>(or <컨테이너 이름>): 컨테이너를 강제 종료

Pause, Stop, Kill 차이

  • Pause
    • SIGSTOP 신호를 사용하여 프로세스를 일시 중지.
    • 메모리를 사용 중지하지만 할당된 메모리가 해제되지는 않음
  • Stop
    • SIGTERM 신호를 프로세스에 전달.
    • SIGTERM 신호는 종료 신호이지만, 프로세스를 정리하고 종료할 수 있게 기회를 주는 신호. (우아한 종료)
    • 일정 시간이 지난 후 프로세스는 SIGKILL 신호를 수신하여 컨테이너를 중지 후 메모리 해제.
  • Kill
    • SIGKILL 신호를 즉시 전달
    • 혹은 -signal 옵션으로 지정한 신호를 전달

컨테이너 예제

# 단순하게 컨테이너에 명령어를 넣고 실행
docker run alpine hostname

 

# bash와 같이 터미널 세션을 유지하면서 상호작용 가능한 명령은 -it 옵션으로 입력 및 가상 터미널을 열어줄 수 있음.
# --rm 옵션으로 실행 후 바로 삭제 가능
docker run -it --rm ubuntu bash

# 컨테이너 내부에서 실행되는 명령들
ls /
ps aux
cat /etc/issue

 

# sql처럼 백그라운드에 띄워놓는 경우는 --detach(-d)옵션으로 백그라운드에 지속 가능
# 물론 mysql 이미지의 CMD가 터미널을 유지할 수 있는 명령어이기 때문에 가능한 것
# -e 옵션으로 환경 변수 셋팅
docker run -d --name mydb -e MYSQL_ROOT_PASSWORD=qwer1234 mysql

# 특정 컨테이너에 대한 상태 확인
docker container logs mydb
docker container top mydb

# 실행 중인 컨테이너에 명령어 추가 삽입
docker exec -it mydb mysql --user=root --password=$MYSQL_ROOT_PASSWORD --version

# 실행 중인 컨테이너의 가상 터미널을 열어서 명령어를 입력해도 됨
docker exec -it mydb sh
mysql --user=root --password=$MYSQL_ROOT_PASSWORD --version

 

'GitOps > Docker' 카테고리의 다른 글

[Docker] 도커 네트워크  (0) 2025.01.12
[Docker] 웹사이트 배포  (0) 2025.01.12
[Docker] 이미지  (0) 2025.01.11
[Docker] 개념  (0) 2025.01.09