1 minute read

[컨테이너]란 무엇일까?

참고한 블로그: 링크

(1) 컨테이너 만들기

도커파일(컨테이너) 만들기(node.js)

mkdir hellojs
cd hellojs
vi 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);

8080 포트로 접속한 클라이언트에게 컨테이너 호스트네임을 송출해주는 어플리케이션이다.

  1. 웹서비스http와 os 정보를 변수에 수집
  2. 콘솔창에 Test Server starting 콘솔메세지 출력
  3. 8080포트를 열어서 클라이언트 요청을 대기
  4. 요청이 오면 200번 상태코드와 컨테이너 호스트네임이라는 메세지를 전달

도커파일(컨테이너) 만들기(node.js 파일)

cd hellojs
vi Dockerfile

cat > Dockerfile
FROM node:16
COPY hello.js /
CMD ["node", "/hello.js"]

  1. FROM 을 통해 nodejs 16 런타임 다운로드 받고
  2. COPY 를 통해 hello.js 파일을 복사하고
  3. CMD 명령을 통해 node hello.js 를 실행

도커파일 빌드(Build)

cd hellojs

docker build -t hellojs:latest . # 빌드 (끝에는 컨테이너 이름을 넣어준다)
docker images                    # 빌드로 만들어진 이미지 확인

위에 도커파일 내용이 순차적으로 실행된다. 즉, 도커 빌드하면 하나의 컨테이너가 하드디스크 안에 만들어진다.
(앞서 다운로드받은 node16 과 제작한 hellojs 이미지가 있다)

도커파일(컨테이너) 만들기(웹서버)

mkdir webserver
cd webserver
vi Dockerfile

FROM ubuntu:18.04
LABEL maintainer="Espeniel <apple@naver.com>"
# install apache
RUN apt-get update \
	&& apt-get install -y apache2
RUN echo "TEST WEB" > /var/www/html/index.html
EXPOSE 80
CMD ["/usr/sbin/apache2ctl", "-DFOREGROUND"]

도커파일 빌드(Build)

cd webserver

docker build -t webserver:v1 .   # 빌드 (끝에는 컨테이너이름을 넣어준다)
docker images                    # 빌드로 만들어진 이미지 확인

위 내용과 동일하다. 이미지가 만들어진다.

  1. 우분투 이미지와,
  2. 방금 만든 webserver 이미지가 추가 되었다.

(2) 실행(컨테이너 저장소 사용시)

도커파일 푸쉬(push)

docker push webserver:v1 .

도커컨테이너를 저장하는 저장소안에 저장한다.
푸쉬(push)는 선택적인 부분인 듯 하다. 찾아보니 도커에서 제공하는 기본 이미지 저장소로 메이븐(maven)과 비슷한 개념으로 보인다.

도커파일 풀(pull)

docker pull webserver:v1 .
(작성중)

저장소에서 받아온다.

도커파일 크리에이트(create)

(작성중)

도커파일 스타트(start)

(작성중)

(2) 실행(컨테이너 저장소 미사용시)

도커파일 런(run)

docker run -d -p 80:80 --name web webserver:v1

# 접속 해보자.
curl localhost:80
TEST WEB
Container Hostname: cddwso1

docker ps

  1. -p옵션으로 80포트로 들어오면 80포트로 웹서버 컨테이너를 실행 함
  2. index.html 파일이 실행된다.
  3. ps 명령어로 실행상태 확인.
docker run -d -p 8080:8080 --name web hellojs

# 접속 해보자.
curl localhost:8080
Test server starting...
Container Hostname: cddwso1

docker ps

웹서버가 아닌 node.js 실행한다는 점만 빼면 위와 동일하다.

  1. -p옵션으로 8080포트로 들어오면 8080포트로 노드JS 컨테이너를 실행 함
  2. 노드JS 파일이 실행된다.
  3. ps 명령어로 실행상태 확인

(3) 삭제

도커파일 삭제(del)

docker rm -f web

요약

컨테이너는 실행단위르 이미지로 만드는 것이고, 컨테이너를 동작하기 위해서는 도커 플랫폼이 필요하다.

Leave a comment