컨테이너 생성

_image_name=postgres
_container_name=pg-15
_port_out=15432
_port_in=5432

docker run \\
-p ${_port_out}:${_port_in} \\
--name "${_container_name}" \\
-d ${_image_name}
_image_name=postgres
_container_name=pg-15
_port_out=15432
_port_in=5432

docker run \\
-p ${_port_out}:${_port_in} \\
--name "${_container_name}" \\
-e ENV_ID=root \\
-e ENV_PW=1234 \\
-v $HOME/my-volume/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d \\
-d ${_image_name}

컨테이너 생성 : 추가 옵션

--log-opt max-size=10m # 로그 순환 옵션: 생성되는 로그 파일의 최대 크기 설정(MB)
--log-opt max-file=5   # 로그 순환 옵션: 생성되는 로그 파일의 최대 개수

쉘 실행

docker exec -it /bin/bash <컨테이너id 또는 이름>

도커 명령어들

docker ps
docker ps -al                  # 숨겨진 컨테이너도 모두 확인
docker start <컨테이너>         # 중지된 컨테이너 시작
docker stop  <컨테이너>         # 컨테이너 중지
docker rm    <컨테이너>         # 컨테이너 제거(강제는 -f)
docker rm -f $(docker ps -aq)  # 모든 컨테이너 일괄 삭제
docker container prune         # 중지된 모든 컨테이너만 일괄 삭제
docker logs <컨테이너>          # 컨테이너의 로그 출력
docker logs <컨테이너> --follow # 컨테이너의 로그 지속 확인
docker images                  # 이미지 목록 출력
docker rmi <이미지>             # 이미지 제거
docker rmi -f <이미지>          # 이미지 제거 + 해당 이미지로 생성된 '정지된' 컨테이너 함께 제거

도커 명령어 응용 - 컨테이너 출력

# 지정한 이미지로부터 생성된 컨테이너 목록 출력
docker ps -af ancestor=<이미지>
docker ps -aqf ancestor=<이미지> # ID만 출력

# "api-server"라는 이름을 포함한 모든 컨테이너 목록 출력
docker ps -af name=api-server  
docker ps -aqf name=api-server # ID만 출력

# 정확히 "api-server-01" 라는 이름을 가진 컨테이너만 출력
docker ps -af name=^api-server-01$
docker ps -aqf name=^api-server-01$ # ID만 출력

# ID와 Image만 출력
# 참고: ID / Image / Names / Status / Ports
docker ps --format "{{.ID}} {{.Image}}"

# 이미지 이름에 "api-server"가 포함된 모든 컨테이너의 ID만 출력
# grep -w 옵션: 단어 일치(공백,특수문자로 구분된 단어) => 부분탐색하려면 -w 옵션 제거
docker ps --format "{{.ID}} {{.Image}}" | grep -w "api-server" | awk '{print $1}'

도커 명령어 - 이미지 출력

# 기본 옵션들
-a: 모두 표시(--all)
-q: id만 표시(--quiet)
-f: 필터(--filter)
  -f reference="<이미지명>" # 지정한 이미지 이름과 완전 일치하는 이미지 목록 출력
  -f reference="*<이미지명>*" # 별표 특수문자를 통해 앞뒤 Like 탐색
--format: 원하는 컬럼 지정하여 표시

도커 명령어 응용 - 제거

# 지정한 이름과 일치하는 컨테이너 제거
docker rm -f "<컨테이너명>"

# 지정한 이름을 포함한 모든 컨테이너 제거
docker rm -f $(docker ps -aqf name="<컨테이너명>")

# 지정한 이름과 일치하는 이미지 제거
docker rmi -f "<이미지명>"

# 지정한 이름을 포함한 모든 이미지 제거
docker rmi -f $(docker images -aqf reference="*<이미지명>*")

# 지정한 이미지 + 해당 이미지로 생성된 컨테이너 강제 제거(실행 중인 컨테이너 포함)
__IMG__="<이미지명>" && docker rm -f $(docker ps -aqf ancestor="$__IMG__") && docker rmi -f "$__IMG__"

# 지정한 이름을 포함한 이미지 모두 제거 + 해당 이미지들로 생성된 컨테이너 강제 제거(실행 중인 컨테이너 포함)
__IMG__="<이미지명>" \\
&& docker rm -f $(docker ps --format "{{.ID}} {{.Image}}" | grep "$__IMG__" | awk '{print $1}') \\
&& docker rmi -f $(docker images -aqf reference="*$__IMG__*")

도커 명령어 응용 - 기타

# 실행 중인 모든 컨테이너 중지
docker stop $(docker ps -q)

# 가장 최근에 실행된 컨테이너의 로그 지속 출력
docker ps -ql | xargs -r docker logs --follow

# 지정 컨테이너의 로그 비우기 ==> 이후 해당 컨테이너에 docker logs --follow가 안먹히는 버그가 있음
: > $(docker inspect --format='{{.LogPath}}' **<container_name_or_id>**)

Docker compose 명령어들

docker compose up      # 복합 컨테이너 생성, 실행 및 해당 CLI에서 로그 확인
docker compose up -d   # 복합 컨테이너 생성, 실행(백그라운드)
docker compose start   # 실행
docker compose stop    # 종료
docker compose down    # 제거
docker compose restart # 재시작
docker compose ps      # 컨테이너 목록, 상태 확인