前言
Dockerfile是一个文本文件,其中包含了创建Docker镜像所需的所有指令。这意味着任何人都可以通过运行docker build
命令并使用相同的Dockerfile来创建完全相同的镜像。
这确保了镜像创建的可重复性,使得在不同的环境中部署应用程序变得更加容易。
Dockerfile提供了丰富的指令集,允许开发者在镜像构建过程中进行各种自定义操作,如安装软件包、复制文件、设置环境变量等。这使得镜像的构建过程非常灵活,可以根据项目的具体需求进行定制。
Dockerfile可以轻松地分享给其他开发者或部署到不同的环境中。只需要将Dockerfile提交到版本控制系统(如Git)中,其他开发者就可以通过运行docker build
命令来创建镜像,并在需要时部署到目标环境中。
Dockerfile是一个文本文件,因此它可以像其他代码一样进行版本控制。这意味着开发者可以轻松地跟踪镜像构建过程的变化,并在需要时回滚到之前的版本。
结合Docker Hub或其他持续集成/持续部署(CI/CD)工具,Dockerfile可以实现自动化构建和部署。这意味着当代码发生变化时,可以自动触发Docker镜像的重建和部署,从而提高了开发效率。
Dockerfile遵循一定的语法和最佳实践,这有助于确保镜像构建的标准化和一致性。此外,Docker社区也提供了许多最佳实践指南和示例,供开发者参考和学习。
Dockerfile为Docker镜像的构建提供了强大的支持和灵活性,使得Docker成为现代应用程序部署的优选工具之一。
一、配置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文件从当前目录复制到容器的/app目录下 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官网文档还是比较清晰,大部分都能找到相应的处理方案。
标签:文件,myweb,容器,镜像,Docker,Dockerfile,docker From: https://www.cnblogs.com/zrl66/p/18056902