docker

컨테이너 만들기

BigCo 2023. 5. 23. 13:44

오늘은 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