라벨이 도커인 게시물 표시

Git Action Docker Permission Denied Error AWS(EC2) - sock

이미지
 I was trying to pull docker image from docker hub. But I got denied. I was using GitAction to deploy but failed. Run docker pull ***/***:latest 2 docker pull ***/***:latest 3 shell: /usr/bin/bash -e {0} 4 env: 5 DOCKER_IMAGE: ***/*** 6 permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.46/images/create?fromImage=***%2F***&tag=latest": dial unix /var/run/docker.sock: connect: permission denied 7 Error: Process completed with exit code 1. Connecte to EC2 and write this terminal. sudo chmod 555 /var/run/docker.sock copy Now it works.

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

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": ...

docker-compose Ubuntu Install

이미지
참고링크 : https://docs.docker.com/compose/install/ 1. 터미널 실행 $ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 2. 터미널 실행 $ sudo chmod +x /usr/local/bin/docker-compose copy 3. 터미널 실행 $ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose copy 4. 버전 확인 $ docker-compose --version copy

docker sudo없이 사용하는 방법

이미지
docker를 설치하다 보면 'sudo'를 사용하지 않고서는 진행할수 없는 경우가 있습니다. 1. docker를 sudo그룹에 넣기 $ sudo groupadd docker copy 먼저 sudo그룹에 docker를 넣습니다. 어떠한 경우에는 이미 존재할수 있습니다. 2. 다음단계 진행 $ sudo usermod -aG docker $USER copy $ newgrp docker copy 이후 PC를 재부팅한다. sudo없이 docker를 사용할수 있다는 것을 확인할수 있다.

GCP Docker Image Push, Pull to Container Registery from instance(VM)

이미지
해당 과정은 도커가 설치 되어 있어야 합니다.  Container Registry가 사용 가능한 상태여야 합니다. gcloud 버전은 아래와 같습니다. ----------------------------------------------------------------- Google Cloud SDK 413.0.0 alpha 2023.01.06 beta 2023.01.06 bq 2.0.84 bundled-python3-unix 3.9.12 core 2023.01.06 gcloud-crc32c 1.0.0 gsutil 5.17 minikube 1.28.0 skaffold 2.0.4 ----------------------------------------------------------------- 링크 : docker install by terminal : ubuntu 20.04 링크 : docker 도커를 이용하여 이미지(IMAGE) 생성하기 : NestJS 사용 VM에서 docker images를 만들때 아래와 같은 방식으로 이미지 태그를 만듭니다. [리전 => ex) asia.gcr.io]/[GOOGLE_PROJECT_ID]/[IMAGE NAME]:[TAG] VM instance에서 도커 이미지를 생성합니다. 하지만 푸시를 할려고 하면 인증절차때문에 안된다.  $ gcloud auth configure-docker 만약 위처럼 진행해도 푸시가 되지 않는다면(Access denied) 아래 절차를 시도해 보시기 바랍니다. $ gcloud init 위의 터미널을 실행하여 gcloud로그인 정보를 갱신한다. 해당 VM에 접근하는 모든 유저들한테 증명서가 노출된다고 한다. 고로 본인만 사용하는 VM에 진행하도록 한다. Y를 선택 위 사진처럼 인증시 해당 링크에 들어가서 키값을 받고 터미널에 입력을 해야 한다. 완료가 되면 gcloud의 인증절차가 마무리 된다. 여기서 36을 선택한 이유는 기존의 프로젝트가 존재해서 ...