当你开始这个任务的时候,希望你已经基本了解Docker是什么东西,基本的命令
任务8
编写一个Java Web项目,发布为war包,并在Docker容器中运行
我已经写好了一个基本的Java Web 页面,简单的Hello world,并完成了war包的打包 打包教程CSDN
安装Docker Engine
我们用的系统是Centos7,所以就可以直接去Docker 官方去找安装教程Centos Docker安装教程,但是我给你的虚拟机已经配置好了Docker环境,所以这一步可以跳过,但是最好可以去看一下了解一下Docker大致的安装步骤,也很简单官方都是直接给一个 安装脚本,复制粘贴跑就完了
编写一个Java Web项目,发布为war包
制作的 web 包已经一起发给你了,名字为myweb.war
在Docker 运行一个Tomcat容器
[root@tomcat ~]# docker run -d -p 8080:8080 tomcat:latest
# -d, --detach 在后台运行container并打印container ID
# -p, --publish 将container端口发布到host
#tomcat:latest 表示使用tomcat最新的镜像,latest的英文意思就是最新的,最近的
container 就是容器的意思
你可能觉得上面是报错了,但其实不是的,他们提示的是Unable to find image 'tomcat:lastest' locally
,说明你本地没有tomcat
的镜像,他从Docker registries
中给你拉取就是下载镜像(Docker registries 就像我之前给你解释的应用商城一样,而Docker registries是 Docker 官方的命名)
ChatGPT翻译
如果它报错
docker: Error response from daemon: driver failed programming external connectivity on endpoint naughty_torvalds (0edd856e1b25bbf689ba039aac0d2aa33d4eb334fbd50d4915a774912ad27f3e): Error starting userland proxy: listen tcp4 0.0.0.0:8080: bind: address already in use.
说明本机的8080 端口给占用了,可以使用netstat
来进行查看
[root@tomcat docker]# netstat -antup | grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 943/nginx: master p
看到的是nginx 服务占用了我们的8080端口,然后nginx 服务的pid 为 943,我们使用kill
命令来杀掉这个进程
[root@tomcat docker]# kill -9 943
# -9 为强制删除,强制删掉这个进程
以防等会重启的时候又要重新杀掉进程,可以使用stop
命令和disable
来关闭 nginx
服务,在关闭之前需要确认这个服务是否需要,是否需要一直运行着(这台虚拟机是不需要这个服务的)
[root@tomcat Share]# systemctl stop nginx
#这会停止nginx服务,但机器重启之后nginx服务还会打开,这个时候就要使用disable命令
[root@tomcat Share]# systemctl disable nginx #关闭开机自启动
Removed symlink /etc/systemd/system/multi-user.target.wants/nginx.service.
然后我们再重新运行docker run -d -p 8080:8080 tomcat:latest
我们使用docker ps -a
查看正在运行的进程,其中的ps
代表 process status(进程状态)的缩写
我们使用IP 加端口号8080访问我们的Tomcat网页,查看本机IP可以使用ip add
来进行查看
Tomcat运行成功
在VMware上给Centos建立共享文件夹
- 打开VMware,打开你正在运行的虚拟机,右键虚拟机
- 点击
设置
- 点击
共享文件夹
–> 将文件夹贡献
选择为总是启用
–> 点击添加
,将你要共享的文件夹添加上去(这里要添加上去的文件夹为你存放war包的文件夹) –> 然后就点击确认
- 共享文件夹存放的目录是在
/mnt/hgfs
之中,但是我这边找不到这个文件夹,我在论坛中找到了解决方法StackExchange - 运行完上面的步骤,就可以在
/mnt/hgfs
中找到你的共享文件夹了
将共享文件夹中的war包发布到Docker中的Tomcat容器中
使用 docker ps -a
来查看正在运行的(process status 程序状态) 容器,找到我们刚刚跑起来了Tomcat容器,找到它的CONTAINER ID
(容器ID),-a
就是 all
,就是查看全部容器的状态,这里的容器ID为279b8b4a2456
进入我们存放 war 包的位置,我这里是/mnt/hgfs/Share
,因为我没有把war包从共享文件夹中移出来,但是最好是把它从共享文件夹中移出来
[root@tomcat ]# mkdir /root/packets #创建一个名为packets的文件夹
[root@tomcat ]# cp /mnt/hgfs/Share/myweb.war /root/packets/
#将/mnt/hgfs/Share/文件夹中的myweb.war文件复制到/root/packets 文件夹中
[root@tomcat Share]# cd /root/packets/
#进入/root/packets 这个文件夹
使用docker cp
命令将war 包复制到容器内
[root@tomcat packets]# docker cp /root/packets/myweb.war 279b8b4a2456:/usr/local/tomcat/webapps
# 279b8b4a2456 就是我们Tomcat容器的ID,/usr/local/tomcat/webapps,就是Tomcat容器内存放网页的文件夹
Successfully copied 4.1kB to 279b8b4a2456:/usr/local/tomcat/webapps
使用IP:8080/war包名称/
来访问网站(不知道自己IP地址可以通过ip add 来进行查看)
这台机子的IP 是 192.168.30.40
成功访问!!
任务9
用编写Dockerfile方式制作一个 Tomcat 容器,并发布一个war包测试。
制作镜像
[root@tomcat ~]# mkdir /root/docker #创建一个文件夹
将apache-tomcat-7.0.96.tar.gz
和jdk-8u211-linux-x64.tar.gz
放到你之前创建的共享文件夹中,方便移到虚拟机中
将apache-tomcat-7.0.96.tar.gz
和jdk-8u211-linux-x64.tar.gz
放到刚刚创建的docker
文件夹中
[root@tomcat Share]# cp /mnt/hgfs/Share/apache-tomcat-7.0.96.tar.gz /root/docker/
[root@tomcat Share]# cp /mnt/hgfs/Share/jdk-8u211-linux-x64.tar.gz /root/docker/
进入到 docker
文件夹中
cd /root/docker
创建一个 Dockerfile 文件,里面写入
# 基本镜像
FROM centos
# 把你上传的 JDK 放到 Docker 容器里面的 root 目录下
ADD jdk-8u211-linux-x64.tar.gz /root
# 把你上传的 Tomcat 放到 Docker 容器里面的 root 目录下
ADD apache-tomcat-7.0.96.tar.gz /root
# 设置环境变量
ENV JAVA_HOME /root/jdk1.8.0_211
# 设置环境变量
ENV CLASSPATH ${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
# 设置环境变量
ENV CATALINA_HOME /root/apache-tomcat-7.0.96
# 设置环境变量
ENV CATALINA_BASE /root/apache-tomcat-7.0.96
# 设置环境变量
ENV PATH ${PATH}:${JAVA_HOME}/bin:${CATALINA_HOME}/bin
# 执行 startup.sh 并打开日志
ENTRYPOINT /root/apache-tomcat-7.0.96/bin/startup.sh && tail -F /root/apache-tomcat-7.0.96/logs/catalina.out
使用docker build -t tomcattest:latest .
来构建镜像
构建完成
使用docker images
查看一下刚刚构建好的镜像
其中的 tomcattest
就是我们刚刚构建好的镜像
使用刚刚构建好的镜像运行容器
[root@tomcat docker]# docker run -d -p 8090:8080 tomcattest
#因为之前的已经使用了8080端口,这次我们使用8090端口
f69050d2fdb525ac864bef391db51283a14ad7afbcc78ec719bb254e7f5df9ec
使用IP:8090
来访问一下Tomcat
访问成功!
将war包上传到tomcat容器之中
参考任务8的上传war包到容器之中
[root@tomcat packets]# docker cp /root/packets/myweb.war f69050d2fdb5:/root/apache-tomcat-7.0.96/webapps/
# f69050d2fdb5 就是刚刚构建的镜像运行的tomcat的容器id,可以通过docker ps -a 查看
Successfully copied 4.1kB to f69050d2fdb5:/root/apache-tomcat-7.0.96/webapps/
使用 IP:8090/war包名/
来进行访问
我们的war包名字为 myweb
访问成功~!!
Comments: