도커

ssummer·2023년 9월 17일
post-thumbnail

도커를 사용하는 이유

서버를 실행시키기 위해선 환경을 갖춰야한다. 새 컴퓨터를 사거나 새로운 직원이 들어오면 개발 환경을 일치시켜야하는데 설치해야할 것이 한 두개도 아니고 이걸 모두 똑같이 맞추기는 쉽지 않다. 예전 직장에 처음 들어갔을 때 개발환경 세팅 방법이 정리된 문서를 보면서 하나씩 따라했는데 한번만에 성공하지 못했던 경험이 떠올랐다.

도커란?

🔗 https://www.docker.com/

도커는 개발 환경 요소들이 설치된 모습을 이미지로 저장한 후 그 이미지를 클라우드에 올려놓는다. 이미지들이 서로 연결되어서 공장하는 설정을 문서로 저장한다. 새로운 컴퓨터에서 복사한 문서의 내용대로 이미지를 다운받아 설치한다.

가상 머신과 비슷하다고 볼 수 있는데 가상 머신보다 훨씬 빠르고 자원을 효율적으로 사용할 수 있다. 가상 머신은 운영체제를 중복으로 설치해야할 가능성이 있는데, 도커는 커널 등의 OS 핵심 기능은 제외하고 그 외의 기능들만 깔 수 있어 효율적이다.

docker-compose

docker-compose.yaml은 컨테이너들을 어떻게 설정할지를 적어두는 파일이다.

#docker-compose.yaml

version: '3.7'

# 컴퓨터들
services:
  
  # 첫번째 컴퓨터 이름
  my-frontend: 
    build: 
      context: .
      dockerfile: Dockerfile
    ports:
      - 3000:3000

  # 두번째 컴퓨터 이름
  # ...

# Dockerfile

# 나만의 가짜 컴퓨터 만드는 설명서

# 1. 운영체제 및 프로그램 하나하나 직접 설치
# 운영체제 설치
# FROM ubuntu:22.04 

# 명령어 실행
# RUN sudo apt install -y nodejs 
# RUN sudo npm install -g yarn 

# 2. 이미 리눅스, node, npm, yarn까지 모두 깔려있는 컴퓨터 다운로드
FROM node:16

# 2-2. 패키지 먼저 설치하기
# package.json과 yarn.lock이 수정되지 않는 이상 계속 캐시에서 가져옴
COPY ./package.json /myfolder/
COPY ./yarn.lock /myfolder/
WORKDIR /myfolder/
RUN yarn install

# 2-3. 소스코드 복사하기
COPY . /myfolder
RUN yarn build

# 2-4. 도커 안에서 프로그램 실행 단계 (이미지에 포함되지 않음)
CMD yarn start

docker-compose build를 하면 docker-compose.yaml 안에 기재된 dockerfile들의 최적화가 진행되고(도커 컴퓨터 생성, 패키지 다운로드), 이미지 작성된다.

build를 한번 진행하면 그 이후부터는 docker-compose up 명령어로 dockerfile 내의 실행 명령어만 실행된다.

➡️ vsc 터미널에 도커 컴퓨터에서 실행되는 로그들이 보여진다.

도커 명령어

  • docker ps - 실행되고 있는 도커 컴퓨터 컨테이너 아이디 확인 가능
  • docker exec -it - 도커 컴퓨터 내부에 접속해서 수정가능한 권한 요청
    도커 컴퓨터 안에 디렉토리를 만들고 파일 삭제 등 할 수 있음
  • docker-compose up -d - 백그라운드에서 도커 켜기
    (-d 옵션 없이 하면 포어그라운드에서 실행, 쉘 사용 불가)
  • docker ps - 도커 실행 확인
  • docker-compose-stop - 도커 끄기
  • docker-compose logs - 도커 로그 보기
  • docker-compose logs -f - 도커 로그 계속 보기
    (여기서 로그창 끄고 싶으면 ^C)
  • docker-compose logs -tail=5 - 로그 뒤에서 5개까지 보기
  • docker ps -a - 꺼진 도커 컴퓨터까지 모두 보기
  • docker ps -a -p - 모든 컴퓨터의 컨테이너 아이디 보기
  • docker rm `docker ps -a -q` - 모든 컴퓨터의 컨테이너 아이디를 가져와서 삭제
    (백틱으로 묶은 명령어를 먼저 실행하고 앞의 명령어 실행)
  • docker iamges - 작성된 이미지 확인
    (안쓰는 이미지 삭제 가능, 나중에 쓰려면 다시 빌드해야함)
  • docker rmi `docker images -q` - 도커 이미지 아이디 뽑아서 삭제
  • docker system prune -a - 전체 삭제

포트포워딩

도커 컴퓨터가 localhost:3000에 실행되어있는 상태에서 브라우저에서 localhost:3000에 접속하면 접속되지 않는다. 브라우저는 내 컴퓨터 내에 있는 localhost:3000을 찾는건데 존재하지 않으므로 불가능하다. 도커 컴퓨터의 3000번 포트를 찾고 거기서 도커 내부까지 연결되어야하는 것을 포트포워딩이라고 한다.

docker-compose.yaml 파일 내 ports가 포트포워딩 하는 부분!

주의

docker-compose build 명령어를 실행하면 도커 셋팅 파일 내부의 명령어 한 줄 한 줄 당 결과를 임시저장공간에 캐시해둔다. 한 번 빌드 후 다시 빌드를 진행하면 둘을 비교하고 변동사항이 없으면 캐시를 가져와서 빠르게 완료시킨다. 변경사항이 있다면 그 명령어부터 이후의 명령어는 캐시가 깨져버리고 새로 빌드되게 된다.

0개의 댓글