[Docker] Docker 명령어 정리하기

연유라떼·2025년 8월 30일
post-thumbnail

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

Docker 혹은 docker-compose를 사용하면 가끔 서비스 이름을 작성해야하는지, 컨테이너 이름을 작성해야하는지 헷갈리는 경우가 존재한다(나같은 경우에는 자주 헷갈려한다)

그래서 덜 헷갈리고자 정리한다

시작 명령어

docker 컨테이너 생성 및 시작

run은 무조건 생성 안 된 상태에서 해야한다!
그렇지 않으면 container already exists 에러가 뜬다.

docker run --name <컨테이너이름> -d -p <포트번호>:<포트번호> <이미지이름>:<이미지태그>
  • -p: 호스트의 포트와 컨테이너의 포트를 연결

Docker compose에서 시작하기

docker compose up

이건 compose 단위에서의 시작이다. docker-compose.yaml 파일이 있는 경로로 이동하여 실행해줘야한다.

그러면 서비스 하나만 실행하고 싶다면

docker compose up <서비스 이름> -d

이 때 컨테이너 이름이 아니라 서비스 이름을 작성해준다


docker-compose 파일이 여러개일 때

이 때 만약에 특정 파일만 참고하고 싶다면?
-f 옵션을 사용해준다.

가령 나의 경우 docker-compose.yaml 파일이 여러 파일이 존재했는데, 이에 대하여 각기 실행하고 싶은 게 다를 경우 -f 옵션을 줌으로써 따로 실행한다.

docker compose -f docker-compose.prod.yml up -d

Docker compose에서 다른 컨테이너는 "건드리지 않고" 특정 서비스만 실행하기

docker compose up <서비스 이름>
  • <서비스 이름>: docker-compose.yaml 파일에 정의된 특정 서비스만 실행하는데, 주의할 점은 이 명령어는 해당 서비스의 의존성(depends_on)도 함께 시작한다

만약 의존성 없이 실행하고 싶다면?

--no-deps 옵션을 사용한다!

이 옵션을 사용하면 의존성 서비스를 무시하고 지정된 서비스만 실행할 수 있다. 이 기능은 이미 database 컨테이너가 다른 방식으로 실행 중이거나, 테스트 목적으로 특정 서비스만 빠르게 시작하고 싶을 때 유용하므로, redis 같은 의존성 부여한 DB 컨테이너를 사용하고 있다면 명령어에 필수적으로 달아주는 것이 좋다.

docker compose up --no-deps <서비스 이름>

하나의 컨테이너에 대하여 최신 상태 받기


그럼 만약에 여러 컨테이너를 docker-compose에 정리해두고, 하나의 서비스에 대해서만 실행하고 싶다면? -> 변경 사항에 대하여 우선적으로 pull 명령어를 사용한다.
docker compose pull <서비스 이름>

이 때 주의할 점은, 컨테이너의 이름이 아니라 서비스의 이름으로 docker-compose가 작동한다는 점이다.
(서비스 이름이 아니라 컨테이너 이름을 작성하면 안 됨)

docker compose up은 로컬에 이미지가 없으면 자동으로 이미지를 다운로드하지만, --no-deps와 함께 사용할 때는 새로운 이미지를 미리 당겨와서 최신 상태를 보장하는 것이 좋으므로,
이미지에 대하여 변경사항이 존재한다면 미리 pull을 받고 실행해주는 것이 좋다!

그래서 다음과 같이 사용한다.

docker compose pull <서비스 이름>
docker compose up --no-deps <서비스 이름>

docker-compose 파일이 여러개일 때

그럼 다시 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.ymlbuildvolumes, environment 설정이 추가되거나 덮어쓰여 실행된다

profile
일단 공부해보겠습니다..

0개의 댓글