[Docker] Window 로컬 환경에서 Docker 이미지 Build하기

Seung Hyeon ·2023년 9월 12일
0

백엔드

목록 보기
2/14
post-thumbnail

Prolog : Docker을 공부하는 이유


여러 명이 동일한 환경에서 개발할 수 있다.

Linux, Window, Mac OS 등 운영체제가 다양하고 운영체제에 따라 사용하는 명령어, 기술, 정책 등 저마다 조금씩 다르다.
그렇기 때문에 팀 프로젝트를 하다보면 로컬 개발 환경이 달라 누구의 PC에서는 정상 동작하는데 누구의 PC에서는 동작하지 않은 경우가 발생할 수 있다. 게다가 새로 만든 서비스를 테스트 환경이나 배포를 할 때마다 온갖 이상한 오류가 나오기 십상이다.
Docker을 사용하면 동일한 개발 환경에서 작업이 가능하기 때문에 위의 상황들을 해결할 수 있다.
Docker Hub에서 공식적으로 Docker Official Image를 제공해주기 때문에 mysql, maria, mongo, redis 등 다양한 DB를 docker pull명령어로 쉽게 설치하고 함께 사용할 수도 있다.

다른 서버로 옮겨도 일관성 있는 환경을 제공해준다.

만약 개발한 서비스의 인기가 많아져 서버를 늘리기 위해 다른 서버로 이전하고 싶을 때 Docker을 사용하면 매번 새로운 환경을 구축하지 않고도 컨테이너만 복사하면 바로 해당 환경이 구축되기 때문에 편리하다.

이러한 장점 때문에 실무에서도 Docker가 많이 쓰이고 있어 한번 Docker에 대해 공부하고 로컬 환경에서 실습을 해보려 한다.

 

Docker 설치 - Window


설치하는 과정은 간단하다.
https://docs.docker.com/desktop/install/windows-install/
위 링크에 들어가 Docker Desktop을 설치해주기만 하면 끝난다. 설치가 끝나면 CMD (혹은 Window Powershell)에 들어가 docker 명령어를 쳐서 설치가 잘 되었는지 확인해보자

⚠ 만약 Docker Desktop requires a newer WSL kernel version ERROR가 뜰 경우, Window Powershell을 관리자 권한으로 켠 후 wsl --update 실행하면 해결

처음 Docker을 실행할 경우 docker login. Docker Hub 사이트에서 가입한 계정으로 로그인하면 된다.

 

로컬에서 Docker 이미지 생성 및 실행


https://junghyeonsu.tistory.com/42 참고

전체 폴더 구조

📦mbti-agora
 ┣ 📂back
 ┣ 📂front
 ┣ 📜.gitattributes
 ┣ 📜.gitignore
 ┣ 📜.prettierrc
 ┣ 📜package.json
 ┣ 📜README.md
 ┗ 📜yarn.lock
  1. 작업 폴더로 이동 cd mbti-agora

  2. Root폴더에 Dockerfile파일과 .dockerignore 파일 생성

    • Dockerfile 예시

      FROM node:18.14.0
      
       WORKDIR /app    
       COPY . .
       RUN yarn install
      
       WORKDIR /app/back
       RUN yarn install
      
       WORKDIR /app/front
       RUN yarn install
      
       EXPOSE 5173
      
       WORKDIR /app
       CMD ["yarn", "dev"]

      WORKDIR/app
      - docker 컨테이너 안에 app이라는 작업 디렉토리 하나 생성한다.
      - 컨테이너 app폴더가 로컬의 root폴더와 같은 역할이다.
      - app폴더로 이동됨

      Copy . .

      • COPY [local folder][container folder]
      • local folder은 Dockerfile이 존재하는 파일 위치 (현재위치로 설정)
      • container folder은 WORKDIR로 설정해준 /app 폴더 위치 (app폴더 위치에 있으므로 현재위치로 설정)
      • local folder 안의 파일들을 container folder 안에 모두 복사

      RUN yarn install

      • /app 폴더에서 yarn install 실행
      • RUN은 컨테이너를 구성할 파일을 만들 때 사용

      WORKDIR/app/back & WORKDIR/app/front

      • 작업 app 폴더에 복사된 back, front 폴더에 대해서도 각각 yarn install 해줘야함

      다시 WORKDIR /app에 돌아가서 초기 실행이 yarn dev이므로 CMD ["yarn", "dev"]
      ※ CMD는 컨테이너가 실행된 후에 실행할 명령어

    • .dockerignore
      .env node_modules 등등..

  3. 작성한 Dockerfile을 바탕으로 Docker 이미지 생성 : docker build -t [생성할 이미지 이름] .

    • . 반드시 있어야 함. Dockerfile에서의 현재 위치를 의미
  4. docker images로 이미지 정상 생성 되었나 확인

  5. docker run -p 5173:5173 [이미지이름] : Nginx 웹 서버 실행 (localhost:5173으로 접근)

 

Docker 기본 명령어 정리


  • docker ps : 현재 실행 중인 컨테이너 알아보기
  • docker build -t [생성할 이름] . : 새 이미지 생성
  • docker images : 이미지 생성 및 목록 확인
  • docker run -p 호스트 포트(노트북 포트):컨테이너 포트 [이미지 이름] : 호스트 포트에서 웹 브라우저를 사용하여 컨테이너 내의 Nginx 웹 서버에 접근
    • Nginx 웹 서버에 접근하려면 호스트의 웹 브라우저 포트로 접근
  • docker run -d -p 호스트 포트(노트북 포트):컨테이너 포트 [이미지 이름] : cmd창 닫아도 계속 Nginx 띄우기
  • docker kill [이미지 이름] : 컨테이너 (Nginx 서버 종료)
  • docker container ls -a : 컨테이너 목록 조회
  • docker container rm [컨테이너ID] : 컨테이너 제거
  • docker rmi [이미지 이름] : 이미지 제거
profile
안되어도 될 때까지

0개의 댓글