Dockerfile

118 阅读3分钟

简介

dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。

docker commit构建镜像

1. 镜像打包

docker commit 容器ID/names 镜像名称:版本号

commit-1.png

2. 镜像保存

docker save  -o 镜像名称.tar  镜像名称:版本号 

commit-2.png

3. 镜像加载

docker load -i 镜像名称.tar

commit-3.png 通过docker commit提交构建镜像的方式一般不常用,主要用来做测试,在构建自定义镜像时,可以使用Dockerfile来构建。

dockerfile构建镜像

一般 docker 镜像的构建步骤:

  • 1、编写一个 dockerfile 文件
  • 2、docker build 构建成为一个镜像
  • 3、docker run 运行镜像
  • 4、docker push 发布镜像

注意:每个 DockerFile 的保留字(指令),都必须是大写的。DockerFile 脚本执行是按照顺序执行的

DockerFile的指令

  • FROM:指定基础镜像
  • MAINTAINER:镜像维护者信息(姓名、邮箱)
  • RUN:镜像构建时需要运行的命令
  • ADD:将宿主机目录下的文件拷贝进镜像且会自动处理 URL 和解压 tar 压缩包(例如加入 mysql 的压缩包,添加内容)
  • WORKDIR:指定在构建镜像过程中,终端默认的登录路径(镜像的工作目录)
  • VOLUME:容器数据卷(挂载目录)
  • EXPOSE:容器对外暴露的端口 (和 -p 是一个效果)
  • CMD:指定容器启动时要运行的命令
  • ENTRYPOINT:指定容器启动时要运行的命令
  • COPY:将宿主机目录下的文件拷贝进镜像且不会自动处理 URL 和解压 tar 压缩包
  • ENV:用来在构建镜像过程中设置环境变量

注意:ADD 和 COPY 区别

基本复制功能:

  • COPY: 纯粹地将从构建上下文(即执行 docker build 命令时指定的目录及其子目录)中的文件或目录复制到镜像中指定的路径。
  • ADD: 除了具备 COPY 的基本复制功能外,还提供了额外的功能。

推荐使用:

  • 由于 COPY 指令更为简单且用途明确,对于大多数仅需复制文件或目录的场景,推荐使用 COPY。
  • 当你需要利用 ADD 的额外功能(如解压或从URL下载)时,才应选择使用 ADD。

Dockerfile实践

使用Dockerfile部署SpringBoot项目实例:

1、编写Dockerfile文件

# 基于 openjdk:8-jre 为基础镜像进行构建
FROM openjdk:8-jre    
# 进入这个容器的目录指定为/app
WORKDIR /app
# 将jar包放入/app目录下,并重新命名为app.jar
ADD  my-framework-0.0.1-SNAPSHOT.jar   app.jar
# 该项目使用的是9999端口,所有需要向外暴漏9999端口,日后才能通过映射的端口去访问这个暴漏的端口
EXPOSE 9999
# ENTRYPOINT 和 CMD 结合使用,ENTRYPOINT固定命令,CMD根据参数的不同 运行不同的jar包(动态参数)
ENTRYPOINT ["java","-jar"] 
CMD ["app.jar"]
# 相当于 java -jar xxx.jar

2、创建文件javademo,并把jar包和Dockerfile文件放在里面

3、构建镜像

docker build -t my-framework:1.0  . 

实践1.png 4、运行容器

docker run -d -p 9999:9999 --name  myjavademo  my-framework:1.0 

运行容器.png