오늘은 dockerfile을 이용해 컨테이너를 만들어보겠습니다.
그리고 만든 컨테이너를 배포까지 진행하는 실습은 해보겠습니다 :)
이론
Dockerfile이란?
- Dockerfile은 컨테이너를 만들 수 있도록 도와주는 명령어 집합 입니다.
- 쉽고, 간단,명확한 구문을 가진 text file로 TOP-Down해석을 합니다.(위에서 아래로 코드를 한줄씩 해석)
- 컨테이너 이미지를 생성할 수 있는 고유의 지시어(Instruction)을 가졌습니다.
- 대소문자를 구분하지 않으나 가독성을 위해 사용합니다
Dockerfile 명령어
- # comment (설명)
- FROM 컨테이너의 BASE IMAGE(운영환경)
- MAINTAINER 이미지를 생성한 사람의 이름 및 정보
- LABEL 컨테이너 이미지에 컨테이너의 정보를 저장
- RUN 컨테이너 빌드를 위해 base image에서 실행할 commands
- COPY 컨테이너 빌드시 호스트의 파일을 컨테이너로 복사
- ADD 컨테이너 빌드시 호스트의 파일(tar, url포함)을 컨테이너로 복사
- WORKDIR 컨테이너 빌드시 명령이 실행될 작업 디렉터리 설정
- ENV 환경변수 지정
- USER 명령 및 컨테이너 실행시 적용할 유저 설정
- VOLUME 파일 또는 디렉토리를 컨테이너의 디렉터리로 마운드
- EXPOSE 컨테이너 동작 시 외부에서 사용할 포트지정
- CMD 컨테이너 동작 시 자동으로 실행할 서비스나 스크립트 지정
- ENTRYPOINT CMD와 함께 사용하면서 command 지정 시 사용
ex)
$ mkdir build
$ cd build
$ vi dockerfile
FROM node:12 ->node:12가 기본 운영환경(base image) 정의. (보통 제일 위에 쓴다)
COPY hello.js -> hello.js를 복사
CMD ["node","/hello.js"] -> base image인 node를 / 밑에 hello.js를 동작
$ docker build -t hello:latest .
컨테이너 배포
$ docker build -t hellojs:latest . -> hellojs:latest 컨테이너 생성.
$ docker login -> 컨테이너를 허브에 배포하기 위해 유저네임 패스워드를 넣고 인증받기.
$ docker push hellojs:latest -> hellojs:latest를 push해서 도커컨테이너를 허브에 저장한다.
실습
저는 aws ec2에 도커를 설치하여 진행하였습니다. 우분투 버전은 20.04LTS AMI를 사용하였습니다.
도커설치 과정은 더보기란에 링크 넣어두겠습니다.
nodejs application container 만들기
mkdir hellojs
cd hellojs/
cat > hello.js
소스코드 hello.js 작성
const http = require('http');
const os = require('os');
console.log('Test server starting...');
var handler = function(request, response){
console.log('Received request from '+ request.connection.remoteAddress):
response.writeHead(200);
response.end('Container Hostname: ' + os.hostname() + '\n');
};
var www = http.createServer(handler);
www.listen(8080);
도커파일 dockerfile 생성
vi dockerfile
FROM node:12
COPY hello.js /
CMD ["node","/hello.js"]
- FROM node:12 : 운영환경을 제공해주는 base image
- COPY hello.js : 컨테이너의 최상위 디렉터리로 소스코드를 복사
- CMD ["node","hello.js"] : command를 실행
- 즉 node:12라는 컨테이너 이미지를 베이스로 놓고 hello.js라는 파일을 최상위 디렉도리로 복사하고 컨테이너 러닝할때 동작하도록 하는 도커파일 생성
소스코드 hello.js 와 도커파일 dockerfile 확인
cat hello.js
cat dockerfile
컨테이너 이미지 빌드
docker build -t hellojs:latest .
- hellojs.latest = 컨테이너이름:태그
- . = 현재 디렉토리안에 있는 파일을 기준으로 작업(hello.js가 현재 디렉터리에 있다는 뜻)
- ex) tmp디렉토리 안에 있으면 .대신에 /tmp 라고 써주면 된다.
'docker' 카테고리의 다른 글
도커 개념 및 간단한 명령어 (0) | 2023.05.17 |
---|