docker는 기존의 가상머신과 다르게
OS 전체를 새로 설치하지 않아도 되고
미리 docker 셋팅을 통해 프로그램을 미리 설치하게 셋팅 할 수 있기 떄문에 훨씬 가볍고 빠르다는 특징이 있다
docker build -> docker image 생성
docker images -> docekr image 목록 보기
docker run 이미지아이디 -> 해당 이미지 docker 실행
docker run -p 포트번호 : 포트번호 이미지아이디 -> 포트포워딩 하여 실행
docker ps -> 실행중인 docker 컨테이너
docker ps -a -> 꺼져있는 컨테이너까지 포함한 목록
docker pa -a -q -> 컨테이너 아이디 목록
docker exec -it 컨테이너아이디 /bin/bash -> docker 내부 쉘 실행
docker rmi 이미지아이디 -> 해당 이미지 삭제
docker rm 컨테이너 아이디 -> 해당 컨테이너 삭제
docker rmi `docker images -q` -> 이미지 아이디목록 불러와 모두 삭제
docker rm `docker ps -a -q` -> 컨테이너 아이디목록 불러와 모두 삭제
docker system prune -a -> docker 관련 이미지,컨테이너,캐시 모두삭제 (실행중인 docker 제외)
docker stop 컨테이너아이디 -> docker 종료
# 1. 운영체제 및 프로그램 설치
# FROM ubuntu:22.04
# hub.docker.com 으로 부터 우분투 설치
# RUN sudo at install nodejs
# RUN sudo npm install -g yarn
# 1. 운영체제 및 프로그램 설치(이미 리눅스, node, npm,yarn까지 모두 깔려 있는 컴퓨터 다운로드 하기)
FROM node:14
# 2. 내 컴퓨터에 있는 폴더나 파일을 도커 컴퓨터 안으로 복사하기
# RUN mkdir myfolder => mkdir을 통해 폴더를 만들지 않아도 COPY시 없으면 알아서 생성
COPY . /myfolder/
# 왼쪽 내컴퓨터 파일 , 오른 쪽 도커컴퓨터 안에 복사할 파일 경로
# RUN cd foldertest
WORKDIR /myfolder
RUN yarn install
# 3. 도커안에서 index.js 실행시키기
CMD yarn dev
# CMD 실행명령어로서 1번만 작성 가능
위 예제에서 문제점을 하나 발견 할 수 있다
재빌드시 계속해서 모듈이 설치된다는 것이다
왜 그럴까?
도커를 재빌드시 맨 위 코드부터 빌드가 되는데
임시저장공간(캐시)에 저장이 되어있으면 설치 하지 않고 임시저장공간에있는 것을 복사하여 사용한다
하지만 수정파일 발생 시 그 명령부터 캐시가깨지게 되어 캐시에서 가져오지못하게된다
그렇기 때문에 수정된부분의 실행 명령을 가장 아래로 내려서 캐시가 깨지지 않게 하는 것이 중요하다
위 예제를 효율적인 셋팅으로 변경해보자
# 1. 운영체제 및 프로그램 설치
# FROM ubuntu:22.04
# hub.docker.com 으로 부터 우분투 설치
# RUN sudo at install nodejs
# RUN sudo npm install -g yarn
# 1. 운영체제 및 프로그램 설치(이미 리눅스, node, npm,yarn까지 모두 깔려 있는 컴퓨터 다운로드 하기)
FROM node:14
# 2. 내 컴퓨터에 있는 폴더나 파일을 도커 컴퓨터 안으로 복사하기
# RUN mkdir myfolder => mkdir을 통해 폴더를 만들지 않아도 COPY시 없으면 알아서 생성
COPY ./package.json /myfolder/
COPY ./yarn.lock /myfolder/
WORKDIR /myfolder/
RUN yarn install
COPY . /myfolder/
# 왼쪽 내컴퓨터 파일 , 오른 쪽 도커컴퓨터 안에 복사할 파일 경로
# RUN cd foldertest
WORKDIR /myfolder
# 3. 도커안에서 index.js 실행시키기
CMD yarn dev
# CMD 실행명령어로서 1번만 작성 가능
가상의 컴퓨터를 만들어 실행중 api요청이 실패 했다 이유가 무엇일까?
포트 포워딩을 적용하지 않고 docker를 실행시켰기 때문에 포트를 찾지 못하는 것이다!
포트 포워딩을 사용하는 방법을 알아보자
docker run -p 3000:3000 이미지아이디 -> 3000포트~ 3000포트 로 실행
간략히 설명하자면 내 컴퓨터의 서버포트를 3000으로 찾고 docker 내부의 서버포트중 3000번을 찾아 간다는 뜻이다
즉 가상 컴퓨터의 포트 3000번과 내 컴퓨터의 포트 3000번을 연결해준다는 것이다.