1. 실습 내용 소개

2. 실습 준비

  1. 실습 디렉토리 생성

    mkdir ~/docker-practice-scalable-web
    
  2. 실습 디렉토리로 이동

    cd ~/docker-practice-scalable-web
    
  3. 웹 어플리케이션 서버는 node로 제작. 이를 위해 index.js 파일 작성

    cat <<EOF > ~/docker-practice-scalable-web/index.js
    var http = require('http');
    var os = require('os');
    http.createServer(function (req, res) {
        res.writeHead(200, {'Content-Type': 'text/html'});
        res.end("<h1>I'm " + os.hostname() + "</h1>");
    }).listen(8080);
    EOF
    

3. Docker 이미지 빌드

  1. Dockerfile 작성

    cat <<EOF > ~/docker-practice-scalable-web/Dockerfile
    FROM node
    RUN mkdir -p /usr/src/app
    COPY index.js /usr/src/app
    EXPOSE 8080
    CMD [ "node", "/usr/src/app/index" ]
    EOF
    
  2. 이미지 빌드

    docker build -t node-server ~/docker-practice-scalable-web/
    
  3. 이미지 확인

    docker images
    
    REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
    node-server           latest              6115811ca3c2        28 minutes ago      899MB
    

3. Docker compose 실행

  1. docker-compose 파일 작성

    cat <<EOF > ~/docker-practice-scalable-web/docker-compose.yml
    version: '2'
    services:
      web:
        image: node-server
      lb:
        image: dockercloud/haproxy
        links:
         - web
        ports:
         - '80:80'
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
    EOF
    
  2. docker-compose를 통해 컨테이너 생성

    docker-compose -p practice up -d
    
    Creating network "docker_default" with the default driver
    Pulling lb (dockercloud/haproxy:)...
    latest: Pulling from dockercloud/haproxy
    1160f4abea84: Pull complete
    b0df9c632afc: Pull complete
    a49b18c7cd3a: Pull complete
    Creating practice_web_1 ... done
    Creating practice_lb_1  ... done