Docker学习笔记-4 创建镜像

上一篇文章我们介绍了如何使用现有镜像创建容器并使用。

本章将介绍如何自己创建一个镜像并使用。

 

简单说,其实创建一个镜像就是把dockerfile中的指令按顺序执行一遍,就创建好了。

Dockerfile必须是FROM开头的,因为必须基于一个已有的镜像,不能凭空创建一个。这里聪明的小伙伴可能要问了,那第一个镜像是如何创建出来的,是Docker公司官方创建并提供的一个空镜像scratch,万物基于scratch。 

 

add是复制文件

run是运行命令

cmd也是运行命令 

如果只有FROM一句的话就是把这个镜像复制一个。

还有就是命令尽可能的&成一个长命令。而不是RUN很多个命令,因为每RUN一条命令,都是把上一个指令结束的包再包一层,这样就包了很多层。

如何查看一个已有的镜像的dockerfile,其实是看不到dockerfile的,但是可以看到这个镜像的创建步骤,可以用docker history 镜像名称 来查看。

下面我们来创建一个镜像,我用springboot写了一个小项目,可以接收http请求并响应结果。创建这个镜像需要三个东西:
  1. 一个linux发行版(这里docker不会把整个系统放进镜像里,那样就和虚拟机无异了,docker只会把必要的kernel和rootfs放进来。),这里我用的是centos。
  2. 一个jdk。
  3. 一个可运行jar包。

都准备好后,建一个目录,将linux版jdk、jar包、Dockerfile放到一个目录中。
image
然后编写Dockerfile:

# 指定基础镜像
FROM centos:latest
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包
COPY ./jdk-8u202-linux-x64.rpm $JAVA_DIR/
COPY ./demo-1.jar /tmp/app.jar

# 安装JDK
RUN cd $JAVA_DIR \
 && rpm -ivh jdk-8u202-linux-x64.rpm

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

然后开始构建我们的镜像:

docker build -t demo:1 .
  • -t 是镜像名称
  • . 是指当前目录,如果在整个目录下找不到Dockerfile会报错,构建失败

构建成功后如图:
image

然后我们查看本地镜像:

docker images

image
其中demo就是我们刚才创建的镜像。我们来运行它:

docker run -p 8090:8080 -d demo:1
  • -p 是指定宿主机端口和容器内端口的对应关系,宿主机端口8090对应容器内端口8080.我们在宿主机访问的时候,访问8090端口即可。
  • -d 是后台运行容器。
    这里我们访问我们的接口,发现是成功的:
    image

以上自定义镜像并运行它的全部内容了,有问题可以在评论区留言。
接下来我打算以真实环境为例,搭建一套docker集群,敬请期待~

posted @ 2022-09-14 19:41  hucat  阅读(86)  评论(0编辑  收藏  举报