有时候从Docker镜像仓库中下载的镜像不能满足要求,我们可以基于一个基础镜像构建一个自己的镜像
两种方式:
更新镜像:使用docker commit命令
构建镜像:使用docker build命令,需要创建Dockerfile文件
更新镜像
先使用基础镜像创建一个容器,然后对容器内容进行更改,然后使用docker commit命令提交为一个新的镜像(以tomcat为例)。
1.根据基础镜像,创建容器
docker run --name mytomcat -p 80:8080 -d tomcat
2.修改容器内容
docker exec -it mytomcat /bin/bash
cd webapps/ROOT
rm -f index.jsp
echo hello world > index.html
exit
3.提交为新镜像
docker commit -m=“描述消息” -a=“作者” 容器ID或容器名 镜像名:TAG
例:
docker commit -m=“修改了首页” -a=“华安” mytomcat huaan/tomcat:v1.0
4.使用新镜像运行容器
docker run --name tom -p 8080:8080 -d huaan/tomcat:v1.0
使用Dockerfile构建镜像
什么是Dockerfile?
Dockerfile is nothing but the source code for building Docker images
Docker can build images automatically by reading the instructions from a Dockerfile
A Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image
Using docker build users can create an automated build that executes several command-line instructions in succession
dockerfile
Dockerfile格式
Format:
#Comment
INSTRUCTION arguments
The instruction is not case-sensitive
However,convention is for them to be UPPERCASE to distinguish them from arguments more easily
Docker runs instructions in a Dockerfile in order
The first instruction must be ‘FROM’ in order to specify the Base Image from which you are building
使用Dockerfile构建SpringBoot应用镜像
一、准备
1.把你的springboot项目打包成可执行jar包
2.把jar包上传到Linux服务器
二、构建
1.在jar包路径下创建Dockerfile文件vi Dockerfile
指定基础镜像,本地没有会从dockerHub pull下来
FROM java:8
#作者
MAINTAINER huaan
把可执行jar包复制到基础镜像的根目录下
ADD luban.jar /luban.jar
镜像要暴露的端口,如要使用端口,在执行docker run命令时使用-p生效
EXPOSE 80
在镜像运行为容器后执行的命令
ENTRYPOINT [“java”,"-jar","/luban.jar"]
2.使用docker build命令构建镜像,基本语法
docker build -t huaan/mypro:v1 .
-f指定Dockerfile文件的路径
-t指定镜像名字和TAG
.指当前目录,这里实际上需要一个上下文路径
三、运行
运行自己的SpringBoot镜像
docker run --name pro -p 80:80 -d 镜像名:TAG
Dockerfile常用指令
FROM
FROM指令是最重要的一个并且必须为Dockerfile文件开篇的第一个非注释行,用于为镜像文件构建过程指定基础镜像,后续的指令运行于此基础镜像提供的运行环境
这个基础镜像可以是任何可用镜像,默认情况下docker build会从本地仓库找指定的镜像文件,如果不存在就会从Docker Hub上拉取
语法:
FROM
FROM :
FROM @
MAINTAINER(depreacted)
Dockerfile的制作者提供的本人详细信息
Dockerfile不限制MAINTAINER出现的位置,但是推荐放到FROM指令之后
语法:
语法:
MAINTAINER
name可以是任何文本信息,一般用作者名称或者邮箱
LABEL
给镜像指定各种元数据
语法:
LABEL = = =…
一个Dockerfile可以写多个LABEL,但是不推荐这么做,Dockerfile每一条指令都会生成一层镜像,如果LABEL太长可以使用\符号换行。构建的镜像会继承基础镜像的LABEL,并且会去掉重复的,但如果值不同,则后面的值会覆盖前面的值。
COPY
用于从宿主机复制文件到创建的新镜像文件
语法:
COPY …
COPY ["",…""]