Kubernetes나 기타 container platform은 Docker image를 배포하곤 한다.
결국에는 Docker를 이해해야 위의 Platform을 이해 할 수 있기 때문에 Docker를 이용하여 기본적인 3 티어 구조 (Web, Was, DB)를 구성하고 배포해보고자 한다.
준비사항
a. WEB : apache 2.4
b. WAS : Tomcat
c. DB : MySQL
d. 샘플 코드 : https://github.com/spring-petclinic/spring-framework-petclinic.git
Docker 설치 : virtual box에 ubuntu 16.04를 설치하고 아래 명령어를 통해 설치한다.
Petclinic 소스를 빌드한다.
a. Clone the source code
git clone https://github.com/spring-petclinic/spring-framework-petclinic.git
b. Install Java
sudo apt-get install openjdk-8-jdk maven
c. Configure environment variable
/etc/environment
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
d. Build the source code
외부에 있는 mysql 서버에 접속한다고 가정하고, pom.xml에도 아래 부분 처럼 mysql docker container 이름을 지정한다.
<profile>
<id>MySQL</id>
<properties>
<db.script>mysql</db.script>
<jpa.database>MYSQL</jpa.database>
<jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName>
<jdbc.url>jdbc:mysql://mysql-petclinic:3306/petclinic?useUnicode=true</jdbc.url>
<jdbc.username>root</jdbc.username>
<jdbc.password>petclinic</jdbc.password>
</properties>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-driver.version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</profile>
pom.xml을 수정한다음 아래 명령어로 java코드를 빌드하면 target 디렉토리 아래에 petclinic.war파일이 생성된다.
mvn clean package -Dmaven.test.skip=true -P MySQL
Build Docker Image
a. Dockerfile을 생성한다 : tomcat Dockerfile
위에 빌드된 war파일을 현재 디렉토리로 복사하고 Dockerfile을 생성한다.
# Pull base image
From tomcat:8-jre8
# Maintainer
MAINTAINER "TaeHo <me@kangtaeho.com">
# Copy to images tomcat path
ADD petclinic.war /usr/local/tomcat/webapps/
b. docker hub에 있는 image를 가져오고, 그것을 이용하여 custom image를 생성한다.
docker build -t tomcat-petclinic .
$ docker build -t tomcat-petclinic .
Sending build context to Docker daemon 37.57MB
Step 1/3 : From tomcat:8-jre8
---> 516082cd94fa
Step 2/3 : MAINTAINER "TaeHo <me@kangtaeho.com">
---> Using cache
---> 0ca846ceeed3
Step 3/3 : ADD petclinic.war /usr/local/tomcat/webapps/
---> c0c1cc671c1e
Successfully built c0c1cc671c1e
Successfully tagged tomcat-petclinic:latest
c. docker container를 실행한다.
docker run -it --rm -p 8080:8080 --name was tomcat-petclinic
위 명령어로 tomcat container를 실행하면 mysql 주소를 알 수 없기 때문에 오류가 발생한다.