본문 바로가기

IT/도커15

React + vite + typescript 프로젝트 도커 이미지 빌드 Dockerfile #Dockerfile FROM node:18-alpine as build WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build FROM nginx:stable-alpine COPY --from=build /app/dist /usr/share/nginx/html RUN rm /etc/nginx/conf.d/default.conf COPY nginx/nginx.conf /etc/nginx/conf.d EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] node:18-alpine 버전 설치 작업디렉터리를 /app으로 설정 package*.json파일을 복사 패키지 파일을 바탕으.. 2023. 6. 26.
10. 네트워킹 Docker를 설치하면 자동으로 Bridge, none(null), host 라는 3개의 네트워크를 생성한다. bridge 네트워크는 docker 가 호스트에 생성한 프라이빗 내부 네트워크이다. 모든 컨테이너는 기본적으로 이 네트워크에 연결되며 보통 172.17로 시작하는 내부 ip가 할당된다. 이 내부 ip를 사용해 컨테이너끼리 액세스 할 수 있다. 외부에서 이 컨테이너에 액세스 하려면 컨테이너의 포트를 docker host의 포트에 매핑하면 된다. $ docker run -p 8080:8080 my-webapp host 네트워크로 연결하면 포트 매핑 없이 자동으로 같은 포트에 외부접속이 가능하다. 하지만 이미 사용중인 포트이기 때문에 같은 포트로 다른 웹컨테이너를 실행할 수 없다. none 네트워크에.. 2023. 1. 27.
9. 도커 엔진, cgroups 리눅스 호스트에 docker를 설치하면 컴포넌트가 3개 설치된다. Docker Daemon은 docker객체인 이미지와 컨테이너, 볼륨 및 네트워크를 관리하는 백그라운드 프로세스이다. Docker REST API 서버는 프로그램이 쓰는 API인터페이스로 Daemon과 통신하고 명령어를 제공할때 사용된다. Docker CLI는 명령줄 인터페이스이며 컨테이너 실행, 중지 및 이미지 제거 등에 사용된다. 또한 REST API를 사용하여 Docker Daemon과 상호작용하는데 이때는 Docker CLI가 반드시 같은 호스트에 있지 않아도 된다. docker 명령어에서 -H 옵션을 사용해서 원격 Docker Engine의 주소와 포트를 지정하면 된다. cgroups Docker 호스트와 컨테이너는 CPU와 메모.. 2023. 1. 25.
8. docker registry 도커 레지스트리는 docker 이미지가 저장되어있는 공간이다. nginx 이미지를 보자 User 부분은 사용자나 계정 이름을 나타낸다. Image 이름 부분과 동일하면 생략가능하다. docker.io는 docker의 기본 레지스트리인 Docker Hub이고 기본값으로 지정되어 있어 생략가능하다. Docker Hub 외에도 다양한 레지스트리가 있다. 예를 들면 gcr.io인 Google 레지스트리가 있다. 누구든 다운로드해서 사용 가능한 공개 이미지들이 있다. 하지만 인하우스 방식으로 개발한 애플리케이션이라면 공개되어선 안된다. 그럴때 사용하는것이 내부 프라이빗 레지스트리이다. 프라이빗 레지스트리 배포하기 docker registry 자체가 또 다른 애플리케이션이 되므로 docker 이미지로 사용할 수 있.. 2023. 1. 25.
7. docker compose 다수의 서비스를 실행하는 복잡한 애플리케이션을 설정하기위해서는 docker compose를 사용하는게 좋다. yaml형식의 구성파일인 docker-compose.yml을 생성하고 $ docker-compose up 명령어를 실행하기만 하면 docker-compose.yml에 구성한 애플리케이션 스택 전체를 불러올 수 있다. 대신 하나의 docker host에 실행되는 컨테이너에만 사용할 수 있다. 예들들어 파이썬으로 개발한 voting-app 으로 투표를 하면 redis 인메모리 db에 저장되고 .NET으로 개발한 worker 서버가 영구 스토리지에 업데이트하는데 이 때 영구 스토리지는 PostgreSQL이다. 그리고 투표 결과는 Node.js로 개발했다. $ docker run -d --name=red.. 2023. 1. 25.
6. CMD vs ENTRYPOINT $ docker run ubuntu 위 명령어를 실행하면 바로 종료된다. ubuntu 이미지의 Dockerfile을 살펴보면 CMD로 bash 를 사용하는걸 볼 수 있다. bash는 터미널에서 입력을 수신하는 셀인데 터미널을 찾을 수 없으면 종료한다. docker는 기본적으로 실행될 때 컨테이너에 터미널을 연결하지 않는다. 그래서 bash 프로그램은 터미널을 찾지 못하고 종료되는것이다. 1. 컨테이너를 시작하기 위한 다른 명령어는 어떻게 지정할 수 있을까? 한 가지 옵션은 docker run 뒤에 명령어는 추가하는 것이다. $ docker run ubuntu sleep 5 위와 같이 sleep 5 명령어를 추가하면 컨테이너가 시작될 때 sleep 프로그램을 실행하고 5초 후에 종료된다. 2. 어떻게 하면.. 2023. 1. 22.