Docker - 部署Java Web 项目

前言

同事让研究一下,如何把我们公司自己的产品,部署到Docker中。后面如果换新的服务器,也方便项目的部署,而不用在新的服务器上重新搭建相关环境。
之前简单的了解过Docker。并且之前通过docker搭建gogs,也体会到了docker的强大和方便。这次,正好借这个机会,好好阅读一下官方文档,通过实践来更加熟悉docker!将我们的产品一步一步部署到docker中。

关于Docker

Docker有两个版本:

社区版(CE)
企业版(EE)
Docker Community Edition(CE)非常适合希望开始使用Docker并尝试使用基于容器的应用程序的个人开发人员和小型团队。

Docker企业版(EE)专为企业开发和IT团队而设计,他们可以在生产中大规模构建,发布和运行业务关键型应用程序。

服务器环境

腾讯云服务器:Ubuntu Server 16.04.1 LTS 64位

安装Docker

传送门:Docker官网关于Ubuntu安装Docker CE – Get Docker CE for Ubuntu

这里我们安装Docker CE(社区版)就好,功能够用了。

安装Docker可参考我的这篇博客 – ubuntu16.04下安装docker,其内容也来着于Docker官方文档。

相关命令

安装完成后,需要熟悉一下Docker的相关命令;
1.查看docker相关信息

docker --version
docker version
docker info

3.启动,停止docker

service docker start # 启动docker服务
service docker stop # 停止docker服务

2.镜像和容器

## 运行docker镜像:hello-world
docker run hello-world

## 查看本地所有docker镜像
docker image ls         ->   该命令等同于:docker images

## 查看所有docker容器
docker container ls   # 查看所有正在运行中的docker容器
docker container ls -a  # 查看所有docker容器,包括运行和停止的容器

3.启动容器
容器是在镜像的基础上来运行的,一旦容器启动了,我们就可以登录到容器中,安装自己所需的软件或应用程序。既然镜像已经下载到本地,那么如何才能启动容器呢?

docker run -i -t -v /root/software/:/mnt/software/ 25c5298b1a36 /bin/bash

这条命令比较长,我们稍微分解一下,其实包含以下三个部分:

docker run <相关参数> <镜像 ID> <初始命令>
其中,相关参数包括:

-i :表示以“交互模式”运行容器
-t :表示容器启动后会进入其命令行
-v :表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
假设我们的所有安装程序都放在了宿主机的 /root/software/ 目录下,现在需要将其挂载到容器的 /mnt/software/ 目录下。

需要说明的是,不一定要使用“镜像 ID”,也可以使用“仓库名:标签名”,例如:docker.cn/docker/centos:centos6。

初始命令表示一旦容器启动,需要运行的命令,此时使用“/bin/bash”,表示什么也不做,只需进入命令行即可。

两种方法部署Java web

OK,准备工作完成后,开始搭建项目运行环境。
这里有两种方法来部署,一种是通过Dockerfile文件来进行自动构建,我们只需要编写该文件就可以。
一种是进入Docker容器中,自己安装软件和相关配置,在Docker容器中的具体操作跟平时在linux服务器上一模一样。

接下来就两种方法都演示一下。

方法一:进入Docker容器,手动部署

具体操作步骤可查看该篇博客:https://blog.csdn.net/jaryle/article/details/54894182

使用这种方法,我遇到了一个问题。在配置jdk1.8和maven的环境变量时,一旦我使用 source 命令,让环境变量生效,就会出现:命令找不到的情况。

设置环境变量
首先,编辑 .bashrc 文件

vi ~/.bashrc
然后,在该文件末尾添加如下配置:

export JAVA_HOME=/opt/jdk
export PATH=$PATH:$JAVA_HOME
最后,需要使用 source 命令,让环境变量生效:

source ~/.bashrc

只要我执行了source ~/.bashrc 或者 source /etc/profile 。这个时候,我再去执行查看文件命令:ls ,就会提示我找不到该命令,这个时候,后面的工作就没办法进行下去了。暂时我还没找到原因。

这里我再提一下,网上搜索ubuntu jdk环境配置,有让修改 ~/.bashrc 文件的,也有让修改 /etc/profile文件的。
其实任何一种都是可以的。
/etc/profile 是系统全局环境变量设定
~/.bashrc用户家目录下的私有环境变量设定

方法二:通过编写Dockerfile,自动构建

传送门:Docker官网关于Dockerfile的文档 – Dockerfile reference

下面是我为了搭建一个java web项目运行环境,简单编写的一个Dockerfile文件:包括JDK1.8 + maven 3.5 + git + tomcat8

Dockefile完整内容如下:

#基于ubuntu
FROM ubuntu

#刷新包缓存 并且 安装wget工具
RUN apt-get update && apt-get install -y wget
#安装vim
RUN apt-get install -y vim
#安装git
RUN apt-get -y install git

#设置工作目录
WORKDIR /home

# 安装jdk1.8
RUN wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz
RUN tar -zxvf jdk-8u181-linux-x64.tar.gz

# 安装maven
RUN wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
RUN tar -zxvf apache-maven-3.5.4-bin.tar.gz

# 配置环境变量
# set jdk
ENV JAVA_HOME /home/jdk1.8.0_181
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib
ENV PATH $PATH:$JAVA_HOME/bin
# set maven
ENV M2_HOME /home/apache-maven-3.5.4
ENV PATH $PATH:$JAVA_HOME/bin:$M2_HOME/bin

#安装 tomcat8
#RUN apt-get update
RUN wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.34/bin/apache-tomcat-8.5.34.tar.gz
RUN tar -zxvf apache-tomcat-8.5.34.tar.gz

#配置tomcat的环境变量
#ENV CATALINA_HOME /home/apache-tomcat-8.5.34
#EXPOSE 8080

#设置tomcat 自启动

用到了Docker的几个指令:FROMRUNWORKDIRENV

你需要做以下几个步骤:
1.将上述文件保存为Dockerfile 注意大小写,没有后缀,
2.然后进入到该文件所在目录,执行构建镜像命令

docker build -t xjc/java_web:v1 .            

命令说明:xjc/java_web:v1 镜像的名字及tag, 最后的点代表当前目录
这个时候,他会一步一步去执行Dockerfile文件里面指定的命令,包括下载文件,配置环境变量等。
等该命令执行完,一个我们想要的镜像也就构建完成了。
3.查看image

docker images

第一个便是我们刚刚构建的镜像。
4. 到了这一步,只是搭好了java的运行环境,这个时候,我们还是需要进入到该容器中,配置一下其他的:比如使用git拉取代码,项目的脚本启动等。

Docker 其他命令

镜像名:test_image
容器名:test_container

# 以shell交互模式启动容器 
docker run -i -t -v /root/software/:/mnt/software/ test_image /bin/bash

# 以shell交互模式进入已经运行的容器
docker exec -t test_image /bin/bash

# 停止某个正在运行的容器
docker container stop test_container

# 查看容器 
docker ps 
docker ps -a      类似:docker container

#使用以下命令,根据某个“容器 ID”来创建一个新的“镜像”:
docker commit 57c312bbaad1 huangyong/javaweb:0.1

# 直接启动容器 并执行run.sh。
docker run -d -p 58080:8080 --name javaweb xjc/javaweb:v0.1 /root/run.sh

-d :表示以“守护模式”执行 /root/run.sh 脚本,此时 Tomcat 控制台不会出现在输出终端上。
-p :表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 58080 端口,这样就向外界暴露了 58080 端口,可通过 Docker 网桥来访问容器内部的 8080 端口了。
--name :表示容器名称,用一个有意义的名称命名即可。
  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一个开源的容器化平台,可以将应用程序和其依赖的环境打包在一个独立的容器中,并且能够快速部署和运行。对于Java项目来说,Docker部署具有以下可复用的优点: 1. 环境一致性:使用Docker可以确保在不同的环境中运行Java项目时拥有相同的运行环境,避免了由于环境差异带来的问题。不论是开发环境、测试环境还是生产环境,只需在Docker中构建一次镜像,就可以在各个环境中使用。 2. 快速部署Docker允许将Java项目和其依赖的环境一同打包为一个镜像文件,将项目部署到其他服务器时只需在目标服务器上运行该镜像。无需手动安装配置Java运行环境和项目依赖,大大加快了项目部署速度。 3. 模块化和可伸缩性:Docker支持将Java项目和其依赖的各个模块独立地打包为一个个容器,可以根据需求进行横向或纵向的扩展。例如,可以将数据库、应用服务器和Web服务器等模块分别打包为单独的容器,并通过Docker容器的连接功能组合起来,以实现Java项目的完整部署。 4. 简化运维:使用Docker可以简化Java项目的运维工作。通过将项目打包成镜像,可以方便地备份和恢复项目、进行扩容和调整资源配置,避免了直接管理各个服务器的复杂性。 总而言之,Docker的使用可以提高Java项目部署效率和运维便利性,并且能够确保环境一致性,使项目的可复用性更高。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值