Kubernetes for Java Developers – Creating a docker image

Java Kubernetes (4 Part Series)

1 Kubernetes for Java Developers – Setup
2 Kubernetes for Java Developers – Creating a docker image
3 Kubernetes for Java Developers – Deploy Application
4 Kubernetes for Java Developers – Debug Application

Welcome back

On first tutorial of this series, we learn about set up a local kubernetes environment.
At this point, we have a Java application that uses a mysql database running on docker.
To package our application inside a docker image, we need to create a Dockerfile.

Create a Dockerfile

Dockerfile definition:

<span>FROM openjdk:11.0.3-jdk-slim</span>
<span>RUN mkdir /usr/myapp</span>
<span>COPY target/java-kubernetes-0.0.1-SNAPSHOT.jar /usr/myapp/app.jar</span>
<span>WORKDIR /usr/myapp</span>
<span>EXPOSE </span><span>8080</span>
<span>CMD ["java", "-Xms128m", "-Xmx256m", "-jar", "app.jar"]</span>
<span>FROM openjdk:11.0.3-jdk-slim</span>
<span>RUN mkdir /usr/myapp</span>
<span>COPY target/java-kubernetes-0.0.1-SNAPSHOT.jar /usr/myapp/app.jar</span>
<span>WORKDIR /usr/myapp</span>
<span>EXPOSE </span><span>8080</span>
<span>CMD ["java", "-Xms128m", "-Xmx256m", "-jar", "app.jar"]</span>
FROM openjdk:11.0.3-jdk-slim RUN mkdir /usr/myapp COPY target/java-kubernetes-0.0.1-SNAPSHOT.jar /usr/myapp/app.jar WORKDIR /usr/myapp EXPOSE 8080 CMD ["java", "-Xms128m", "-Xmx256m", "-jar", "app.jar"]

Enter fullscreen mode Exit fullscreen mode

Use Make to automate tasks

Make is a tool which controls the generation of executables and other non-source files of a program from the program’s source files.
We will use make to automate maven and docker commands in this project.
Check your make installation. Type make --version on terminal. If none happens, please install make before continue.

Create a Makefile

Creating a Makefile on the same Dockerfile directory.
Check out the complete Makefile on github: https://github.com/sandrogiacom/java-kubernetes/blob/master/Makefile

The importance parts are:

build:
mvn clean <span>install</span><span>;</span> <span>\</span>
docker build <span>--force-rm</span> <span>-t</span> java-k8s <span>.</span>
run-db:
make stop-db<span>;</span> <span>\</span>
make rm-db<span>;</span> <span>\</span>
docker run <span>--name</span> mysql57 <span>-p</span> 3306:3306 <span>-e</span> <span>MYSQL_ROOT_PASSWORD</span><span>=</span>123456 <span>-e</span> <span>MYSQL_USER</span><span>=</span>java <span>-e</span> <span>MYSQL_PASSWORD</span><span>=</span>1234 <span>-e</span> <span>MYSQL_DATABASE</span><span>=</span>k8s_java <span>-d</span> mysql/mysql-server:5.7
run-app:
make stop-app<span>;</span> <span>\</span>
make rm-app<span>;</span> <span>\</span>
docker run <span>--name</span> myapp <span>-p</span> 8080:8080 <span>-d</span> <span>-e</span> <span>DATABASE_SERVER_NAME</span><span>=</span>mysql57 <span>--link</span> mysql57:mysql57 java-k8s:latest
build:
    mvn clean <span>install</span><span>;</span> <span>\</span>
    docker build <span>--force-rm</span> <span>-t</span> java-k8s <span>.</span>

run-db:
    make stop-db<span>;</span> <span>\</span>
    make rm-db<span>;</span> <span>\</span>
    docker run <span>--name</span> mysql57 <span>-p</span> 3306:3306 <span>-e</span> <span>MYSQL_ROOT_PASSWORD</span><span>=</span>123456 <span>-e</span> <span>MYSQL_USER</span><span>=</span>java <span>-e</span> <span>MYSQL_PASSWORD</span><span>=</span>1234 <span>-e</span> <span>MYSQL_DATABASE</span><span>=</span>k8s_java <span>-d</span> mysql/mysql-server:5.7

run-app:
    make stop-app<span>;</span> <span>\</span>
    make rm-app<span>;</span> <span>\</span>
    docker run <span>--name</span> myapp <span>-p</span> 8080:8080 <span>-d</span> <span>-e</span> <span>DATABASE_SERVER_NAME</span><span>=</span>mysql57 <span>--link</span> mysql57:mysql57 java-k8s:latest      
build: mvn clean install; \ docker build --force-rm -t java-k8s . run-db: make stop-db; \ make rm-db; \ docker run --name mysql57 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_USER=java -e MYSQL_PASSWORD=1234 -e MYSQL_DATABASE=k8s_java -d mysql/mysql-server:5.7 run-app: make stop-app; \ make rm-app; \ docker run --name myapp -p 8080:8080 -d -e DATABASE_SERVER_NAME=mysql57 --link mysql57:mysql57 java-k8s:latest

Enter fullscreen mode Exit fullscreen mode

build: Run maven and create a docker image with the name “java-k8s”
run-db: Start a new mysql database container
run-app: Start a new application container

In this order, type:

make build
make run-db
make run-app
make build
make run-db
make run-app
make build make run-db make run-app

Enter fullscreen mode Exit fullscreen mode

Obs: Wait 30 seconds between run:db and run:app to make time to start up database.

To see logs of applicaton, type:

docker logs <span>-f</span> myapp
docker logs <span>-f</span> myapp
docker logs -f myapp

Enter fullscreen mode Exit fullscreen mode

And CTRL+C to exit log mode.

Type docker ps to see the containers running

Check
http://localhost:8080/persons

To stop applicaton and database, type:

make stop-app
make stop-db
make stop-app
make stop-db
make stop-app make stop-db

Enter fullscreen mode Exit fullscreen mode

Please clone the complete demo app at:

https://github.com/sandrogiacom/java-kubernetes

Have fun!

See you on the next part. Deploy your app into kubernetes cluster.

Java Kubernetes (4 Part Series)

1 Kubernetes for Java Developers – Setup
2 Kubernetes for Java Developers – Creating a docker image
3 Kubernetes for Java Developers – Deploy Application
4 Kubernetes for Java Developers – Debug Application

原文链接:Kubernetes for Java Developers – Creating a docker image

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
The best hearts are always the bravest.
心灵最高尚的人也总是最勇敢的人
评论 抢沙发

请登录后发表评论

    暂无评论内容