라벨이 Dockerfile인 게시물 표시

Git Action - GitHub Secrets를 Build과정에 넣기

이미지
 NextJS 또는 React를 배포할때 Build 또는 "npm run dev"를 이용해서 배포를 한다. 그런데 "npm run dev"시점에서 환경변수가 적용이 되지만 Build에서는 Build때 환경변수가 적용되어야 한다. 그래야 실제 배포때 env파일이 적용이 되기 때문이다. 아래 글은 Dockerfile에서 Build시 환경변수를 적용하는 방법이다. VITE를 이용해서 빌드를 할려고 하는데 필요한 환경변수는 아래 2개이다. VITE_API_URL VITE_FILE_UPLOAD_API_URL 먼저 Dockerfile에 해당 ENV파일이 저장될수 있도록 build전 단계에서 작성. 사진1) Dockerfile - ARG, ENV셋팅 GitHub의 Secreat를 사용하기 위해서는 ARG셋팅이 필요하다. Git Action의 yml파일에서 환경변수값을 Docker에 전달하기 위해서 해당 셋팅을 Dockerfile에 작성해야 합니다. ARG를 선언하지 않으면 build시 Dockerfile내부에 접근할수 없습니다. 이후 ENV로 해당 값을 지정 합니다. 이때 "$VITE_API_URL", "$VITE_FILE_UPLOAD_API_URL" 부분은 GitHub에서 갖고옵니다. 사진2) .yml파일의 build부분 수정 사진2의 84 ~ 86번째 줄이 build과정중에 ENV파일을 추가하기 위한 부분입니다.  사진3) Repository secrets 설정 옵션 사진4) Repository secrets 설정 옵션을 지정 마지막으로 사진3, 4와 같이 build시 저장할 Repository secrets를 설정한다. 위 설정이 다 된후에 CI/CD가 진행되는 branch에 푸시할시 build과정에서 Repository secrets를 이용해서 build를 진행한다.

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인것을 알...

docker-compose php, mysql을 Dockerfile, docker-compose.yaml을 이용하여 서버 구성하기

이미지
파일구성 src폴더 안에는 php파일들이 들어갑니다.  mysql.php 코드 <!-- ./src/mysql.php --> <?php $env = parse_ini_file ( '../.env' ); // env파일 경로를 확인해서 key, value로 저장 $host = $env [ "MYSQL_HOST" ]; // MySQL 연결 주소 $username = $env [ "MYSQL_USERNAME" ]; // MySQL 사용자 이름 $password = $env [ "MYSQL_PASSWORD" ]; // MySQL 사용자 비밀번호 $dbname = $env [ "MYSQL_DATABASE" ]; // 데이터베이스 이름 $dbport = $env [ "MYSQL_PORT" ]; // 데이터베이스 포트 // MySQL에 연결 $conn = new mysqli ( $host , $username , $password , $dbname , $dbport ); // 연결 확인 if ( $conn -> connect_error ) { die ( "Connection failed: " . $conn -> connect_error ); } echo "Connected successfully" ; // 연결 종료 $conn -> close (); ? > Dockerfile 파일 # ./Dockerfile # PHP Docker 공식 문서 : https://hub.docker.com/_/php # PHP 이미지를 사용합니다. 버전은 필요에 따라 조정할 수 있습니다. FROM php : 8.2-cli # PHP의 mysqli을 사용하기 위한 extension을 설치 RUN docker-php-ext-install mysqli && doc...

docker-compose 도커를 이용하여 개발하기 - 모듈 동기화

이미지
저번작업에 이어 이번에는 node_modules를 동기화 하겠습니다. 자세한 내용은 이전 글을 참고해 주시기 바랍니다. 이전글 : docker-compose 도커를 이용하여 개발하기 - 코드 동기화 1. module을 동기화하기 저번과 마찬가지로 NestJS을 이용하여 도커 개발환경을 구성하는데 이번에는 node_modules를 실시간으로 동기화 하는 작업을 하겠습니다.  먼저 .dockerignore 파일을 작성합니다. # ./.dockerignore node_modules package.json package-lock.json npm-debug.log dist 그리고 기존의 도커파일(Dockerfile)을 수정합니다. # ./Dockerfile # Base 이미지를 사용합니다. FROM node : 18.18.0 # Docker Container안의 디렉토리를 설정합니다. 설정을 안할시 Root리렉토리로 설정됩니다. WORKDIR /nestjs # package.json을 도커 이미지에 복사합니다. # COPY package.json /nestjs # COPY package-lock.json /nestjs # package데이터를 근거로 npm을 설치한다. # RUN npm install # 해당 디렉토리에 있는 모든 파일, 폴더를 도커 이미지로 복사합니다. # .dockerignore에 있는것은 제외 COPY . /nestjs # 해당 도커 이미지에서 build를 해서 dist폴더를 생성합니다. # RUN npm run build # 해당 이미지의 포트를 EXPOSE합니다. # 표시만 할뿐 실제 도커 컨테이너의 포트가 노출되지 않는다. EXPOSE 3000 # 도커 이미지를 이용하여 컨테이너를 생성시 nodejs 자동 실행(development mode) CMD [ "npm" , "run" , "start:dev" ] 다음은 docker-compose.yaml파일을 수정합니다. ...

docker-compose 도커를 이용하여 개발하기 - 코드 동기화

이미지
개발을 진행할때 도커를 이용하다보면 build를 진행하는 시간이 길다는 것을 알수 있습니다. 이때 개발이 완료될때마다 매번 build를 하지 않고 실시간으로 도커 컨테이너안의 코드와 개발IDE의 코드를 동기화 합니다. 필요시 확장 파일들도 동기화 할수 있습니다. 일단 코드를 동기화 하는 법에 대해서 확인해 보겠습니다. 1. 코드를 동기화하기 이번에 사용할 프로그래밍 언어는 TypeScript이며 NestJS를 이용하여 간단한 서버를 구성할 것입니다. 자세한 내용은 아래 공식 사이트를 참고해 주시기 바랍니다. 공식 NestJS 사이트 링크 프로젝트를 생성후 Dockerfile을 만들어서 작성합니다. # ./Dockerfile # Base 이미지를 사용합니다. FROM node : 18.18.0 # Docker Container안의 디렉토리를 설정합니다. 설정을 안할시 Root리렉토리로 설정됩니다. WORKDIR /nestjs # package.json을 도커 이미지에 복사합니다. COPY package.json /nestjs COPY package-lock.json /nestjs # package데이터를 근거로 npm을 설치한다. RUN npm install # 해당 디렉토리에 있는 모든 파일, 폴더를 도커 이미지로 복사합니다. # .dockerignore에 있는것은 제외 COPY . /nestjs # 해당 도커 이미지에서 build를 해서 dist폴더를 생성합니다. RUN npm run build # 해당 이미지의 포트를 EXPOSE합니다. # 표시만 할뿐 실제 도커 컨테이너의 포트가 노출되지 않는다. EXPOSE 3000 # 도커 이미지를 이용하여 컨테이너를 생성시 nodejs 자동 실행(development mode) CMD [ "npm" , "run" , "start:dev" ] 이제 이 도커파일을 사용할 docker-compose.yaml파일을 만듭니다. ...

docker-compose NodeJS(NestJS) 적용하기 -3

이미지
 이번에는 기존의 docker-compose를 이용하여 server에 redis를 연결하도록 하겠습니다. 이전글에서는 postgres을 이용하여 연결했습니다. 아래글을 참고해 주시기 바랍니다. 이전글 : docker-compose NodeJS(NestJS) 적용하기 - 2 진행하기 전에 Docker와 Docker-Compose가 설치되 있어야 하고 OS는 Ubuntu(Linux)를 사용합니다.  docker install by terminal : ubuntu 20.04 docker-compose Ubuntu Install 먼저 해당 프로젝트에 redis를 yarn으로 설치해 줍니다. $ yarn add cache-manager@^4.1.0 cache-manager-redis-store@^2.0.0 redis@^4.3.0 copy $ yarn add -D @types/cache-manager@^4.0.2 @types/cache-manager-redis-store@^2.0.1 copy 해당 redis 설치는 아래 링크를 참고해 주시기 바랍니다. 링크1 : NestJS Redis를 이용하여 캐시(Cache) 관리 파일에 변경사항이 있으니 참고해 주시기 바랍니다. --build를 추가하여 변경된 코드를 반영합니다. $ docker-compose up --build -d copy 해당 gitHub(branch : docker-compose_NodeJS_NestJS_적용하기-1 -> docker-compose_NodeJS_NestJS_적용하기-3)

docker-compose NodeJS(NestJS) 적용하기 -2

이미지
 이번에는 기존의 docker-compose를 이용하여 server에 postgers를 연결하도록 하겠습니다. 이전글 : docker-compose NodeJS(NestJS) 적용하기 -1 진행하기 전에 Docker와 Docker-Compose가 설치되 있어야 하고 OS는 Ubuntu(Linux)를 사용합니다.  docker install by terminal : ubuntu 20.04 docker-compose Ubuntu Install 먼저 해당 프로젝트에 '@nestjs/typeorm' 'pg'를 yarn으로 설치해 줍니다. $ yarn add @nestjs/typeorm pg typeorm copy 해당 typeorm 및 pg연결은 아래 링크를 참고해 주시기 바랍니다. mysql이라 하더라도 pg(postgres)으로 변경하면 됩니다. 링크1 : nest js -5 Connect to DataBase(mysql) with TypeORM 'docker-compose'파일에 변경사항이 있으니 참고해 주시기 바랍니다. --build를 추가하여 변경된 코드를 반영합니다. $ docker-compose up --build -d copy docker-compose up --build -d 이후 진행을 하면 database와 정상적으로 연결된 것을 알수 있습니다. 해당 gitHub(branch : docker-compose_NodeJS_NestJS_적용하기-1 -> docker-compose_NodeJS_NestJS_적용하기-2) 이후글 : docker-compose NodeJS(NestJS) 적용하기 -3

docker-compose NodeJS(NestJS) 적용하기 -1

이미지
 이번에는 docker-compose를 이용하여 컨테이너를 생성하도록 하겠습니다. 진행하기 전에 Docker와 Docker-Compose가 설치되 있어야 하고 OS는 Ubuntu(Linux)를 사용합니다.  docker install by terminal : ubuntu 20.04 docker-compose Ubuntu Install 해당 프로젝트 폴더안에서 Dockerfile을 생성합니다. Dockerfile 생성 방법에 대해서는 아래 링크를 참고해 주시기 바랍니다. 링크 3 : docker 도커를 이용하여 이미지(IMAGE) 생성하기 : NestJS 사용 아래는 해당 Dockerfile입니다. # Base 이미지를 사용합니다. FROM node : 16.19.0 # Docker Container안의 디렉토리를 설정합니다. 설정을 안할시 Root리렉토리로 설정됩니다. WORKDIR /nestjs # package.json을 도커 이미지에 복사합니다. COPY package.json /nestjs # yarn.lock를 도커 이미지에 복사합니다. COPY yarn.lock /nestjs # yarn install을 실행하여 node_modules를 생성합니다. RUN yarn install # 해당 디렉토리에 있는 모든 파일, 폴더를 도커 이미지로 복사합니다. # .dockerignore에 있는것은 제외 COPY . /nestjs # 해당 도커 이미지에서 build를 해서 dist폴더를 생성합니다. RUN yarn build # 해당 이미지의 포트를 EXPOSE합니다. # 표시만 할뿐 실제 도커 컨테이너의 포트가 노출되지 않는다. EXPOSE 3000 # 도커 이미지를 이용하여 컨테이너를 생성시 nodejs 자동 실행 CMD [ "yarn" , "start:dev" ] 불필요한 파일이나 폴더가 저장되는것을 막기 위해 '.dockerignore'을 생성해 줍니다...