Dockerfile的学习

使用Dockerfile构建镜像
就是把之前编译好的jar文件放到 Dockerfile文件的目录下 在此目录下运行

docker build -t [REPOSITORY]:[TAG] .

[REPOSITORY]:[TAG] 自己填 . 不能少
参照: https://www.runoob.com/docker/docker-dockerfile.html

但是Dockerfile 怎么写? (指令要一个一个看)
参考: http://www.dockerinfo.net/dockerfile%e4%bb%8b%e7%bb%8d
https://www.runoob.com/docker/docker-dockerfile.html
https://blog.csdn.net/qq_33256688/article/details/80319673
https://www.cnblogs.com/ccbloom/p/11174186.html
https://www.jianshu.com/p/f0a0f6a43907


# Dockerfile 支持以# 开头的注释
# FROM 为基础镜像  可以是 REPOSITORY:TAG  也可以是 镜像id
# anapsix/alpine-java:latest
FROM anapsix/alpine-java:latest

# 作者信息   使用 docker inspect  可以看到 在Author 中
# LABEL  和  MAINTAINER 一样的
MAINTAINER Fuly fuly1024@163.com

#RUN  在容器中执行 shell 指令
#    run yum install wget \
#    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
#    && tar -xvf redis.tar.gz
#   上面的指令的意思是 在镜像中  安装 wget 然后下载  然后解压
#  每一个 RUN 指令都会新创建一层指令  所以多条指令使用  &&  连接 可以减少镜像大小
RUN  echo hello world >> hello.txt
# 设置时间
#    && echo "Asia/Shanghai" > /etc/timezone
# 跟RUN类似 通常RUN用来安装环境构建镜像  CMD 用来设置默认执行指令
# 但CMD设置的命令能够被docker run命令后面的命令行参数替换
# 每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。
CMD  echo hello cmd >> hello.cmd


# EXPOSE 容器暴露的端口号,在启动容器时需要通过 -P(大写) 会随机指定一个端口跟这个绑定
# 基本没啥用 可以不写
EXPOSE 801


#  ENV 为镜像定义所需的环境变量,并可被ENV指令后面的其它指令所调用。调用格式为$variable_name或者${variable_name}
# 并在容器运行时保持 就是docker-compose environment 中指定的数据
# 使用docker run启动容器的时候加上 -e 的参数为variable_name赋值,可以覆盖Dockerfile中ENV指令指定的此variable_name的值
# ENV

# COPY 复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
# COPY [--chown=<user>:<group>] <本机源路径1>...  <容器目标路径>
# [--chown=<user>:<group>]:可选参数,用户改变复制到容器内文件的拥有者和属组。
#  <容器目标路径> 不用提前创建 会自动创建的
# 可以使用通配符
COPY  *.jar app.jar

# ADD 和 COPY功能类似 部分压缩格式会自动解压 建议使用 COPY
# ADD *.jar app.jar


# VOLUME  创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等
# 使用 -v 参数修改挂载点 避免重要的数据,因容器重启而丢失.
# 使用docker inspect 可以查看容器或者镜像的挂载点
#  VOLUME 的格式 VOLUME ["/data1","/data2"]
VOLUME /tmp

# 用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)
# 默认是root用户。在docker run中可以通过-u选项来覆盖USER指令的设置。
# 例如: docker run -it -u mysql newmysqldb /bin/bash
USER root

# 用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)
# 可以用docker run -w  覆盖掉
WORKDIR /


# RUN,CMD,ENTRYPOINT命令区别
# RUN命令执行命令并创建新的镜像层,通常用于安装软件包
# CMD命令设置容器启动后默认执行的命令及其参数,但CMD设置的命令能够被docker run命令后面的命令行参数替换
# ENTRYPOINT配置容器启动时的执行命令(不会被忽略,一定会被执行,即使运行 docker run时指定了其他命令)
ENTRYPOINT ["java","-jar","/app.jar"]

# 配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。
# ONBUILD

# ARG  与 ENV 作用一至。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,容器内无效
# ARG




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值