【9.0】Docker之Dockerfile
【引入】部署的镜像来源
【1】从仓库拉取
- 从仓库拉取:可以通过使用
docker pull
命令从远程仓库拉取已经构建好的镜像。- 例如,要拉取名为
nginx
的镜像,可以运行以下命令:
- 例如,要拉取名为
【2】容器做成镜像
- 可以使用
docker commit
命令将正在运行的容器创建成一个新的镜像。- 这对于需要定制化的镜像非常有用。
- 下面是一个示例命令,将容器ID为
abc123
的容器创建成一个名为my-image
的新镜像:
【3】备份恢复
- 可以通过使用
docker save
和docker load
命令备份和恢复镜像。 - 首先,使用
docker save
将镜像保存为一个压缩包文件,例如:
然后,使用docker load
从该压缩包文件中恢复镜像:
【4】Dockerfile构建
- 可以使用Dockerfile文件来定义镜像的构建过程,包括基础镜像、软件安装、配置等。
- 使用
docker build
命令根据Dockerfile构建镜像。 - 以下是一个简单的Dockerfile示例:
- 使用
- 然后,使用以下命令在Dockerfile所在目录中构建镜像:
【补充】构建私有仓库(hu.docker)
- 为了构建私有仓库,可以使用Docker官方提供的Registry镜像作为基础。
- 首先,通过运行以下命令拉取Registry镜像:
- 接下来,运行以下命令启动Registry容器:
- 这将在本地启动一个Registry服务,并将其映射到主机的5000端口。现在,您可以通过指定
localhost:5000
或<your-host-ip>:5000
来访问私有仓库。 - 为了将镜像推送到私有仓库,首先需要给镜像一个特定的标签,使用私有仓库地址作为前缀。例如,给名为
my-image
的镜像添加私有仓库标签:
- 然后,使用以下命令将镜像推送到私有仓库:
- 这样,镜像就被推送到了私有仓库中。其他机器可以使用
docker pull
命令从私有仓库拉取镜像。
- 需要注意的是,私有仓库需要进行适当的认证和授权配置,以确保只有授权用户可以访问和推送镜像。
- 这涉及到更复杂的配置和管理,请参考Docker文档或相关教程进行配置和管理。
【一】什么是Dockerfile
- Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。
- 1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
- 2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
- 3、对于运维人员:在部署时,可以实现应用的无缝移植。
【二】Dockerfile常用命令
命令 | 作用 |
---|---|
FROM image_name:tag | 定义了使用哪个基础镜像启动构建流程 |
MAINTAINER user_name | 声明镜像的创建者 |
ENV key value | 设置环境变量 (可以写多条) |
RUN command | 是Dockerfile的核心部分(可以写多条) |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
source_dir/file dest_dir/file | 和ADD相似,但是如果有压缩文件并不能解压 |
WORKDIR path_dir | 设置工作目录 |
【三】构建镜像案例
【1】引言
- 构建一个带 vim 的centos:7镜像,根路径下有一个 test.txt 文件
【2】操作步骤
- 打开一个
Dockerfile
文件(必须叫这个文件名)
- 将下面的内容 复制进去
- 在本地创建一个文件
- copy 本地文件到镜像,本地必须要先有一个文件
- 基于Dockerfile 构建镜像
.
基于当前路径下的 Dockerfile 文件构建镜像
- 查看已经做好的镜像
- 基于这个镜像运行容器
- 进入到容器
【四】纯干货!Docker Dockerfile指令大全
-
Dockerfile是用于构建Docker镜像的文本文件,其中包含了一系列指令(Instructions),用来描述镜像的构建过程。
-
下面是每个指令的详细解释以及相关案例。
-
FROM:
-
指定基础镜像,表示当前镜像是基于哪个镜像构建的。
-
示例:
FROM ubuntu:latest
-
-
RUN:
-
在镜像中执行命令。可以用于安装软件包、运行编译命令等。
-
示例:
RUN apt-get update && apt-get install -y <package>
-
-
CMD:
-
定义容器启动时要执行的命令。可以有多个CMD指令,但只有最后一个CMD指令会生效。
-
示例:
CMD python app.py
-
-
ENTRYPOINT:
-
与CMD类似,定义容器启动时要执行的命令,但ENTRYPOINT的参数不可被覆盖,而CMD可以被命令行参数覆盖。
-
示例:
ENTRYPOINT ["java", "-jar", "app.jar"]
-
-
COPY:
-
将文件或目录从主机复制到容器中的指定路径。
-
示例:
COPY app.py /app/
-
-
ADD:
-
与COPY相似,不仅可以复制文件或目录,还可以解压缩tar文件和远程URL文件。
-
示例:
ADD http://example.com/package.tar.gz /
-
-
MAINTAINER:
-
设置镜像作者的信息。
-
示例:
MAINTAINER John Doe <johndoe@example.com>
-
-
EXPOSE:
-
声明容器运行时要监听的端口。不会实际发布端口,只是用来说明容器内部程序使用的网络端口。
-
示例:
EXPOSE 8080
-
-
ARG:
-
定义构建镜像过程中的变量,该变量可以在后续指令中使用,并可以通过构建命令(
--build-arg
)进行传递。 -
示例:
ARG version=latest
-
-
WORKDIR:
-
为后续的RUN、CMD、ENTRYPOINT等指令设置工作目录。
-
示例:
WORKDIR /app
-
-
VOLUME:
-
在容器中创建一个挂载点,并将它标记为持久化存储的卷。
-
示例:
VOLUME /data
-
-
USER:
-
设置容器运行时的用户或用户组。
-
示例:
USER nobody
-
-
ONBUILD:
-
定义触发器,指定当当前镜像作为其他镜像的基础镜像时应该执行的操作。
-
示例:
ONBUILD COPY . /app
-
-
STOPSIGNAL:
-
设置容器停止时发送给主进程的信号。
-
示例:
STOPSIGNAL SIGTERM
-
-
HEALTHCHECK:
- 定义容器的健康检查指令,可用于检测容器是否正常运行。
- 示例:
HEALTHCHECK --interval=5m CMD curl -f http://localhost/ || exit 1
【五】Dockerfile构建一个Django项目
- 以图书管理系统为例
- 第一步:有一个项目,pycharm开发者,开发完后
- 第二步:在项目路径下新建Dockerfile,写入
- 第三步:代码提交到git
- 第四步:上线人员,在上线机器上,拉取代码
- 第五步:构建镜像
- 第六步:运行容器
-
第七步:其他人访问宿主机的 8080 端口,就能看到项目了
-
第八步:开发人员继续提交代码
-
第九步:运维人员 pull 代码。重启容器,用户就可以看到最新版本了
- 重启docker容器即可(第三方依赖发生变化)
- 重写构建镜像,运行容器
__EOF__

本文链接:https://www.cnblogs.com/dream-ze/p/17665052.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文来自博客园,作者:Chimengmeng,转载请注明原文链接:https://www.cnblogs.com/dream-ze/p/17665052.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)