spring boot와 Docker

일단 도커를 설치하자
설치 방법은 설치 리눅스(centos6.5) 기준이다.
일단 Spring boot 프로젝트를 만들자.
만드는법은 Spring boot 빠르게 시작해보자
혹은 Github example

@SpringBootApplication
@RestController
public class SpringBootDockerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootDockerApplication.class, args);
    }

    @RequestMapping("/")
    public String hello(){
        return "Hello Spring boot docker!";
    }
}

메인 소스다. 간단하게 만들었다.
그리고 추가 할 부분은
src/main/dockerDockerfile 파일을 만든다.

FROM java:8
VOLUME /tmp
ADD spring-boot-docker-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

추가하자.
다음은 maven 플러그인을 설정하자

<properties>
    <docker.image.prefix>wonwoo</docker.image.prefix>
</properties>

...


<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.2.3</version>
    <configuration>
        <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
        <dockerDirectory>src/main/docker</dockerDirectory>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>

그런다음에 빌드를하자
메이븐 기준이라…

mvn package && java -jar target/spring-boot-docker-0.0.1-SNAPSHOT.jar
#필자는 클라우드서버라 포트를 변경해야되서..
#mvn package && java -Dserver.port=9000 -jar target/spring-boot-docker-0.0.1-SNAPSHOT.jar 

웹브라우저를 열고 확인하자!
Hello Spring boot docker!
정상적으로 되는걸 확인했으니 이제 도커를 빌드하자.

mvn package docker:build

그럼 아래와 같은 화면이 나올 것이다.
이미지를 생성하는듯하다. 자바도 pull하는듯 하다. 흠

....

[INFO] Building image wonwoo/spring-boot-docker
Step 0 : FROM java:8
Pulling from java
d8bd0657b25f: Extracting [======================>                            ] 23.07 MB/51.37 MB
a582cd499e0f: Download complete 
3c3e582d88fa: Download complete 
5901462573ab: Download complete 
87d3bfd91a40: Download complete 
337c6b2193cb: Download complete 
c9f473494918: Download complete 
6d2585cde477: Download complete 
c49cfc438d8b: Download complete 
1d7d8f54c2b3: Download complete 
5f59c75f3075: Download complete 
7de249ebc2b5: Download complete 
7e810ba21977: Downloading [===================>                               ] 51.89 MB/129.9 MB
31e7de89e3f8: Download complete 

Status: Downloaded newer image for java:8
---> 31e7de89e3f8
Step 1 : VOLUME /tmp
---> Running in 22eb30aaef5d
---> 92198c129da9
Removing intermediate container 22eb30aaef5d
Step 2 : ADD spring-boot-docker-0.0.1-SNAPSHOT.jar app.jar
---> addd5f953ba5
Removing intermediate container a4fea7ea6ed4
Step 3 : RUN bash -c 'touch /app.jar'
---> Running in f21125980342
---> 390d62487fa3
Removing intermediate container f21125980342
Step 4 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar
---> Running in dc04d29c1616
---> 40ac0290f2de
Removing intermediate container dc04d29c1616
Successfully built 40ac0290f2de

이미지도 생성 되었으니 실행해보자.
형식은 이렇다.
docker run -p $HOSTPORT:$CONTAINERPORT -t $IMAGE

docker run -p 8080:8080 -t wonwoo/spring-boot-docker
#필자는 외부가 9000이라..
#docker run -p 9000:8080 -t wonwoo/spring-boot-docker

브라우저를 띄우면 성공적으로 됐다.
컨테이너를 한개 더 생성해보자.

docker run -p 8081:8080 -t wonwoo/spring-boot-docker
#docker run -p 9001:8080 -t wonwoo/spring-boot-docker

브라우저를 띄워서 다시 보자
두개 다 정상적으로 올라왔다.

컨테이너정보를 확인해보자

docker ps

CONTAINER ID        IMAGE                         COMMAND                CREATED             STATUS              PORTS                    NAMES
2296052db0f5        wonwoo/spring-boot-docker   "java -Djava.securit   6 minutes ago       Up 6 minutes        0.0.0.0:9001->8080/tcp   trusting_turing      
d927a7115967        wonwoo/spring-boot-docker   "java -Djava.securit   7 minutes ago       Up 7 minutes        0.0.0.0:9000->8080/tcp   distracted_galileo

요런식으로 두개가 올라와 있다.
한개를 정지해보자
정지하는건 docker stop $CONTAINER_ID

docker stop d927a7115967

다시 확인해보면

CONTAINER ID        IMAGE                         COMMAND                CREATED             STATUS              PORTS                    NAMES
2296052db0f5        wonwoo/spring-boot-docker   "java -Djava.securit   7 minutes ago       Up 7 minutes        0.0.0.0:9001->8080/tcp   trusting_turing

요렇게 한개만 있다.

다시 실행해보자

docker start d927a7115967

다시 실행 된걸 알 수 있다.

간단한 커멘드를 알아보자.

docker images : 이미지를 보여준다.
docker ps -a : 모든 컨테이너 정보다.
docker rm $CONTAINER_ID : 컨테이너를 삭제한다.
docker start $CONTAINER_ID : 컨테이너를 시작한다.
docker stop $CONTAINER_ID : 컨테이너를 중지한다. 
docker logs $CONTAINER_ID : 로그를 확인한다.
docker top $CONTAINER_ID : 프로세서 정보를 확인한다.
docker inspect $CONTAINER_ID : 컨테이너의 모든 정보를 보여준다.(JSON)
docker port $CONTAINER_ID : 포트가 어디로 연결 되었있는지 보여준다.

이 외에도 많은 커멘드가 있다.

docker help 

로 통해 확인하자!

참고 : 만약 docker hub 에 push를 날릴려면 wonwoo를 docker에 가입할때 본인의 name으로 바꾸셔야됩니다!!