Docker学习笔记 4

桌桌 2022-10-4 137 10/4

实战Tomcat镜像

ps:此时腾讯云的服务器到期了,我用了自己的小服务器,所以改名了

1、准备镜像文件 准备tomcat的压缩包,tomcat是依赖于Java的,所以还需要jdk的压缩包!

去官网下载后XFtp到home/zhuozhuo/tomcat目录下

Docker学习笔记 4

2、编写DockerFile文件,官方命名DockerFile,我们也这么命名,在build 的时候会自动寻找这个文件,就不需要-f指定了

# 以下是上课学习的代码
FROM centos

MAINTAINER zhuozhuo<787934074@qq.com>

COPY readme.txt /usr/local/readme.txt

ADD apache-tomcat-9.0.67.tar.gz /usr/local
ADD jdk-8u341-linux-x64.tar.gz /usr/local

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_341
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.67
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.67
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.67/bin/startup.sh && tail -F /url/local/apache-tomcat-9.0.67/bin/logs/
catalina.out

实际上在我自己操作的时候发现出现以下问题。

Docker学习笔记 4

分析了以下原因,课程中的时间在centos project停止支持centos linux之前,所以没有报错。而我学习的时间在这之后。

镜像构造到该步骤就会报错,这个问题在很久之前也遇到过

解决方案可见报错 Error: Failed to download metadata for repo ‘appstream’: Cannot prepare internal mirrorlist: No URLs in mirrorlist_桌桌的博客 (wangyuanzhuo.top)

其实就是centos需要换个源。

解决方案也很简单,在DockerFile中添加这些换源的步骤就好了

FROM centos

MAINTAINER zhuozhuo<787934074@qq.com>

COPY readme.txt /usr/local/readme.txt

ADD apache-tomcat-9.0.67.tar.gz /usr/local
ADD jdk-8u341-linux-x64.tar.gz /usr/local

# 以下为解决‘appstream’报错的方法
RUN cd /etc/yum.repos.d/
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
RUN yum makecache
RUN yum update -y
RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_341
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.67
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.67
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.67/bin/startup.sh && tail -F /url/local/apache-tomcat-9.0.67/bin/logs/catalina.out

3、构建镜像

# docker build -t diymytomcat .

效果如下所示

Docker学习笔记 4

运行镜像

docker run -d -p 9090:8080 --name zhuozhuotomcat -v /home/zhuozhuo/build/tomcat/test:/usr/local/apache-tomcat-9.0.67/webapps/test -v /home/zhuozhuo/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.67/logs diymytomcat

问题是目前是用的自己的NUC+内网穿透做的,所以目前不可能从外网访问9090端口来测试,只能使用127.0.0.1:9090来访问。emmmm好像花了大功夫白整了嗐。

然后去看了下腾讯云华为云阿里云,哪个还有学生优惠啥的(云服务器是真贵啊!),阿里云已经开了一个学生优惠了不能再开了,华为云的有些小贵,便宜的要120左右(一年),腾讯云的这个活动还不错,65元租一年,还不用担心流量不够之类的问题,我直接拿下(不是打广告hhh)。


4、启动镜像

5、访问测试

ok继续测试,进行访问测试,结果如下

Docker学习笔记 4

6、发布项目(由于做了卷的挂载,所以直接在本地编写项目就可以发布了)

网上随便找的

WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_4_0.xsd"
           version="4.0">
</web-app>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>hello,zhuozhuo</title>
</head>
<body>
Hello World!<br/>
<%
System.out.println("------my test web logs-------");
%>
</body>
</html>

注意,复制粘贴的时候最后body和html会多出一个百分号,记得删掉

效果如下:

Docker学习笔记 4

查看tomcatlogs中的catalina.out日志

Docker学习笔记 4

项目部署成功,可以直接访问。

发布自己的镜像

发布到DockerHub上

1、地址Docker Hub注册自己的账号

2、确定该账号可以登录

Docker学习笔记 4

3、在我们的服务器上提交自己的镜像

[root@VM-8-6-centos zhuozhuo]# docker login --help

Usage:  docker login [OPTIONS] [SERVER]

Log in to a Docker registry.
If no server is specified, the default is defined by the daemon.

Options:
  -p, --password string   Password
      --password-stdin    Take the password from stdin
  -u, --username string   Username

登录后如图所示:Docker学习笔记 4

4、登录完毕后可以提交自己的镜像,就是docker push

# push自己的镜像到服务器上
[root@VM-8-6-centos zhuozhuo]# docker push diymytomcat
Using default tag: latest
The push refers to repository [docker.io/library/diymytomcat]
e23f9548a69d: Preparing 
...
74ddd0ec08fa: Waiting 
denied: requested access to the resource is denied # 拒绝

# push镜像的问题?
[root@VM-8-6-centos zhuozhuo]# docker push wangyuanzhuo/diymytomcat:2.0
The push refers to repository [docker.io/wangyuanzhuo/diymytomcat]
An image does not exist locally with the tag: wangyuanzhuo/diymytomcat

# 希望提交时带上作者的信息
# 于是将我之前的那个diymytomcat加上版本号,同时改了个名
[root@VM-8-6-centos zhuozhuo]# docker tag c8c4ad9c5a1b wangyuanzhuo/tomcat:1.0

# 之后再进行push就可以了
[root@VM-8-6-centos zhuozhuo]# docker push wangyuanzhuo/tomcat:1.0
The push refers to repository [docker.io/wangyuanzhuo/tomcat]
e23f9548a69d: Pushing  10.24MB/67.08MB
02541d2d4519: Pushing  14.33MB/289.3MB
0d98f8beabf5: Pushing  3.829MB/27.22MB
fd2d58e5873f: Pushed 
90021802da6a: Pushed 
14d1d075ebee: Pushing  3.308MB/369.8MB
336cbd28c39c: Pushing  3.876MB/16.11MB
f75bf34a1e01: Waiting 
74ddd0ec08fa: Waiting 
# 提交的时候也是按照镜像的层级来进行提交的!

发布到阿里云服务上

1、登录阿里云

2、找到容器镜像服务

3、创建命名空间

Docker学习笔记 4

4、创建容器镜像仓库

Docker学习笔记 4

5、浏览阿里云,点击到仓库地址里

Docker学习笔记 4

这个相当详细了,里面各种命令都有

登录阿里云镜像仓库

Docker学习笔记 4

直接上传会报错,信息不对应,按照阿里云的要求修改镜像的tag之后就能正常push了。

Docker学习笔记 4

太大了就不真推送了直接ctrl+C

push好的镜像可以在自己的阿里云的镜像仓库中看到

阿里云容器镜像的参考官方地址就可以了,真的很详细(不是打广告)

Docker学习笔记 4

到这里就先告一段落了!

- THE END -

桌桌

10月04日22:08

最后修改:2022年10月4日
0

非特殊说明,本博所有文章均为博主原创。