Docker入门使用

用一个hello world的小例子来入门docker

在 Docker 容器中部署 Python + Flask 的简单 Hello World 项目,需要遵循以下流程:

  1. 编写应用程序

首先,在本地计算机上编写一个简单的 Python+Flask 应用程序,例如:

# hello.pyfrom flask import Flask
app = Flask(__name__)@app.route('/')
def hello():return "Hello, World!"if __name__ == '__main__':app.run(debug=True, host='0.0.0.0')

该应用程序创建了一个简单的 Flask 应用程序,监听本地的 5000 端口,当访问根路径(/)时,返回 “Hello, World!” 信息。

  1. 创建 Dockerfile

接下来,创建一个 Dockerfile ,指定如何在 Docker 镜像中构建和运行 Python + Flask 应用程序。Dockerfile主要作用就是来生成镜像images。例如:

# Dockerfile# 这里选一个在docker公共库中有的python版本即可
FROM python:3.10.12-slim-bookworm# requirements.txt里面一般存有python项目中需要的包
COPY requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir -r /app/requirements.txt# 工作目录/app。在镜像创建一个容器后,会在其linux系统下多一个目录,/app。里面存着我们的项目
COPY . /appWORKDIR /app# 指定端口
EXPOSE 5000# 在启动docker镜像之后,它会自动运行python hello.py这条命令
CMD ["python", "hello.py"]

该 Dockerfile 的实现过程是这样的:

  • 基于 Python 3.10 版本的 slim 基础镜像来构建镜像。
  • 拷贝 requirements.txt 文件到容器中,使用 pip 命令来安装依赖到镜像中。
  • 将当前文件夹中的所有文件代码放到容器中名为 /app 的目录中。
  • 使用 WORKDIR 指令设置工作目录为 /app
  • 定义暴露的端口为 5000。
  • 使用 CMD 指令来运行 Python 应用程序。

  1. 构建镜像

使用以下命令在本地计算机上构建 Docker 镜像:

$ docker build -t myflaskapp .

该命令将基于 Dockerfile 构建镜像,并将其标记为名称为 myflaskapp 的镜像。
构建好的镜像存在本地docker仓库中,可以用命令 docker images来查看。

  1. 运行容器

最后,在 Docker 容器中运行 Python+Flask 应用程序,可以使用以下命令:

$ docker run -p 5000:5000 myflaskapp

该命令将基于 myflaskapp 镜像启动 Docker 容器,并将 5000 端口映射到本地计算机的 5000 端口上。

在本地计算机上打开浏览器,并访问 http://localhost:5000 ,应该可以看到 “Hello, World!” 信息。


【总结】:
Docker因为其隔绝环境的特性,可以非常方便部署项目。

举个例子,编写好的项目proj要编写dockerfile来定义如何打包镜像,最后运行docker build命令来完成打包,生成proj对应的镜像image。然后可以通过docker run 来运行打包好的镜像image,使其独立成一个容器container。
因此,只要使用一样的镜像image,最后任何人都可以成功在docker上部署项目来复现代码效果,不用因为环境依赖冲突而烦恼。


【容器共享linux内核】
另外,在docker容器中运行

uname -a

可以查到其版本为
Linux d848bd04657b 5.15.49-linuxkit-pr #1 SMP Thu May 25 07:17:40 UTC 2023 x86_64 GNU/Linux。
这是一个Linux内核版本,不同于Ubuntu、Debian 等发行版。
Ubuntu、Debian 等发行版上面是基于内核安装了许多其他的工具和应用程序,以便用户能够方便地使用它们。
这也可以看出,多个docker容器是共享一个linux内核的。这种方式可以大大减少容器所需的硬件资源,同时也使得容器更加轻量级、高效和便携。

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

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

相关文章

基于ACF,AMDF算法的语音编码matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .......................................................................... plotFlag …

函数递归专题(案例超详解一篇讲通透)

函数递归 前言1.递归案例:案例一:取球问题案例二:求斐波那契额数列案例三:函数实现n的k次方案例四:输入一个非负整数,返回组成它的数字之和案例五:元素逆置案例六:实现strlen案例七:…

服务器遭受攻击之后的常见思路

哈喽大家好,我是咸鱼 不知道大家有没有看过这么一部电影: 这部电影讲述了男主是一个电脑极客,在计算机方面有着不可思议的天赋,男主所在的黑客组织凭借着超高的黑客技术去入侵各种国家机构的系统,并引起了德国秘密警察…

Mac如何打开隐藏文件中Redis的配置文件redis.conf

Redis下载(通过⬇️博客下载的Redis默认路径为:/usr/local/etc) Redis下载 1.打开终端进入/usr文件夹 cd /usr 2.打开/local/文件夹 open local 3.找到redis.conf并打开,即可修改配置信息

讯飞星火认知大模型全新升级,全新版本、多模交互—测评结果超预期

写在前面 版本新功能 1 体验介绍 登录注册 申请体验 2 具体使用 2.1 多模态能力 2.1.1 多模理解 2.1.2 视觉问答 2.1.3 多模生成 2.2 代码能力 2.2.1 代码生成 2.2.2 代码解释 2.2.3 代码纠错 2.2.4 单元测试 2.3 插件功能 2.3.1 PPT生成 2.3.2 简历生成 2.3.4 文档问答 3 其他…

算法练习(6):牛客在线编程06 递归/回溯

package jz.bm;import java.io.PushbackInputStream; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays;public class bm6 {/*** BM55 没有重复项数字的全排列*/ArrayList<ArrayList<Integer>> res new ArrayList<>()…

centos 7 安装docker

系统配置&#xff1a; CentOS关闭selinux sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config关闭防火墙(可选)或者放行相应端口 systemctl stop firewalld.service && systemctl disable firewalld.service配置内核IP 转发 net.ipv4.ip_forward1 dock…

Android学习之路(3) 布局

线性布局LinearLayout 前几个小节的例程中&#xff0c;XML文件用到了LinearLayout布局&#xff0c;它的学名为线性布局。顾名思义&#xff0c;线性布局 像是用一根线把它的内部视图串起来&#xff0c;故而内部视图之间的排列顺序是固定的&#xff0c;要么从左到右排列&#xf…

Android之版本号、版本别名、API等级对应关系(全)(一百六十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

HTML详解连载(4)

HTML详解连载&#xff08;4&#xff09; 专栏链接 [link](http://t.csdn.cn/xF0H3)下面进行专栏介绍 开始喽CSS定义书写位置示例注意 CSS引入方式内部样式表&#xff1a;学习使用 外部演示表&#xff1a;开发使用代码示例行内样式代码示例 选择器作用基础选择器标签选择器举例特…

RISC-V公测平台发布 · 7-zip 测试

简介 7-Zip 是一个开源的压缩和解压缩工具&#xff0c;具有高压缩比和快速解压缩的特点。除了普通的文件压缩和解压缩功能之外&#xff0c;7-Zip 还提供了基准测试功能&#xff0c;通过压缩和解压缩大型文件来评估系统的处理能力和性能。 7-Zip 提供了一种在不同压缩级别和多…

BUUCTF [MRCTF2020]Ezpop解题思路

题目代码 Welcome to index.php <?php //flag is in flag.php //WTF IS THIS? //Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95 //And Crack It! class Modifier {protected $var;publi…

运维监控学习笔记7

Zabbix的安装&#xff1a; 1、基础环境准备&#xff1a; 安装zabbix的yum源&#xff0c;阿里的yum源提供了zabbix3.0。 rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm 这个文件就是生成了一个zabbix.repo 2、安…

流程挖掘in汽车丨宝马的流程效能提升实例

汽车行业在未来10年里&#xff0c;可能会面临比过去50年更多的变化。电动化、智能化、共享化和自动驾驶等方面的趋势可能给企业流程带来以下挑战&#xff1a; 供应链管理-电动化和智能化的发展可能导致供应链中的零部件和系统结构发生变化&#xff0c;企业需要重新评估和优化供…

zookeeperAPI操作与写数据原理

要执行API操作需要在idea中创建maven项目 &#xff08;改成自己的阿里仓库&#xff09;导入特定依赖 添加日志文件 上边操作做成后就可以进行一些API的实现了 目录 导入maven依赖&#xff1a; 创建日志文件&#xff1a; 创建API客户端&#xff1a; &#xff08;1&#xff09…

Springboot 实践(5)springboot添加资源访问目录及目录测试

前文讲解了swagger测试服务控制器&#xff0c;实现了数据库数据访问&#xff0c;这些功能都是运行在后台服务器上&#xff0c;实际用户并不能直接调用接口获取数据&#xff0c;即使用户能够利用接口获取到数据&#xff0c;数据也是结构化数据&#xff0c;不能争取转化成用户使用…

基于OFDM+64QAM系统的载波同步matlab仿真,输出误码率,星座图,鉴相器,锁相环频率响应以及NCO等

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 2.1 OFDM原理 2.2 64QAM调制 2.3 载波同步 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ............................................…

【从零学习python 】31.深入理解Python中的高阶函数和闭包

文章目录 高阶函数定义一个变量指向函数高阶函数函数做为另一个函数的参数函数作为另一个函数的返回值 闭包函数嵌套什么是闭包修改外部变量的值原因分析解决方案 进阶案例 高阶函数 在Python中&#xff0c;函数其实也是一种数据类型。 def test():return hello worldprint(t…

NestJs 中使用 mongoose

在 NestJS 中链接 MongoDB 有两种方法。一种方法就是使用TypeORM来进行连接&#xff0c;另外一种方法就是使用Mongoose。 此笔记主要是记录使用Mongoose的。所以我们先安装所需的依赖&#xff1a; npm i nestjs/mongoose mongoose安装完成后&#xff0c;需要在AppModule中引入…

SpringBoot后端服务开启Https协议提供访问(使用阿里云资源)

目录 概述 申请/下载证书 部署证书 本地测试访问 服务器部署访问 最后/扩展 总结 概述 本篇博客说明如何将SpringBoot项目开启Https协议提供访问。 博文以步骤【申请/下载证书】&#xff0c;【部署证书】&#xff0c;【本地测试访问】&#xff0c;【服务器部署访问】 &a…