前面《Docker系列》Docker是个啥东西? 里面,跑起来了第一个容器,在容器中运行一个centos镜像。那么怎样去构建镜像呢,怎样把本身的Java代码放到容器里面运行呢?接下来的内容,咱们就来探索下如何构建咱们本身的镜像。java
docker能够自动化根据描述文件,构建镜像,咱们只须要把描述文件写好,使用docker build
命令就能够构建本身的镜像。首先来了解下描述文件都有哪些内容,须要怎样的格式?linux
Dockerfile里面能够有一系列命令,先来了解下都有哪些命令:spring
首先,一个合法的Dockerfiles都必须有一个FROM
命令来建立一个镜像层,并指定基础镜像,也就是说咱们的镜像必须在基础镜像的基础上增长咱们本身的内容,语法以下:docker
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
复制代码
任何合法的镜像均可以做为基础镜像,咱们通常使用公开的镜像来做为咱们的基础镜像。如咱们但愿咱们的java程序跑在centos上,那么咱们能够把centos做为基础镜像来构建。[--platform=<platform>]
参数为可选参数,用于指定平台,如linux/amd6四、linux/arm6四、windows/amd64,默认会是构建是有构建时的平台类型。<image>[:<tag>]
为镜像及版本。[AS <name>]
也是可选的,这个没什么好说,起个名字。 例子:windows
FROM centos:centos7 AS centos7
复制代码
RUN命令能够当前的镜像层上运行任何的命令,如,能够直接在centos上面执行yum install java-1.8.0-openjdk.x86_64
安装JDK,两种格式以下:centos
RUN <command>
RUN ["executable", "param1", "param2"]
复制代码
命令没有什么好解析的,两种格式是等价的,例子:bash
RUN yum -y install java-1.8.0-openjdk.x86_64
RUN ["yum", "-y", "install", "java-1.8.0-openjdk.x86_64"]
复制代码
CMD命令用于指定容器启动时,运行啥程序,Docker容器虽然能够像虚拟机同样提供一个独立环境,但它与虚拟机是不同的,虚拟机上能够直接运行一个系统,而docker容器只是一个进程,它须要指定跑哪些程序,如跑起来centos下的控制台/bin/bash
。一个Dockerfile只能有一个CMD命令,若是有多个的话,只有最后一个会生效,3种格式以下:markdown
CMD ["executable","param1","param2"]
CMD command param1 param2
CMD ["param1","param2"] //先不作了解,后续再深刻
复制代码
例子:app
CMD ["/bin/bash"]
复制代码
ADD命令,用于将本地或者远程的文件拷贝到镜像中,要在镜像中跑咱们的spring boot代码,须要将咱们代码的jar包拷贝到镜像中,命令格式以下:ide
ADD [--chown=<user>:<group>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
复制代码
[--chown=<user>:<group>]
是可选参数,只能在linux的镜像上使用,设置文件所属用户、组相关。 后面两个参数为源文件文章,拷贝文件存放的目标位置。例子:
ADD spboot-0.0.1-SNAPSHOT.jar /spboot-0.0.1-SNAPSHOT.jar
复制代码
了解了上面的4个命令就足以让咱们构建起第一个镜像了。这里咱们先简单建立一个spring boot项目,以后简单写个测试接口,端口配置为8888,以后将Spring boot项目打包称为一个jar包。
以后建立一个文件夹,直接把打包好的jar包复制到该文件夹下,同时在该文件夹下建立Dockerfile文件。
Dockerfile文件内容以下:
FROM centos:centos7 AS centos7
RUN yum -y install java-1.8.0-openjdk.x86_64
ADD spboot-0.0.1-SNAPSHOT.jar /tmp/spboot-0.0.1-SNAPSHOT.jar
CMD ["java","-jar", "/tmp/spboot-0.0.1-SNAPSHOT.jar"]
复制代码
开启一个控制台,切换到咱们刚建立的文件夹目录下,执行docker build -t centosjdk_spboot:1.0 .
,-t 后面的参数指定镜像名称及版本,.表示使用当前目录的Dockerfile文件构建。构建以下图
构建成功后就能够经过docker images
查询到咱们的镜像了。 镜像构建完成,就能够在咱们的容器中跑起来了。
docker run -it -p 80:8888 centosjdk_spboot:1.0
, -p指定本地80端口映射到docker容器8888端口,-it上一篇文章说过,使用标准输入输出、及终端。跑起来以后,咱们就能够访问咱们运行在容器里的spring boot项目了。
本文简述了如何去构建第一个本身的镜像。Docker构建镜像须要编写Dockerfile文件,简单介绍了文件中的4个命令FROM、RUN、CMD、ADD,以及构建跑起来了本身的镜像。本文到此位置,更多内容,敬请期待。