摘要

你是学校技术社团的运维人员,需要将社团介绍网页制作成 Docker 镜像,在本地测试部署没有问题后,将镜像上传到 Harbor 注册中心。

本实验综合运用 2.1~2.4 的知识,完成以下流程:

清理环境 → 获取基础镜像 → 使用 Dockerfile 构建镜像 → 测试网站 → 发布镜像

建议用时:60 分钟。

实验准备

  1. 删除所有容器
  2. 删除所有镜像

任务一:拉取镜像

1、下载 nginx:latest 镜像

2、添加镜像标签

使用 docker tag,为 nginx:latest增加以下名称:

stu00/nginx-base:lab
注意

把 stu00 中的00换成你的学号后两位。

命令格式:

docker tag 原镜像名 新镜像名

3、比较并删除标签

执行 docker images,比较:

  • nginx:latest
  • stu00/nginx-base:lab 确认它们的 IMAGE ID 相同。

然后使用 docker rmi 删除 stu00/nginx-base:lab,再次查看镜像列表。 完成要求: 新增标签已删除,nginx:latest 仍然存在。

思考

为什么删除其中一个标签后,另一个名称仍然可以使用?

任务二:制作镜像

1、创建工作目录

mkdir -p /root/mysite
cd /root/mysite

通过 MobaXterm 左侧的文件面板进入服务器上的 /root/mysite 目录。

后续文件均通过该面板新建,并使用 MobaXterm 编辑器打开、编辑和保存。

2、创建网站首页

新建 index.html,写入以下内容,并将姓名、学号替换为自己的信息:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>我的社团网站</title>
</head>
<body>
  <h1>欢迎访问XX社团网站</h1>
  <p>团长:张三</p>
  <p>学号:20260000</p>
  <p>版本:v1.0</p>
  <p>社团介绍:我们正在学习容器云服务架构与运维。</p>
</body>
</html>

保存文件,确认修改已保存到服务器。

3、编写 Dockerfile

在同一目录中新建 Dockerfile,注意文件名不要写错。

按照下表独立编写:

项目 要求 指令提示
基础镜像 nginx:latest FROM
工作目录 /usr/share/nginx/html WORKDIR
网站文件 将 index.html 复制到工作目录,替换默认首页 COPY
作者信息 maintainer 设置为自己的姓名 LABEL
版本信息 version 设置为 1.0 LABEL
服务端口 声明容器使用 80 端口 EXPOSE
启动命令 以前台方式运行 Nginx CMD

启动命令可参考:

CMD ["nginx", "-g", "daemon off;"]

保存后,服务器工作目录应包含:

/root/mysite/
├── Dockerfile
└── index.html

4、构建镜像

在 MobaXterm 终端中执行:

cd /root/mysite
docker build -t stu00/mysite:v1.0 .
注意
  1. 把 stu00 中的00换成你的学号后两位;
  2. 注意命令末尾的 .,它表示使用当前目录作为构建上下文。

5、查看构建结果

docker images
完成要求

镜像列表中存在 stu00/mysite:v1.0。

思考

Dockerfile 中的 COPY 指令从哪里读取 index.html?如果网页内容修改了,只保存文件是否会自动更新已有镜像?

任务三:部署与管理容器

使用 docker create,按以下要求创建测试容器:

配置项 要求
容器名称 mysite-test
使用镜像 stu00/mysite:v1.0
宿主机端口 9000
容器端口 80

命令格式:

docker create --name 容器名 -p 宿主机端口:容器端口 镜像名

分别执行:

docker ps
docker ps -a

观察两条命令的输出,确认新容器状态为 Created。

2、启动并访问网站

使用 docker start 启动 mysite-test。在浏览器中访问:

http://实验机IP:9000

确认页面显示自己的姓名、学号、个人介绍和版本号。

提示

Dockerfile 中的 EXPOSE 80 只是声明端口。通过实验机访问容器内的网站,仍需使用在创建容器时使用 -p 设置端口映射。

3、停止并运行

依次完成以下操作:

  1. 使用 docker stop 停止测试容器。
  2. 使用 docker ps -a,确认状态变为 Exited。
  3. 使用 docker start 再次启动。
  4. 重新访问网页,确认网站恢复运行。

4、重命名容器

使用 docker rename,将 mysite-test 容器名改成 mysite-ready

命令提示:

docker rename 旧名称 新名称

任务四:发布镜像到 Harbor

1、增加稳定版标签

为 stu00/mysite:v1.0 增加标签 harbor.seahi.me/stu00/mysite:stable

查看镜像列表,确认两个标签对应相同的 IMAGE ID。

{{< admonition>}} 把 stu00 中的00换成你的学号后两位; {{< /admonition >}}

2、在终端登录 Harbor

docker login harbor.seahi.me

按提示输入账号和密码。

3、推送镜像

自行完成推送命令:

docker push 完整镜像名

推送完成后,在 Harbor 网页中进入自己的项目,查看 mysite 仓库。