目录
1、前言
2、构建镜像的方式
2.1、docker commit
2.1.1、先查看下当前的容器
2.1.2、生成该容器镜像
2.1.3、查看镜像列表
2.2、Dockerfile
2.2.1、创建Dockerfile文件
2.2.2、编写Dockerfile文件
2.2.3、构建镜像
2.2.4、使用该镜像生成容器
3、Dockerfile
3.1、什么是Dockerfile
3.2、Idea集成Dockerfile构建镜像
3.2.1、先构建一个简单的springboot应用
3.2.2、编写Dockerfile
3.2.3、文件上传到/data/project下
3.2.4、构建镜像
3.2.5、启动
在前面章节中docker部署的nginx或者tomcat都是镜像仓库中已有的镜像,或是别人已经开发好的镜像。那么,在实际项目中,我们除了使用已有的镜像外,还有我们自己构建的镜像,比如项目的基础服务应用等等。
构建自己的镜像有2种方式:
我们以上一篇中部署的tomcat应用为例。
docker ps
docker commit 容器id 镜像名称
可见已经生成成功。此时如果你想上传到镜像仓库中,需要先到Docker Hub中注册一个账号密码。
随后登录账号,并将该镜像推送到镜像仓库中。
# 登录仓库
docker login
# 上传
docker push 镜像名称(tomcattest_application)
除了上面docker commit命令提交方式以外,还有Dockerfile方式构建镜像。而这种方式也是我们最经常使用的。因为docker commit方式只有生成该镜像的人才知道执行了什么命令,怎么生成的镜像。而别人使用的时候根本无法感知。而Dockerfile保留了所有的构建镜像的相关信息,类似于脚本文件的形式,可以清楚的看到构建整个镜像的前后相关信息。
touch Dockerfile
FROM nginx
RUN echo 'this is dockerfile create nginx image demo html
' > /usr/share/nginx/html/index.html
这里构建Nginx镜像,同时创建一个简单的web网页,网页内容为:this is dockerfile create nginx image demo html
docker build -t mynginx -f Dockerfile .
在Dockerfile同级目录下执行构建脚本。
看到这个,就说明构建成功。查看下当前镜像,多了我们构建的mynginx。
docker run -d -p 8888:80 mynginx
浏览器访问:http://ip:8888可以看到刚刚我们创建的网页。
上面介绍了Dockerfile构建镜像的方式。那么我们再来详细说说关于Dockerfile,因为这个是我们后续构建自己程序镜像的重点。
Dockerfile,镜像,容器之间的关系大致如下图(网上借来的),我们使用Dockerfile文件定义镜像信息,然后通过docker build构建镜像,接着运行镜像启动容器,当然中间一样可以push到Docker Hub仓库。
Dockerfile实际是一个文本文件,其包含了一条条的指令,每一条指令都用于构建镜像中的一层,同时每一条指令的内容描述了该层应如何构建。当我们需要定制自己额外的需求时,只需要在Dockerfile文件的基础上添加或修改指令,重新生成新的镜像即可。
一个完整的Dockerfile文件会包含以下几个部分内容:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@RestController
@RequestMapping("demo")
public class TestController {
@GetMapping("index")
public String indexAction(){
return "this is dockerfile create springboot application";
}
}
server:
port: 8080
程序启动后,访问接口:http://localhost:8080/demo/index,会返回结果:this is dockerfile create springboot application内容。
# 指定基础镜像作为该容器的基础环境,如springboot应用最起码得有jdk环境
FROM openjdk:8
# 执行维护者的信息
MAINTAINER shamee csdn peng793049488
# 创建一个存放该工程的目录
RUN mkdir -p /data/project
COPY app.jar /data/project/app.jar
# 对外暴露一个8899端口
EXPOSE 8899
# 执行启动
ENTRYPOINT ["/bin/sh", "-c", "java -jar /data/project/app.jar"]
docker build -t myapp .
构建完成,docker images 可以查看到我们的镜像myapp。
docker run --name=myapp -d -p 18080:8080 myapp
访问我们的接口地址:http://192.168.74.129:18080/demo/index就可以看到我们的接口返回。