[Docker] vi: command not found 에러 해결
2022. 12. 2. 17:07
Docker
들어가며 도커 컨테이너 기반 프로젝트 환경에서 도커 컨테이너에 직접 접속한 후 파일을 열어봐야 하는 경우가 상당수 발생했습니다. 그러기 위해서는 vim 을 사용해야 했는데요. 도커 컨테이너 접속 후 vi [파일 이름] 명령을 실행하면 vi: command not found 에러가 자주 발생했습니다. 해결법을 잊지 않기 위해 이 게시글을 통해 기록으로 남깁니다. 에러 발생 상황 docker exec -it [docker container name] bash 명령을 실행해 도커 컨테이너에 bash 모드로 접속합니다. 특정 파일을 열어보기 위해 cd 명령을 사용해 특정 파일이 위치한 디렉토리에 접근합니다. vi [파일 이름] 명령을 실행해 Read 하고자 하는 파일을 엽니다. 이 명령을 실행하던 도중 vi: ..
Docker Volume 및 Docker 로 MySql 컨테이너 설정, 데이터 영구 저장
2022. 12. 1. 19:09
Docker
들어가며 이번 게시글에서는 Docker Volume 에 대한 이해 및 MySql 을 Docker 컨테이너로 세팅하고 데이터베이스 데이터를 영구적으로 저장하는 방법을 알아보고자 합니다. Docker Volume Docker 컨테이너에 저장되는 데이터는 기본적으로 Docker 컨테이너가 삭제될 때 함께 사라집니다. 그러나 MySql 컨테이너와 같이 DB를 구동하는 컨테이너에서는 Docker 컨테이너의 생성, 삭제 여부에 관계없이 데이터를 영속적으로 저장해야 합니다. 이렇게 Docker 컨테이너의 생성, 삭제 여부와 관계없이 데이터를 영속적으로 저장할 수 있도록 Docker는 두가지 옵션을 제공합니다. 그 중 하나가 바로 Docker Volume 입니다. Docker Volume 과 관련된 명령어는 다음과 같..
로컬에서 Docker 를 이용한 Express 서버 어플리케이션 개발
2022. 12. 1. 17:00
Docker
들어가며 이번 게시글에서 어떻게 Express 서버 어플리케이션을 Docker를 이용해서 컨테이너화 후 가동하고, 어떻게 로컬에서 작업한 코드 변경사항이 현재 가동되고 있는 Express 서버 컨테이너에 즉시 반영될 수 있는지에 대해서 알아보도록 하겠습니다. Express 서버 어플리케이션 작성 원하는 위치에 디렉토리 생성 후 그 안에 package.json 파일 생성 $ mkdir demo && cd demo $ npm init -y npm 을 통해 Express 패키지 설치 $ npm install express index.js 파일 생성 후 간단한 Express 서버 코드 작성 index.js const express = require("express"); const app = express(); ..
도커 컨테이너 환경변수 주입
2022. 11. 10. 18:10
Docker
들어가며 현재 예전에 진행했었던 프로젝트 시스템 구성을 도커 컨테이너 환경으로 전환하는 과정에 있는데요. express 서버 구성용 도커 이미지를 생성하는 과정에서 분명 환경 변수 파일이 저장되어 있는 디렉토리(envs) 또한 복사해 가도록 명령 구성을 했습니다. express 서버 컨테이너의 bash 창에 접근해 ls 명령을 실행해 현재 위치에 존재하는 디렉토리 및 파일 목록을 확인했는데요. envs 디렉토리가 존재하는 것이 확인되었으나, cd envs 명령과 ls 명령을 실행한 결과 envs 디렉토리 안에는 아무 파일도 존재하지 않는 걸 확인했습니다. 왜 환경변수 파일만 복사되지 않는지 그 이유를 찾지 못했습니다. 계속 헤매는 대신 환경변수 파일을 express 서버 컨테이너에게 전달해줄 다른 방법을..
계속해서 restart 상태인 컨테이너 디버깅하기
2022. 11. 10. 17:47
Docker
상황 docker-compose up -d --build 명령을 실행해 nginx 웹서버, express 서버, mysql 서버 컨테이너를 띄웠습니다. docker ps -a 명령을 실행해 현재 실행되고 있는 도커 컨테이너 목록을 체크했습니다. 체크한 결과, express 서버 컨테이너는 계속 restarting 상태인 것이 확인되었습니다. 왜 restarting 이 계속 되고 있는지 도대체 어떤 게 문제가 있는지 전혀 알지 못해 답답했습니다. restarting 상태인 컨테이너 로그는 어떻게 볼 수 있을까? 찾아보니 아래와 같이 명령을 실행하면 된다는 것을 알게 되었습니다. 같은 상황이 이후 발생했을 때 잊지 않고자 이렇게 기록을 남깁니다. 해결책 로그 확인할 도커 컨테이너 ID 확인 docker ps..
[Error] unable to start container process: exec: "bash"
2022. 11. 10. 16:45
Docker
상황 컨테이너 접속 node 컨테이너에 주입된 env 변수 목록을 확인하기 위해 node 컨테이너의 bash 창에 접근하려고 했으나, 위와 같은 오류가 발생했습니다. 해결 Docker 이미지가 Alpine 이라면 bash 를 지원하지 않을 수도 있다고 합니다. 대신 /bin/sh 로 컨테이너에 접속하면 된다고 합니다. /bin/sh 로 컨테이너에 접속 env 명령어 실행 결과 다음과 같이 node 컨테이너에 주입된 env 변수 목록을 확인하실 수 있습니다.
Docker Compose 개념과 사용하는 이유
2022. 11. 9. 21:23
Docker
Docker Compose 란? Docker Compose 란 여러 개의 컨테이너들을 관리, 실행하기 위한 "툴" 로, 각각 독립된 컨테이너의 실행을 정의합니다. Docker Compose 는 왜 필요한가? 도커 컨테이너끼리 연결을 편하게 하기 위해서 github 에서 express 서버 구성 코드를 pull 받고, 이를 컨테이너화하기 위해 다음과 같이 build 할 수 있습니다. $ docker build -t express-demo . 이제 express-demo 컨테이너를 실행하고, DB로 mysql 컨테이너를 실행해보겠습니다. express-demo 컨테이너 실행 $ docker run --name express -d -p 8080:8080 express-demo mysql 컨테이너 실행 $ do..
RUN, CMD, ENTRYPOINT 명령어 개념과 차이점
2022. 11. 9. 20:32
Docker
Dockerfile 작성 시 사용되는 명령문 중 실행과 관련된 명령어는 RUN, CMD, ENTRYPOINT 가 있습니다. RUN RUN 명령문은 쉘(shell)에서 커맨드를 실행하는 것처럼 이미지 빌드 과정에서 필요한 커맨드를 실행하기 위해 사용됩니다. 보통 이미지 안에 특정 소프트웨어를 설치하기 위해 많이 사용됩니다. FROM node:16 RUN mkdir -p /app WORKDIR /app COPY package*.json ./ # local machine 에서 npm install 실행 RUN npm install 실행 시점 : 도커 이미지 빌드 ENTRYPOINT ENTRYPOINT 명령문은 CMD 명령문과 비슷하지만, 컨테이너를 띄울 때 항상 실행되어야 하는 커맨드를 지정할 때 사용합니다...