以下为你详细介绍使用 Docker 构建包含 Tomcat 的镜像,给镜像打标签,以及将其推送到 Docker Hub 远程仓库和本地私有仓库的完整步骤和示例。

1. 准备工作


  • 确保 Docker 已经安装并正常运行。

  • 若要推送到 Docker Hub,需提前注册 Docker Hub 账号;若要使用本地私有仓库,要先完成本地仓库的搭建。

  • 创建一个项目目录,例如 tomcat-app,后续构建相关文件都会放在此目录下。

2. 编写 Dockerfile


在 tomcat-app 目录下创建 Dockerfile,以下是一个基本的构建 Tomcat 镜像的 Dockerfile 示例:


收起

Dockerfile

# 使用官方 Tomcat 基础镜像
FROM tomcat:9.0

# 删除 Tomcat 自带的示例应用
RUN rm -rf /usr/local/tomcat/webapps/*

# 将本地的 WAR 包复制到 Tomcat 的 webapps 目录下
COPY your-app.war /usr/local/tomcat/webapps/

# 暴露 Tomcat 默认端口
EXPOSE 8080

# 启动 Tomcat
CMD ["catalina.sh", "run"]


说明


  • your-app.war 是你自己的 Java Web 应用的 WAR 包,你需要将其放在 tomcat-app 目录下,或者根据实际情况修改 COPY 指令的源路径。

3. 构建 Docker 镜像


在 tomcat-app 目录下打开终端,执行以下命令构建 Docker 镜像:


收起

bash

docker build -t tomcat-app:1.0 .


参数解释:


  • -t:用于给镜像添加标签,tomcat-app 是镜像名称,1.0 是版本号。

  • .:表示使用当前目录下的 Dockerfile 进行构建。


构建完成后,使用以下命令查看已构建的镜像:


收起

bash

docker images

4. 推送到 Docker Hub 远程仓库

4.1 给镜像标记


给镜像添加符合 Docker Hub 规范的标签,格式为 dockerhub_username/repository_name:tag。假设你的 Docker Hub 用户名是 yourusername,执行以下命令:


收起

bash

docker tag tomcat-app:1.0 yourusername/tomcat-app:1.0

4.2 登录 Docker Hub


收起

bash

docker login


按照提示输入 Docker Hub 用户名和密码,登录成功后会显示登录信息。

4.3 推送镜像到 Docker Hub 仓库


收起

bash

docker push yourusername/tomcat-app:1.0


推送完成后,登录 Docker Hub 网站,在你的仓库列表中就能看到推送的镜像。

5. 推送到本地私有仓库

5.1 搭建本地私有仓库


使用 Docker 官方的 registry 镜像搭建本地私有仓库:


收起

bash

docker run -d -p 5000:5000 --restart=always --name registry registry:2


该命令会启动一个监听 5000 端口的本地私有仓库容器。

5.2 给镜像标记


为镜像添加适合本地私有仓库的标签,格式为 localhost:5000/repository_name:tag


收起

bash

docker tag tomcat-app:1.0 localhost:5000/tomcat-app:1.0

5.3 推送镜像到本地私有仓库


收起

bash

docker push localhost:5000/tomcat-app:1.0


推送完成后,可通过以下命令查看本地私有仓库中的镜像列表:


收起

bash

curl http://localhost:5000/v2/_catalog

6. 拉取并运行镜像(可选)

6.1 从 Docker Hub 拉取并运行


收起

bash

docker pull yourusername/tomcat-app:1.0
docker run -d -p 8080:8080 yourusername/tomcat-app:1.0

6.2 从本地私有仓库拉取并运行


收起

bash

docker pull localhost:5000/tomcat-app:1.0
docker run -d -p 8080:8080 localhost:5000/tomcat-app:1.0


通过上述步骤,你就完成了包含 Tomcat 的 Docker 镜像的构建、标记,以及向 Docker Hub 远程仓库和本地私有仓库的推送操作。之后你可以根据需求在浏览器中访问 http://localhost:8080/your-app 来验证应用是否正常运行。

另外本地镜像仓库的也需要创建账号吗,使用本地仓库上服务器的 账号就是可以的吗,也要登记吗,,添加进去

本地镜像仓库账号相关情况及操作

本地私有仓库默认情况


使用 Docker 官方的 registry 镜像搭建的本地私有仓库,默认是没有启用认证机制的,也就是不需要账号和密码就可以进行镜像的推送和拉取操作。像之前搭建本地私有仓库的命令:


收起

bash

docker run -d -p 5000:5000 --restart=always --name registry registry:2


这样启动的仓库,任何可以访问该仓库地址(localhost:5000)的客户端都能进行操作,缺乏安全性。

为本地私有仓库添加认证


如果想要为本地私有仓库添加认证,也就是创建账号和密码,让只有授权的用户才能进行镜像的推送和拉取,可以按以下步骤操作。

1. 安装 htpasswd 工具


htpasswd 用于生成认证所需的密码文件,在不同系统上安装方式不同,以 Ubuntu 为例:


收起

bash

sudo apt-get install apache2-utils
2. 创建认证文件


在本地创建一个用于存储账号和密码的文件,例如 htpasswd,并添加一个用户 youruser 及其密码:


收起

bash

htpasswd -Bbn youruser yourpassword > htpasswd


  • -B 表示使用 bcrypt 算法对密码进行加密。

  • -b 表示在命令行中直接指定密码。

  • -n 表示将结果输出到标准输出,这里重定向到 htpasswd 文件。

3. 创建认证容器卷


为了让认证文件能被仓库容器访问,创建一个 Docker 卷来存储认证文件:


收起

bash

docker volume create auth
4. 将认证文件复制到卷中


收起

bash

docker run --rm \
  -v auth:/auth \
  -v "$(pwd)":/tmp \
  alpine cp /tmp/htpasswd /auth/htpasswd
5. 重新启动带有认证的本地私有仓库


收起

bash

docker run -d \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v auth:/auth \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  registry:2


参数解释:


  • -v auth:/auth:将之前创建的认证卷挂载到容器的 /auth 目录。

  • -e "REGISTRY_AUTH=htpasswd":指定使用 htpasswd 进行认证。

  • -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm":设置认证的领域。

  • -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd:指定认证文件的路径。

6. 登录本地私有仓库


使用刚刚创建的账号和密码登录本地私有仓库:


收起

bash

docker login localhost:5000


按照提示输入用户名 youruser 和密码 yourpassword,登录成功后就可以进行镜像的推送和拉取操作了。

关于使用服务器账号


本地私有仓库的认证是独立于服务器系统账号的,服务器的账号不能直接用于本地私有仓库的认证。本地私有仓库的认证是基于我们为其专门创建的 htpasswd 文件中的账号和密码。所以不能使用服务器账号来进行本地私有仓库的操作,必须使用在 htpasswd 文件中创建的账号和密码。


综上所述,本地私有仓库默认无需账号,但为了安全可以添加认证机制创建账号和密码,并且这个认证与服务器账号是相互独立的。