docker之使用dockerfile配置tomcat、jdk环境(ubuntu 14.04)

本文详细介绍如何使用Docker搭建Tomcat8和JDK1.8环境,包括安装Docker、配置Dockerfile、创建镜像、测试镜像以及上传镜像至仓库的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.安装docker:

  • 通过系统自带包安装(可能不是最新版)
$ yum install docker

或者

$ apt-get install docker
  • 通过Docker源安装最新版本
$ sudo apt-get install apt-transport-https 
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 
$ sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list" 
(可能会报"unable to resolve host iZbp1dhz3f2ha9gfmr23233",没管他继续)
$ sudo apt-get update 
$ sudo apt-get install lxc-docker
  • 验证安装:
$ docker -v
Docker version 1.9.1, build a34a1d5

windows安装请参考链接:
https://docs.docker.com/toolbox/toolbox_install_windows/
启动docker:

$ service docker start

2.准备工作:

获取ubuntu镜像:

$ docker pull ubuntu:14.04

查看获取的镜像:

$ docker images

在这里插入图片描述
创建Dockerfile和run.sh文件:

$ mkdir tomcat8_jdk1.8
$ cd tomcat8_jdk1.8
$ touch Dockerfile run.sh

下载tomcat和jdk并解压(可以到官网下载最新版本):

$ wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-8.5.38.tar.gz
$ wget https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.tar.gz
$ tar zxf apache-tomcat-8.5.38.tar.gz
$ tar zxf jdk-8u191-linux-x64.tar.gz

解压后目录结构如下:
在这里插入图片描述

Dockerfile文件编写:

  • 在以前java的开发中,对于一些操作我们会写些sh脚本文件来封装一些基本操作,而在docker中,采用的就是docerfile的方式让dcoker读取并分析、执行,这样的话重复构建、更新都变得更方便。在这里阐述下常用的docker参数:
  • FROM命令。用法,FROM :。FROM命令告诉docker我们构建的镜像是以哪个(发行版)镜像为基础的。
  • RUN命令。用法RUN 。RUN 后面接要执行的命令,比如,我们想在镜像中安装vim,只需在Dockfile中写入RUN yum install -y vim
  • ENV命令。用法,ENV 。ENV命令主要用于设置容器运行时的环境变量
  • ADD命令。用法,ADD 。ADD主要用于将宿主机中的文件添加到镜像中
    下面是文件内容
# 设置基础镜像
FROM ubuntu:14.04
# 创建者信息
MAINTAINER Mr.zhang

# 设置环境变量,所有操作都是非交互式的
ENV DEBIAN_FRONTEND noninteractive
# 设置系统编码,不然web接口或日志中文会出现乱码
ENV LANG C.UTF-8

# 设置时区,注意这里要更改系统的时区设置,因为在web应用中经常会用到时区这个系统变量,ubuntu 16.04请注释掉
RUN echo "Asia/Shanghai" > /etc/timezone && \
    dpkg-reconfigure -f noninteractive tzdata

# 安装跟tomcat用户认证相关的软件,此步可跳过对应的不用创建create_tomcat_admin_user.sh文件脚本
RUN apt-get update
RUN apt-get install -yq --no-install-recommends wget pwgen ca-certificates && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*

# 设置tomcat和jdk的环境变量,其他的环境变量也可以在这里设置
ENV CATALINA_HOME /tomcat
ENV JAVA_HOME /jdk
ENV PATH $JAVA_HOME/bin:$PATH

# 复制tomcat和jdk文件到镜像
ADD apache-tomcat-8.5.38 /tomcat
ADD jdk1.8.0_191 /jdk

ADD create_tomcat_admin_user.sh /create_tomcat_admin_user.sh
ADD run.sh /run.sh
RUN chmod +x /*.sh
RUN chmod +x /tomcat/bin/*.sh

EXPOSE 8080
CMD ["/run.sh"]

创建 tomcat 用户和密码脚本文件 create_tomcat_admin_user.sh

下面是文件内容:

#!/bin/bash

if [ -f /.tomcat_admin_created ] ; then
    echo "Tomat 'admin' user already created"
    exit 0
fi

# generate password
PASS=${TOMCAT_PASS:-$(pwgen -s 12 1)}
_word=$( [ ${TOMCAT_PASS} ] && echo "preset" || echo "random" )

echo "=> Creating and admin user with a ${_word} password in Tomcat"
sed -i -r 's/<\/tomcat-users>//' ${CATALINA_HOME}/conf/tomcat-users.xml

echo '<role rolename="manager-gui"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml
echo '<role rolename="manager-script"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml
echo '<role rolename="manager-jmx"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml
echo '<role rolename="admin-gui"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml
echo '<role rolename="admin-script"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml
echo "<user username=\"admin\" password=\"${PASS}\" roles=\"manager-gui,manager-script, manager-jmx, admin-gui, admin-script\"/>" >> ${CATALINA_HOME}/conf/tomcat-users.xml
echo '</tomcat-users>' >> ${CATALINA_HOME}/conf/tomcat-users.xml
#IP white list	171.88.14*.*改为自己的ip即可
sed -i 's/allow=\"127\\.\\d+\\.\\d+\\.\\d+|::1|0:0:0:0:0:0:0:1\" \/>/allow="171.88.14*.*" \/>/g' ${CATALINA_HOME}/webapps/manager/META-INF/context.xml
echo "=> Done!"
touch /.tomcat_admin_created

echo "================================================"
echo "You can now configure to this Tomcat server using:"
echo ""
echo "    admin:${PASS}"
echo ""
echo "================================================"

编写 run.sh 脚本文件

下面是文件内容:

#!/bin/bash
if [ ! -f /.tomcat_admin_created ]; then
     /create_tomcat_admin_user.sh
fi
exec ${CATALINA_HOME}/bin/catalina.sh run

注意事项

启动镜像报错“Docker error: standard_init_linux.go:185: exec user process caused “no such file or directory”(一般在windows上的docker创建镜像出现,由于文件编码导致)解决方案:

修改Dockerfile,create_tomcat_admin_user.sh,run.sh文件编码:
$ vim Dockerfile
$ :set ff		回车后看到当前文件的fileformat格式 
$ :set ff=unix 回车后输入:wq保存文件。
create_tomcat_admin_user.sh,run.sh文件重复以上操作,重新build镜像即可。

创建和测试镜像

通过下面的命令创建镜像 tomcat8:jdk1.8:

$ sudo docker build -t tomcat8:jdk1.8 .

查看下目前本地的镜像:

$ sudo docker images

启动一个 tomcat 容器进行测试

$ sudo docker run -d -p 8080:8080 tomcat8:jdk1.8
-p指定主机8080端口与容器8080端口进行绑定 
-d指定容器运行后与当前主机分离,后台运行 

查看映射的端口信息:

$ sudo docker ps

通过 docker logs 得到 tomcat 的密码:

$ sudo docker logs 3cd
(3cd 是镜像的运行的CONTAINER ID,通过$ sudo docker ps 得到)

在本地使用浏览器登录 Tomcat 管理界面,访问http://127.0.0.1:8080
8080 端口在 sudo docker ps 查看
进入docker容器:

$ sudo docker exec -it 3cd /bin/bash

停止docker容器:

$ sudo docker stop 3cd

上传镜像至仓库:

修改镜像标记:
$ sudo docker tag tomcat8:jdk1.8 reponame:tagname
上传标记的镜像:
$ sudo docker push reponame:tagname

## (注意:reponame要和仓库名称一致,首次上传需要登录验证,也可以使用 $ docker login进行登陆)

docker容器中的top命令:

$ export TERM
$ top

如果提示“TERM environment variable not set.”按以下步骤操作:
在这里插入图片描述

下载仓库的镜像:

删除原来的镜像

$ sudo docker rmi tomcat8:jdk1.8
$ sudo docker rmi reponame:tagname

下载镜像

$ sudo docker pull reponame:tagname
(使用$ sudo docker images查看下载的,可以启动这个镜像试下)

其它常用命令

保存镜像

$ sudo docker save -o tomcat8_jdk1.8.tar tomcat8:jdk1.8

载入保存的镜像

$ sudo docker load < tomcat8_jdk1.8.tar

基于已有的容器镜像(正在运行的)创建新的镜像

$ sudo docker commit -m "tomcat8 and jdk1.8" -a "Mr.zhang" 3cd new_Docker:v1
-a , --author=""作者信息。
-m, --message=""提交信息。
-p,  --pause=true提交时停止容器运行。
3cd, 是镜像的运行的CONTAINER ID,通过$ sudo docker ps 得到。

docker rmi 提示不能删除时

 查看记录:
$ sudo docker ps -a
先删除记录
$ sudo docker rm CONTAINER_ID
再使用docker rmi删除镜像

批量删除docker ps -a

docker ps -a | awk '{print "docker rm "$1}' | bash

拷贝主机文件到容器

docker cp 文件路径 容器ID:容器内的路径

拷贝容器文件到主机

docker cp 容器ID:容器内的路径 文件路径
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值