dockerfile 构建镜像(四)

练习回顾

镜像后缀:
slim:瘦身的。
alpine:更瘦身的。
下载镜像,优先推荐 alpine 后缀的。

# 指定版本,该版本包含了web控制页面
[root@localhost /]# docker pull rabbitmq:management

[root@localhost /]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
rabbitmq            management          41f7a13e37d3        27 hours ago        186MB
[root@localhost /]# docker run -d --name rabbitmq \
>  -p 5671:5671 \
>  -p 5672:5672 \
>  -p 4369:4369 \
>  -p 25672:25672 \
>  -p 15672:15672 \
>  -v rabbitmq:/var/lib/rabbitmq \
>  41f7a13e37d3
3adccaf1234875986ea09568c4a5d5a2162f294edd235fccfbace3df50c4036b

在这里插入图片描述

如果没有指定用户名和密码:默认是 guest / guest
第二种方式:

 docker run -d --hostname my-rabbit --name rabbitmq \
 -e RABBITMQ_DEFAULT_USER=user \
 -e RABBITMQ_DEFAULT_PASS=password \
 -p 5671:5671 \
 -p 5672:5672 \
 -p 4369:4369 \
 -p 25672:25672 \
 -p 15672:15672 \
 -v rabbitmq:/var/lib/rabbitmq \
 41f7a13e37d3

dockerfile 详解

官网:https://docs.docker.com/engine/reference/builder/

dockerfile 由一行行命令语句组成,并且支持以#开头的注释行。
一般而言,Dockerfile可以分为四部分
基础镜像信息 维护者信息 镜像操作指令 启动时执行指令

指令说明
FROM指定基础镜像
RUN运行命令
CMD指定启动容器时默认的命令
LABEL指定生成镜像的元数据标签信息
EXPOSE声明镜像内服务监听的端口
ENV指定环境变量,可以在docker run的时候使用-e改变
ADD复制指定的src路径下的内容到容器中的dest路径下,src可以为url会自动下载,可以为tar文件,会自动解压
COPY复制本地主机的src路径下的内容到镜像中的dest路径下,但不会自动解压等
ENTRYPOINT指定镜像的默认入口.运行命令
VOLUME创建数据卷挂载点
USER指定运行容器时的用户名或UID
WORKDIR配置工作目录,为后续的RUN、CMD、ENTRYPOINT指令配置工作目录
ARG指定镜像内使用的参数(如版本号信息等),可以在build的时候,使用–build-args改变

FROM

FROM指令初始化一个新的构建阶段,并为后续指令设置 基本镜像

语法
FROM [--platform=<platform>] <image> [AS <name>]

FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]

例如:
FROM rabbitmq:3.8
FROM alpine:3.12

注意:

  1. 在Dockerfile中,ARG是仅先于FROM的指示;
  2. 在Dockerfile中,FROM可以出现一次或多次来创建多个镜像,也可以将一个构建阶段用作对另一个构建阶段的依赖,只需在每个新FROM指令之前记录一次提交输出的最后一个图像ID 。每个FROM指令清除由先前指令创建的任何状态。
  3. tag或digest值是可选的,如果忽略其中任何一个,那么缺省情况下docker 默认采用 latest。

第二点举例:

ARG  CODE_VERSION=latest
FROM base:${CODE_VERSION}
CMD  /code/run-app

FROM extras:${CODE_VERSION}
CMD  /code/run-extras

RUN

两种形式:

  1. RUN <command>:shell 命令形式运行,默认情况下,linux 环境在 /bin/sh -c ,windows 环境在 cmd /S /C 运行。
    例如:RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME'

  2. RUN ["executable", "param1", "param2"] :执行表格
    例如:RUN ["/bin/bash", "-c", "echo hello"]

CMD

CMD指令具有三种形式:

  1. CMD ["executable","param1","param2"]:exec形式,首选。
  2. CMD ["param1","param2"]:作为ENTRYPOINT的默认参数。
  3. CMD command param1 param2:外壳形式。

不要混淆RUN与CMD。RUN实际上运行命令并提交结果;CMD在生成时不执行任何操作,但指定映像的预期命令。

CMD指令更多可参考:
Docker 官方文档
ENTRYPOINT vs CMD: Back to Basics
Dockerfile: ENTRYPOINT vs CMD

一个网友提供信息:https://www.cnblogs.com/sparkdev/p/8461576.html

其他命令不再详细赘述,更多看官网。

dockerfile 实战

  1. 创建 dockerfile 文件夹【必须】
    [root@bogon /]# mkdir dockerfile

  2. 进入 dockerfile 文件夹编写 dockerfile 脚本。
    [root@bogon dockerfile]# vi Dockerfile

[root@localhost /]# vi Dockerfile
[root@localhost /]# cat Dockerfile
FROM alpine
CMD ["/bin/ping","localhost"]
  1. 构建 dockerfile
    docker build -t test-dockerfile .
    在这里插入图片描述
    运行自建的镜像:

docker run --name test-dockerfile -d 461151c7caf9

在这里插入图片描述
查看容器运行日志:

docker logs 617caecb3ecb

在这里插入图片描述
至此,测试镜像通过。

IDEA 快速使用dockerfile

  • 创建 springboot 项目,编写 dockerfile
    springboot项目
  • 编写 dockerfile
    创建dockerfile
FROM java:8

# 服务器只有dockerfile 和 jar 在一起
COPY *.jar /app.jar

# 匿名挂载,可用数组形式,也可以  VOLUME /logs
VOLUME ["/logs"]

CMD ["--server.port=8080"]

# 暴露端口
EXPOSE ["8080"]

ENTRYPOINT ["java","-jar","/app.jar"]
  • 打包、上传
    打包
  • 新建一个文件夹,把 jar 包和 Dockerfile 上传
    上传
  • 构建镜像: docker build -t boot-app
    构建镜像
  • 运行: docker run -t -d -P --name boot-app boot-app

运行容器命令:
docker run 容器id / 容器 name

运行
运行成功

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值