在Docker容器中部署Web应用

本文直接讲解如何在Docker容器中实战部署一个Web应用程序,关于Docker相关的概念和如何安装Docker请参考相关资料完成。

第一步:工具准备

演示如何在Docker容器中部署一个Java Web应用程序,需要准备的软件工具包括:jre,tomcat和webapp应用。另外,为了实现在容器启动时自动启动webapp,需要编写一个脚本工具完成该工作。

安装jre,请参考:http://www.wikihow.com/Install-Java-on-Linux

安装tomcat,请参考:http://blog.csdn.net/williamcs/article/details/8579957

如何在tomcat中部署webapp,请参考:

http://tomcat.apache.org/tomcat-7.0-doc/deployer-howto.html

http://www.cnblogs.com/zengsong-restService/archive/2013/01/04/2844568.html

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"/>

</Host>

$vim start_tomcat.sh

#!/bin/bash

#Date: 2015/02/02

#Desc:

#       Start tomcat with docker containerstart.

echo "Start Tomcat ..."

# Export java path

export PATH=$PATH:/usr/local/java/bin

# Display container ipaddress

ifconfig

# 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<nuccch2010.163.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 <nuccch2010.163.com>

---> Running in cd9ba3324dae

---> ab45c422bdf5

Removingintermediate container cd9ba3324dae

Step 2 :RUN mkdir /usr/local/java

---> Running in f640de521691

---> bd94048cb633

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/

---> e3181a61f635

Removingintermediate container b69c147f28fe

Step 5 :ADD apache-tomcat-6.0.35 /usr/local/tomcat/

---> 9169a4ab9a80

Removingintermediate container c190162d7a5c

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 ...

eth0     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, 2015 1:38: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, 2015 1:38:42 PMorg.apache.coyote.http11.Http11Protocol init

INFO: Initializing Coyote HTTP/1.1 onhttp-8080

Feb 02, 2015 1:38:42 PMorg.apache.catalina.startup.Catalina load

INFO: Initialization processed in 788 ms

Feb 02, 2015 1:38:42 PMorg.apache.catalina.core.StandardService start

INFO: Starting service Catalina

Feb 02, 2015 1:38:42 PM org.apache.catalina.core.StandardEnginestart

INFO: Starting Servlet Engine: ApacheTomcat/6.0.35

Feb 02, 2015 1:38:42 PMorg.apache.catalina.startup.HostConfig deployDirectory

INFO: Deploying web application directorymanager

Feb 02, 2015 1:38:42 PM org.apache.catalina.startup.HostConfigdeployDirectory

INFO: Deploying web application directorydocs

Feb 02, 2015 1:38:42 PMorg.apache.catalina.startup.HostConfig deployDirectory

INFO: Deploying web application directoryROOT

Feb 02, 2015 1:38:42 PM org.apache.catalina.startup.HostConfigdeployDirectory

INFO: Deploying web application directoryexamples

Feb 02, 2015 1:38:43 PMorg.apache.catalina.startup.HostConfig deployDirectory

INFO: Deploying web application directoryhost-manager

Feb 02, 2015 1:38:43 PM org.apache.coyote.http11.Http11Protocolstart

INFO: Starting Coyote HTTP/1.1 on http-8080

Feb 02, 2015 1:38:43 PMorg.apache.jk.common.ChannelSocket init

INFO: JK: ajp13 listening on /0.0.0.0:8009

Feb 02, 2015 1:38:43 PMorg.apache.jk.server.JkMain start

INFO: Jk running ID=0 time=0/27  config=null

Feb 02, 2015 1:38:43 PMorg.apache.catalina.startup.Catalina start

INFO: Server startup in 842 ms

如日志所示,Docker容器已经启动,并且其中安装的tomcat已经成功启动。

访问:http://172.17.0.12:8080/myweb/,Everything is ok!

小技巧:启动容器时带参数-t -i和不带参数的区别:带参数-t -i时可以通过Ctrl+C停止容器运行,不带参数-t -i启动时,停止容器只能通过命令:$sudo docker stop $containerid实现。

时间: 2024-11-05 02:24:20

在Docker容器中部署Web应用的相关文章

在Docker容器中部署静态网页的方法教程

步骤:1.创建映射端口的交互式容器docker run -p 80 --name web -i -t daocloud.io/ubuntu /bin/bash2.安装Nginxapt-get install -y nginx 3.安装文本编辑器vimapt-get install -y vim4.创建静态页面 mkdir -p /var/www/html cd /var/www/html vim index.html 使用i切换到插入模式 在index.html中写入以下内容: <html>

docker多个容器连接 将 Rails 程序部署到 Docker 容器中

在docker中使用MySQL数据库 https://yq.aliyun.com/articles/583765 将 Rails 程序部署到 Docker 容器中 原文地址:https://www.cnblogs.com/znsongshu/p/9746531.html

Docker 在容器中部署静态网站

Docker 在容器中部署静态网站 在容器中部署静态网站 设置容器的端口映射 run -P``--publish-all=true|false:容器暴露的所有端口进行映射 -p``--publish=[]:指定映射哪些容器端口 80:随机映射 8080:80:一一对应 0.0.0.0:80:指定IP 0.0.0.0:8080:80:IP 宿主机端口 容器端口 容器Nginx部署 创建映射80端口的交互式容器 安装Nginx 安装文本编辑器VIM 创建静态页面 修改Nginx配置文件 运行Ngin

Docker容器中运行ASP.NET Core

在Linux和Windows的Docker容器中运行ASP.NET Core 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott Hanselman就捷足先登了.那么我就来翻译一下这篇文章,让更多的中文读者看到.当然Scott遇到的坑我也遇到了. 不过首先,对于不熟悉的朋友我还是来解释一下Linux容器和Windows容器的概念. 由于容器成为虚拟化和应用托管的一种不可避免的选项,Windows也开始为公众提供容器功能(其实微软具备和使用容器技术很久了).这

在容器中部署静态网站----Nginx

在容器中部署静态网站----Nginx 步骤: 1.创建映射端口的交互式容器 docker run -p 80 --name web -i -t daocloud.io/ubuntu /bin/bash 2.安装Nginx apt-get install -y nginx 3.安装文本编辑器vim apt-get install -y vim 4.创建静态页面 mkdir -p /var/www/html cd /var/www/html vim index.html 使用i切换到插入模式 在i

Docker 入门 到部署Web 程序

最近阿里的面试官问我Docker是做什么用的,我记得之前360和美团,京东的都问过,但是一直没时间看,最近有时间了,系统的学习了一下Docker,在此做一下记录,方便各位看官学习交流 一.Docker概述: Docker: 本意是码头工人,言外之意是集装箱: Java号称“一次编译,到处运行”,因为java虚拟机解决平台的兼容性问题,所以有java虚拟机的地方就能跑java代码: Docker是:“一次封装,到处运行”,因为docker决绝了应用环境的问题,安装了docker的平台就能跑“doc

[docker] 管理docker容器中的数据

之前我们介绍了Docker的基本概念(前面的没翻译...),了解了如何使用Docker镜像进行工作,并且学习了网 络和容器之间的链接.这一节我们将讨论如何管理容器中及容器之间的数据. 我们将查看下面两种管理Docker中数据的主要方法. 数据卷 数据卷容器 数据卷 一个数据卷就是经过特殊设计的,在一个或多个容器中通过UFS文件系统提供的一些特性 实现数据持久化或共享. 数据卷可以在容器之间共享和重复利用 可以对数据卷里的内容直接进行修改 对镜像的更新不会改变数据卷的内容 卷会一直持续到没有容器使

Docker容器Tomcat部署war包

原文:Docker容器Tomcat部署war包 在docker容器中使用tomcat部署war包主要包括四个步骤,创建tomcat容器.上传war包到容器.重启容器.访问应用. 1.创建tomcat容器 使用docker run  -d --name cmdtomcat -p 8080:8080  tomcat命令启动了tomcat容器,在浏览器输入http://localhost:8080/可以显示tomcat配置页面.使用docker ps -a可以看到cmdtomcat的容器. 使用doc

【原创】大叔经验分享(71)docker容器中使用jvm工具

java应用中经常需要用到jvm工具来进行一些操作,如果java应用部署在docker容器中,如何使用jvm工具? 首先要看使用的docker镜像, 比如常用的openjdk镜像分为jdk和jre,只有jdk版本才有jvm工具,所以可以直接使用jdk版本的openjdk: 比如常用的tomcat镜像则没有jdk和jre选择,默认使用都是jre,所以没有jvm工具,tomcat镜像中的jdk目录如下: # ls /usr/lib/jvm/java-1.8-openjdk bin jre lib #