SpringBoot with Docker : Docker 이미지 생성 :: 행복한 프로그래머

posted by 쁘로그램어 2018. 5. 23. 11:16

SpringBoot에서 Docker 이미지를 생성하는 과정이다.


1. build.xml 파일 생성

   - 프로젝트 디렉토리에 build.xml 파일 생성

   - project name, packageAndBuild, push 부분 수정

   - docker image 이름은 반드시 소문자로 작성해야함


<?xml version="1.0" encoding="UTF-8"?>

<project name="NexClipperAgent" basedir="." default="package">

  <target name="clean">

    <exec osfamily="windows" executable="cmd">

      <arg line="/c" />

      <arg line="mvn clean" />

    </exec>

  </target>

  <target name="package">

    <exec osfamily="windows" executable="cmd">

      <arg line="/c" />

      <arg line="mvn install" />

    </exec>

  </target>


  <target name="cleanAndPackage" depends="clean">

    <exec osfamily="windows" executable="cmd">

      <arg line="/c" />

      <arg line="mvn install" />

    </exec>

  </target>

  <target name="packageAndBuild" depends="cleanAndPackage">

   <exec osfamily="windows" executable="cmd">

      <arg line="/c" />

      <arg line="docker build -t jhhwang4195/nexclipperagent ." />

    </exec>

  </target>

  <target name="Push">

<exec osfamily="windows" executable="cmd">

      <arg line="/c" />

      <arg line="docker push jhhwang4195/nexclipperagent" />

    </exec>

  </target>

  

</project> 


2. Dockerfile 생성

   - 프로젝트 디렉토리에 Dockerfile 생성


FROM openjdk:8-jre-alpine

ENV LANG ko_KR.UTF-8

ENV LANGUAGE ko_KR:en

ENV LC_ALL ko_KR.UTF-8


MAINTAINER NexCloud


VOLUME /tmp

ADD ./target/NexClipperAgent-0.0.1.war NexClipperAgent.war

RUN sh -c 'touch /NexClipperAgent.war'


ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-3.b12.el7_3.x86_64/jre/

ENV PATH=$JAVA_HOME/bin:$PATH

  

ENV JAVA_OPTS=""

CMD exec java -jar -Djava.security.egd=file:/dev/./urandom -jar /NexClipperAgent.war



3. 프로젝트 빌드 및 Docker Image 생성

* build.xml 우클릭 -> Run As -> Ant Build -> Run

* 참고로 Docker Quickstart Terminal를 실행된 상태여야 한다. <관리자 권한 실행>


   -> packageAndBuild 체크

   -> Push 체크


자동으로 docker hub에 docker image까지 push된다.

즉, 4번 과정은 필요 없다.


4. docker build & push (수동으로 할 필요 없음)

Docker Quickstart Terminal를 실행해야함.

path: C:\springboot\NexClipperAgent

$ docker build -t jhhwang4195/nexclipperagent .

$ docker push jhhwang4195/nexclipperagent


5. DC/OS 서비스 생성

# Service

* SERVICE ID: /jhhwang/container-monitor

* CONTAINER IMAGE: jhhwang4195/nexclipperagent

* INSTANCES: 1

* CPUs: 1

* Memory (MibB): 512

* DOCKER ENGINE


# Networking

* Network Type: Bridge

* Container Port: 22222


# JSON 파일

{

    "id": "/jhhwang/container-monitor",

    "backoffFactor": 1.15,

    "backoffSeconds": 1,

    "container": {

        "portMappings": [

            {

                "containerPort": 22222,

                "hostPort": 0,

                "protocol": "tcp",

                "servicePort": 10130

            }

        ],

        "type": "DOCKER",

        "volumes": [

            {

                "containerPath": "/var/run/docker.sock",

                "hostPath": "/var/run/docker.sock",

                "mode": "RO"

            }

        ],

        "docker": {

            "image": "jhhwang4195/nexclipperagent",

            "forcePullImage": true,

            "privileged": false,

            "parameters": [ ]

        }

    },

    "cpus": 1,

    "disk": 0,

    "instances": 1,

    "maxLaunchDelaySeconds": 3600,

    "mem": 512,

    "gpus": 0,

    "networks": [

        {

            "mode": "container/bridge"

        }

    ],

    "requirePorts": false,

    "upgradeStrategy": {

        "maximumOverCapacity": 1,

        "minimumHealthCapacity": 1

    },

    "killSelection": "YOUNGEST_FIRST",

    "unreachableStrategy": {

        "inactiveAfterSeconds": 0,

        "expungeAfterSeconds": 0

    },

    "healthChecks": [ ],

    "fetch": [ ],

    "constraints": [ ]

}


※ 참고 사이트 ※

https://jinwooe.wordpress.com/2017/06/08/spring-boot-with-docker/

https://spring.io/guides/gs/spring-boot-docker/

'Java > Springboot' 카테고리의 다른 글

스프링부트 학습 정리 자료  (0) 2018.05.17
CRUD Restful Web Service: RestTemplate을 이용  (0) 2018.05.03