Docker로 이번에 명령어가 헷갈려서 서버 상에서 실수 한 적이 많은데
..
그래서 정리하고자 작성

Docker 혹은 docker-compose를 사용하면 가끔 서비스 이름을 작성해야하는지, 컨테이너 이름을 작성해야하는지 헷갈리는 경우가 존재한다(나같은 경우에는 자주 헷갈려한다)
그래서 덜 헷갈리고자 정리한다
run은 무조건 생성 안 된 상태에서 해야한다!
그렇지 않으면 container already exists 에러가 뜬다.
docker run --name <컨테이너이름> -d -p <포트번호>:<포트번호> <이미지이름>:<이미지태그>
-p: 호스트의 포트와 컨테이너의 포트를 연결docker compose up
이건 compose 단위에서의 시작이다. docker-compose.yaml 파일이 있는 경로로 이동하여 실행해줘야한다.
그러면 서비스 하나만 실행하고 싶다면
docker compose up <서비스 이름> -d
이 때 컨테이너 이름이 아니라 서비스 이름을 작성해준다
이 때 만약에 특정 파일만 참고하고 싶다면?
-f 옵션을 사용해준다.
가령 나의 경우 docker-compose.yaml 파일이 여러 파일이 존재했는데, 이에 대하여 각기 실행하고 싶은 게 다를 경우 -f 옵션을 줌으로써 따로 실행한다.
docker compose -f docker-compose.prod.yml up -d
docker compose up <서비스 이름>
<서비스 이름>: docker-compose.yaml 파일에 정의된 특정 서비스만 실행하는데, 주의할 점은 이 명령어는 해당 서비스의 의존성(depends_on)도 함께 시작한다만약 의존성 없이 실행하고 싶다면?
--no-deps 옵션을 사용한다!
이 옵션을 사용하면 의존성 서비스를 무시하고 지정된 서비스만 실행할 수 있다. 이 기능은 이미 database 컨테이너가 다른 방식으로 실행 중이거나, 테스트 목적으로 특정 서비스만 빠르게 시작하고 싶을 때 유용하므로, redis 같은 의존성 부여한 DB 컨테이너를 사용하고 있다면 명령어에 필수적으로 달아주는 것이 좋다.
docker compose up --no-deps <서비스 이름>
docker compose pull <서비스 이름>
이 때 주의할 점은, 컨테이너의 이름이 아니라 서비스의 이름으로 docker-compose가 작동한다는 점이다.
(서비스 이름이 아니라 컨테이너 이름을 작성하면 안 됨)
docker compose up은 로컬에 이미지가 없으면 자동으로 이미지를 다운로드하지만, --no-deps와 함께 사용할 때는 새로운 이미지를 미리 당겨와서 최신 상태를 보장하는 것이 좋으므로,
이미지에 대하여 변경사항이 존재한다면 미리 pull을 받고 실행해주는 것이 좋다!
그래서 다음과 같이 사용한다.
docker compose pull <서비스 이름>
docker compose up --no-deps <서비스 이름>
그럼 다시 docker-compose 파일이 여러개이고, 동일한 경로에 존재한다면 어떻게 쓰면 될까
docker compose -f <파일명> pull <서비스 이름>
docker compose -f <파일명> up <서비스 이름> -d
이렇게 사용해주면 된다
-f 옵션의 장점은 여러 번 사용할 수 있다는 것이다.
이 경우, 도커 컴포즈는 지정된 파일들을 순서대로 병합하여 하나의 최종 설정을 만들어준다
나중에 지정된 파일의 설정이 이전 파일의 설정을 덮어쓴다!
이 방법은 공통 설정을 담은 기본 파일(docker-compose.yml)과 특정 환경에 맞게 설정을 변경하는 오버라이드 파일(docker-compose.override.yml)을 분리할 때 유용하다.
파일 병합 사용 예시
docker-compose.yml (기본 설정)
services:
web:
image: my-app:latest
ports:
- "80:80"
db:
image: postgres:13
volumes:
- db-data:/var/lib/postgresql/data
docker-compose.dev.yml (개발 환경 오버라이드)
services:
web:
build: .
volumes:
- .:/app
environment:
- NODE_ENV=development
위 두 파일을 조합하여 실행하려면:
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d
이 명령어를 실행하면 web 서비스는 docker-compose.yml의 설정에 docker-compose.dev.yml의 build와 volumes, environment 설정이 추가되거나 덮어쓰여 실행된다