docker基于已有容器和通过Dockerfile进行制作镜像配置介绍

目录

一.制作镜像的两种方式

1.在已有容器中更新并提交这个镜像

2.使用Dockerfile来制作

二.基于容器制作镜像

1.格式

(1)主要格式

(2)可选参数

2.案例

基于容器创建镜像设置标签并进行验证是否可用

(1)运行容器并写入验证内容(改变容器存储层内容)

(2)另起终端制作新镜像(在原有镜像基础上在进行存储层的增量,下次使用此镜像时会参照最新变化)

(3)可以对同一镜像打多次标签,删除时也是直到删除了最后一个标签才算镜像被删除

(4)以新镜像运行新容器验证存储层变动

(5)docker diff 可以查看容器内哪些文件产生变动

基于容器创建新镜像并修改执行命令CMD

3.基于容器制作镜像的缺点

二.基于Dockerfile制作镜像

1.简介

2.相关注意事项

(1)Dockerfile 编写的基本结构

(2)一台主机可以有多个Dockerfile

(3)Dockerfile中指定的所有COPY、ADD等内容都需要与Dockerfile位于同一级目录下

3.Dockerfile指令介绍

(1)FROM

(2)MAINTAINER

(3)COPY

(4)ADD

(5)WORKDIR

(6)RUN

(7)EXPOSE

(8)ENV

(9)VOLUME

(10)CMD

(11)ENTRYPOINT

(12)HEALTHCHECK

(13)ONBUILD

4.制作

(1)主要是使用build命令

(2)案例演示


 

一.制作镜像的两种方式

1.在已有容器中更新并提交这个镜像

2.使用Dockerfile来制作

二.基于容器制作镜像

1.格式

(1)主要格式

docker commit 参数 容器名称

[root@localhost ~]# docker commit -p bu1
sha256:efbd10d0e00a552f86747a6001323992c030df81338f670f6916c47948e39f74

(2)可选参数

-a指定作者
-c修改dockerfile指令用于创建的镜像
-m记录本次修改的内容(描述信息)
-p在提交期间暂停容器,默认为true

2.案例

基于容器创建镜像设置标签并进行验证是否可用

(1)运行容器并写入验证内容(改变容器存储层内容)

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
busybox      latest    a416a98b71e2   5 weeks ago   4.26MB
[root@localhost ~]# docker run --name bu1 -it busybox
/ # mkdir /html
/ # echo hello > /html/index.html
/ # 

(2)另起终端制作新镜像(在原有镜像基础上在进行存储层的增量,下次使用此镜像时会参照最新变化)

[root@localhost ~]# docker commit -p bu1
sha256:efbd10d0e00a552f86747a6001323992c030df81338f670f6916c47948e39f74
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
<none>       <none>    efbd10d0e00a   10 seconds ago   4.26MB
busybox      latest    a416a98b71e2   5 weeks ago      4.26MB
[root@localhost ~]# docker tag efb along/html:v1   #根据ID来打标签
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
along/html   v1        efbd10d0e00a   6 minutes ago   4.26MB
busybox      latest    a416a98b71e2   5 weeks ago     4.26MB

(3)可以对同一镜像打多次标签,删除时也是直到删除了最后一个标签才算镜像被删除

[root@localhost ~]# docker tag efb along/html:v1
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
along/html   v1        efbd10d0e00a   6 minutes ago   4.26MB
busybox      latest    a416a98b71e2   5 weeks ago     4.26MB
[root@localhost ~]# docker tag along/html:v1 along/html:v2
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
along/html   v1        efbd10d0e00a   7 minutes ago   4.26MB
along/html   v2        efbd10d0e00a   7 minutes ago   4.26MB
busybox      latest    a416a98b71e2   5 weeks ago     4.26MB
[root@localhost ~]# docker image rm along/html:v2
Untagged: along/html:v2
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
along/html   v1        efbd10d0e00a   7 minutes ago   4.26MB
busybox      latest    a416a98b71e2   5 weeks ago     4.26MB

(4)以新镜像运行新容器验证存储层变动

[root@localhost ~]# docker run --name bu2 -it along/html:v1 
/ # cat /html/index.html 
hello
/ # 

(5)docker diff 可以查看容器内哪些文件产生变动

[root@localhost ~]# docker diff bu1
A /html
A /html/index.html
C /root
A /root/.ash_history
[root@localhost ~]# docker diff bu2
C /root
C /root/.ash_history

基于容器创建新镜像并修改执行命令CMD

基于已有容器常见新镜像并指定执行httpd

[root@localhost ~]# docker commit -c 'CMD ["/bin/httpd","-f","-h","/html"]' -p bu1 along/html:v1 
sha256:2c2af15b2f29b03eb3d5d4a03d1680debc7eee3ba6c62d42073edf008e9bd3c0
#["指定httpd服务","-f在前台运行","-h表示后面指定httpd运行的主目录","页面存放目录"]
[root@localhost ~]# docker run --name bu3 -d along/html:v1 
36448f483526ed72e74ea4bb3c0ad70a54c13940326bd0c19713acbbffc72738
[root@localhost ~]# docker inspect bu3 | grep -i ipaddress"SecondaryIPAddresses": null,"IPAddress": "172.17.0.3","IPAddress": "172.17.0.3",
[root@localhost ~]# curl 172.17.0.3
hello

3.基于容器制作镜像的缺点

(1)在基于容器制作镜像后,使用容器时自己要修改的文件和一些不希望修改的文件也一起产生变动,数据量一旦大起来就显得极为繁杂

(2)只有自己知道自己在制作时干过什么甚至过段时间自自己都不知道干过什么,难以为进一步的增量操作提供正确参考

(3)基于分层存储下的增量运转模式,随着修改次数的增多,镜像的臃肿程度呈递增状态

二.基于Dockerfile制作镜像

1.简介

把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这就是Dockerfile。
Dockerfile 是一个文本文件,其内包含了一条条的指令,每一条指令会构建一层,每一条
指令的内容是描述该层应当如何构建。

2.相关注意事项

(1)Dockerfile 编写的基本结构

Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,文件名为“Dockerfile”

(2)一台主机可以有多个Dockerfile

要使用多个Dockerfile 创建镜像,可以在不同目录编写Dockerfile,然后在Dockerfile 所在的目录下构新的镜像

(3)Dockerfile中指定的所有COPY、ADD等内容都需要与Dockerfile位于同一级目录下

3.Dockerfile指令介绍

(1)FROM

Dockerfile文件内容以FROM开头,是在构建镜像中指定基础镜像,之后的动作基于FROM指定的基础镜像环境下进行,如果这个镜像在本地主机docker上不存在,将会从docker公共库拉取。在有多个镜像需求时FROM可以出现多次。(特殊空白镜像——scratch,可以直接将编写好的可执行文件放进去进行镜像制作)
FROM centos:6

(2)MAINTAINER

提供镜像制作者的详细信息,一般紧跟FROM之后

FROM centos:6
MAINTAINER "name <name@163.com>"

(3)COPY

复制文件或目录到容器里指定的路径

文件或目录为多个时支持通配符匹配

文件或目录必须是Dockerfile所在路径的上下文目录不能在其父目录

当指定的是目录时,其本身不会被复制但其下的文件或子目录会被递归复制

COPY的文件的权限和修改时间等会被保留

FROM centos:6
MAINTAINER "name <name@163.com>"
COPY index.html /data/web/html/ #这个情况下就要确保存放Dockerfile的同级目录下要有index.html文件,/data/web/html/是目标目录

(4)ADD

类似于COPY指令,支持tar文件和url路径,如果指定的是同是在一个系统上的压缩的tar文件,,其将会被执行类似于“tar -x”的解包操作,而通过url获取的则不会被操作

FROM centos:6
MAINTAINER "name <name@163.com>"
COPY index.html /data/web/html/
ADD xxx.tar.gz /usr/local/src/  #xxx.tar.gz同样放在Dockerfile统计目录,如果是url原地址则直接指定即可

(5)WORKDIR

用于为RUN、CMD、ENTRYPOINT、COPY、ADD指定工作目录,WORKDIR可以出现多次,不存在时会自动创建该目录,也支持ENV定义的变量

FROM centos:6
MAINTAINER "name <name@163.com>"
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/ 

(6)RUN

指定制作镜像过程中运行的程序,可以是任何命令,直接指定命令通常是一个以“/bin/sh -c”运行shell命令

FROM centos:6
MAINTAINER "name <name@163.com>"
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/ 
RUN cd ./src && tar -zvxf xxx.tar.gz  #表示切换到这个目录解这个包

(7)EXPOSE

声明运行容器时提供服务的端口,端口开放不会由此决定,但会在使用“-P”随机端口运行容器时提供参考,可以以"port/协议"方式来指定传输层协议(tcp/udp),支持同时指定多个端口

FROM centos:6
MAINTAINER "name <name@163.com>"
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/ 
EXPOSE 80/tcp
RUN cd ./src && tar -zvxf xxx.tar.gz

(8)ENV

为制作镜像定义环境变量,其可以被调用

FROM centos:6
MAINTAINER "name <name@163.com>"
ENV DOC_ROOT=/data/web/html/  #在后面需要使用时就可以通过“$DOC_ROOT”的方式来引用
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/ 
EXPOSE 80/tcp
RUN cd ./src && tar -zvxf xxx.tar.gz

(9)VOLUME

在制作镜像过程中在image内创建一个挂载点目录来挂载本容器卷或其他容器卷

FROM centos:6
MAINTAINER "name <name@163.com>"
ENV DOC_ROOT=/data/web/html/  #在后面需要使用时就可以通过“$DOC_ROOT”的方式来引用
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/ 
EXPOSE 80/tcp
VOLUME /data/myweb
RUN cd ./src && tar -zvxf xxx.tar.gz

(10)CMD

类似RUN指令,可以存在多个,可以在Dockerfile构建出新镜像并启动容器时运行任何命令或程序,值为了为启动的容器指定默认运行程序,运行结束该容器也停止,如果与RUN的命令有冲突,可能会被RUN的命令选项覆盖

FROM centos:6
MAINTAINER "name <name@163.com>"
ENV DOC_ROOT=/data/web/html/  
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/ 
EXPOSE 80/tcp
VOLUME /data/myweb
RUN cd ./src && tar -zvxf xxx.tar.gz
CMD /bin/httpd -f -h ${DOC_ROOT}  #也可以CMD ["/bin/httpd","-f","-h","${DOC_ROOT}"]

(11)ENTRYPOINT

类似CMD,指定容器运行时的默认程序,不会被RUN命令选项覆盖(除了RUN --entryypoint),作为一个单独的可执行程序。在指定了ENTRYPOINT又指定了CMD后,CMD的内容被当做参数传给ENTRYPOINT指定不再直接运行命令或程序

FROM centos:6
MAINTAINER "name <name@163.com>"
ENV DOC_ROOT=/data/web/html/  
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/ 
EXPOSE 80/tcp
VOLUME /data/myweb
RUN cd ./src && tar -zvxf xxx.tar.gz
ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}   #也可以像上面CMD那样用“[]”写

(12)HEALTHCHECK

可以实现告知docker怎样检测它是否还在正常运转,只能出现一次,若出现多次只有最后一个生效

可选参数

--interval=DURATION (default:30s)
隔多久探测一次,默认30s
--timeout=DURATION (default:30s)
服务器响应超时时长,默认30s
--retries=N (default:3)
标记失败几次将容器视为不正常状态,默认3次

返回值含义

0——容器健康

1——容器不健康 

FROM centos:6
MAINTAINER "name <name@163.com>"
ENV DOC_ROOT=/data/web/html/  
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/ 
EXPOSE 80/tcp
VOLUME /data/myweb
RUN cd ./src && tar -zvxf xxx.tar.gz
ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}  
HEALTHCHECK CMD curl xxx.xxx.xxx.xxx:xx    #验证某个容器的某个端口

(13)ONBUILD

在Dockerfile中定义一个触发器,后面跟的是RUN、COPY等指定,被指定的指令只有在被当前镜像被作为基础镜像去制作下一级镜像时才会被执行。不能ONBUID嵌套ONBUILD

FROM centos:6
MAINTAINER "name <name@163.com>"
ENV DOC_ROOT=/data/web/html/  
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/ 
EXPOSE 80/tcp
VOLUME /data/myweb
RUN cd ./src && tar -zvxf xxx.tar.gz
ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}  
HEALTHCHECK CMD curl xxx.xxx.xxx.xxx:xx   
ONBUILD RUN echo "<h1>here server2</h1>" >> /data/web/html/index.html

4.制作

(1)主要是使用build命令

docker build 参数 路径

常用可选参数

-t指定要创建的目标镜像名称
-cCPU权重
-m内存限制

(2)案例演示

[root@localhost centos]# pwd
/centos
[root@localhost centos]# ll
total 1060
-rw-r--r-- 1 root root     270 Aug 24 21:52 Dockerfile
-rw-r--r-- 1 root root       6 Aug 24 21:16 index.html
-rw-r--r-- 1 root root 1073322 Aug  9 19:20 nginx-1.22.0.tar.gz[root@localhost centos]# vim Dockerfile 
FROM busybox:latest
MAINTAINER "sulibao <sulibao2003@163.com>"
ENV DOC_ROOT=/data/web/html/ DATA_STO=/usr/local/
COPY index.html ${DOC_ROOT}
ADD nginx-1.22.0.tar.gz ${DATA_STO}
VOLUME /data/mysql
EXPOSE 8080:80/tcp
CMD cd ${DATA_STO} &&  tar -zxf ./nginx-1.22.0.tar.gz[root@localhost centos]# docker build -t myhttpd1 ./   #制作镜像
[+] Building 0.2s (8/8) FINISHED                              docker:default=> [internal] load build definition from Dockerfile                    0.0s=> => transferring dockerfile: 309B                                    0.0s=> [internal] load .dockerignore                                       0.0s=> => transferring context: 2B                                         0.0s=> [internal] load metadata for docker.io/library/busybox:latest       0.0s=> [1/3] FROM docker.io/library/busybox:latest                         0.0s=> [internal] load build context                                       0.0s=> => transferring context: 71B                                        0.0s=> CACHED [2/3] COPY index.html /data/web/html/                        0.0s=> [3/3] ADD nginx-1.22.0.tar.gz /usr/local/                           0.1s=> exporting to image                                                  0.0s=> => exporting layers                                                 0.0s=> => writing image sha256:91940b9e2655f1b45769626122c7539e2d58192c2f  0.0s=> => naming to docker.io/library/myhttpd1                             0.0s
[root@localhost centos]# docker images 
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
myhttpd1     latest    91940b9e2655   2 minutes ago    10.7MB[root@localhost centos]# docker run -it --name web1 -P --rm myhttpd1:latest ls /usr/local  #运行容器并查看功能是否已经实现
nginx-1.22.0

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/51351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue若依导出word文件,简单的实现

首先前端导包,注意exportDocx的导包位置要修改成你自己的 import {exportDocx} from /utils/docUtil/docutil.js; import {addDays} from date-fns; import {listGongyi} from "/api/system/detail";然后新建一个测试按钮 <el-col :span"1.5"><…

守护进程(精灵进程)

目录 前言 1.如何理解前台进程和后台进程 2.守护进程的概念 3.为什么会存在守护进程 4.如何实现守护进程 5.测试 总结 前言 今天我们要介绍的是关于守护进程如何实现&#xff0c;可能有小伙伴第一次听到守护进程这个概念&#xff0c;感觉很懵&#xff0c;知道进程的概念&…

无分布式锁的ID生成

起因 TEAM GARDEN 本来ID是自增的&#xff0c;后面发现自增ID比较麻烦&#xff0c;有问题&#xff1a; 不可控的间隔&#xff1a; 如果你在插入数据时&#xff0c;中途删除了一些行&#xff0c;导致自增的ID出现间隔&#xff0c;那么新插入的行会填充这些间隔&#xff0c;可能…

17.3 【Linux】systemctl 针对 service 类型的配置文件

17.3.1 systemctl 配置文件相关目录简介 服务的管理是通过 systemd&#xff0c;而 systemd 的配置文件大部分放置于/usr/lib/systemd/system/ 目录内。但是 Red Hat 官方文件指出&#xff0c; 该目录的文件主要是原本软件所提供的设置&#xff0c;建议不要修改&#xff01;而要…

C++信息学奥赛1138:将字符串中的小写字母转换成大写字母

#include<bits/stdc.h> using namespace std; int main() {string arr;// 输入一行字符串getline(cin, arr);for(int i0;i<arr.length();i){if(arr[i]>97 and arr[i]<122){char aarr[i]-32; // 将小写字母转换为大写字母cout<<a; // 输出转换后的字符}els…

linux+c+qt杂记

虚拟机网络选择&#xff1b; 桥接模式&#xff1a;设置window宿主机的IP/dns,把虚拟机设置为桥接即可。 切换到终端&#xff1a;我的是 ctrlaltFnF1&#xff1f; 问题解决&#xff1a; Ubuntu系统下载&#xff08;清华大学开源软件镜像站&#xff09;&#xff08;ubuntu-20.…

vue问题相关记录

1. vue的 nextTick的原理 首先vue实现响应式并不是数据发生变化后dom立即更新&#xff0c;而是按照一定的策略 异步执行dom更新的。 vue在修改数据后&#xff0c;试图不会立即进行更新&#xff0c;而是要等同一事件循环机制内所有数据变化完成之后&#xff0c;在统一更新 next…

使用代理突破浏览器IP限制

一、实验目的: 主要时了解代理服务器的概念&#xff0c;同时如何突破浏览器IP限制 二、预备知识&#xff1a; 代理服务器英文全称是Proxy Server&#xff0c;其功能就是代理网络用户去取得网络信息。形象的说&#xff1a;它是网络信息的中转站&#xff0c;特别是它具有一个cac…

通过终端命令实现本地文件与远程Git仓库的上传与拉取!

上传 要将本地文件上传到Git仓库&#xff0c;需要遵循以下步骤&#xff1a; 1. **初始化仓库&#xff08;如果尚未初始化&#xff09;&#xff1a;** 导航到包含你的项目文件的文件夹&#xff0c;打开命令行(windows)或终端(git) git终端下载&#xff1a;Git的下载与安装教…

【Unity学习笔记】DOTween(1)基础介绍

本文中大部分内容学习来自DOTween官方文档 文章目录 什么是DOTween&#xff1f;DOSetOnTweenerSequenceTweenNested tween 初始化使用方式 什么是DOTween&#xff1f; DOTween是一个动画插件&#xff0c;Tween是补间的意思。这个插件以下简称DOT&#xff0c;DOT很方便使用&…

浅谈容器网络

1.什么是容器网络 容器网络是一种新兴的应用程序沙箱机制&#xff0c;用于家庭桌面和网络规模的 企业网络 解决方案&#xff0c;其概念与虚拟机类似。容器内部与主机和所有其他容器隔离的是一个功能齐全的 Linux 环境&#xff0c;具有自己的用户、文件系统、进程和网络堆栈。容…

标题:探索对称二叉树的奥秘

二叉树 题目连接 在计算机科学领域&#xff0c;二叉树是一种常见的数据结构&#xff0c;其灵活性和广泛的应用使得研究不断深入。其中&#xff0c;LeetCode 题目 "101. 对称二叉树" 提供了一个非常有趣且具有挑战性的问题&#xff0c;涉及到二叉树的对称性判断。通…

汽车制造业外发文件时 如何阻断泄密风险?

汽车制造业是我国国民经济发展的支柱产业之一&#xff0c;具有产业链长、关联度高、就业面广、消费拉动大等特性。汽车制造行业景气度与宏观经济、居民收入水平和固定资产投资密切相关。 汽车制造业产业链长&#xff0c;关联度高&#xff0c;汽车制造上游行业主要为钢铁、化工…

https 的ssl证书过期处理解决方案(lighthttpd)

更换证书&#xff1a;lighthttpd 配置文件位置&#xff1a;/opt/vmware/etc/lighttpd/lighttpd.conf &#xff08;配置文件的最底部 G快速来到底部&#xff09; 方案一&#xff1a;阿里云申请免费的证书 这里公司内网环境没有配置域名&#xff0c;可以创建一个临时域名&…

MySQL 触发器

目录 一、触发器概述 二、触发器操作 1、创建触发器 2、查看触发器 3、删除触发器 三、触发器应用 一、触发器概述 MySQL的触发器和存储过程一样&#xff0c;都是嵌入到MySQL的一段程序。触发器是由时间来触发某个操作&#xff0c;这些时间包括INSERT、UPDATE和DELETE语…

IDEA启动Tomcat两个端口的方式 使用nginx进行反向代理 JMeter测试分布式情况下synchronized锁失效

目录 引出IDEA启动Tomcat两个端口的方式1.编辑配置2.添加新的端口-Dserver.port80833.service里面管理4.启动后进行测试 使用nginx进行反向代理反向代理多个端口运行日志查看启动关闭重启 分布式情况下synchronized失效synchronized锁代码启动tomcat两个端口nginx反向代理JMete…

木叶飞舞之【机器人ROS2】篇章_第二节、turtlebot3安装

没有真实小车的情况下&#xff0c;利用gazebo的仿真&#xff0c;操作小乌龟来学习ros2。废话不多说&#xff0c;直接上命令。 Install Gazebo sudo apt install ros-humble-gazebo-*Install Cartographer 假如前一节未安装源码版本的cartographer&#xff0c;那就安装apt版本…

5.8 汇编语言:汇编高效除法运算

通常情况下计算除法会使用div/idiv这两条指令&#xff0c;该指令分别用于计算无符号和有符号除法运算&#xff0c;但除法运算所需要耗费的时间非常多&#xff0c;大概需要比乘法运算多消耗10倍的CPU时钟&#xff0c;在Debug模式下&#xff0c;除法运算不会被优化&#xff0c;但…

uniapp 实现切换tab锚点定位到指定位置

1.主要使用uniapp scroll-view 组件的scroll-into-view属性实现功能 2.代码如下 <scroll-view:scroll-into-view"intoView"><u-tabsclass"tabs-list"change"tabChange":list"tabList"></u-tabs><view id"1&…

macOS - 安装 Python 及地址

文章目录 Python 官方安装包Pip3Applications - PythonMiniconda多个python环境有多种方式安装 python,比如 Python 官方包、anaconda、miniconda、brew 等 这里记录使用 Python 官方包进行安装,和 miniconda 安装方式,以及安装后 各执行文件、安装包的地址。 明确这些地址后…