라벨이 docker-compose인 게시물 표시

Docker-Compose Apache로 HTML 웹사이트 구성하기

이미지
 아파치를 이용하여 웹사이트를 구성하도록 Dockerfile과 Docker-Compose file을 작성한다. 프로젝트 파일 구성 index.html은 아래와 같이 구성한다. <! DOCTYPE html > < html lang = "en" > < head > < meta charset = "UTF-8" /> < meta name = "viewport" content = "width=device-width, initial-scale=1.0" /> < title > 원티드 시연 </ title > </ head > < body > < h1 > Wanted Backend Challenge - Docker </ h1 > < p >< br /></ p > < h3 > Docker 자료 정리 </ h3 > < p >< br /></ p > < div > < h4 > 도커 설치법(docker, docker-compose) </ h4 > < p > 1. Docker 설치 : < a href = "https://engineeringshw.blogspot.com/2022/03/docker-install-by-terminal-ubuntu-2004.html" > [Ubuntu(Linux)] </ a > < a ...

Docker-Compose yaml파일을 이용하여 MySQL를 Local로 구축하기 - Database, Table 자동생성

이미지
 이전글 : Docker-Compose yaml파일을 이용하여 MySQL를 Local로 구축하기 초기 Docker Container를 생성할때 초기 상태이다. 이때 미리 데이터베이스와 각각의 테이블을 생성할수 있다. 먼저 init.sql을 작성한다. 아래는 예시 sql문이다. -- Create Users table CREATE TABLE Users ( id serial PRIMARY KEY , -- 유저 고유 ID nickname VARCHAR ( 255 ) UNIQUE NOT NULL , -- 유저 닉네임 고유값 password VARCHAR ( 255 ), -- 유저의 비밀번호 socialUser BOOLEAN , -- 소셜로그인 유저이면 true 입력 socialUserType VARCHAR ( 255 ), -- 소셜로그인 타입 ex) google email VARCHAR ( 255 ) UNIQUE NOT NULL , -- 유저의 Email refrashToken VARCHAR ( 255 ) UNIQUE , -- Access 토큰을 갱신한다. created_at DATE , updated_at DATE ); -- Create Post table CREATE TABLE Post ( id serial PRIMARY KEY , type VARCHAR ( 255 ), -- 글의 타입. (공지글, 일반글). 공지글을 관리자만 작성이 가능하다. title VARCHAR ( 255 ), -- 글의 title body TEXT , -- 글의 내용 userId INT , -- 글 작성자 count INT DEFAULT 0 , -- 조회수 (초기값은 0이다) `like` INT DEFAULT 0 , -- 좋아요 `hate` INT DEFAULT 0 , -- 싫어요 created_at DATE , updated_at DATE ); -- Create...

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 yaml파일을 이용하여 Redis를 Local로 구축하기

이미지
  사전에 Docker및 Docker-Compose가 설치되어 있어야 합니다. mysql official docker image link : https://hub.docker.com/_/redis docker-compose로 컨테이너를 만들기전 .yaml파일을 작성합니다. # 참고 링크 : https://hub.docker.com/_/redis services : redis : # 컨테이너의 베이스가 될 이미지를 받는다(현재 docker-compose.yaml은 mysql 8.2.0버전을 사용한다.) image : redis:7.2.3 volumes : # redis의 데이터의 초기화를 방지하기 위해 볼륨으로 저장한다. - redis_data:/data #- ${REDIS_DEFAULT_CONFIG_FILE}:/usr/local/etc/redis/redis.conf # redis의 config파일. {REDIS_DEFAULT_CONFIG_FILE}에서 직접 수정 가능 # command: redis-server /usr/local/etc/redis/redis.conf # redis.conf파일을 사용시 명령을 내린다. env_file : # yaml의 상대경로로 환경변수 파일을 찾는다. - .redis.env # 아래처럼 직접 비밀번호를 입력할수 있지만 추천하지 않음 #environment: # - REDIS_PASSWORD=safePassword! command : - /bin/sh - -c # - Double dollars, so that the variable is not expanded by Docker Compose # - Surround by quotes, so that the she...

Docker-Compose yaml파일을 이용하여 MySQL를 Local로 구축하기

이미지
사전에 Docker및 Docker-Compose가 설치되어 있어야 합니다. mysql official docker image link : https://hub.docker.com/_/mysql docker-compose로 컨테이너를 만들기전 .yaml파일을 작성합니다. # ./docker-compose.yaml # services에서는 여러개의 컨테이너를 생성할수 있습니다. # 참고 링크 : https://hub.docker.com/_/mysql services : mysql : # 컨테이너의 베이스가 될 이미지를 받는다(현재 docker-compose.yaml은 mysql 8.2.0버전을 사용한다.) image : mysql:8.2.0 volumes : # mysql의 데이터의 초기화를 방지하기 위해 볼륨으로 저장한다. - mysql_data:/var/lib/mysql env_file : # yaml의 상대경로로 환경변수 파일을 찾는다. - ./.mysql.env ports : # 외부에 포트를 노출시킨다. mysql의 default포트는 3306이고 4500포트로 외부에 노출시킨다. - "4500:3306" # 네이밍 볼륨이 있을시 반드시 루트에 한번더 volumes 안에 해당 네이밍 볼륨 이름을 넣는다. volumes : # mysql은 mysql_data라는 네이밍 볼륨을 사용하기 때문에 아래에 추가해준다. mysql_data : docker-compose.yaml과 같은 경로에 .mysql.env파일 안에는 아래와 같이 유저 이름과 비밀번호를 작성하고 저장합니다. # MySQL 루트 비밀번호 MYSQL_ROOT_PASSWORD=password # MySQL 사용자 계정(선택) MYSQL_USER=alex # MySQL 사용자 비밀번호(선택) MYSQL_PASSWORD=password # MySQL 타임존 셋팅(선택). 설정하지 않을시 UTC시간으로 설정....

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'을 생성해 줍니다...

docker container 로그 관리하기 max-size, max-file

이미지
도커 컨테이너를 장기간 운영하다 보면 하드 용량이 싸이는 것을 알수 있습니다. 이는 컨테이너가 로그를 지우지 않고 지속적으로 쌓고 있기 때문입니다. 이는 장기적으로 하드 용량이 가득 차서 문제가 될수 있습니다.    이를 위해 컨테이너에서는 정기적으로 로그 기록을 오래된 순서로 지워줘야 합니다. 이를 위해 'docker run'을 실행할시 설정할수 있고 아니면 docker system에 적용할수 있습니다. 공식 사이트 링크 : https://docs.docker.com/config/containers/logging/local/ 1. 'docker run'을 이용하여 로그 용량 제한하기 $ docker run --log-opt max-size=10m --log-opt max-file=3 image-id copy max-size : 로그파일의 용량을 나타낸다. 단위는 k, m, g 로하고 기본값은 20m이다. 위 커멘드는 10m으로 되어 있다. max-file : 몇개의 로그파일을 만들것인지 결정한다. 그리고 설정한 파일 이상으로 생성될려고 할때 가장 과거의 것을 지운다. 기본으로는 5개로 설정되어 있다.  하지만 매번 'docker run'을 할때마다 셋팅하기가 귀찮다면 시스템에 적용하는 방법이 있다. 2. daemon.json 전체로 docker에 설정하기 Ubuntu(Linux)의 경로 /etc/docker 에 들어가서 아래와 같이 daemon.json파일을 생성합니다. { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3", "labels": "production_status", "env": ...