컨테이너 생성
_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 # 컨테이너 목록, 상태 확인