本示例基于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应用的更多相关文章

  1. Docker & Kubenetes 系列四:集群,扩容,升级,回滚

    本篇将会讲解应用部署到Kubenetes集群,集群副本集查看,集群自愈能力演示,集群扩容,滚动升级,以及回滚. 本篇是Docker&Kubenetes系列的第四篇,在前面的篇幅中,我们向Kub ...

  2. docker 运行tomcat 并部署 java web项目

    以下tomcat官方镜像中tomcat:7 和tomcat:8的目录. CATALINA_BASE: /usr/local/tomcat CATALINA_HOME: /usr/local/tomca ...

  3. JVM系列(四):java方法的查找过程实现

    经过前面几章的简单介绍,我们已经大致了解了jvm的启动框架和执行流程了.不过,这些都是些无关痛痒的问题,几行文字描述一下即可. 所以,今天我们从另一个角度来讲解jvm的一些东西,以便可以更多一点认知. ...

  4. Docker & k8s 系列三:在k8s中部署单个服务实例

    本章将会讲解: pod的概念,以及如何向k8s中部署一个单体应用实例. 在上面的篇幅中,我们了解了docker,并制作.运行了docker镜像,然后将镜像发布至中央仓库了.然后又搭建了本机的k8s环境 ...

  5. Docker & k8s 系列一:快速上手docker

    Docker & k8s 系列一:快速上手docker 本篇文章将会讲解:docker是什么?docker的安装,创建一个docker镜像,运行我们创建的docker镜像,发布自己的docke ...

  6. Docker & k8s 系列二:本机k8s环境搭建

    本篇将会讲解k8s是什么?本机k8s环境搭建,部署一个pod并演示几个kubectl命令,k8s dashboard安装. k8s是什么 k8s是kubernetes的简写,它是一个全新的基于容器技术 ...

  7. java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现

    java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析 ...

  8. docker 部署 java 项目

    Docker Docker官方网址: https://docs.docker.com/  英文地址 Docker中文网址: http://www.docker.org.cn/ 中文地址 Docker是 ...

  9. docker - 从安装到部署一个web应用(go、java)

    一:安装docker 1.https://docs.docker.com/engine/installation/binaries/ 下载docker最新版二进制tar.gz linux下: wget ...

随机推荐

  1. 2016CCPC东北地区大学生程序设计竞赛 (2018年8月22日组队训练赛)

    题目链接:http://acm.hdu.edu.cn/search.php?field=problem&key=2016CCPC%B6%AB%B1%B1%B5%D8%C7%F8%B4%F3%D ...

  2. HDU 1256 画8 (找规律)

    题目链接 Problem Description 谁画8画的好,画的快,今后就发的快,学业发达,事业发达,祝大家发,发,发.   Input 输入的第一行为一个整数N,表示后面有N组数据. 每组数据中 ...

  3. java在CMD窗口执行程序的时候输入密码(隐藏一些敏感信息)

    有时候我们需要从CMD窗口执行一些命令,有时候会输入一些敏感的信息,比如密码之类的东西,所以我们可以从控制台读取但是不希望别人看见我们的密码: import java.io.Console; /** ...

  4. Perl6多线程4: Promise allof / anyof

    allof   : 所有代码块执行完成后才退出 anyof :只要有一个代码块执行完后就马上退出 要配合 await 一起用: my $p = start {say 'a'}; ;say 'b';} ...

  5. perl6 Socket

    Perl6 中的SOCKET就是相当于Perl5 的 IO::Socket::INET. 官方介绍如下: #下面是客户端multi method new( :$host, :$port, :, :$e ...

  6. USB各种模式 解释

    1.MTP: 通过MTP这种技术,可以把音乐传到手机里.有了U盘功能为什么还要多此一举呢?因为版权问题,MTP可以把权限文件从电脑上导过去:如果只使用手机的U盘功能,把歌的文件拷过去之后,没有权限文件 ...

  7. 在64位ubuntu中安装代码比较工具beyond compare

    1,//从http://www.scootersoftware.com/download.php 官方地址下载 bcompare-3.3.2.14050.tar.gz 或 bcompare-4.0.7 ...

  8. UVALive 5760 Alice and Bob

    题意是黑板上有n个数\(S_i\).每次操作可以把其中一个数减1或者将两个数合并为一个数.一个数变为0时,则不能再对其操作. 思路是发现最大的可操作次数为\( \sum S_i\)+(n - 1).\ ...

  9. int(long) 类型转换为char

    char类型占一个字节,8位 int类型四个字节32位 (long类型的转换跟int类型相同) #include <stdio.h> ]) { buffer[] = (char)tmp; ...

  10. linux自动获得mac地址,修改网络配置

    1.修改网络配置,自动获得mac地址 删除 /etc/udev/rules.d/70-persistent-net.rules 文件 删除 /etc/sysconfig/network-scripts ...