当前位置: 首页 > news >正文

Docker 镜像构建可以分享的快乐

通过上一篇 Dockerfile 语法与指令的学习,本节就开始使用Dockerfile 来制作自己的 Docker 镜像啦。

Docker 镜像构建

新建 app.py 文件

from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return 'Hello World! Hogwarts.'

本代码主要功能是当我们访问页面的时候显示一段文字“Hello World! Hogwarts.”。

新建 Dockerfile-build 文件

FROM python:3.7-alpine LABEL maintainer="hogwarts" # 工作路径设定为 /code WORKDIR /code # 复制 app.py 到容器内 /code 目录 COPY app.py /code # 创建环境变量给 Flask 使用 ENV FLASK_APP app.py ENV FLASK_RUN_HOST 0.0.0.0 # 安装 gcc 工具、python 的依赖 RUN apk add --no-cache gcc musl-dev linux-headers && pip install flask # 映射端口 EXPOSE 5000 STOPSIGNAL SIGTERM # 为容器设置默认启动命令 CMD ["flask", "run"]

使用 build 命令构建镜像,

docker build -f Dockerfile-build -t app:v1.0 .

  • 默认 Dockerfile 要在当前目录下,才可以直接运行 docker build。

    如果 Dockerfile 在别的路径下面则需要添加-f参数指定Dockerfile的路径。

  • -t app:v1.0:指定构建的镜像名字

  • .:构建镜像时的上下文目录。固定写法,构建镜像时要先切换到放有 Dockerfile 的目录下。

68aeb378efbb76c175baa36277fec028.jpeg

  • 镜像构建完成后,就可以使用新镜像提供服务啦。可以使用 docker images | grep app 来查看生成的镜像。

ac715790aef25c4da2f375cea529a5c0.jpeg

  • 我们可以通过 docker run 命令启动我们自己构建的镜像噢。最后通过浏览器访问 http://你的IP:5000 来访问启动的服务。

docker run --name app -p 5000:5000 app:v1.0f6b12009f528932b9b62c3f7400ac118.jpeg

最后,我们自己构建的镜像可以通过 docker save 命令导出给别的小伙伴使用,还可以用 docker push 命令推送到 registry 服务器上给别的小伙伴使用呢,是不是很便捷呀!

免费领取:性能测试+接口测试+自动化测试+测试开发+测试用例+简历模板+测试文档


相关文章:

  • ADC_内部电路Rsh和Csh和转换速率Tconv以及频率fs
  • Hive的基本操作
  • vue、vscode格式规范prettier、eslint、git commit
  • Revit中门窗如何使用遮罩区域?及CAD生成门窗?
  • windows下使用docker
  • c# iot .net 6 树莓派 读取光敏传感器四针+模拟转数字模块 代码实例
  • Hexagon_V65_Programmers_Reference_Manual(37)
  • JSD-2204-(业务逻辑开发)-续开发购物车功能-新增订单功能-Leaf-Day10
  • 计算机中常见英文术语对照表
  • Django--request 对象
  • 清华推出“脑机绘梦”,把脑电信号变成绘画元素!雨果奖得主用了也说好
  • 嫦娥奔月html+css
  • 金仓数据库 KingbaseES 插件参考手册 S(5)
  • 深度神经网络和反向传播,双向传播的神经网络
  • PHP 特性之 trait
  • hexo+github搭建个人博客
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • [译] React v16.8: 含有Hooks的版本
  • [译] 怎样写一个基础的编译器
  • Angular2开发踩坑系列-生产环境编译
  • C++类中的特殊成员函数
  • CSS中外联样式表代表的含义
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • JavaScript 奇技淫巧
  • javascript 总结(常用工具类的封装)
  • JavaWeb(学习笔记二)
  • JSDuck 与 AngularJS 融合技巧
  • php面试题 汇集2
  • vue的全局变量和全局拦截请求器
  • 我与Jetbrains的这些年
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • gunicorn工作原理
  • 从如何停掉 Promise 链说起
  • 积累各种好的链接
  • ​卜东波研究员:高观点下的少儿计算思维
  • #laravel 通过手动安装依赖PHPExcel#
  • #stm32整理(一)flash读写
  • (1)Nginx简介和安装教程
  • (12)Hive调优——count distinct去重优化
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (十三)Maven插件解析运行机制
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转)iOS字体
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .Net 8.0 新的变化
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET Standard 的管理策略
  • .Net 代码性能 - (1)