首页 > 其他分享 >Dockerfile使用

Dockerfile使用

时间:2023-11-28 18:46:04浏览次数:34  
标签:RUN tar redis apt && 使用 镜像 Dockerfile

什么是 Dockerfile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

命令

注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。

可以放在一起的命令尽量放在一起。

FROM

FROM nginx # FROM 基础镜像 本地没有从默认仓库拉取 定制的镜像都是基于 FROM 的镜像

RUN

#shell 格式
RUN python app.py # RUN 执行一条命令

# exec 格式:
# RUN ["可执行文件", "参数1", "参数2"]
RUN ["python", "app.py"]

命令简化

# 简化前
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz

# 简化后
RUN yum -y install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz

LABEL

添加镜像的元数据,使用键值对的形式。

ADD/COPY

COPY node_modules ./node_modules # 直接. 是将目录下所有文件复制 ADD 也是这样 

ADD node_modules.tar.gz . # 将文件、目录或远程URL复制到镜像中。 ADD 复制的时候会自动解压文件

复制目录时注意

后面直接 . 是将目录下所有文件复制 COPY ADD 都是是这样

CMD/ENTRYPOINT/SHELL

SHELL ["/bin/bash", "-c"]  # 覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令。

 
ENTRYPOINT   ["nginx", "-c"] # 定参 # 设置容器创建时的主要命令。(不可被覆盖)

CMD  ["/etc/nginx/nginx.conf"] # 变参 # 指定容器创建时的默认命令。(可以被覆盖)



WORKDIR/VOLUME/EXPOSE

WORKDIR # 设置后续指令的工作目录。
EXPOSE # 声明容器运行时监听的特定网络端口。
VOLUME # 为容器创建挂载点或声明卷。

WORKDIR 不存在的目录会被创建 会比 RUN cd 更好

docker build -t runoob/ubuntu:v1 . # 默认使用当前目录下的dockerfile 文件 
# -f 指定 dockerfile

python 项目构建

# cpu 版本不需要cuda 套件
FROM ubuntu 
LABEL version = "18.04"
LABEL description = "基础环境"

# 更新源
# ADD installation/sources.list /etc/apt/



# 工作主目录
WORKDIR /home/forecaest_new

# 0、初始化基础环境、更新apt基础工具
RUN apt-get update --fix-missing -o Acquire::http::No-Cache=True \
    && apt-get install -y vim apt-transport-https \
	&& apt-get -y -q --no-install-recommends  install apt-utils gcc curl bzip2 libgl1-mesa-glx libglib2.0-dev wget lsof libpython3-dev

# 设置显示中文字体
ENV LANG C.UTF-8

# 安装工具
COPY installation_tool .

# 1 安装 安装conda 基础环境
RUN bash Miniconda3-py37_4.8.3-Linux-x86_64.sh -b -p /root/anaconda3 \
    && bash -c "source /root/anaconda3/etc/profile.d/conda.sh" \
    && bash init_conda.sh \
    && apt-get install libx11-6\
    && ln /root/anaconda3/bin/pip /usr/local/bin/pip \
    && pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn \
    && rm init_conda.sh \
    && rm Miniconda3-py37_4.8.3-Linux-x86_64.sh \
    && rm requirements.txt 
    
ENV export LD_LIBRARY_PATH=~/anaconda3/lib

# 复制代码
COPY app_predict ./app_predict
COPY packages ./packages
COPY uni_utils ./uni_utils

# 更改目录
WORKDIR /home/forecaest_new/app_predict

# 编译 
RUN python compile

# 启动
CMD ["/root/anaconda3/bin/python","app_predict_server.py"] 

构建镜像

docker build -t nginx:v3 . # 最后的 . 代表本次执行的上下文路径 docker 会扫描上下文,有大文件会很慢

标签:RUN,tar,redis,apt,&&,使用,镜像,Dockerfile
From: https://www.cnblogs.com/renoyuan/p/17862684.html

相关文章

  • 时区和国际化问题 django admin(管理后台的简单使用)
    1时区和国际化问题```pythonsetting.py中1后台管理汉语问题 LANGUAGE_CODE='zh-hans'#管理后台看到的就是中文2时区问题(使用东八区) TIME_ZONE='Asia/Shanghai'USE_TZ=False``` 2djangoadmin(管理后台的简单使用)```python0管理后台是django提供的可以快速对......
  • VUE与WPF树形控件的区别与使用
    VUE:树形结构显示,主要在数据查询的时候把数据拼成树形结构的数据,注意:VUE中树形结构体必须要有children,此对象必须是list类型WPF:树形结构显示,是把所有的数据查询到,然后WPF中的控件通过ID和PID来自动把数据呈现成树形结构 ......
  • 【转载】php内置服务器的使用
    参考https://www.php.net/manual/zh/features.commandline.webserver.phphttps://www.bilibili.com/video/BV1J54y1q7y3https://blog.csdn.net/shenshulong/article/details/103959756注意这个内置的Web服务器主要用于本地开发使用,不可用于线上产品环境。环境软件/......
  • 软件测试/人工智能|使用 GraphWalker 实现自动化测试用例生成
    导言在软件开发中,测试是确保代码质量和稳定性的关键步骤之一。而自动生成测试用例可以大大提高测试效率和覆盖率。GraphWalker是一个基于模型的测试工具,能够帮助开发者通过定义和遍历图模型来自动生成高质量的测试用例。GraphWalker简介GraphWalker是一个开源的测试工具,它......
  • 记录后端不同请求方式的接口,使用vue3框架下的前端axio请求不同写法
    一.后端接口:@GetMapping("/index")publicResponseResultindex(){..} 前端接口:indexInfo().then(res=>{if(res.data.code==200){ElNotification({message:res.data.data.msg||"加载成功",ty......
  • C# 比使用app.config,用自定义的ConnectionString
    usingSystem.Data;usingSystem.Data.SqlClient;usingSystem.IO;usingSystem.Reflection;namespaceAssist{publicclassContextHelper{publicstaticstringConnectionString;publicstaticstringSerializePath=Path.GetDirector......
  • kubernetes集群使用容器镜像仓库Harbor
    1、容器镜像仓库Harbor部署在docker主机部署Harbor,安装过程比较简单在k8s集群中部署Harbor2、使用Harbor仓库2.1通过secret使用Harbor仓库新建私有仓库集权所有节点配置harbor仓库#cat/etc/docker/daemon.json{"exec-opts":["native.cgroupdriver=system......
  • 如何使用ffmpeg转换图片格式
    ffmpeg简介与图片格式介绍windows安装ffmpeg,从如下网站下载release版本https://www.gyan.dev/ffmpeg/builds/ffmpeg6.1版本仍然不支持heic的图片格式,未来可能会支持,具体见该issue:https://trac.ffmpeg.org/ticket/6521图片格式压缩率:jpeg<webp<heif<avif图片压缩率比......
  • 使用Python中的tarfile :解决Mac和Linux 打包冲突问题
    Python对tar包的操作目的:兼容linux和macOS系统上都能正常打包和解包起初:在macOS上使用命令tar打得包在linux上根本无法解开。原因:https://blog.csdn.net/qq_44214671/article/details/127804905解决办法:python是兼容MacOS和Linux,直接用Python的tarfile操作tar包。https://do......
  • lua self使用例子
    localfuncs={}functionfuncs:callMe()localtt=self.name--值为helloprint(tt)endf=funcs["callMe"]--调用方法1:f({name=“hello"})--调用方法2:localok,err=pcall(f,{name="hello"}) pcall为protected call的意思,......