Docker构建镜像

Docker根据Dockerfile文件构建镜像

在实际生产中,常常使用Dockerfile构建企业级生产环境镜像,然后再部署在我们的生产环境中,本文将从从零开始介绍Dockerfile如何使用,构建镜像。

Dockerhub官网地址:https://registry.hub.docker.com

1、Dockerfile语法详解

Dockerfile是一个用于定义Docker镜像的文本文件,它包含了一系列的指令和参数,用于指示Docker在构建镜像时应该执行哪些操作,例如基于哪个基础镜像、复制哪些文件到镜像中、运行哪些命令等等。通过Dockerfile,开发人员可以将应用程序和其所有依赖项打包在一起,创建出一个可移植的Docker镜像,使得这应用程序可以在任何Docker环境中都能够快速部署和运行。

1.1、Dockerfile常用指令

命令

用途

FROM

基础镜像文件

RUN

构建镜像阶段执行命令

ADD

添加文件,从src目录复制文件到容器的dest,其中 src可以是 Dockerfile所在目录的相对路径,也可以是一个 URL,还可以是一个压缩包

COPY

拷贝文件,和ADD命令类似,但不支持URL和压缩包

CMD

容器启动后执行命令

EXPOSE

声明容器在运行时对外提供的服务端口

WORKDIR

指定容器工作路径

ENV

指定环境变量

ENTRYPOINT

容器入口, ENTRYPOINT和 CMD指令的目的一样,都是指定 Docker容器启动时执行的命令,可多次设置,但只有最后一个有效。

USER

该指令用于设置启动镜像时的用户或者 UID,写在该指令后的 RUN、 CMD以及 ENTRYPOINT指令都将使用该用户执行命令。

VOLUME

指定挂载点,该指令使容器中的一个目录具有持久化存储的功能,该目录可被容器本身使用,也可共享给其他容器。当容器中的应用有持久化数据的需求时可以在 Dockerfile中使用该指令。格式为: VOLUME["/data"]。

2、Dockerfile构建镜像步骤

1. 创建dockerfile文件

vim Dockerfile

FROM nginx

RUN echo 'Hello Nginx' > /usr/share/nginx/html/index.html

2. 在Dockerfile所在路径执行以下命令构建镜像

docker build -t nginx:hello .

-t: 指定镜像名字,命令最后的点(.)表示Dockerfile文件所在路径

3. 运行镜像

docker run -p 9900:80 -d 

3、实例

编写dockerfile文件,在镜像中安装nginx, 构建镜像文件,并根据此镜像创建容器

[root@zch01 ~]# mkdir -p dockerfile/1

[root@zch01 ~]# cd dockerfile/1

[root@zch01 1]# vi dockerfile

3.1、命令解释

FROM:基础镜像,必须是可以下载下来的,定制的镜像都是基于 FROM 的镜像,这里的 centos就是定制需要的基础镜像。后续的操作都是基于centos镜像

MAINTAINER:指定镜像的作者信息

RUN:指定在当前镜像构建过程中要运行的命令

包含两种模式:Shell模式、exec模式

Shell模式

RUN (shell模式,这个是最常用的)

RUN echohello

exec模式

RUN[“executable”,“param1”,“param2”](exec模式)

RUN[“/bin/bash”,”-c”,”echo hello”]

等价于/bin/bash-c echo hello

RUN yum install wget -y 等价于=> RUN[“/bin/bash”,”-c”,”yum install wget -y”]

COPY:常用用于把宿主机上的文件拷贝到镜像中

EXPOSE:声明端口,帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射,在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口,可以是一个或者多个端口,也可以指定多个EXPOSE

CMD:类似于 RUN 指令,用于运行程序,但二者运行的时间点不同,CMD在docker run 时运行

CMD[“executable”,“param1”,“param2”](exec模式)

CMD command (shell模式)

CMD [“param1”,”param2”](作为ENTRYPOINT指令的默认参数)

3.2、构建镜像

语法如下:

docker build -t ImageName:TagName dockerfilePath

选项:

  • -t - 提到镜像的标签
  • ImageName -镜像指定的名称
  • TagName - 这是您要为镜像指定的标签
  • dockerfilePath - Dockerfile所在的目录,如果是在当前目录使用.就可以

[root@zch01 1]# docker build -t="zch/test:v3" .

查看镜像是否创建成功

[root@zch01 1]# docker images

3.3、使用订单服务构建镜像

订单服务:order-app.jar

编写dockerfile文件:

[root@zch01 order]# vi dockerfile

FROM openjdk:8-jdk-oracle #基础镜像

RUN mkdir /app #创建目录用于存放jar

ENV SERVER_PORT=9981 #环境变量应用服务端口

JAVA_AGENT=-javaagent:/opt/agent/skywalking-agent.jar #接入skywalking

JVM_GC="" #配置GC参数

JVM_OPTS="" #配置jvm参数,如限制内存

COPY target/order-app.jar /app/order-app.jar 在实际开发过程中,开发编译打包好的jar 常常放在target目录下,拷贝jar包到指定目录

EXPOSE $SERVER_PORT #声明服务端口

ENTRYPOINT ["sh","-c","java ${JAVA_AGENT} ${JVM_XMS} ${JVM_XMX} ${JVM_XMN} ${JVM_OPTS} ${JVM_GC} -jar /app/order-app.jar"] #指定容器创建启动后,需要执行的命令

构建镜像:

[root@zch01 order]# docker build -t="zch/order:v1" .

下篇博客将继续分享根据构建的镜像创建容器

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值