티스토리 뷰

TIL WIL

도커 사용법

타올이 2022. 3. 26. 23:15
반응형

도커(Docker)

갖고 있는 서버, 패키지 버전, 운영체제 등등에 따라 프로그램을 설치하는 과정 중에 많은 에러들이 발생하게 됩니다.. 그것만이 아니라 설치 과정이 다소 복잡합니다

 

도커를 쓰는 이유

어떠한 프로그램을 다운로드하는 과정을 굉장히 간단하게 만들기 위해서입니다.

 

도커 없이 프로그램받을 때 원래 프로그램을 다운로드하고 실행 하는 순서

순서

갖고 있는 서버, 패키지 버전, 운영체제 등등에 따라 프로그램을 설치하는 과정 중에 많은 에러들이 발생하게 됩니다.. 그것만이 아니라 설치 과정이 다소 복잡합니다

 

도커 이미지와 도커 컨테이너 정의

컨테이너는 코드와 모든 종속성을 패키지화하여 응용 프로그램이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 하는 소프트웨어의 표준 단위다.

 

컨테이너 이미지는 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정과 같은 응용 프로그램 을 실행하는 데 필요한 모든 것을 포함하는 가볍고 독립적이며 실행 가능한 소프트웨어 패키지 입니다. 또한 컨테이너 이미지는 런타임에 컨테이너가 되고 도커 컨테이너의 경우 도커 엔진에서 실행될 때 이미지가 컨테이너가 된다. 리눅스와 윈도우 기반 애플리케이션 모두에서 사용할 수 있는 컨테이너화 된 소프트웨어는 인프 라에 관계없이 항상 동일하게 실행됩니다. 컨테이너는 소프트웨어를 환경으로부터 격리시키고 개발과 스테이징의 차이에도 불구하고 균일 하게 작동하도록 보장한다.

 

1) 도커 이미지 생성 빌드

-Dockerfile

# 노드를 베이스로 생성
FROM node:16.13.1
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
CMD [ "node","server.js" ]
COPY . .
EXPOSE 4000
 
빌드
docker build -t naho199345/nodejs ./
 

 

2) 도커 컨테이너 생성

docker run -d -p 4000:4000 -v /usr/src/app/node_modules -v pwd:/usr/src/app naho199345/nodejs​
 
 

3) 도커 compose 생성

-docker-compose.yml
version: "3.5"
services:
  server:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: ptgather
    restart: always
    env_file:
      - .env
    ports:
      - "${PORT}:${PORT}"
    environment:
      # MongoDB 계정 및 패스워드 설정 옵션
      MONGO_INITDB_ROOT_USERNAME: "${DB_USERNAME}"
      MONGO_INITDB_ROOT_PASSWORD: "${DB_PASSWORD}"
    volumes:
#     VOLUME은 디렉터리의 내용을 컨테이너에 저장하지 않고 호스트에 저
#     록 설정합니다.
#     데이터 볼륨을 호스트의 특정 디렉터리와 연결하려면 docker run 명령
#     옵션을 사용해야 합니다.
#     ex) -v /root/data:/data
      - C:/data/db/MongoDB:/data/db
 

compose 실행

docker-compose up
 

 

MongoDB를 Docker로 띄우기

cmd에 다음과 같이 입력한다.

docker run --name mongo_db -p 27017:27017 -d mongo

docker image가 local에 존재하지 않으면 docker hub에서 다운로드 받아온다.

 

※ robo3T를 사용하면 mongoDB를 관리하기 편리하다.

   다운로드 링크 : https://robomongo.org/download

※ mongodb container를 삭제하면 당연히 데이터도 사라진다.


Named Volume을 사용해서 DB데이터 유지하기

 

1. named volume 생성

named volume? => docker에서 유지되는 데이터를 관리해야 할 때 편리하게 이름으로 사용할 수 있게 만들어둔 volume 입니다. 

docker volume을 생성하는 커맨드는 다음과 같다.

docker volume create [이름]

 

docker volume inspect [이름]
//위 커맨드를 이용해 named volume에 대한 정보를 더 얻을 수 있다.

 

2. named volume 연결

저장해야하는 데이터가 있을 때, named volume을 컨테이너와 연결해서 사용하게 되는데 container에서 유지되어야 하는 데이터가 있는 폴더를 named volume과 연결을 해주면 그 폴더에 데이터가 저장 될 때마다 named volume에 데이터가 저장되게 된다. 그래서 기존에 있던 container를 삭제하고 새로운 container를 띄울 때 동일한 위치에 named volume을 연결시켜 주면 새로운 container에서도 기존에 있던 데이터를 유지할 수 있게 된다.

docker run -p 27017:27017 -v [volume이름]:[경로] mongo

Bind Mount

Bind Mount은 내가 원하는 볼륨을 docker container 내의 볼륨에 연결하는 기능이다.

=> 코드가 업데이트 될 때 마다 image를 생성하고 container를 새로 띄우는건 cost가 크기 때문에 사용한다.

 

bind mount 문법은 named volume과 거의 유사하다.

docker run -v {host_path}:{container_path} <docker_image>

 

아래는 예시

C:\Users\peoplecom\Desktop\승호\docker_practice\memo-app\templates>docker run -v C:\Users\peoplecom\Desktop\성원\docker_practice\memo-app\templates:/templates -p 80:5000 -d tjddnjs7559/docker-memo:version2

 

Elastic Beanstalk(EB)

https://loy124.tistory.com/361

 

Docker - Node +Mysql + React - AWS 배포하기(Travis CI)

loy124.tistory.com/360 Docker - Node +Mysql + React - 개발및 Dockerfile 생성하기 github.com/loy124/docker-react-fullstack loy124/docker-react-fullstack Contribute to loy124/docker-react-fullstack de..

loy124.tistory.com

 

로드 밸런싱/오토스케일링

https://www.youtube.com/watch?v=Mkr0PxydGSE 

 

반응형

'TIL WIL' 카테고리의 다른 글

항해 99 TIL-27 도커 환경변수  (0) 2022.03.26
항해 99 TIL-26 Nginx  (0) 2022.03.21
항해 99 TIL-25 CI/CD  (0) 2022.03.20
항해 99 TIL-24 Swagger (in Node.js)  (0) 2022.03.16
항해 99 TIL-23 MVC  (0) 2022.03.15
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
링크
글 보관함