docker 빌드, 사용, 배포

YOUNGJOO-YOON·2021년 12월 3일
0

tools

목록 보기
6/8

table of contents

  1. 환경

  2. 원하는대로 세팅

  3. 빌드

  4. run

  5. stop

  6. docker hub

1. 환경

mac: macbook air m1

cli: zsh

IDE: vscode

저는 node.js + express + ts + yarn을 기본으로하는 세팅을 빌드하겠습니다.

2. 원하는대로 세팅

boiler plate를 만든다는 느낌으로 세팅해주세요

전 보통 src 내부에 source code를 전부 넣고 root에는 config 파일들을 뿌려놓습니다.

원하는대로 세팅을 하셨다면
root에 Dockerfile을 만들어줍니다.

# = comment
# /Dockerfile

# 부모 이미지 지정
FROM node:16

# yarn 설치
# RUN npm install -g yarn

# 작업 디렉토리 생성
WORKDIR /usr/src/app

# 의존성 설치
COPY package*.json ./
RUN yarn

# 소스 추가
COPY . .

# 포트 매핑
EXPOSE 3000

# 실행 명령
CMD ["yarn","dev"]

위 코드는 마치 aws나 타 서버 대여 플렛폼에서 사용하는 yml config 파일과 비슷한 설정파일입니다.

docker는 image를 빌드하고 이를 실행합니다 이게 전부입니다. 따라서 무엇을 COPY하고 무엇을 RUN 설치하고 CMD 어떻게 commend line을 실행할지 알려주어야합니다.

port mapping은 docker container가 가지는 port입니다. docker를 돌리는 순간 docker는 하나의 작은 container에 격리됩니다. 때문에 이를 현재 docker를 돌리는 pc와 연결시켜주기 위해 port를 설정해주어야 합니다.


3. 빌드

  • build는 아직 하지 마시고 6번까지 읽어주세요

build를 하기 전에 docker를 설치해줍시다.

mac은 brew를 통해 쉽게 설치가 가능합니다.
brew install docker

docker build -t image_name .
빌드는 정말 단순합니다. root에서 terminal에 build 명령을 해주면 끝입니다.


4. run

docker를 실행합니다. setting을 어떻게 했는지에 따라 image 내부에 node server를 바로 실행했을 수 있고
아니면 그냥 실행전일 수 있습니다.

실행하기 전에 images를 찾아봅시다.

docker images

이름을 확인하고

docker run -p 5000:3000 image_name

만약 docker run을 하면 바로 server가 실행되게끔 설정하였다면
docker run -p --init 5000:3000 image_name을 통해 실행해보세요

-p = proxy
docker를 실행하고 있는 host pc에서 받는 5000 포트의 요청을 container의 3000번으로 바꿔줍니다.

--init = PID를 1번으로 해줍니다. (대충 이게 중요하니까 이걸 잘 굴려라는 뜻)

init을 붙인 경우 바로 실행되는 node server를 host pc에서 ctrl + c로 종료할 수 있습니다


5. stop

종료는 ctrl + c를 통해 가능합니다.

혹은 gui로 설치된 docker 앱을 통해 종료할 수 있습니다.


6. docker hub

docker hub 회원가입과 인증을 완료하세요

build를 할 때 이름을 정하게 되는데 밑의 local-image:tagname의 tagname은 build시 이름의 마지막에 ':' 를 붙이고 숫자를 써줍니다.

그냥 그럼 그게 tagname이 됩니다.

new-repo는 repo의 이름입니다.

여기서 repo이름과 image이름은 같은 이름을 해주세요
또한 image이름에 docker hub이름을 포함해야합니다.

dockerhubname/imagename:tagname이런 식으로 해주세요
아니면 push가 안됩니다.

밑은 docker hub 명령어, docker 명령어입니다.

docker tag local-image:tagname new-repo:tagname
docker push new-repo:tagname

docker ps 
// 실행중인 컨테이너 조회 
docker ps -a 
// 중지중인 컨테이너까지 모두 조회 
docker images 
// 이미지 조회 
docker rm 컨테이너ID 
// 컨테이너 삭제, 중지된 것만 삭제가능 
docker stop 컨테이너ID 
// 컨테이너 중지 
docker rmi 이미지명 
// 이미지 삭제 
docker start 컨테이너ID 
// 컨테이너 시작 
docker restart 컨테이너ID 
// 컨테이너 재부팅 
docker attatch 컨테이너ID 
// 실행 중인 컨테이너에 접속

출처: https://ebbnflow.tistory.com/206 [Dev Log : 삶은 확률의 구름]
profile
이 블로그의 글은 제 생각을 정리한 글과 인터넷 어딘가에서 배운 것을 정리한 글입니다. 출처는 되도록 남기도록 하겠습니다. 수정 및 건의 오류 등이 있으면 언제든지 댓글 부탁드립니다.

0개의 댓글