Docker应用系列(四)| 部署java应用
本示例基于Centos 7,假设目前使用的账号为release,拥有sudo权限。
由于Docker官方镜像下载较慢,可以开启阿里云的Docker镜像下载加速器,可参考此文进行配置。
主机上服务安装步骤如下:
1. 安装docker服务:
sudo yum install -y docker
2. 启动docker服务:
sudo service docker start
3. 查找centos镜像:
sudo docker search centos
4. 下载官方centos镜像:
sudo docker pull docker.io/centos
5. 下载完后可检查镜像:
sudo docker images
6. 在主机上创建具备java和unzip功能的centos镜像:
mkdir ~/centos-java
cd ~/centos-java
touch Dockerfile
vi Dockerfile
#内容如下:
from docker.io/centos:latest
run yum install -y java
run yum install -y unzip
创建好Dockerfile后,我们build这个镜像:
cd ~/centos-java sudo docker build -t centos/java:latest .
build成功后,可通过如下命令查看最新的镜像列表:
sudo docker images
7. 我们各个java应用(假定都为.zip格式的打包文件,不依赖于web服务器),都将基于该镜像上,创建新的应用镜像。
mkdir ~/myapp
cd ~/myapp
touch Dockerfile
vi Dockerfile
#内容如下:
from centos/java:latest
run mkdir -p /opt/myapp
copy myapp.zip /opt/myapp
run unzip /opt/myapp/myapp.zip -d /opt/myapp
run chmod +x /opt/myapp/startup.sh
expose
cmd ["/opt/driver2/startup.sh"]
内容说明:
- myapp.zip 是我们的java应用,需要你准备好放在~/myapp目录下,该文件会被拷入新镜像中的/opt/myapp目录下
- startup.sh脚本参考内容为:
#!/bin/sh
cd /opt/myapp
java -server -Xmx2g -Xms2g -cp .:myapp-1.0.jar:./lib/* com.yourcompany.Application
- 需要注意的是java以前台方式运行,不要以后台方式(nohup)运行,否则docker容器启动后很快就会停止
- 另外假定你的应用的输出日志为 /var/log/myapp下
创建好Dockerfile后,build新镜像:
cd ~/myapp sudo docker build -t myapp:latest .
build成功后,就可以得到一个名称为myapp的新镜像
8. 运行新镜像:
sudo mkdir -p /var/log/myapp
sudo docker run -p : -v /var/log/myapp/:/var/log/myapp -v /etc/localtime:/etc/localtime:ro --name myapp -d myapp
命令说明:
-v /etc/localtime:/etc/localtime:ro的目的是为了使容器时间与主机时间同步一致
9. 检查容器启动情况:
容器的状态应该为Up,可执行如下观察:
sudo docker ps
若未能起来,我们可以观察日志,了解出错原因:
sudo docker logs 容器id
当然,成功起来后,可以在主机的目录下查看日志以方便跟踪:
tail -f -n /var/log/myapp/app.log
Docker应用系列(四)| 部署java应用的更多相关文章
- Docker & Kubenetes 系列四:集群,扩容,升级,回滚
本篇将会讲解应用部署到Kubenetes集群,集群副本集查看,集群自愈能力演示,集群扩容,滚动升级,以及回滚. 本篇是Docker&Kubenetes系列的第四篇,在前面的篇幅中,我们向Kub ...
- docker 运行tomcat 并部署 java web项目
以下tomcat官方镜像中tomcat:7 和tomcat:8的目录. CATALINA_BASE: /usr/local/tomcat CATALINA_HOME: /usr/local/tomca ...
- JVM系列(四):java方法的查找过程实现
经过前面几章的简单介绍,我们已经大致了解了jvm的启动框架和执行流程了.不过,这些都是些无关痛痒的问题,几行文字描述一下即可. 所以,今天我们从另一个角度来讲解jvm的一些东西,以便可以更多一点认知. ...
- Docker & k8s 系列三:在k8s中部署单个服务实例
本章将会讲解: pod的概念,以及如何向k8s中部署一个单体应用实例. 在上面的篇幅中,我们了解了docker,并制作.运行了docker镜像,然后将镜像发布至中央仓库了.然后又搭建了本机的k8s环境 ...
- Docker & k8s 系列一:快速上手docker
Docker & k8s 系列一:快速上手docker 本篇文章将会讲解:docker是什么?docker的安装,创建一个docker镜像,运行我们创建的docker镜像,发布自己的docke ...
- Docker & k8s 系列二:本机k8s环境搭建
本篇将会讲解k8s是什么?本机k8s环境搭建,部署一个pod并演示几个kubectl命令,k8s dashboard安装. k8s是什么 k8s是kubernetes的简写,它是一个全新的基于容器技术 ...
- java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现
java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析 ...
- docker 部署 java 项目
Docker Docker官方网址: https://docs.docker.com/ 英文地址 Docker中文网址: http://www.docker.org.cn/ 中文地址 Docker是 ...
- docker - 从安装到部署一个web应用(go、java)
一:安装docker 1.https://docs.docker.com/engine/installation/binaries/ 下载docker最新版二进制tar.gz linux下: wget ...
随机推荐
- Mybatis多参数及实体对象传递
在使用Mybatis的时候,经常会有各种各样的参数传递,不同类型,不同个数的参数. 先上个例子: public List<LifetouchRelease> findOfficeL ...
- 使用JavaScript实现使用鼠标画线的效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- bzoj3524/2223 [Poi2014]Couriers
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3524 http://www.lydsy.com/JudgeOnline/problem.ph ...
- HDU 2516 取石子游戏 (找规律)
题目链接 Problem Description 1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍.取完者胜.先取者负输出" ...
- HNU Joke with permutation (深搜dfs)
题目链接:http://acm.hnu.cn/online/?action=problem&type=show&id=13341&courseid=0 Joke with pe ...
- Django之cfrs跨站请求伪造和xfs攻击
跨站请求伪造 一.简介 django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成.而对于django中设置防 ...
- 【读书笔记::深入理解linux内核】内存寻址
我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0xC0000000:这是内核地址空间的地址转换关系. 这句话瞬间让我惊呆了,根据我的CPU的知识,开 ...
- PSQueue队列操作
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈(FILO,First In Last Out,先进后出)属于线性表一样,队 ...
- C语言实现knn
以后写代码一定要谨慎,提高代码的正确率. /*************************************** * 1.初始化距离为最大值 * 2.计算未知样本和每个训练样本的距离为dis ...
- 邀请用户进TestFlight 体验 App 的测试版本
iphone手机用户,在工作中常见到,APP版本现在是Beta阶段(iOS版本),需要邀请一些用户来体验新版本,在版本上线前提出更好的建议及时进行修改,此时用到了testflight,很方便的通过邀请 ...