使用Dockerfile生成docker自定义镜像

news2024/11/27 9:53:56

Dockerfile常用指令

• FROM 构建镜像基于哪个镜像
• MAINTAINER 镜像维护者姓名或邮箱地址
• RUN 构建镜像时运行的指令,执行一条RUN镜像就会叠加一层,因此RUN尽可能一条写完
• ADD 拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压
• COPY 拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能
• CMD 运行容器时执行的shell命令,CMD指令可以被run时的命令覆盖
• ENTRYPOINT 运行容器时执行的shell命令, ENTRYPOINT不会被覆盖
PS注意: 如 CMD ENTRYPOINT 都存在,则 CMD 为 ENTRYPOINT 参数
• EXPOSE 声明容器的服务端口(仅仅是声明)
• VOLUME 指定容器挂载点到宿主机自动生成的目录或其他容器
• USER 为RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户
• WORKDIR 切换工作目录(cd)
• ARG 构建时指定的一些参数,ARG定义的变量仅在Dockerfile中可用
• ENV 设置容器环境变量,ENV定义的变量不仅在Dockerfile中可用,而且在运行的容器中都可用
• HEALTHCHECH 健康检查

通过编写dockerfile实现定制镜像

首先创建一个空白目录

然后编写Dockerfile文件

[root@server159 python]# ls
app.py  Dockerfile
[root@server159 python]# cat Dockerfile
FROM centos:7
MAINTAINER "10086@qq.com"
USER root

RUN mkdir -p /app && yum install -y python3 python3-devel
RUN pip3 install flask -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN cp -r /usr/local/lib64/python3.6/site-packages/flask /app

COPY ./app.py /app/

WORKDIR /app
EXPOSE 8080

CMD ["python3","app.py"]

还有脚本文件,脚本文件要跟Dockerfile文件放在同一目录下才行

[root@server159 python]# cat app.py 
#coding=utf-8
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello docker,I am python flask."
if __name__ == "__main__":
    app.run(host='0.0.0.0',port=8080)


在这里插入图片描述

然后构建镜像

[root@server159 python]# docker build -t centos7-python:v1 .
[+] Building 53.7s (11/11) FINISHED                      docker:default
 => [internal] load build definition from Dockerfile               0.0s
 => => transferring dockerfile: 350B                               0.0s
 => [internal] load .dockerignore                                  0.0s
 => => transferring context: 2B                                    0.0s
 => [internal] load metadata for docker.io/library/centos:7        0.0s
 => CACHED [1/6] FROM docker.io/library/centos:7                   0.0s
 => [internal] load build context                                  0.0s
 => => transferring context: 235B                                  0.0s
 => [2/6] RUN mkdir -p /app && yum install -y python3 python3-de  36.4s
 => [3/6] RUN pip3 install flask -i https://pypi.tuna.tsinghua.e  15.7s 
 => [4/6] RUN cp -r /usr/local/lib64/python3.6/site-packages/flas  0.1s 
 => [5/6] COPY ./app.py /app/                                      0.0s 
 => [6/6] WORKDIR /app                                             0.0s 
 => exporting to image                                             1.3s 
 => => exporting layers                                            1.3s 
 => => writing image sha256:e6a497c56c1c697ddf24eef187cc0d625e0cf  0.0s 
 => => naming to docker.io/library/centos7-python:v1               0.0s

查看生成的镜像

[root@server159 python]# docker images
REPOSITORY       TAG       IMAGE ID       CREATED         SIZE
centos7-python   v1        e6a497c56c1c   2 minutes ago   526MB
php-fpm          v1        0474bd7488fa   23 hours ago    698MB
debian           latest    676aedd4776f   2 weeks ago     117MB
centos           7         eeb6ee3f44bd   2 years ago     204MB
nginx            1.18.0    c2c45d506085   2 years ago     133MB

用镜像构建容器,然后访问网页映射的80端口

[root@server159 python]# docker run --name pythontest -d -p 80:8080 centos7-python:v1 
c3ef2e932730eaf3fcfb268e6ca4627361af37041ae8d8760e65dedd86bc7f79
[root@server159 pythen]# curl 192.168.121.159
Hello docker,I am python flask.[root@server159 python]# 

可以看到是可以访问到的,去浏览器试试

在这里插入图片描述

可以看到没问题

dockerfile实现定制镜像的原理

Dockerfile构建镜像相当于shell脚本,将我们要执行的命令一次性完成

下面用单步操作来展现上面的过程

用基础镜像centos7创建容器并进入

[root@server159 python]# docker run -dt --name pytest -p80:8080  centos:7
4263466478e64e02ce0a19db4c6e4ad9f284785ff5a54b6fc19a930e2c0e7507
[root@server159 python]# docker exec -it pytest bash

创建目录工作目录

[root@4263466478e6 /]# mkdir /app

然后下载python环境

[root@4263466478e6 /]# yum install -y python3 python3-devel

然后下载flask模块

[root@4263466478e6 /]# pip3 install flask -i https://pypi.tuna.tsinghua.edu.cn/simple

然后将flask拷贝到/app工作目录下

[root@4263466478e6 /]# cp -r /usr/local/lib64/python3.6/site-packages/flask /app

然后将app.py文件从宿主机拷贝到容器中的工作目录

[root@server159 ~]# ls
anaconda-ks.cfg  default.conf  original-ks.cfg  Python-3.9.7.tgz
app.py           index.html    pythen           www.conf
[root@server159 ~]# cat app.py 
#coding=utf-8
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello docker,I am python flask."
if __name__ == "__main__":
    app.run(host='0.0.0.0',port=8080)
[root@server159 ~]# docker cp ./app.py pytest:/app
Successfully copied 2.05kB to pytest:/app

回到容器里查看工作目录

[root@4263466478e6 /]# ls /app
app.py  flask

然后运行python脚本 ,启动后我直接去浏览器访问的,所以下面有一条访问记录

[root@4263466478e6 app]# python3 ./app.py 
 * Serving Flask app 'app' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on all addresses.
   WARNING: This is a development server. Do not use it in a production deployment.
 * Running on http://172.17.0.2:8080/ (Press CTRL+C to quit)
192.168.121.3 - - [01/Nov/2023 12:30:28] "GET / HTTP/1.1" 200 -

在这里插入图片描述

Dockerfile定制容器不过是将我们执行的动作写到文件里

相当于shell脚本,容器的定制就是这样了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1160625.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从0开始搭建一个前端项目的架子

目录 1.概述 2.项目搭建 3.elementUI 4.CSS预处理器 5.重置CSS 6.图标库 7.axios和路由 7.1.axios 7.2.路由 7.3.路由懒加载和异步组件 1.概述 在古早时代,只需要会html、css、js、ajax就能开发一个前端项目,这些技术的上手成本也不高&#x…

RK3588平台开发系列讲解(项目篇)基于yolov5的物体识别

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、实验环境二、源码&工具三、环境搭建3.1、安装 Miniconda3.2、创建 RKNN 虚拟环境3.3、安装 RKNN-ToolkitLite 2 软件包3.4、安装 opencv四、实验沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将…

Opencv学习笔记(最近更新2023.11.1)

文章目录 棋盘格角点检测findChessboardCorners()亚像素角点检测cornerSubPix()棋盘格角点的绘制drawChessboardCorners()计算外参solvePnPRansac()旋转向量转旋转矩阵Rodrigues()鱼眼畸变矫正initUndistortRectifyMap()检测轮廓findContours()轮廓显示drawContours…

Chatgpt批量改写文章网页版可多开软件-自动登录换号生成word或者TXT

Chatgpt批量改写文章网页版可多开软件介绍: 1、改写后生成docx格式文档和生成txt文档二选一。 2、支持原来docx文档里带图片的改写,改写伪原创后的docx里也带图片。 3、软件可以设置是否开启标题改写,可以自定义标题改写指令。 4、可以设置…

野火霸天虎 STM32F407 学习笔记_1 stm32介绍;调试方法介绍

STM32入门——基于野火 F407 霸天虎课程学习 前言 博主开始探索嵌入式以来,其实很早就开始玩 stm32 了。但是学了一段时间之后总是感觉还是很没有头绪,不知道在学什么。前前后后分别尝试了江协科技、正点原子、野火霸天虎三次 stm32 的课程学习。江协科…

Ps:魔棒工具

魔棒工具 Magic Wand Tool可以基于颜色和色调快速选择图像上相似的像素区域。 快捷键:W ◆ ◆ ◆ 常用操作方法与技巧 1、在单击取样之前查看和设置工具选项栏上的选项。 选项:取样大小 若要选取纯色区域,可使用“取样点”。而对于分辨率较…

ChatGPT火了:还有哪些可以做的变现项目

一、写在前面 柴特鸡皮踢 大家都不陌生了 说实话,Chatgpt火了后,正经的项目没出来多少,出了一大批割九菜的。 为什么说是割韭菜,因为一群完全不懂技术,只会讲讲成功学、写作学、财经的大V也敢开社群、卖课。很多人听…

设计模式之两阶段终止模式

文章目录 1. 简介 2. 常见思路3. 代码实战 1. 简介 两阶段终止模式(Two-Phase Termination Pattern)是一种软件设计模式,用于管理线程或进程的生命周期。它包括两个阶段:第一阶段是准备阶段,该阶段用于准备线程或进程…

Hadoop PseudoDistributed Mode 伪分布式

Hadoop PseudoDistributed Mode 伪分布式加粗样式 hadoop101hadoop102hadoop103192.168.171.101192.168.171.102192.168.171.103namenodesecondary namenoderecource managerdatanodedatanodedatanodenodemanagernodemanagernodemanagerjob historyjob logjob logjob log 1. …

WINCC7.5-根据时间跨度选择趋势

yyyy-MM-dd hh:mm:ss “yyyy”:表示四位数的年份,例如:2022。 “MM”:表示两位数的月份,从01到12。 “dd”:表示两位数的日期,从01到31。 “hh”:表示12小时制的小时数,从…

vue实现拖拽拉伸容器宽度

效果 实现逻辑 监听鼠标按下事件,设置滑条背景色,left距离,记录初始位置,捕获鼠标监听鼠标拖动事件,获取移动的距离,设置左侧区域与右侧区域的宽度,滑条的left值监听鼠标松开事件&#xff0c…

【算能】cmake版本不对应

fatal error: boost/numeric/ublas/matrix.hpp: No such file or directory#include <boost/numeric/ublas/matrix.hpp> 解决方法&#xff1a; 这是由于cmake版本不对应&#xff0c;应该提高版本&#xff0c;是的C的编译成功

Redis系统学习(高级篇)-Redis主从集群

目录 一、搭建主从集群 二、主从数据同步的原理 三、repl_backlog原理 四、主从同步优化 五、小结 一、搭建主从集群 为了提高高并发&#xff0c;主从集群是很有必要的&#xff0c;因为这样可以实现读写分离&#xff0c;主节点负责写&#xff0c;从节点就只负责读&#xf…

ARM 版 OpenEuler 22.03 部署 KubeSphere v3.4.0 不完全指南续篇

作者&#xff1a;运维有术 前言 知识点 定级&#xff1a;入门级KubeKey 安装部署 ARM 版 KubeSphere 和 KubernetesARM 版 KubeSphere 和 Kubernetes 常见问题 实战服务器配置 (个人云上测试服务器) 主机名IPCPU内存系统盘数据盘用途ks-master-1172.16.33.1661650200KubeSp…

攻防世界-web-bug

1. 问题描述 没有额外的描述&#xff0c;仅仅是这样的一个登录界面 但是&#xff0c;我们注意到有注册&#xff08;Register&#xff09;和找回密码&#xff08;Findpwd&#xff09;这俩按钮 注册界面如下&#xff1a;需要输入用户名&#xff0c;密码&#xff0c;生日及地址 …

《 博弈论教程(罗云峰版) 》——习题二答案

前言 博弈论这门课程&#xff0c;我们主要参考的教材是《博弈论教程&#xff08;罗云峰版&#xff09;》&#xff0c;但是罗老师的课后习题并没有给出完整的答案&#xff0c;秉着学习的态度&#xff0c;本人结合教材和 PPT 在这里给出课后习题的答案。 由于我们只学了完全信息…

2.Spark的工作与架构原理

概述 目标&#xff1a; spark的工作原理spark数据处理通用流程rdd 什么是rddrdd 的特点 spark架构 spark架构相关进程spark架构原理 spark的工作原理 spark 的工作原理&#xff0c;如下图 图中中间部分是spark集群&#xff0c;也可以是基于 yarn 的&#xff0c;图上可以…

修改docker容器commit定制镜像

通过修改容器&#xff0c;然后commit提交为镜像 定制特定的镜像:在实际工作&#xff0c;公网的镜像往往不符合我们预期,因此我们需要自己定制镜像以满足业务需求。 例如:我们期望定制一个符号我们自己的Nginx镜像,并期望镜像交付就包含项目代码与我们期望的配置, 后期只需要轻…

通过Google搜索广告传送的携带木马的PyCharm软件版本

导语 最近&#xff0c;一起新的恶意广告活动被发现&#xff0c;利用被入侵的网站通过Google搜索结果推广虚假版本的PyCharm软件。这个活动利用了动态搜索广告&#xff0c;将广告链接指向被黑客篡改的网页&#xff0c;用户点击链接后下载的并不是PyCharm软件&#xff0c;而是多种…

python hashlib模块及实例

hashlib 模块密码加密密码撞库密码加盐 一&#xff0c;hashlib模块 hashlib模块是用来为字符串进行加密的模块&#xff0c;通过该作用就可以为用户的密码进行加密。 通过模块中的hash算法可以为任意长度的字符串加密成长度相同的一串hash值。该hash算法得到的hash值有一下几个…