贵阳开发网站建设,沈阳公司建站,做阿里巴巴网站 店铺装修免费吗,小程序软件定制开发一、前言 记录时间 [2024-4-13] 系列文章简摘#xff1a; Docker 学习笔记#xff08;六#xff09;#xff1a;挑战容器数据卷技术一文通#xff0c;实战多个 MySQL 数据同步#xff0c;能懂会用#xff0c;初学必备 Docker 学习笔记#xff08;七#xff09;#x…一、前言 记录时间 [2024-4-13] 系列文章简摘 Docker 学习笔记六挑战容器数据卷技术一文通实战多个 MySQL 数据同步能懂会用初学必备 Docker 学习笔记七介绍 Dockerfile 相关知识使用 Dockerfile 构建自己的 centos 镜像
更多 Docker 相关文章请参考上面专栏哦入门篇 1~5 已完结6 开始是精髓篇容器数据卷、Dockerfile、Docker 网络。
本文主要介绍如何使用 Dockerfile 制作 Tomcat 镜像以及如何在 DockerHub / 阿里云上发布自己的镜像并对 Docker 基本使用进行了总结。 二、制作 Tomcat 镜像 实战编写 Dockerfile制作 Tomcat 镜像。 1. 准备材料
制作 Tomcat 镜像使用的材料有
tomcat 压缩包jdk 压缩包
文章中使用的 tomcat 压缩包为 apache-tomcat-9.0.87.tar.gzjdk 压缩包 jdk-8u45-linux-x64.gz通过上面的官网链接大家可以自行挑选适合的版本。
材料准备完毕后通过 FinalShell 上传到 Linux 服务器中。
如图新建 /home/yuanyuan/build/tomcat/ 目录点击右上角的图标把 tomcat 和 jdk 的压缩包上传。 检查下是否上传成功
# pwd 确认当前目录
[rootlocalhost tomcat]# pwd
/home/yuanyuan/build/tomcat# ls 输出该目录下的内容
# tomcat 和 jdk 压缩包放在这个位置
[rootlocalhost tomcat]# ls
apache-tomcat-9.0.87.tar.gz jdk-8u45-linux-x64.gz如果想了解 tomcat 和 jdk 压缩包的话可以在 Linux 上尝试解压查看压缩包里的内容。
解压方式tar
x表示解压z表示解压 .gz 格式v表示在解压缩时显示过程f表示后面跟文件名
# 命令 tar -zxvf 压缩包全称
tar -zxvf apache-tomcat-9.0.87.tar.gz
tar -zxvf jdk-8u45-linux-x64.gz2. 制作基础镜像
制作 Tomcat 镜像需要用到基础镜像 centos但官方的 centos 镜像停止维护了所以需要配置一下。我们需要制作带 yum 的 centos 镜像因为我们要用到 vim 命令而 vim 需要通过 yum 安装。具体操作可以参考这篇文章步骤 5.4。
先运行下官方基础镜像 centos
docker run -it centos去查看 yum 的配置文件
cd /etc/yum.repos.d/把镜像替换成能用的
sed -i s/mirrorlist/#mirrorlist/g /etc/yum.repos.d/CentOS-*
sed -i s|#baseurlhttp://mirror.centos.org|baseurlhttp://vault.centos.org|g /etc/yum.repos.d/CentOS-*生成缓存并完成更新
# 生成更新缓存
yum makecache# 更新 yum
yum update -y把这个容器 commit 提交为本地镜像yuanyuan/centos 是笔者给新镜像的仓库命名。
不加版本号默认是最新版。
docker commit -ayuanyuan -myum update -y to centos 容器id yuanyuan/centos3. 编写 Dockerfile 文件
先新建一个 readme.txt 文件用于介绍这个镜像。
touch readme.txt然后新建 Dockerfile 文件注意 Dockerfile 是官方命名是默认的不要写错。
使用 Dockerfile 名字的优点镜像构建build时会自动寻找该文件不需要 -f 指定文件。
vim Dockerfile编写 Dockerfile 内容
FROM基础镜像用上面制作的那个MAINTAINER用户名 邮箱COPY把 readme.txt 复制到 /usr/local/ 目录下ADD后面跟文件压缩包 解压路径它会自动解压缩RUN运行指令安装 vim 命令ENV配置环境变量对比 Windows就是把 java/tomcat 使用目录添加到 PATHWORKDIR容器的工作目录为 /usr/local/EXPOSE暴露 8080 端口CMD容器运行的默认指令用 拼接两条指令启动 tomcat 服务并打印日志。
编写完 Dockerfile 内容后保存文件 :wq
FROM yuanyuan/centos
MAINTAINER yuanyuan1234567qq.comCOPY readme.txt /usr/local/readme.txtADD jdk-8u45-linux-x64.gz /usr/local/
ADD apache-tomcat-9.0.87.tar.gz /usr/local/RUN yum -y install vimENV MYPATH /usr/local
WORKDIR $MYPATHENV JAVA_HOME /usr/local/jdk1.8.0_45
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.87
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.87
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/binEXPOSE 8080CMD /usr/local/apache-tomcat-9.0.87/bin/startup.sh tail -F /usr/local/apache-tomcat-9.0.87/logs/catalina.out4. 构建镜像
确认工作目录/home/yuanyuan/build/tomcat
docker build -t diytomcat .5. 测试默认运行
默认方式运行就是刚才 CDM 中写的命令1. 启动 tomcat 服务2. 打印日志。
CMD /usr/local/apache-tomcat-9.0.87/bin/startup.sh tail -F /usr/local/apache-tomcat-9.0.87/logs/catalina.out测试一下吧
[rootlocalhost tomcat]# docker run diytomcat
Tomcat started.
13-Apr-2024 02:59:15.614 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/9.0.87
13-Apr-2024 02:59:15.617 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Mar 11 2024 10:12:34 UTC
13-Apr-2024 02:59:15.617 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.87.06. 测试复杂运行
运行镜像
我们来尝试复杂模式的运行
-d后台运行-p 宿主机端口:容器端口把容器的 8080 端口映射到宿主机的 9090 端口--name 容器名字给容器命名-v 宿主机目录:容器目录数据卷挂载把容器中的 tomcat 的 webapps/test 和 logs 挂载到宿主机
docker run -d -p 9090:8080 --name yuanyuan-tomcat -v /home/yuanyuan/build/tomcat/test:/usr/local/apache-tomcat-9.0.87/webapps/test -v /home/yuanyuan/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.87/logs diytomcat完成数据卷挂载后我们可以在宿主机对应的目录中发布 web 项目它会自动同步到容器中。
此外容器还可以把 tomcat 的运行日志同步到宿主机。
容器启动后查看下 tomcat 目录发现 test 和 tomcatlogs 目录文件挂载成功。
ls /home/yuanyuan/build/tomcat进入容器
docker exec -it 容器id /bin/bash进入容器后直接进入了它的工作目录
可以查看下里面的内容发现 tomcat 和 jdk 文件都添加进去了。
[rootlocalhost tomcat]# docker exec -it 1a07737f9b2a /bin/bash
[root1a07737f9b2a local]#
[root1a07737f9b2a local]# ls
apache-tomcat-9.0.87 bin etc games include jdk1.8.0_45 lib lib64 libexec readme.txt sbin share src
[root1a07737f9b2a local]# cd apache-tomcat-9.0.87
[root1a07737f9b2a apache-tomcat-9.0.87]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work结果测试
先在本地测试一下访问成功
[rootlocalhost tomcat]# curl localhost:9090
!DOCTYPE html
html langenheadmeta charsetUTF-8 /titleApache Tomcat/9.0.87/titlelink hreffavicon.ico relicon typeimage/x-icon /link hreftomcat.css relstylesheet typetext/css //head
再去外网测试一下访问成功返回了 tomcat 页面。
注意测试 tomcat 访问外网测试要把防火墙打开。
http://ip地址:90907. 发布项目 用 jps 写一个网页从浏览器访问。 由于配置了数据卷挂载我们直接在本地编写项目就可以完成发布。
进入 /home/yuanyuan/build/tomcat/test 目录
在 test 目录中新建 WEB-INF 目录在 WEB-INF 目录中新建文件 web.xml
编写 web.xml 文件
?xml version1.0 encodingUTF-8?
web-app xmlnshttp://java.sun.com/xml/ns/javaee xmlns:xsihttps://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsdversion3.0/web-app然后在 test 目录中新建文件 index.jsp
编写 index.jsp 文件
在页面上输出Hello World! 和 -----Hello, yuanyuan-----tomcat 日志返回-----my test web logs-----
% page languagejava contentTypetext/html; charsetUTF-8pageEncodingUTF-8 %
htmlheadmeta charsetUTF-8titleHello, yuanyuan/title/headbodyHello World!br /%out.println(-----Hello, yuanyuan-----);System.out.println(-----my test web logs-----);%/body
/html在浏览器测试
我们的项目发布在 test 目录下
http://ip地址:9090/test/测试结果如下项目发布成功
Hello World!
-----Hello, yuanyuan-----再看一下 tomcatlogs 中的日志
日志文件 catalina.out在 /home/yuanyuan/build/tomcat/tomcatlogs 目录下
[rootlocalhost tomcatlogs]# cat catalina.out
13-Apr-2024 03:10:37.892 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/9.0.87
# 访问网站就会输出日志
-----my test web logs-----
[rootlocalhost tomcatlogs]# 三、发布自己的镜像
1. 发布镜像到 DockerHub
注册 / 登录账号
点击官网地址注册账号并登录。正常注册设置邮箱用户名和密码。注册完成后登录然后通过邮箱验证。 就是网站加载有点慢。 修改 DockerHub 用户名
一种可能存在的情况。
注册的时候写错账号名Username了怎么办没错这个问题笔者遇到了搜索了一圈发现它好像没办法修改。
解决办法是先注销再重新注册。
当然也可以不用管反正就是个账号名字出于对用户名的执着笔者还是决定修改。
注销过程也挺简单的登录 DockerHub先通过邮箱验证。在个人信息页面选择 Deactivate Account 即可。 设置仓库属性
设置下仓库属性可以选择公有Public/ 私有 Private发布的公有镜像可以被其他用户搜索到。
由于笔者尚在初学阶段这里选择 Private 发布。 Linux 登录 DockerHub
在 Docker 中搜索登录方法
[rootlocalhost ~]# docker login --help
Options:-p, --password string Password--password-stdin Take the password from stdin-u, --username string Username使用 DockerHub 注册的用户名和密码登录
docker login -u Username -p PasswordLinux 提交镜像
给待发布镜像打标签
注意 tag 前面一定要加上 DockerHub 注册的 Username因为用户名是你的命名空间。
# docker tag your-repository/subname:tagname docker-hub-user-name/your-repository:tagname
docker tag 镜像id Username/diytomcat:1.0然后 docker push 完成发布发布时尽量带上版本号。
# docker push docker-hub-user-name/your-repository:tagname
docker push Username/diytomcat:1.0可以发现提交的时候也是一层一层进行的。
提交成功后可以在 DockerHub 查看。
[rootlocalhost ~]# docker push Username/diytomcat:1.0
The push refers to repository [docker.io/Username/diytomcat]
5f70bf18a086: Pushed
f860e6d97863: Pushed
cdaf31be8ae0: Pushed
4142f92cb195: Pushed
9a5703f78e25: Pushed
f2633ab4d549: Pushed
74ddd0ec08fa: Pushed
1.0: digest: sha256:d3575b41f94df5b7c19c5c0d6f106f6ddfec2d2ae03096e8510d5a8555555555 size: 1792退出登录
docker logout2. 发布镜像到阿里云
容器镜像服务
登录阿里云找到容器镜像服务。然后在实例列表中选择创建个人实例。 创建命名空间
个人实例创建完成后创建命名空间每个人最多可以创建 3 个命名空间。
创建镜像仓库
命名空间创建完成后创建镜像仓库自己取名字下一步选择本地仓库。 查看仓库的基本信息操作指南中就是详细的使用方法。 发布镜像
这些在操作指南中很详细的都有。
在 Linux 中登录阿里云 Docker Registry
docker login --usernamealiyun-username registry.xxx.aliyuncs.com给待发布的镜像打标签
docker tag ImageId 仓库公网地址:镜像版本号发布镜像
docker push 仓库公网地址:镜像版本号补充移除标签方法
我们可以给同一个镜像打很多标签这些标签的镜像 ID 都来自同一个镜像所以 ID 是一样的这时候我们就不能通过 ID 来删除它们了。
解决办法是使用仓库名 版本号进行删除。
docker rmi repository:tag四、总结
本文主要介绍如何使用 Dockerfile 制作 Tomcat 镜像以及如何在 DockerHub / 阿里云上发布自己的镜像并对 Docker 基本使用进行了总结。
如图对 Docker 基本使用进行了总结。 一些参考资料
狂神说系列 Docker 教程https://www.bilibili.com/video/BV1og4y1q7M4/ Docker 官方文档https://docs.docker.com/engine/install/centos/ Docker 远程仓库https://hub.docker.com/ FinalShell 下载http://www.hostbuf.com/t/988.html 阿里云官网https://www.aliyun.com/ Apache 官网https://tomcat.apache.org/ Oracle 官网https://www.oracle.com/