개발한 프로그램과 실행환경을 모두 컨테이너로 만든다.
MSA(Micro Service Architecture) 환경의 Polyglot 애플리케이션 운영
Polyglot Programming: 다양한 언어를 사용하여 프로그래밍 하는 것
MSA

Shoping cart에 이러한 기능이 추가하려고 하면 shoping cart 컨테이너만 업데이트 하면 된다.
컨테이너 어떻게 만들어요? Dockerfile이 뭐죠?
Dockerfile: Container를 만들 수 있도록 도와주는 명령어 집합
mkdir build
cd build
vi dockerfile
FROM node:12
COPY hello.js /
CMD ["node", "/hello.js"]
docker build -t imagename:tag
FORM : 컨테이너의 BASE IMAGE(운영환경)
MAINTAINER : 이미지를 생성한 사람의 이름 및 정보
LABEL : 컨테이너이미지에 컨테이너의 정보를 저장
RUN : 컨테이너 빌드를 위해 base image에서 실행할 commands
COPY : 컨테이너 빌드시 호스트의 파일을 컨테이너로 복사
ADD : 컨테이너 빌드시 호스트의 파일(tar,url포함)을 컨테이너로 복사
WORKDIR : 컨테이너 빌드시 명령이 실행될 작업 디렉터리 설정
ENV : 환경변수 지정
USER : 명령 및 컨테이너 실행시 적용할 유저 설정
VOLUME : 파일 또는 디렉토리를 컨테이너의 디렉토리로 마운트
EXPOSE : 컨테이너 동작 시 외부에서 사용할 포트 지정
CMD : 컨테이너 동작 시 자동으로 실행할 서비스나 스크립트 지정
ENTRYPOINT : CMD와 함께 사용하면서 command 지정 시 사용
Dockerfile 예제 보기
mkdir build
cd build
vi hello.js
vi dockerfile
FROM node:12
COPY hello.js / #컨테이너의 최상위 폴더에 복사해서 넣었다.
CMD ["node","/hello.js"]
docker build -t hellojs:latest . #.은 현재 디렉토리에 있다는 것을 의미한다.
컨테이너를 배포하려면?
docker build -t hellojs:latest
docker login
docker push hellojs:latest
실습으로 따라하는 컨테이너 만들기
1. nodejs 애플리케이션 컨테이너 만들기 : hellojs
mkdir hellojs
vi hellojs # hellojs파일 만들기
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
# dockerfile
FROM node:12
COPY hello.js /
CMD ["node", "/hello.js"]
docker build -t helljs:latest .
docker run -d -p 8080:8080 --name web hellojs

mkdir webserver
vim Dockerfile
# Dockerfile
FROM ubuntu:18.04
LABEL maintainer="youngbin jo <youngbin9806.gmail.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"]
docker build -t webserver:v1 .
docker run -d -p 80:80 --name web webserver:v1
docker ps
curl localhost:80

totoro@docker-ubuntu:~/webserver$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hellojs latest 7ab05af40d0e 22 hours ago 918MB
webserver v1 5ec6ba094da3 23 hours ago 205MB
totoro@docker-ubuntu:~/webserver$ docker tag webserver:v1 youngbinjo/webserver:v1
totoro@docker-ubuntu:~/webserver$ docker tag hellojs:latest youngbinjo/hellojs:latest
totoro@docker-ubuntu:~/webserver$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hellojs latest 7ab05af40d0e 22 hours ago 918MB
youngbinjo/hellojs latest 7ab05af40d0e 22 hours ago 918MB
webserver v1 5ec6ba094da3 23 hours ago 205MB
youngbinjo/webserver v1 5ec6ba094da3 23 hours ago 205MB
docker push
totoro@docker-ubuntu:~/webserver$ docker push youngbinjo/webserver:v1
The push refers to repository [docker.io/youngbinjo/webserver]
8ddc7c87f101: Pushed
dc4999c93cac: Pushed
548a79621a42: Mounted from library/ubuntu
v1: digest: sha256:14e969cc8e4cadcffa9e9b25473789e0914ee9bfa733bf2bfa91d1cb497ec34d size: 948
totoro@docker-ubuntu:~/webserver$ docker push youngbinjo/hellojs
Using default tag: latest
The push refers to repository [docker.io/youngbinjo/hellojs]
fab9bce5045c: Pushed
586c0b414da7: Mounted from library/node
0bfd290f2c17: Mounted from library/node
6d75cd01c26c: Mounted from library/node
95904c181913: Mounted from library/node
df69bfa94785: Mounted from library/node
f35deb8d96fc: Mounted from library/node
f6c2459e2059: Mounted from library/node
f8323fb3a55c: Mounted from library/node
2f4dc9775f33: Mounted from library/node
latest: digest: sha256:8bb4ada4787211fc7fd384d7fdc6d97717c55f5a2dd3b430a94a83fa7d9bbd7e size: 2422
push한 내용 확인
