[따배도] 도커 컨테이너 만들기

조앵·2024년 5월 9일

Docker

목록 보기
5/11
post-thumbnail

무엇을 컨테이너로 만드는거죠?

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

MSA

Shoping cart에 이러한 기능이 추가하려고 하면 shoping cart 컨테이너만 업데이트 하면 된다.

컨테이너 어떻게 만들어요? Dockerfile이 뭐죠?
Dockerfile: Container를 만들 수 있도록 도와주는 명령어 집합

  • 쉽고, 간단, 명확한 구문을 가진 text file로 Top-Down 해석
  • 컨테이너 이미지를 생성할 수 있는 고유의 지시어(Instruction)를 가짐
  • 대소문자 구분하지 않으나 가독성을 위해 사용함
mkdir build
cd build
vi dockerfile
FROM node:12
COPY hello.js /
CMD ["node", "/hello.js"]

docker build -t imagename:tag

Dockerfile 문법

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

  1. ubuntu 기반의 웹 서버 컨테이너 만들기
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

  1. 만들어놓은 컨테이너 배포하기
    배포하기 위해서는 도커 로그인을 해야한다.
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한 내용 확인

profile
Viva La Vida

0개의 댓글