라벨이 image인 게시물 표시

Docker 도커 컨테이너 안에 TimeZone을 Dockerfile으로 셋팅하기

이미지
개발을 진행하다 보면 컨테이너 안의 TimeZone을 UTC 기준이 아닌 다른 시간대로 설정해야 하는 상황이 생깁니다. 컨테이너를 생성하면서 TimeZone을 변경하는 방법은 Dockerfile를 수정하면 됩니다. 저는 NodeJS을 사용하기 때문에 Base 이미지를 node로 하도록 하겠습니다. 일단 TimeZone을 셋팅하지 않은 상태에서 시간을 측정해보겠습니다. 먼저 간단한 서버를 작성합니다. (index.js) const http = require ( "http" ) const host = "localhost" const port = 8000 const requestListener = function ( req , res ) { res . writeHead ( 200 ) res . end ( "My first server!" ) } const server = http . createServer ( requestListener ) server . listen ( port , host , () => { console . log ( `Server is running on http:// ${ host } : ${ port } ` ) }) 먼저 일반 node 이미지로 작성한 Dockerfile입니다. # Base 이미지를 사용합니다. # FROM node:20.10.0 FROM node:20.10.0 # 코드들을 도커 이미지로 이동시킵니다. COPY . . # 서버의 노출된 포트를 표시한다 EXPOSE 8000 # nodejs 서버를 실행한다. CMD [ "node" , "index.js" ] 해당 Dockerfile을 기준으로 이미지를 생성합니다. 해당 이미지를 기준으로 컨테이너를 생성하고 컨테이너 내의 시간을 확인합니다. 위 터미널에서 나온것과 같이 UTC시간이 Default인것을 알...

Kbernetes kubectl을 이용하여 Pods를 업데이트 하기

이미지
  해당 pods에 사용되는 이미지를 다른 이미지로 바꿔야 하는 경우가 있습니다. 이때도 변경된 이미지를 Pull받아야 합니다. 해당 글은 아래 gitHub repository를 이용하여 작성했습니다. gitHubLink : https://github.com/Alex-Choi0/kubernetes_create_one_pod.git 기존 코드와 다르게 '<h2>Update ver 1</h2>'를 추가하였습니다. 이는 배포된 pod에 없는 테그 이므로 같은 이미지를 사용하는 컨테이너를 다시 배포를 해야 합니다.  const express = require ( 'express' ); const app = express (); app . get ( '/' , ( req , res ) => { res . send ( ` <h1>Test for minikube</h1> <h2>Update ver 1</h2> <p>/ : Open the site</p> <p>/err : process top (get error)</p> ` ); }); app . get ( '/err' , ( req , res ) => { process . exit ( 1 ); }); app . listen ( 8080 ); 1. 이미지 Create하고 Push 하기(경로는 도커파일이 존재하는곳) $ docker build -t [image name]:[tag] . copy 이제 해당 이미지를 컨테이너에 다시 배포해야 한다. minikube dashboard를 확인하면 컨테이너의 이름을 확인할수 있다. 아래 사진으로는 'first-pods' 이다. 이미지는 'alexchoi1/first-pods:latest'를 사용하지만 위의...

NaverCloud(NCP) Docker 이미지를 Container Registry로 올리기 -2

이미지
 이번에는 터미널을 이용하여 NCP의 Container Registry로 도커 이미지를 올리도록 하겠습니다. 참고 이전글 : NaverCloud(NCP) Docker 이미지를 Container Registry로 올리기 -1 1. docker login - 해당레지스터(여기서는 NCP Container Registry)로 로그인을 진행합니다. $ docker login [registry] copy 사진1) docker login 진행 docker login을 NCP의 Container Registry로 진행하기 위해서는 Access, Screat Key가 필요합니다. (방법에 대해서 링크 확인) 2. docker 이미지 생성 - Local에서 docker이미지를 생성합니다. 아래 cli는 현재 경로에 Dockerfile이 있다는 가정하에 작성한 것입니다. $ docker build -t [user/imageName:tag] . copy 사진2) Local에서 이미지 빌드 사진3) 이미지 빌드 완료 3. Container Registry로 이미지 푸쉬하기 - Local에서 생성한 docker이미지를 cli로 Container Registry로 올립니다. $ docker push [user/imageName:tag] copy 사진4) 이미지를 Container Registry로 Push 사진5) Container Registry로 Push완료 4. 이미지 푸쉬 완료 - NCP의 Container Registry에 푸쉬한 이미지를 확인합니다. 사진6) 해당 Push한 Registry로 업로드 사진7) Registry에 이미지 업로드 확인 사진8) 이미지 내용 확인 이제 어느 서버에서도 해당 Docker 이미지를 Pull받을수 있습니다.

docker 도커허브(docker hub)에 이미지 받기(Pull)

이미지
 이제 이미지를 'docker hub'에서 받도록 하겠습니다. 'docker hub'에 이미지 올리는 법(Public)에 대해서 알고 싶으시면 아래 링크를 참고해 주시기 바랍니다. 링크1 : docker 도커허브(docker hub)에 이미지 올리기(Push) 사진1) 도커허브에서 참고해야 할 사항 docker hub에 올려져 있는 레파지토리 이미지를 받습니다. $ docker pull [REPOSITORY_NAME]:[TAG OPTIONAL] copy 사진2) 이미지를 도커 허브에서 받음 사진2에서 도커허브로부터 이미지를 받을것을 확인할수 있습니다. 이제 이 이미지로 컨테이너를 생성해서 사용하시면 됩니다. 컨테이너 생성에 대해서는 아래 링크를 확인해 주시기 바랍니다. 링크2: docker 도커를 이용하여 컨테이너(CONTAINER) 생성하기 : NestJS 사용 해당 이미지는 Public 이미지 이기 때문에 누구든지 받으실수 있습니다. 개발자 디스코드 서버 링크

docker 도커허브(docker hub)에 이미지 올리기(Push)

이미지
  사진1) 도커허브 웹사이트 GitHub와 마찬가지로 도커허브(docker hub)또한 해당 이미지를 올리거나 내릴수 있습니다. 하지만 지금은 이미지를 올리는 것에 이 글을 작성하도록 하겠습니다. 만약 도커의 이미지와 컨테이너를 생성하는 방법에 대해서 모르시면 아래 링크를 참고해 주시기 바랍니다. 링크1: docker 도커를 이용하여 이미지(IMAGE) 생성하기 : NestJS 사용 링크2: docker 도커를 이용하여 컨테이너(CONTAINER) 생성하기 : NestJS 사용 사진2) 도커 레파지토리 페이지 사진2에 해당되는 페이지에서 'Create Repository'를 선택해 줍니다. 사진3) 레파지토리 생성 docker hub 사이트에서 이미지를 저장할 레파지토리를 생성합니다. 이때 'Public'와 'Private'이 있습니다. 말 그대로 'Public'는 다른 개발자한테 열려있는 이미지 입니다. 'Private'는 해당 계정만 사용할수 있는 이미지 입니다. 지금은 Public로 진행하겠습니다. 사진4) 레파지토리 생성 생성이 완료되면 해당 레파지토리로 이미지를 올릴수 있습니다.  사진5) 이미지 생성 Local에서 해당 이미지를 생성하는데 주의할 점이 있습니다. 이미지의 Name이 docker hub에서 해당 레파지토리의 Name과 일치해야 합니다. 사진3에서 'alexchoi1/firstdockerhub'가 레파지토리 Name입니다. 그러면 Local의 이미지 또한 'alexchoi1/firstdockerhub'가 되어야 합니다.  $ docker push [REPOSITORY_NAME]:[TAG OPTIONAL] copy 사진6) docker hub로 이미지 push 이제 해당 이미지를 docker hub로 일어줍니다. 사진7) docker hub로 이미지 push 모든것이 정상적으로 올라가면 사진7과 같이 해당 레파지토리...

docker 도커를 이용하여 이미지(IMAGE) 생성하기 : NestJS 사용

이미지
 안녕하세요. 알렉스 입니다. 이번에는 도커를 이용하여 이미지를 생성하도록 하겠습니다. 도커에서 이미지는 일종의 설계도면이라고 보시면 됩니다. 실질적으로 컨테이너를 만들기 위해서는 이미지가 필요합니다. 따라서 이미지를 어떻게 만드냐에 따라 컨테이너의 성능도 달라질수 있습니다. 사진1) 도커파일 생성(Dockerfile) 일단 도커파일을 생성합니다. 이 도커파일(Dockerfile)은 이미지를 어떤 절차로 실행할지를 알려주는 문서라고 보면 됩니다. # Base 이미지를 사용합니다. (여기서는 node 16버전을 사용합니다) FROM node : 16 # /Dockerfile # 작업 폴더를 설정합니다. 도커내의 폴더를 지정합니다. WORKDIR /app/nestjs # 해당 package.json 파일을 도커의 /app/nestjs폴더로 옮깁니다. COPY package.json /app/nestjs # 해당 package-lock.json 파일을 도커의 /app/nestjs폴더로 옮깁니다. COPY package-lock.json /app/nestjs # 'npm install'을 터미널로 실행합니다. RUN npm install # 복사하지 않은 모든 것을 도커의 /app/nestjs으로 옮깁니다. COPY . /app/nestjs # 'npm run build'을 터미널로 실행합니다. RUN npm run build # 도커 내부에 3000포트를 노출 시킵니다. EXPOSE 3000 # 컨테이너 실행시 'node dist/main'을 터미널로 실행합니다. CMD [ "node" , "dist/main" ] 위 코드는 제가 작성한 도커 파일 입니다. 이 상태로 바로 이미지를 생성할수 있습니다. 하지만 각 단계가 어떻게 진행되는지 알아야 하기 때문에 한줄씩 설명 드리도록 하겠습니다 (주석 참고 가능) - FROM 'FROM'...

Docker 개념

이미지
  안녕하세요. 알렉스 입니다. 제가 Docker 스택을 배우고 있습니다. 사용하면서 배운 내용들을 블로그 글로 정리할려고 합니다.  도커는 컨테이너를 이용하여 프로그램을 구동하는 방식입니다. 각각의 개발자들은 서로 다른 환경을 갖고 있고 그것을 일원하 하는데에도 많은 시간이 걸립니다. 이미 잘 동작되는 환경과 프로그램을 하나의 모듈로 만들고 그것을 필요한 요소마다 가져다 쓸수 있는것이 Docker Image 입니다. 사진1) Docker File에서 IMAGE 생성 지금은 개념만 알기 위해서 사진1과 같이 나타내지만 'Docker File'은 Docker Image를 생성하기 위한 문서 입니다. 이 문서를 이용해서 IMAGE를 생성합니다. IMAGE안에 단순히 코드 뿐만 아니라 추가로 받아야 할 다른 이미지, 작동 경로와 코드, 그외의 파일 및 실행방법들을 이미지로 만들어 줍니다. 이때 주의할 점은 아직 앱처럼 사용할수 없다는 것입니다. 이미지를 이용해서 컨테이너를 만들어야 비로서 서비스를 할수 있습니다. 사진2) IMAGE로 Container생성 사진2와 같이 이제 이미지로 컨테이너를 생성합니다. 이 컨테이너는 독립된 공간으로 최소한의 리소스를 이용하여 운영이 됩니다. 필요시 IMAGE를 이용하여 여러개의 칸테이너를 생성할수 있습니다. 사진3) Docker로 통신방법  도커의 컨테이너는 고립된 공간이다. 따라서 Local PC가 Container와 통신하기 위해서는 설정을 해줘야 한다. 외부에서 접속할때 허용하는 'Local PORT'가 3000이라고 예를 들겠다. 외부 어디든 3000포트를 통해 PC에 접속할수 있다 하지만 아직 도커의 컨테이너에는 접속할수 없다.  도커만 설치되어 있으면 설사 환경이 셋팅이 되지 않더라도 컨테이너를 통해서 해당 앱을 실행할수 있습니다.  이때 도커 컨테이너 안에서도 포트를 허용한다. 도커 내부에서 운영되는 서비스의 포트는 5000이다. 이때 'Local PORT'와 'Co...