如何把 Java Web 应用放在 docker run 运行容器容器中运行

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
Docker学习笔记之-搭建1个JAVATomcat运行环境.doc 7页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
Docker学习笔记之-搭建1个JAVATomcat运行环境
你可能关注的文档:
··········
··········
 HYPERLINK "/yongboy/archive//407498.html" Docker学习笔记之一,搭建一个JAVA Tomcat运行环境
前言
Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装、部署和升级,非常方便。因为使用了容 器,所以可以很方便的把生产环境和开发环境分开,互不影响,这是 docker 最普遍的一个玩法。更多的玩法还有大规模 web 应用、数据库部署、持续部署、集群、测试环境、面向服务的云计算、虚拟桌面 VDI 等等。
主观的印象:Docker 使用 Go 语言编写,用 cgroup 实现资源隔离,容器技术采用 LXC. 提供了能够独立运行Unix进程的轻量级虚拟化解决方案。它提供了一种在安全、可重复的环境中自动部署软件的方式。LXC命令有些复杂,若感兴趣,这里有 一篇我以前写的基于LXC,(从无到有,搭建一个简单版的JAVA PAAS云平台),可以提前复习一下。
环境
本文所有环境,VMware WorkStation上运行ubuntu-13.10-server-amd64,注意是64位系统,理论上其它虚拟机也是完全可行的。
安装Docker
Docker 0.7版本需要linux内核 3.8支持,同时需要AUFS文件系统。
# 检查一下AUFS是否已安装
sudo apt-get update
sudo apt-get install linux-image-extra-`uname -r`
# 添加Docker repository key
sudo sh -c "wget -qO- https://get.docker.io/gpg | apt-key add -"
# 添加Docker repository,并安装Docker
sudo sh -c "echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list" sudo apt-get update
sudo apt-get install lxc-docker
# 检查Docker是否已安装成功
sudo docker version
# 终端输出 Client version: 0.7.1
Go version (client): go1.2
Git commit (client): 88df052
Server version: 0.7.1
Git commit (server): 88df052
Go version (server): go1.2
Last stable version: 0.7.1
去除掉sudo
在Ubuntu下,在执行Docker时,每次都要输入sudo,同时输入密码,很累人的,这里微调一下,把当前用户执行权限添加到相应的docker用户组里面。
# 添加一个新的docker用户组
sudo groupadd docker
# 添加当前用户到docker用户组里,注意这里的yongboy为ubuntu server登录用户名
sudo gpasswd -a yongboy docker
# 重启Docker后台监护???程
sudo service docker restart
# 重启之后,尝试一下,是否生效
docker version
#若还未生效,则系统重启,则生效
sudo reboot
安装一个Docker运行实例-ubuntu虚拟机
Docker安装完毕,后台进程也自动启动了,可以安装虚拟机实例(这里直接拿官方演示使用的learn/tutorial镜像为例):
docker pull learn/tutorial
安装完成之后,看看效果
docker run learn/tutorial /bin/echo hello world
交互式进入新安装的虚拟机中
docker run -i -t learn/tutorial /bin/bash
会看到:
root@51774a81beb3:/#
说明已经进入交互式环境。
安装SSH终端服务器,便于我们外部使用SSH客户端登陆访问
apt-get update
apt-get install openssh-server
which sshd
/usr/sbin/sshd
mkdir /var/run/sshd
passwd #输入用户密码,我这里设置为123456,便于SSH客户端登陆使用
exit #退出
获取到刚才操作的实例容器ID
#docker ps -l
CON
正在加载中,请稍后...拒绝访问 | www.511yj.com | 百度云加速
请打开cookies.
此网站 (www.511yj.com) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(b243a7-ua98).
重新安装浏览器,或使用别的浏览器详解使用Docker搭建Java Web运行环境
转载 &更新时间:日 17:18:25 & 作者:邴越
本篇文章主要介绍了使用Docker搭建Java Web运行环境,现在分享给大家,也给大家做个参考。感兴趣的小伙伴们可以参考一下。
这周末体验了一下挺火的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 update
sudo apt-get install docker.io
启动服务和守护进程
service docker.io status
service docker.io start
这种方式安装通常不是Docker的最新版本,
如果想要安装最新版本,可以去Docker官网下载安装。
&创建第一个Docker镜像
构建Docker镜像的一般过程是首先创建一个容器,并在容器里修改镜像,配置相关环境等,最后将修改提交为一个新镜像。
(1)下载镜像文件
下载用于制作镜像的系统,
sudo docker pull index.alauda.cn/alauda/ubuntu
这里我从灵雀云的镜像中心拉取。
或者也可以直接从Docker的镜像中心拉取,不过貌似非常慢:
sudo docker pull ubuntu
下载成功后,使用images命令查看本地的镜像列表:
docker images
这里需要注意,使用Docker的时候请添加sudo。
默认安装完 docker 后,每次执行 docker 都需要运行 sudo 命令,如果不跟 sudo,直接执行 docker 命令会报一些权限错误。
(2)启动容器并修改镜像
镜像下载到本地以后,就可以使用Docker运行,
通过下面的命令参数启动容器,
docker run &相关参数& &镜像 ID& &初始命令&
-i:表示以“交互模式”运行容器
-t:表示容器启动后会进入其命令行
-v:表示需要将本地哪个目录挂载到容器中,
格式:-v &宿主机目录&:&容器目录&
我的相关程序都在当前机器的/data/software/目录下,并且想把它挂载到容器的相同目录下:
sudo docker run -i -t -v /data/software/:/data/software/ ae983d5e88ce /bin/bash
“镜像 ID”,也可以使用“仓库名:标签名”,例如:index.alauda.cn/alauda/ubuntu :latest。
上面的命令,可以使用指定的镜像运行一个shell,如果想退出该终端,可以使用exit命令,或者依次按下CTRL -p+CTRL -q,即可切换到宿主机器。不过这种方式,容器依然在后天运行。
启动终端后,进入/data/software/目录,可以发现当前机器目录下的文件已经同步过来:
(3)安装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:JAVAHOME/lib:{JRE_HOME}/lib
export PATH=JAVAHOME/bin:JAVAHOME/bin:PATH
export CATALINA_HOME=/data/tomcat
export CATALINA_BASE=/data/tomcat
保存并退出,设置立即生效:
source /etc/profile
(4)编写启动脚本
启动tomcat时必须通过TOMCATHOME/bin/catalina.sh实现,不能使用TOMCATHOME/bin/catalina.sh实现,不能使用TOMCAT_HOME/bin/startup.sh启动,否则脚本执行后容器会马上退出。
vi /data/start.sh
添加以下内容:
#!/bin/bash
# Export environment variable
source /etc/profile
# Start tomcat
bash /data/tomcat/bin/catalina.sh run
添加可执行权限:chmod u+x /data/start.sh
(5)构建镜像
使用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
index.alauda.cn/alauda/ubuntu latest ae983d5e88ce 10 months ago 255.1 MB
docker inspect可以查看新创建的镜像的详细信息:
sudo docker inspect bingyue/docdemo
(6)运行新创建的镜像
docker run -d -p
--name docdemo bingyue/docdemo /data/start.sh
-p:表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 18080 端口,
这样就向外界暴露了 18080 端口,可通过 Docker 网桥来访问容器内部的 8080 端口了。
查看后台是否启动成功:
测试访问:
(7)提交至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运行一个交互性的shell
sudo docker run -i -t ubuntu /bin/bash
#docker ps命令
sudo docker ps #列出当前所有正在运行的container
sudo docker ps -l #列出最近一次启动的,且正在运行的container
sudo docker ps -a #列出所有的container
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等等
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具您当前位置: >
> 使用 Docker 搭建 Java Web 运行环境
使用 Docker 搭建 Java Web 运行环境
来源:程序员人生&& 发布时间: 08:13:39 阅读次数:1518次
Docker 是 2014 年最为火爆的技术之1,几近所有的程序员都听说过它。Docker 是1种“轻量级”容器技术,它几近动摇了传统虚拟化技术的地位,现在国内外已有愈来愈多的公司开始逐渐使用
Docker 来替换现有的虚拟化平台了。作为1名 Java 程序员,我们是时候1起把 Docker 学起来了!
本文会对虚拟化技术与 Docker 容器技术做1个对照,然后引出1些 Docker 的名词术语,比如:容器、镜像等,随后将使用 Docker 搭建1个 Java Web 运行环境,最后将对本文做1个总结。
我们先来回顾1下传统虚拟化技术的体系架构:
可见,我们在宿主机的操作系统上,可安装了多个虚拟机,而在每一个虚拟机中,通过虚拟化技术,实现了1个虚拟操作系统,随后,就能够在该虚拟操作系统上,安装自己所需的利用程序了。这1切看似非常简单,但其中的技术细节是相当精深莫测的,大神级人物都不1定说得清楚。
凡是使用过虚拟机的同学,应当都知道,启动虚拟机就像启动1台计算机,初始化进程是相当慢的,我们需要等很久,才能看到登录界面。1旦虚拟机启动以后,就能够与宿主机建立网络连接,确保虚拟机与宿主机之间是互联互通的。不同的虚拟机之间却是相互隔离的,也就是说,彼此其实不知道对方的存在,但每一个虚拟机占用的都是宿主机的硬件与网络资源。
我们再来对照1下 Docker 技术的体系架构吧:
可见,在宿主机的操作系统上,有1个 Docker 服务在运行(或称为“Docker 引擎”),在此服务上,我们可开启多个 Docker 容器,而每一个 Docker 容器中可运行自己所需的利用程序,Docker 容器之间也是相互隔离的,一样地,都是占用的宿主机的硬件与网络资源。
Docker 容器相对虚拟机而言,除在技术实现上完全不1样之外,启动速度较虚拟机而言有本质的奔腾,启动1个容器只在眨眼瞬间。不论是虚拟机还是 Docker 容器,它们都是为了隔离利用程序的运行环境,节省我们的硬件资源,为我们开发人员提供福利。
我们再来看看 Docker 的 Logo 吧:
很明显,这是1只鲸鱼,它托着许多集装箱。我们可以把宿主机可当作这只鲸鱼,把相互隔离的容器可看成集装箱,每一个集装箱中都包括自己的利用程序。这 Logo 简直的太形象了!
需要强调的是,笔者并不是否定虚拟化技术,而是想通过本文让更多的读者了解如何使用 Docker 技术,让大家知道除虚拟化技术之外,还有另外一种替换技术,也能让利用程序隔离起来。
下面,我们将结合1个 Java Web 利用的部署进程,来描写如何“烹饪”Docker 这份美味佳肴。您准备好了吗?我们现在就开始!
首先,您要准备1个 CentOS 的操作系统,虚拟机也行。总之,可以通过 Linux 客户端工具访问到 CentOS 操作系统就行。
需要说明的是,Ubuntu 或其它 Linux 操作系统也能玩 Docker,只不过本文选择了以 CentOS 为例,仅此而已。
CentOS 具体要求以下:
必须是 64 位操作系统建议内核在 3.8 以上
通过以下命令查看您的 CentOS 内核:
如果履行以上命令后,输出的内核版本号低于 3.8,请参考下面的方法来来升级您的 Linux 内核。
对 CentOS 6.5 而言,内核版本默许是 2.6。首先,可通过以下命令安装最新内核:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -ivh http://www.elrepo.org/elrepo-release⑹⑸.el6.elrepo.noarch.rpm
yum -y --enablerepo=elrepo-kernel install kernel-lt
随后,编辑以下配置文件:
vi /etc/grub.conf
将default=1修改成default=0。
最后,通过reboot命令重启操作系统。
重启后如果不出意外的话,再次查看内核,您的 CentOS 内核将会显示为 3.10。
如果到这里,您和我们所期望的结果是1致的。恭喜您!下面我们就1起来安装 Docker 了。
安装 Docker
只需通过以下命令便可安装 Docker 软件:
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release⑹⑻.noarch.rpm
yum -y install docker-io
可以使用以下命令,查看 Docker 是不是安装成功:
docker version
若输出了 Docker 的版本号,则说明安装成功了,可通过以下命令启动 Docker 服务:
service docker start
1旦 Docker 服务启动终了,我们下面就能够开始使用 Docker 了。
就像曾安装软件1样,我们首先需要有1张刻录了该软件的光盘,如果您使用的是虚拟光驱,那末就需要运行1种名为“镜像”的文件,通过它来安装软件。在 Docker 的世界里,也有1个名为“镜像”的东西,已安装我们所需的操作系统,我们1般成为“Docker 镜像”,本文简称“镜像”。
那末问题来了,我们从哪里下载镜像呢?
Docker 官网&确切已提供了所有的镜像下载地址,惋惜在国内却是没法访问的。幸亏国内好心人提供了1个&Docker
中文网,在该网站上可以下载我们所需的 Docker 镜像。
我们无妨还是以 CentOS 为例,通过以下步骤,下载1个 CentOS 的镜像。
首先,访问 Docker 中文网,在首页中搜索名为“centos”的镜像,在搜索的结果中,有1个“官方镜像”,它就是我们所需的。
然后,进入 CentOS 官方镜像页面,在“Pull this repository”输入框中,有1段命令,把它复制下来,在自己的命令行上运行该命令,随后将立即下载该镜像。
最后,使用以下命令查看本地所有的镜像:
docker images
当下载完成后,您应当会看到:
REPOSITORY
VIRTUAL SIZE
docker.cn/docker/centos
7 weeks ago
如果看到以上输出,说明您可使用“docker.cn/docker/centos”这个镜像了,或将其称为仓库(Repository),该镜像有1个名为“centos6”的标签(Tag),另外还有1个名为“25c ”的镜像 ID(可能您所看到的镜像 ID 与此处的不1致,那是正常现象,由于这个数字是随机生成的)。另外,我们可以看到该镜像只有 215.8 MB,非常小巧,而不像虚拟机的镜像文件那样庞大。
现在镜像已有了,我们下面就需要使用该镜像,来启动容器。
容器是在镜像的基础上来运行的,1旦容器启动了,我们就能够登录到容器中,安装自己所需的软件或利用程序。既然镜像已下载到本地,那末如何才能启动容器呢?
只需使用以下命令便可启动容器:
docker run -i -t -v /root/software/:/mnt/software/ 25c /bin/bash
这条命令比较长,我们略微分解1下,其实包括以下3个部份:
docker run &相干参数& &镜像 ID& &初始命令&
其中,相干参数包括:
-i:表示以“交互模式”运行容器-t:表示容器启动后会进入其命令行-v:表示需要将本地哪一个目录挂载到容器中,格式:-v &宿主机目录&:&容器目录&
假定我们的所有安装程序都放在了宿主机的/root/software/目录下,现在需要将其挂载到容器的/mnt/software/目录下。
需要说明的是,不1定要使用“镜像 ID”,也能够使用“仓库名:标签名”,例如:docker.cn/docker/centos:centos6。
初始命令表示1旦容器启动,需要运行的命令,此时使用“/bin/bash”,表示甚么也不做,只需进入命令行便可。
安装相干软件
为了搭建 Java Web 运行环境,我们需要安装 JDK 与 Tomcat,下面的进程均在容器内部进行。我们无妨选择/opt/目录作为安装目录,首先需要通过cd
/opt/命令进入该目录。
首先,解压 JDK 程序包:
tar -zxf /mnt/software/jdk⑺u67-linux-x64.tar.gz -C .
然后,重命名 JDK 目录:
mv jdk1.7.0_67/ jdk/
安装 Tomcat
首先,解压 Tomcat 程序包:
tar -zxf /mnt/software/apache-tomcat⑺.0.55.tar.gz -C .
然后,重命名 Tomcat 目录:
mv apache-tomcat⑺.0.55/ tomcat/
设置环境变量
首先,编辑.bashrc文件
vi ~/.bashrc
然后,在该文件末尾添加以下配置:
export JAVA_HOME=/opt/jdk
export PATH=$PATH:$JAVA_HOME
最后,需要使用source命令,让环境变量生效:
source ~/.bashrc
编写运行脚本
我们需要编写1个运行脚本,当启动容器时,运行该脚本,启动 Tomcat,具体进程以下:
首先,创建运行脚本:
vi /root/run.sh
然后,编辑脚本内容以下:
#!/bin/bash
source ~/.bashrc
sh /opt/tomcat/bin/catalina.sh run
注意:这里必须先加载环境变量,然后使用 Tomcat 的运行脚本来启动 Tomcat 服务。
最后,为运行脚本添加履行权限:
chmod u+x /root/run.sh
当以上步骤全部完成后,可以使用exit命令,退出容器。
随后,可以使用以下命令查看正在运行的容器:
此时,您应当看不到任何正在运行的程序,由于刚才已使用exit命令退出的容器,此时容器处于停止状态,可以使用以下命令查看所有容器:
docker ps -a
输出以下内容:
CONTAINER ID
57c312bbaad1
docker.cn/docker/centos:centos6
&/bin/bash&
27 minutes ago
Exited (0) 19 seconds ago
naughty_goldstine
记住以上CONTAINER ID(容器 ID),随后我们将通过该容器,创建1个可运行 Java Web 的镜像。
创建 Java Web 镜像
使用以下命令,根据某个“容器 ID”来创建1个新的“镜像”:
docker commit 57c312bbaad1 huangyong/javaweb:0.1
该容器的 ID 是“57c312bbaad1”,所创建的镜像名是“huangyong/javaweb:0.1”,随后可以使用镜像来启动 Java Web 容器。
启动 Java Web 容器
有必要首先使用docker images命令,查看当前所有的镜像:
REPOSITORY
VIRTUAL SIZE
huangyong/javaweb
fc826a4706af
38 seconds ago
docker.cn/docker/centos
7 weeks ago
可见,此时已看到了最新创建的镜像“huangyong/javaweb:0.1”,其镜像 ID 是“fc826a4706af”。正如上面所描写的那样,我们可以通过“镜像名”或“镜像 ID”来启动容器,与上次启动容器不同的是,我们现在不再进入容器的命令行,而是直接启动容器内部的 Tomcat 服务。此时,需要使用以下命令:
docker run -d -p
--name javaweb huangyong/javaweb:0.1 /root/run.sh
稍作解释:
-d:表示以“守护模式”履行/root/run.sh脚本,此时
Tomcat 控制台不会出现在输出终端上。-p:表示宿主机与容器的端口映照,此时将容器内部的 8080 端口映照为宿主机的 58080
端口,这样就向外界暴露了 58080 端口,可通过 Docker 网桥来访问容器内部的 8080 端口了。--name:表示容器名称,用1个成心义的名称命名便可。
关于 Docker 网桥的内容,需要补充说明1下。实际上 Docker 在宿主机与容器之间,搭建了1座网络通讯的桥梁,我们可通过宿主机 IP 地址与端口号来映照容器内部的 IP 地址与端口号,
在1系列参数后面的是“镜像名”或“镜像 ID”,怎样方便就怎样来。最后是“初始命令”,它是上面编写的运行脚本,里面封装了加载环境变量并启动 Tomcat 服务的命令。
当运行以上命令后,会立即输出1长串“容器 ID”,我们可通过docker ps命令来查看当前正在运行的容器。
CONTAINER ID
huangyong/javaweb:0.1
&/root/run.sh&
4 seconds ago
Up 3 seconds
0.0.0.0:5/tcp
在阅读器中,输入以下地址,便可访问 Tomcat 首页:
http://192.168.65.132:58080/
注意:这里使用的是宿主机的 IP 地址,与对外暴露的端口号 58080,它映照容器内部的端口号 8080。
通过本文,我们了解了 Docker 是甚么?它与虚拟机的差别在哪里?和如何安装 Docker?如何下载 Docker 镜像?如何运行 Docker 容器?如何在容器内安装利用程序?如何在容器上创建镜像?如何以服务的方式启动容器?这1切看似简单,但操作也是相当繁琐的,不过熟能生巧,需要我们不断地操练。
除这类手工生成 Docker 镜像的方式之外,还有1种更像是写代码1样,可以自动地创建 Docker 镜像的方式。只需要我们编写1个 Dockerfile 文件,随后使用docker build命令便可完成以上所有的手工操作。
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
------分隔线----------------------------
------分隔线----------------------------
积分:4237在Docker容器中部署Web应用
本文直接讲解如何在Docker容器中实战部署一个Web应用程序,关于Docker相关的概念和如何安装Docker请参考相关资料完成。
第一步:工具准备
演示如何在Docker容器中部署一个Java Web应用程序,需要准备的软件工具包括:jre,tomcat和webapp应用。另外,为了实现在容器启动时自动启动webapp,需要编写一个脚本工具完成该工作。
安装jre,请参考:
安装tomcat,请参考:
如何在tomcat中部署webapp,请参考:
jre1.8.0_31.tar.gz
// 可以选择其他版本
apache-tomcat-6.0.35.tar.gz // 可以选择其他版本
MyWeb.war // 自己写一个web应用即可,才发现csdn不允许上传附件
start_tomcat.sh
第二步:制作镜像
通过编写Dockerfile的方式制作镜像。
需要在Dockerfile中完成如下几项工作:
(1)安装jre
(2)安装tomcat,并完成在tomcat中部署web应用的基本配置(为实现此功能:在制作镜像之前直接先完成tomcat的基础配置,然后直接拷贝到镜像中即可)。
(3)对外开发8080端口(具体的端口值可以根据实际Tomcat配置参数为准)。
$mkdir docker
$cd docker
$mkdir webapps
$cp jre1.8.0_31.tar.gz .
$tar xzvf jre1.8.0_31.tar.gz
$cp apache-tomcat-6.0.35.tar.gz
$tar xzvf apache-tomcat-6.0.35.tar.gz
$cp MyWeb.war ./webapps/
$vim apache-tomcat-6.0.35/conf/server.xml
编辑tomcat配置文件:server.xml,在&Host&节点中添加如下配置:&Context path="myweb"docBase="/webapps/MyWeb.war" reloadable="false"workDir="/tomcat_work"/&,配置片段如下所示:
&Host name="localhost"
appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false"&
&!-- SingleSignOn valve, shareauthentication between web applications
Documentation at:/docs/config/valve.html --&
&Valve className="org.apache.catalina.authenticator.SingleSignOn"/&
&!-- Access log processes all example.
Documentation at:/docs/config/valve.html --&
&ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs"
prefix="localhost_access_log." suffix=".txt"pattern="common" resolveHosts="false"/&
&Contextpath="/myweb"docBase="/webapps/MyWeb.war"reloadable="false"workDir="/tomcat_work"/&
$vim start_tomcat.sh
#!/bin/bash
Start tomcat with docker containerstart.
echo "Start Tomcat ..."
# Export java path
export PATH=$PATH:/usr/local/java/bin
# Display container ipaddress
# Start tomcat
bash /usr/local/tomcat/bin/catalina.sh run
注意:启动tomcat时必须通过$TOMCAT_HOME/bin/catalina.sh实现,不能使用$TOMCAT_HOME/bin/startup.sh启动,否则脚本执行后容器立刻就退出了。
编写Dockerfile
#Build java web app container image
FROM docker.cn/docker/ubuntu:14.04
MAINTAINER chenchanghui&nuccch.com&
#Make java and tomcat install directory
RUN mkdir /usr/local/java
RUN mkdir /usr/local/tomcat
#Copy jre and tomcat into image
ADD jre1.8.0_31 /usr/local/java/
ADD apache-tomcat-6.0.35 /usr/local/tomcat/
ADD start_tomcat.sh start_tomcat.sh
#Expose http port
EXPOSE 8080
$sudo docker build -t=”ubuntu/myweb:tomcat”.
Sendingbuild context to Docker daemon 270.6 MB
Sendingbuild context to Docker daemon
Step 0 :FROM docker.cn/docker/ubuntu:14.04
---& b39b81afc8ca
Step 1 :MAINTAINER chenchanghui &nuccch.com&
---& Running in cd9ba3324dae
---& ab45c422bdf5
Removingintermediate container cd9ba3324dae
Step 2 :RUN mkdir /usr/local/java
---& Running in f640de521691
Removingintermediate container f640de521691
Step 3 :RUN mkdir /usr/local/tomcat
---& Running in de4a392ec89d
---& 956ac99b8bec
Removingintermediate container de4a392ec89d
Step 4 :ADD jre1.8.0_31 /usr/local/java/
Removingintermediate container b69c147f28fe
Step 5 :ADD apache-tomcat-6.0.35 /usr/local/tomcat/
Removingintermediate container ca5c
Step 6 :ADD start_tomcat.sh start_tomcat.sh
---& cf61f83dc0b0
Removingintermediate container 3f10c2a9e374
Step 7 :EXPOSE 8080
---&abea02c999a2
Removingintermediate container a3841acba123
Successfullybuilt abea02c999a2
第三部:启动容器
webapp通过数据卷挂在到容器中进行部署,不需要拷贝到镜像中。
$sudo docker run -t -i --name tomcat –v /home/$username/docker/webapps:/webapps/
ubuntu/myweb:tomcat /bin/bash/start_tomcat.sh
Start Tomcat ...
Link encap:Ethernet
HWaddr02:42:ac:11:00:0c
inet addr:172.17.0.12 Bcast:0.0.0.0
Mask:255.255.0.0
Feb 02, :42 PMorg.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Nativelibrary which allows optimal performance in production environments was notfound on the java.library.path:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
Feb 02, :42 PMorg.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 onhttp-8080
Feb 02, :42 PMorg.apache.catalina.startup.Catalina load
INFO: Initialization processed in 788 ms
Feb 02, :42 PMorg.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Feb 02, :42 PM org.apache.catalina.core.StandardEnginestart
INFO: Starting Servlet Engine: ApacheTomcat/6.0.35
Feb 02, :42 PMorg.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directorymanager
Feb 02, :42 PM org.apache.catalina.startup.HostConfigdeployDirectory
INFO: Deploying web application directorydocs
Feb 02, :42 PMorg.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directoryROOT
Feb 02, :42 PM org.apache.catalina.startup.HostConfigdeployDirectory
INFO: Deploying web application directoryexamples
Feb 02, :43 PMorg.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directoryhost-manager
Feb 02, :43 PM org.apache.coyote.http11.Http11Protocolstart
INFO: Starting Coyote HTTP/1.1 on http-8080
Feb 02, :43 PMorg.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
Feb 02, :43 PMorg.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/27
config=null
Feb 02, :43 PMorg.apache.catalina.startup.Catalina start
INFO: Server startup in 842 ms
如日志所示,Docker容器已经启动,并且其中安装的tomcat已经成功启动。
访问:,Everything is ok!
小技巧:启动容器时带参数-t -i和不带参数的区别:带参数-t -i时可以通过Ctrl+C停止容器运行,不带参数-t -i启动时,停止容器只能通过命令:$sudo docker stop $containerid实现。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 docker 停止运行容器 的文章

 

随机推荐