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




当在Docker中部署机器学习应用程序时,可以使用Dockerfile来定义容器的构建过程。下面是一个简单的Dockerfile示例,用于创建一个运行机器学习应用程序的容器: ```dockerfile # 基础镜像 FROM python:3.8 # 设置工作目录 WORKDIR /app # 复制应用程序代码到容器中 COPY . /app # 安装依赖项 RUN pip install -r requirements.txt # 设置环境变量 ENV PYTHONPATH "${PYTHONPATH}:/app" # 容器启动命令 CMD [ "python", "app.py" ] ``` 在这个示例中,首先使用了一个基于Python 3.8的官方镜像作为基础镜像。然后设置了工作目录为`/app`,并将应用程序代码复制到容器中的`/app`目录。 接下来,使用`pip`命令安装了定义在`requirements.txt`文件中的依赖项。你需要在与Dockerfile相同的目录下创建一个名为`requirements.txt`的文件,并列出所有需要的Python库及其版本。 然后,通过设置环境变量`PYTHONPATH`来确保应用程序能正确导入所需的模块。 最后,使用`CMD`命令指定容器启动时要执行的命令,这里是运行名为`app.py`的Python应用程序。 通过运行以下命令构建镜像: ``` docker build -t your_image_name . ``` 然后,你可以运行容器: ``` docker run -d your_image_name ``` 请注意,这只是一个简单的示例,实际的Dockerfile可能需要根据你的具体情况进行修改。还可以根据需要添加其他指令,例如暴露端口、挂载数据卷等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值