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/docker
에
Dockerfile
파일을 만든다.
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으로 바꾸셔야됩니다!!