如何使用docker php开发环境进行Java 开发

自由、创新、研究、探索
Linux/Windows Mono/DotNet [ Open Source .NET Development/ 使用开源工具进行DotNet软件开发]锐意进取,志存高远.成就梦想,只争朝夕.从你开始,创新世界.【That I exist is a perpetual supprise which is life. Focus on eCommerce】
这周末体验了一下挺火的Docker技术,简单记录自己的学习笔记。
&Docker是干什么的
Docker 是一个基于Linux容器(LXC-linux container)的高级容器引擎,基于go语言开发,源代码托管在 Github 上, 遵从Apache2.0协议开源。Docker的目标是实现轻量级的操作系统虚拟化解决方案。
学习Docker首先要了解几个概念:
镜像&Docker的镜像和常见的系统ISO镜像类似,包含了应用程序的信息;
容器&容器相当于一个可以运行起来的虚拟机,应用程序运行在容器中,Docker运行在&Docker&上;
仓库&仓库是存放镜像的地方,有类似git的版本控制,同样分为公开仓库(Public)和私有仓库(Private)两种形式;
Docker支持大部分的Linux发行版,通过使用Docker容器,就可以在不同的操作系统,
不同的机器上运行自己的应用,不用关心硬件、运行环境之类的配置,应用程序的迁移变得非常简单。
&Docker和传统虚拟化技术的对比
相比传统虚拟机技术,Docker资源占用少,启动更快,很大的方便了项目的部署和运维。Docker是在操作系统层面上实现虚拟化,复用本地主机的操作系统,传统方式是在硬件的基础上,虚拟出多个操作系统,然后在系统上部署相关的应用。
下面的这张图片参考相关博文,很形象的说明了Docker和VM之类的传统虚拟化技术的区别:
&搭建Docker环境
我使用的是Ubuntu 14.04,在这上面安装Docker服务。
&&&快速安装Docker
14.04版本的Ubuntu仓库中已经支持Docker的安装,可以使用快速安装的方式,
sudo apt-get updatesudo apt-get install docker.io
启动服务和守护进程
service docker.io statusservice docker.io start
这种方式安装通常不是Docker的最新版本,如果想要安装最新版本,可以去Docker官网下载安装。
&创建第一个Docker镜像
构建Docker镜像的一般过程是首先创建一个容器,并在容器里修改镜像,配置相关环境等,最后将修改提交为一个新镜像。
&&&下载镜像文件
下载用于制作镜像的系统,
sudo docker pull /alauda/ubuntu
这里我从灵雀云的镜像中心拉取。
或者也可以直接从Docker的镜像中心拉取,不过貌似非常慢:
sudo docker pull ubuntu
下载成功后,使用images命令查看本地的镜像列表:
docker images
这里需要注意,使用Docker的时候请添加sudo。
默认安装完 docker 后,每次执行 docker 都需要运行 sudo 命令,如果不跟 sudo,直接执行 docker 命令会报一些权限错误。
&&&启动容器并修改镜像
镜像下载到本地以后,就可以使用Docker运行,通过下面的命令参数启动容器,
docker run &相关参数& &镜像 ID& &初始命令&
-i:表示以&交互模式&运行容器-t:表示容器启动后会进入其命令行-v:表示需要将本地哪个目录挂载到容器中,格式:-v &宿主机目录&:&容器目录&
我的相关程序都在当前机器的/data/software/目录下,并且想把它挂载到容器的相同目录下:
sudo docker run -i -t -v /data/software/:/data/software/ ae983d5e88ce /bin/bash
&镜像 ID&,也可以使用&仓库名:标签名&,例如:/alauda/ubuntu :latest。
上面的命令,可以使用指定的镜像运行一个shell,如果想退出该终端,可以使用exit命令,或者依次按下CTRL -p+CTRL -q,即可切换到宿主机器。不过这种方式,容器依然在后天运行。
启动终端后,进入/data/software/目录,可以发现当前机器目录下的文件已经同步过来:
&&&安装JDK和Tomcat等
安装相关的JDK等程序,这里全部安装到/data/目录:
tar -zxvf jdk-7u25-linux-x64.tar.gz -C /data/mv jdk1.7.0_25 jdk
unzip apache-tomcat-7.0.54.zip -d /data/mv apache-tomcat-7.0.54 tomcat
配置环境变量
vi /etc/profile
添加下面的配置:
#set java environment & &export JAVA_HOME=/data/jdk &&export JRE_HOME=${JAVA_HOME}/jre &&export CLASSPATH=.:JAVAHOME/lib:{JRE_HOME}/lib &&export PATH=JAVAHOME/bin:PATH &
export CATALINA_HOME=/data/tomcat &export CATALINA_BASE=/data/tomcat &
保存并退出,设置立即生效:
source /etc/profile
&&&编写启动脚本
启动tomcat时必须通过TOMCATHOME/bin/catalina.sh实现,不能使用TOMCAT_HOME/bin/startup.sh启动,否则脚本执行后容器会马上退出。
vi /data/start.sh
添加以下内容:
#!/bin/bash# Export environment variablesource /etc/profile# Start tomcatbash /data/tomcat/bin/catalina.sh run
添加可执行权限:
chmod u+x /data/start.sh
&&&构建镜像
使用Docker构建镜像的两种方法:
使用docker commit 命令,更直观一些;
使用docker build命令和Dockerfile文件,可以模板化镜像构建过程;
这里使用docker commit的方式创建镜像。
查看容器列表:
sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
39b2cf60a4c1 ae983d5e88ce:latest&"/bin/bash"&5 hours ago Exited (0) 9 seconds ago dreamy_euclid
提交一个新的镜像:
sudo docker commit 39b2cf60a4c1 bingyue/docdemo
如果有Docker账号,可以将镜像推送到Docker Hub或资金的私有Registry中。
现在查看本地的docker镜像,
sudo docker images
可以看到本地仓库已经有刚刚创建的docker镜像。
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
bingyue/docdemo latest bfc7ed316d42 About a minute ago 528.2 MB
/alauda/ubuntu latest ae983d5e88ce 10 months ago 255.1 MB
docker inspect可以查看新创建的镜像的详细信息:
sudo docker inspect bingyue/docdemo
&&&运行新创建的镜像
docker run -d -p
--name docdemo bingyue/docdemo /data/start.sh
-p:表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 18080 端口,
这样就向外界暴露了 18080 端口,可通过 Docker 网桥来访问容器内部的 8080 端口了。
查看后台是否启动成功:
docker ps&
测试访问:
&&&提交至docker仓库
如果有Docker仓库的账户,可以将本地创建的镜像提交至仓库。
到这一步,差不多完成了Docker的初体验,Docker应用还是比较简单的,真正复杂的应该是背后的虚拟化技术。
一步一步部署下来,的确Docker相比传统的虚拟机技术要简单了很多,有机会继续深入学习。
添加Docker用户组,避免sudo输入
默认安装完 docker 后,每次执行 docker 都需要运行 sudo 命令,影响效率。如果不跟 sudo,直接执行 docker images 命令会有如下问题:Get http:///var/run/docker.sock/v1.18/images/json: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?把当前用户执行权限添加到相应的docker用户组里面就可以解决这个问题。
添加一个新的docker用户组sudo groupadd docker# 添加当前用户到docker用户组里sudo gpasswd -a bingyue docker# 重启Docker后台监护进程sudo service docker restart# 重启之后,尝试一下,是否生效docker version#若还未生效,则系统重启,则生效sudo reboot
Docker常用命令
# 下载一个ubuntu镜像&sudo docker pull ubuntu# 使用ubuntu运行一个交互性的shellsudo docker run -i -t ubuntu /bin/bash#docker ps命令sudo docker ps #列出当前所有正在运行的containersudo docker ps -l #列出最近一次启动的,且正在运行的containersudo docker ps -a #列出所有的container#port命令docker run -p 80:8080 &image& &cmd& #映射容器的8080端口到宿主机的80端口#删除容器命令sudo docker rm `sudo docker ps -a -q`#删除所有容器sudo docker rm $CONTAINER_ID#删除容器id为CONTAINER_ID的容器#其他命令快速参考:sudo docker images #查看本地镜像sudo docker attach $CONTAINER_ID #启动一个已存在的docker实例sudo docker stop $CONTAINER_ID #停止docker实例sudo docker logs $CONTAINER_ID #查看docker实例运行日志,确保正常运行sudo docker inspect $CONTAINER_ID #查看container的实例属性,比如ip等等_____________________________________________________________________
阅读(...) 评论()
随笔 - 14883
评论 - 1022如果在docker中部署tomcat,并且部署java应用程序 - 博客频道 - CSDN.NET
分类:docker
1、先说如何在docker中部署tomcat
& & 第一步:root用户登录在系统根目录下创建文件夹tomcat7,命令如:mkdir tomcat7,并且切换到该目录下:cd tomcat7;
& & 第二步:创建Dockerfile,命令如:touch Dockerfile;
& & 第三步:编写Dockerfile,命令如:vim Dockerfile,完成以下命令编写:
& & & & & & & & & &&FROM ubuntu:14.04
& & & & & & & & & & MAINTAINER zhaichong &&
& & & & & & & & & & ENV REFRESHED_AT
& & & & & & & & & & RUN apt-get -yqq update
& & & & & & & & & & RUN apt-get -yqq install tomcat7 default-jdk
& & & & & & & & & & ENV CATALINA_HOME /usr/share/tomcat7
& & & & & & & & & & ENV CATALINA_BASE /var/lib/tomcat7
& & & & & & & & & & ENV CATALINA_PID &/var/run/tomcat7.pid
& & & & & & & & & & ENV CATALINA_SH & /usr/share/tomcat7/bin/catalina.sh
& & & & & & & & & & ENV CATALINA_TMPDIR /tmp/tomcat7-tomcat7-tmp
& & & & & & & & & & RUN mkdir -p $CATALINA_TMPDIR
& & & & & & & & & & VOLUME [&/var/lib/tomcat7/webapps/&]
& & & & & & & & & & EXPOSE
& & & & & & & & & & ENTRYPOINT [&/usr/share/tomcat7/bin/catalina.sh&, &run& ]
& & & & & & & & & & 说明:这里的EXPOSE要把程序中需要使用到的端口都要暴露出去。根据环境变量CATALINA_BASE可以知道VOLUME指定的目录就是tomcat部署war包的目录。
& & & 第四步:生成镜像,命令如:docker build -t &test/test_app . (注意这里有个英文的句号);注意,在这个过程中docker需要下载安装的jdk和tomcat程序所以比较忙,可以通过命令:docker image查看下,返回的数据中第一行有个REPOSITORY和TAG都是&none&的数据行,其中的VIRTUAL_SIZE是阶段性变大的,说明是在下载。
& & & 第五步:运行镜像生成容器,命令如:docker run &--name test_app -d -p
镜像id,如果不知道镜像id是多少就使用命令:docker images查看下,注意这里把EXPOSE出来的端口和宿主主机的端口绑定起来了,以后就可以使用宿主主机的IP地址和这个端口来访问docker容器中的tomcat以及其中的应用程序了。
& & & 第六步:测试:在浏览器地址栏敲:http://宿主主机ip:8080/,好了成功了。
& & & 可以使用命令:docker port 容器id 8080,这个命令查看容器的8080端口和宿主主机端口之间的映射关系,而已看出来现在容器的8080端口映射的是宿主主机的8080端口。
2、再说如何部署我们的应用程序到docker容器的tomcat里?
& & & 大家知道tomcat在容器中,如果要像在宿主主机上那样部署tomcat应用程序肯定是不行的。那么采用什么办法呢?
& & & 第一步:上一个问题中我们已经知道war包是部署在容器的位置是:/var/lib/tomcat7/webapps/,那么这个位置到底在什么地方?使用命令:docker inspect -f &{{.Volumes}}& 容器id,如果不知道容器id,则可以通过:docker ps的方式查看到所有运行的容器,也可以通过docker ps -a的方式查看所有容器,包括运行的和不运行的。
& & & 会得出以下的结果:
& & &&map[/var/lib/tomcat7/webapps:/var/lib/docker/vfs/dir/28d6ddd8aeeff402a843bd57d3b21fcd80eac7df02],在这个map的中括号里,冒号前边的是容器中的目录,冒号后边的对应的宿主主机中的目录,所以我们只需要把我们的war包拷贝到这个地方然后重启tomcat即可。
& & & 这里要注意,由于我们上边写的Dockerfile中默认容器启动时是会启动tomcat的,所以这里只需要重启容器就能让tomcat把我们的容器加载上,命令如:
& & & docker restart 容器id
3、如果要看成tomcat的日志呢?比如查看启动时的日志,则可以使用命令:
& & & &docker logs 容器id,如果要持续观察日志,则是:docker logs -f 容器id,这个时候日志是从头开时读的,如果日志很长会刷屏很久,如果只打算看最新的日志可以采用以下的方式:docker logs --tail 0 -f &容器id
& & & 注意,有的时候我们想在执行docker run命令的时候才指定映射的Volumes,则可以使用如下命令:
docker run --name gboat2_ca -d -p
--link db001:db_ca -v /home/webapp/ca:/var/lib/tomcat7/webapps/ 64de1445c34c,这里一定要注意的是最后的英文冒号前边是宿主主机的文件夹路径,冒号后边是容器中的路径。
achilles12345
排名:第5264名
(3)(10)(9)(1)(3)(13)(5)(1)(0)(13)(10)(4)(2)(5)(5)(1)(5)(3)(6)(0)(3)(4)(5)(7)(5)(1)(3)【编者的话】这是一篇入门级的学习教程,推荐Java开发者阅读,作者通过一个简单的例子演示了如何在Docker中进行Java开发。不需要Maven、不需要JDK,你只需要给你的小伙伴一个Dockerfile,剩下的事情交给Docker去完成吧。
这周,我和Anna、Stephan、Timo在慕尼黑的W-Jax开了一个关于企业技术(特别针对Java)的会议。没想到居然有这么多的人对Docker感兴趣,但问题是怎么在Docker上进行Java开发呢?我个人比较喜欢短小的示例,它可以通过包含几个小文件的框架帮助你了解某个技术。不幸的是,这在Java的世界很难实现,因为大多数的示例都需要某个IDE以及适当的对Web框架有所了解。在这篇文章中,我将尝试使用短小的示例,以帮助你快速学习如何在Docker中进行Java开发。
现在有非常多的Java Web框架,但我这里并不打算使用它们。我只想要的是一个小的框架所以我选择了Spark,它是一个基于Java 8的极小的框架。Spark使用Maven作为构建工具。
源代码和配置文件
在这个例子中你要增加三个文件:
Maven的配置文件: pom.xml
一个Java类:Hello.java
一个Dockerfile
如果有读者等不及了,可以克隆这个repo:
下面我们会详细解释这三个文件的结构,你可以此来快速了解。(读者可以查看原文中的视频,看完视频基本可以了解怎么做)
pom.xml包含一些基本的Maven配置,比如配置Spark所依赖的Java 8。它会把所有的依赖封装成一个大的jar包。我不是 Maven专家,所以我没法把例子写得更简单、更流畅以便让他们更受欢迎。这是pom文件地址,你可以看看我的配置:
Hello.java
pom.xml文件定义mainClass为sparkexample.Hello,我们需要在src/main/java/sparkexample/目录下创建文件。
Dockerfile
最后我们来编写文件,这个Dockerfile使用到了Java镜像(),并从安装Maven开始做起。下一步它会安装项目依赖。我们通过pom.xml来解析这些依赖,正如你所看到的,它允许Docker缓存这些依赖。下一步,我们要编译打包我们的应用,并启动应用。如果我们重建应用时,pom.xml文件没有任何修改,之前的步骤都被缓存下来了,直接到最后一步启动应用。这可以加快应用的重新构建速度。
创建和运行
一旦这三个文件已经完成,那创建Docker镜像就变得轻而易举了。
$ docker build -t giantswarm/sparkexample
注意:首次启动时会花费一些时间,因为它要安装Maven并下载所有的依赖。之后再启动就需要几秒钟,因为所有的东西都已经缓存了。
镜像创建之后,用下面的命令创建容器:
docker run -d -p
giantswarm/sparkexample
用下面的命令访问:
curl localhost:4567 hello
现在可以去修改源码(返回你想返回的东西)并重新构建,这看起来是不是很棒?
在文章中找不到问题答案?您还可以
热门栏目订阅

我要回帖

更多关于 docker java 的文章

 

随机推荐