Docker 通过Dockerfile容器化应用

什么是容器化?

将应用整合到容器并运行起来,成为“容器化”,有时也叫作“Docker化”。

容器化的过程

在这里插入图片描述
1.编写应用代码。
2.创建一个Dockerfile,其中包括当前应用的描述、依赖环境以及该如何运行这个应用。
3.对Dockerfile执行docker image build命令。
4.等待Docker将应用程序构建到Docker镜像中。
5.构建完成之后即可将镜像运行到容器中进行测试。

Dockerfile指令解析

FROM
以一个镜像为基础,在这个镜像的基础上制作镜像。因为FROM是指定基础镜像,所以FROM必须为第一条指令。

例:

FROM java:8

RUN
用于在镜像中执行一条指令,这样会新建一个镜像层。虽然RUN指令很强大,但是每一个RUN指令都会新建一层镜像层,对于一个镜像来说需要精简而保留核心功能,所以将RUN指令合并。

例:

RUN mkdir -p /root/local/docker/test \
	&& pip install flask

COPY
将文件作为一个新的层添加到镜像中。在build镜像的过程中可以引用镜像中的任何文件。

例:

COPY ./package.json /root/local/

VOLUME
容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。当容器需要持久化功能的时候,可以使用这个指令来指定一个目录存储数据。

例:

VOLUME /home/date

ADD
相较于COPY有所加强,比如能够通过URL下载文件,然后将文件添加到新的镜像层中,并设置权限为600。压缩格式为 gzip, bzip2 以及 xz 的文件会自动解压。不解压的前提下传递tar文件会导致构建镜像缓慢,需要手动解压

例:

ADD https://www.test.com/test.json /root/local/

EXPOSE
声明端口,并不会以这个端口启动应用。当启动镜像时进行随机映射端口时才会使用到这个端口,或者帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。

例:

EXPOSE 8888

CMD
为程序指定默认要运行的程序。CMD 指令指定的程序可被 docker run -i 命令行参数中指定要运行的程序所覆盖。如果Dockerfile中存在多个CMD指令则只有最后一个指令才会生效。

例:

CMD ["java","-jar","test.jar"]

ENTRYPOINT

ENTRYPOINT与CMD一样,但不会被docker run的参数所覆盖。在使用ENTRYPOINT时,添加命令行参数时,会添加到ENTRYPOINT后,但是如果启动时设置了–entrypoint 则会覆盖ENTRYPOINT的指令

例:

ENTRYPOINT ["java","-jar","test.jar"]

实践

1.如果自己电脑装有docker则在电脑上操作,如果没有docker可以在https://labs.play-with-docker.com/进行操作。
在这里插入图片描述

2.新建一个springboot应用,写一个简单的controller

package com.me.dockerbuild;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@SpringBootApplication
@RestController
public class DockerBuildApplication {

	@GetMapping
	public Map<String,Object> demo(){
		Map<String, Object> result = new HashMap<>();
		result.put("code",200);
		result.put("message","ok");
		result.put("success",true);
		return result;
	}

	public static void main(String[] args) {
		SpringApplication.run(DockerBuildApplication.class, args);
	}

}

3.创建Dockerfile

FROM java:8
VOLUME /temp
ADD docker-build-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]

4.将Dockerfile与jar包放在同一个目录下
5.执行以下指令生成镜像

docker image build -t dockerdemo:latest .

6.生成成功
在这里插入图片描述
7.启动并访问,容器启动成功,数据返回正确

docker container run -d -p 80:8080 dockerdemo /bin/bash

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值