도커 설치와 개념

소개

3주차에 했던 도커설치를 따라해봤습니다

윈도우입니다

진행 방법

한국어 텍스트가 있는 검은 화면

윈도우에서 설치하려고 클코에게 물어봤습니다

https://docs.docker.com/desktop/setup/install/windows-install/

x86설치하시면 됩니다

arm은 특수한?경우라서 본인이 알겁니다

터미널에서 docker --version을 쳐서 숫자가 나오면 설치가 완료됩니다

Adobe Flash Player 설정 스크린샷

터미널에서 docker run hello-world을 쳤더니 이렇게 나오네요

명령어

  • docker run — 컨테이너를 만들고 실행합니다

  • docker ps — 실행 중인 컨테이너 목록을 봅니다

  • docker stop [이름] — 컨테이너를 멈춥니다

  • docker rm [이름] — 컨테이너를 삭제합니다

  • -d — 터미널을 점유하지 않고 백그라운드에서 실행합니다

  • --name memos — 컨테이너에 이름을 붙입니다. 나중에 stop/rm할 때 씁니다

  • -p 5230:5230 — 호스트(내 컴퓨터) 포트 5230을 컨테이너(게스트) 5230번 포트에 연결합니다

  • -v memos_data:/var/opt/memos — 컨테이너를 삭제해도 메모 데이터는 남깁니다

도커 용어

이미지 (Image) 애플리케이션을 실행하는 데 필요한 모든 것(코드, 런타임, 라이브러리, 설정)을 패키징한 읽기 전용 템플릿이에요. 붕어빵 틀에 비유하면 이해하기 쉬워요. docker pull nginx처럼 레지스트리에서 받아오거나, Dockerfile로 직접 만들 수 있고, 한 번 만들어지면 내용이 변하지 않아요.

컨테이너 (Container) 이미지를 기반으로 실제 실행되는 인스턴스예요. 붕어빵 틀(이미지)로 찍어낸 붕어빵 하나하나가 컨테이너인 셈이죠. 하나의 이미지로 여러 컨테이너를 동시에 띄울 수 있고, 각 컨테이너는 격리된 환경에서 독립적으로 돌아가요. 컨테이너 안에서 파일을 수정해도 원본 이미지에는 영향이 없어요.

포트 (Port) 컨테이너 내부의 네트워크 포트를 호스트(내 컴퓨터)의 포트와 연결하는 개념이에요. 컨테이너는 기본적으로 외부와 격리되어 있어서, -p 8080:80 같이 포트 매핑을 해줘야 브라우저에서 접근할 수 있어요. 이 예시는 "호스트의 8080번으로 들어온 요청을 컨테이너의 80번으로 보내라"는 뜻이에요.

볼륨 (Volume) 컨테이너의 데이터를 영구적으로 보존하기 위한 저장소예요. 컨테이너는 삭제하면 내부 데이터가 전부 사라지는데, 볼륨을 연결하면 컨테이너가 삭제되더라도 데이터가 호스트에 남아있어요. -v my_data:/var/lib/mysql처럼 사용하며, 여러 컨테이너가 같은 볼륨을 공유할 수도 있어요. DB 데이터나 로그 같은 건 반드시 볼륨으로 관리해야 안전해요.

도커파일의 구조

Dockerfile은 이미지를 만들기 위한 "레시피 파일"

아래는 예시와 설명입니다

FROM node:18           # 1. 베이스 이미지 (어떤 환경 위에 만들 건지)
WORKDIR /app           # 2. 작업 디렉토리 설정
COPY package.json .    # 3. 필요한 파일 복사
RUN npm install        # 4. 빌드 시 실행할 명령어
COPY . .               # 5. 나머지 소스코드 복사
EXPOSE 3000            # 6. 컨테이너가 사용할 포트 명시
CMD ["node", "app.js"] # 7. 컨테이너 실행 시 실행할 명령어

각 명령어의 역할을 정리하면:

FROM — 출발점이에요. 빈 OS부터 시작할 수도 있고, node:18처럼 이미 누군가 만들어둔 이미지 위에서 시작할 수도 있어요.

WORKDIR — 이후 명령어들이 실행될 디렉토리를 지정해요. cd /app과 비슷해요.

COPY / ADD — 내 컴퓨터의 파일을 이미지 안으로 넣어요.

RUN — 이미지를 빌드하는 도중에 실행할 명령어예요. 패키지 설치, 빌드 등에 사용돼요.

EXPOSE — 컨테이너가 어떤 포트를 쓸 건지 문서화하는 역할이에요. 실제 포트를 여는 건 docker run -p로 해야 해요.

CMD — 컨테이너가 시작될 때 실행할 기본 명령어예요. Dockerfile 당 하나만 유효해요.

ENV — 환경변수를 설정해요. ENV NODE_ENV=production 같은 식이에요.

docker-compose란

docker compose는 여러 개의 컨테이너를 한꺼번에 정의하고 실행하기 위한 도구예요.

예를 들어 웹 서비스를 만들 때 "웹 서버 + DB + Redis" 이렇게 3개의 컨테이너가 필요하다고 하면, 하나씩 docker run으로 띄우면 매번 길고 복잡한 명령어를 반복해야 해요. docker compose는 이걸 docker-compose.yml이라는 파일 하나에 전부 정리해서 한 번에 실행할 수 있게 해줘요.

아래는 예시예요

services:
  web:
    build: .              # Dockerfile로 이미지 빌드
    ports:
      - "3000:3000"       # 포트 매핑
    depends_on:
      - db                # db가 먼저 뜬 다음에 실행

  db:
    image: mysql:8        # 기존 이미지 사용
    environment:
      MYSQL_ROOT_PASSWORD: 1234
    volumes:
      - db_data:/var/lib/mysql  # 볼륨으로 데이터 보존

volumes:
  db_data:

이 파일 하나 만들어놓으면 docker compose up으로 전부 실행, docker compose down으로 전부 종료할 수 있어요.

컴퓨터 화면에 표시된 Docker 앱의 스크린샷

vscode에서 도커를 실행할 수 있습니다

설치하셔야해요

결과와 배운 점

모르는 개념은 찾아보면서 도커에 대한 정리를 하였습니다

도움 받은 글 (옵션)

재엽님이 올려주신 자료

지피터스 뉴스레터

이번 주 AI, 딱 쓸 것만

매주 월요일 오후,
읽고 바로 써먹을 AI 소식만