컨테이너 생성

_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

Docker 명령어들

docker ps
docker ps -al                  # 숨겨진 컨테이너도 모두 확인
docker container prune         # 중지된 모든 컨테이너만 일괄 삭제
docker rm -f $(docker ps -aq)  # 모든 컨테이너 일괄 삭제
docker logs <컨테이너>          # 컨테이너의 로그 출력
docker logs <컨테이너> --follow # 컨테이너의 로그 지속 확인

docker ps 출력 응용

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

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

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

# ID와 Image만 출력
docker ps --format "{{.ID}} {{.Image}}"

# "api-server"라는 이름을 포함한 모든 컨테이너의 ID만 출력
docker ps --format "{{.ID}} {{.Image}}" | grep -w "api-server" | awk '{print $1}'

Docker 명령어들 - 응용

# 가장 최근에 실행된 컨테이너의 로그 지속 출력
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      # 컨테이너 목록, 상태 확인