환경
원하는대로 세팅
빌드
run
stop
docker hub
mac: macbook air m1
cli: zsh
IDE: vscode
저는 node.js + express + ts + yarn을 기본으로하는 세팅을 빌드하겠습니다.
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를 설정해주어야 합니다.
build를 하기 전에 docker를 설치해줍시다.
mac은 brew를 통해 쉽게 설치가 가능합니다.
brew install docker
docker build -t image_name .
빌드는 정말 단순합니다. root에서 terminal에 build 명령을 해주면 끝입니다.
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
로 종료할 수 있습니다
종료는 ctrl + c
를 통해 가능합니다.
혹은 gui로 설치된 docker 앱을 통해 종료할 수 있습니다.
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 : 삶은 확률의 구름]