Docker使用Dockerfile文件(五)
前言
Dockerfile是一个文本文件,用于自动化构建Docker镜像。它包含了一系列指令和说明,用于描述如何构建所需的Docker镜像。这些指令涵盖了执行代码或文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程等多个方面的内容。通过docker build命令构建镜像,保证了镜像的构建过程可重复、可移植,并且可以在不同的环境中保持一致。再打包成tar归档文件,然后移植到不同系统中,最后通过通过docker load命令将其加载到images镜像库中。
一、配置Dockerfile文件
# 指定基础镜像 FROM ubuntu:latest # 设置维护者信息,设置作者信息,不过官方(不推荐使用) MAINTAINER auler # 安装必要的软件包(容器创建时,运行代码) RUN apt-get update && apt-get install -y \ nginx \ curl # 复制本地文件到容器中的指定路径(前面./index.html是本机宿主目录,后面/usr/share/nginx/html是容器目录,也可以根据工作目录进行相对路径./html) COPY ./index.html /usr/share/nginx/html/ # 创建数据卷(这里虽然设置挂载,具体还需要-v进行挂载) VOLUME /var/www/html # 设置工作目录(构建时会以这个容器目录下进行,就是 ./ 当前目录的意思) WORKDIR /usr/share/nginx/html # 暴露容器端口,官方文档中表明这是指示什么端口被暴露,并且需要用什么协议 EXPOSE 80 81/udp 82/tcp # 容器启动时执行的命令(Nginx以非守护模式运行) CMD ["nginx", "-g", "daemon off;"]
二、执行Dockerfile文件
以JavaWeb项目为例,配置简单的web项目。先创建一个含有java环境的容器,然后直接将jar包复制到容器的jar目录中,最后运行项目。(war包也同理,不过需要构建tomcat容器)
# 使用包含Java的官方基础镜像 FROM java:openjdk-8u111-jre # 设置工作目录 WORKDIR /jar # 将JAR文件从当前目录复制到容器的/jar目录下 COPY ./web/target/web-0.0.1.jar ./web.jar # 暴露应用程序运行的端口,假设你的应用监听在8085端口 EXPOSE 8085 # 启动JAR包 ENTRYPOINT ["java", "-jar", "web.jar"]
后面开始进行构建项目镜像,然后保存成docker支持的tar包,传到服务器里。
~]# docker build -t myweb . # 最后有个点 . 别忘了,代表当前目录
~]# docker build -t web:v1 . # -t表示tag标签,这样就打上v1的标签
~]# docker build -t auler/web2:v1 . # 还能记录仓库名称,仓库名称/镜像名称:标签名
然后查看docker镜像是否已经生成。
~]# docker images
接着对myweb镜像进行打包,执行完命令,当前目录会出现myweb.tar文件。
~]# docker save -o myweb.tar myweb # -o表示output输出归档文件myweb.tar,并保存当前目录,最后是镜像myweb
然后上传到服务器,接着加载tar文件就能完美执行web项目。使用命令查看镜像,发现镜像已经加载到images列表中。
~]# docker load -i myweb.tar #-i表示input,加载myweb.tar文件到容器镜像
使用docker创建运行myweb项目,并查看并访问项目。
~]# docker run -d --name myweb -p 8085:8085 myweb:latest ~]# docker ps -a # 查看项目 ~]# curl 127.0.0.1:8085 # 访问项目,返回响应数据即可
Dockerfile掌握基本使用,对于实战项目也是能够通过Dockerfile配置达成环境统一,这也是Docker的一个亮点吧。
另外一些需要特殊配置的项目可以去官网查看文档,目前看了Docker官网文档还是比较清晰,大部分都能找到相应的处理方案。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库