服务器部署docker

服务器部署docker

docker简介##

  • 可以把docker是一个容器,可以让开发者将自己的项目部署到这个容器中,最常用的场景是将自己的后端项目部署到服务器的时候会将其打入docker镜像中,可以理解为一个开销更小的虚拟机。

docker好处##

  • 可以轻易地让几十个服务在docker中跑起来,没有谁敢说能在自己的电脑上跑几十个虚拟机吧,
  • docker可以让开发者更加贴近生产环境,即便于测试,而且同一个镜像可以利用在正式和测试环境节约资源
  • docker可以将每个应用隔离起来,可以运行多个业务。
  • docker的安全性极具保障。

docker在阿里云部署##

言归正传,这个博客本身就是用来将docker部署在阿里云的服务器上。
(1)拥有一台阿里云学生机(穷)
(2)这边推荐系统是CentOS 7.3
(3)首先登陆root账号,这个正常人应该都会(sudo su root)
(4)接下来是输入命令 yum install docker
(5)你可以尝试docker -v来判断你是否下完 docker基本命令
(6)因为我是一个后端人员,所以我偏向于用IDEA来远程docker,这边就需要涉及到开端口的问题了,docker在阿里云这边得默认端口是2375,这是个大坑,如果没踩过,这辈子都连不上,这边推荐一个博客,Linux的方面就不再赘述。
(7)因为阿里云方面是默认防火墙不打开2375,所以你在开端口同时,需要把防火墙关掉,因为学生机,也不是很怕被爆破,所以我就默认全开了。

(8)接下来是IDEA的部分了,一般的IDEA都会集成docker,首先是配置docker

接下来尝试连接是否成功应该能够看到以下画面

这样初步就完成了docker的部署。

当然要把自己的项目部署上去还是要一个dockerfile脚本,和部分配置,由于我忙着写lajiruangong只能以后再分享了##

  • 这是我个人的兴趣做出的分享,说错得地方请私聊我,以上关于docker的见解也是我自己的理解说错请指正。
  • 预告下次分享应该是docker部署mysql。(部署项目还等下下次吧)

 

文章会首先介绍Docker的概念,Docker的基本语法和用法,以及和Docker相关的几个工具的介绍。

Docker是什么
  容器与Docker
  Docker是一种常用的容器化技术。这里的容器化和虚拟化是对应的概念,即Docker和VirtualBox等等虚拟机的效果有类似之处,但容器是更轻量化的一套隔离环境,不会额外虚拟硬件,很多资源和进程都是由宿主机直接执行,因此省了很多资源消耗,速度要比虚拟机快很多,特别适合机器学习等AI之类的计算密集型的程序隔离需求。

  Docker的容器概念与Spring Boot的容器概念完全不同,后者是指Java代码的一种组织形式。这两种不同容器都与微服务有关。

为什么学Docker
  首先给大家举个很常见的情景。某公司新人小王去办公室报道,公司老鸟老李吩咐小王先去把工作用到的开发环境部署好再叫他。但是小王是个萌新程序员,下载这些开发库的地址都不知道。冗长的环境安装手册看的小王头昏脑涨,更不用说里面还有些错误和没写清楚的细节。这个场景是不是很多公司都经常在上演?其实,我在很久之前就不停的想,都程序员了为什么还要看技术手册自己安装,难道就没有一个可靠的技术帮我一键部署好吗 ?

 

答案是,当然有!你差的就是Docker!有了他,小王只需要下载好前辈写好的Dockerfile,只要网络OK,就可以一键运行演示程序。有没有很简单?下面我就来拿一个Github项目来告诉你怎么样做到。

Docker部署实例
  下面先来看如何部署一个最简单的图片分类服务的Demo程序,要求图片分类模型用深度学习框架Keras来实现,并通过flask发布模型的预测功能。下面我们就来看在Docker下的一键部署的过程。

 

首先,我们需要从Github上clone一份代码,进入这个文件夹。

  

git clone https://github.com/mtobeiyf/keras-flask-deploy-webapp.git
cd keras-flask-deploy-webapp

在进入到这个文件夹后,我们不妨看一下都有什么文件:

  


经过之前的学习,我们可以了解requirements.txt中管理了项目依赖。其他的文件中,Dockerfile是本次文章最核心的一个文件,有了他Docker才能在本地进行镜像的构建。这里我们可以把Dockerfile中的RUN pip install一行替换为RUN pip install -r /requirements.txt -i https://mirrors.aliyun.com/pypi/simple/,通过国内镜像来加速安装过程。我们可以输入下面的指令,自己构建一个测试镜像:

  docker build -t keras_flask_test .


  docker build就是Docker容器的镜像构建命令。这条命令执行后,会需要等待一段时间(主要是下载和安装,时间取决于机器配置和网络环境情况)。如下图所示,在这个项目的dockerfile里定义了7步构建。我这里因为提前构建了一次,这次构建会直接从缓存中读取,所以省略了耗时的部分。

   

 

 

 

只要看到上图最后的Successfully built XXX和Successfully tagged XXX就说明已经构建成功。docker build命令的作用是让Docker根据当前文件夹的Dockerfile内容,自动去构建名叫keras_flask_test的镜像。我们可以来确认下是否有这个镜像:

docker images |grep -i keras 
keras_flask_test latest af52f1dd1fbb 1 days ago 917MB

docker images是显示出当前系统中存在的所有镜像,后续加grep来搜索指定关键词的镜像。这里因为正好之前构建了下,所以是一天前的。读者朋友如果刚刚构建好,镜像的创建时间应该是最近。有了镜像,我们就可以实际运行这个模型服务了:

docker run -it --rm -p 5000:5000 keras_flask_test

这里,docker run就是Docker从镜像产生一个容器了。因为Keras自动调用了tensorflow,运行后的命令会显示tensorflow的信息。同时,Keras也会自动下载一个mobilenetv2的轻量模型。等到一切就绪后,会提示Model loaded. Check http://127.0.0.1:5000/的信息。到这里,模型部署就已经完成了,是不是很6的感觉。我们的模型服务地址就是本机,端口号是5000

Docker镜像与Docker容器的关系如同程序与进程一样,镜像是静态的基础,而容器是动态的实例。

这时候在浏览器中,打开http://127.0.0.1:5000应该能看到下图的界面了。我们可以往中间的地方上传一张图片,模型会返回当前图片的类别。大家可以玩玩,不过不要太为难这个小模型了。

 

 

 

 

Docker常用命令
 上面的例子很简单,我们回头总结和扩展相关的知识。先总结下Docker容器化的普遍的流程。

Docker化程序的一般流程
  对于使用者,在得到Docker化程序的代码后,首先,通过docker build找到Dockerfile构建镜像。然后,docker run从镜像产生一个容器的实例。

 

  而对于开发者,一般在AI模型的Docker化之前,先由开发者在自己的非容器环境中开发调试好后才开始。然后开发者把自己环境的安装配置过程,完整的移植到Dockerfile中。一般来说,Dockerfile中的命令要能复现自己的整个配置过程,才算真正完整的Docker化程序开发。开发者一般需要自己重复使用者的步骤,以确保整个过程是真正能在新环境中重现。

 

  简单来说,顺序是:编写Dockerfile→build→run三部曲。下面介绍这个流程相关的命令。由于Dockerfile的内容相对较多,所以暂时放在后面来说。我们先从build开始。

构建镜像
  构建Docker镜像的命令是docker build,这条命令的基础是Dockerfile文件。命令的形式为:

  docker build [OPTIONS] PATH | URL | -


  其中,具体的选项有很多,建议参考帮助来学习(docker build --help)。我们着重介绍一些最常见的:

作用参数备注
名称标记-t格式为-t xxx/yyy:zzzxxxyyyzzz分别是用户名,镜像名和标签(版本
Dockerfile位置-f如果Dockerfile不在当前目录,或者需要构建的源文件文件名不是Dockerfile,则需要指定目标文件。
环境变量--build-arg构建时需要的环境变量。例如设置代理解决构建时的网络问题:--build-arg http_proxy=http://xxx:port

 

  一个简单的命令实例是:

docker build -t test .

这条命令就是根据当前目录的Dockerfile内容构建名为test的镜像,命令中最后的.表示构建的目录路径。

运行容器
  运行Docker容器的命令是docker run,这条命令的基础是引用的镜像必须已经构建好。Docker也为运行命令准备了非常多的选项,具体可以参考帮助(docker run --help),这里先列出一部分比较常用的选项:

   相关参数可以自行百度

  镜像构建可以通过上一步的docker build,自己来完成本地的构建。大多情况下,也可以直接使用别人构建好并上传到Dockerhub等Docker镜像托管网站的镜像。例如下面一条命令:

docker run -d -p 8080:80 --rm --name mynginx nginx

  这条命令是后台运行一个名为mynginx的nginx服务,把容器中的80端口映射为主机的8080,容器在停止时会自动删除。假设当前系统没有运行过这条命令,Docker会显示出以下信息:

   

第一条信息表示Docker没有找到本地的nginx;latest镜像;第二条信息显示从library/nginx上拉取最新的镜像。后面都是镜像拉取的分层进度,最后一行表示容器运行成功后返回的容器ID。

从这里,我们可以发现docker run的逻辑先搜索本地是否有构建过这个镜像,找不到时会从远端服务器中的仓库拉取最新镜像回来。这个过程非常类似Github上拉取代码,也可以看作一种分布式。

编写Dockerfile
Dockerfile为镜像构建提供了具体步骤,我们来看下今天介绍的项目中的Dockerfile内容:

复制代码
FROM python:3.6-slim-stretch

ADD requirements.txt /
RUN pip install -r /requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

ADD . /app
WORKDIR /app

EXPOSE 5000
CMD [ “python” , “app.py”]

复制代码

其中,第一行的FROM python:3.6-slim-stretch中的FROM定义了基础镜像,这句表示该镜像基于python:3.6-slim-stretch构建,新镜像会包含基础镜像的所有文件。后面的EXPOSE表示镜像的容器对外暴露什么端口,这与docker run -p xxxx:yyyy中的yyyy对应。CMD表示镜像的容器运行后,自动执行的一条命令,类似于容器的入口命令。而剩下中间的许多行,则是构建镜像中需要的具体指令。

 

完结.

分类: NLP, 云计算 虚拟化 容器

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

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

相关文章

LeetCode 461. 汉明距离(异或^ 与)

文章目录1. 题目2. 解题1. 题目 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y&#xff0c;计算它们之间的汉明距离。 注意&#xff1a; 0 ≤ x, y < 2^31.示例:输入: x 1, y 4输出: 2解释: 1 (0 0 0 1) 4 (0 1 0 0)…

论文浅尝 | NumNet: 一种带有数学推理的机器阅读理解模型

论文笔记整理&#xff1a;吴林娟。来源&#xff1a;EMNLP2019论文链接&#xff1a;https://arxiv.org/pdf/1910.06701.pdf开放源码&#xff1a;https://github.com/ranqiu92/NumNet概述本文提出了一个将数学推理融入机器阅读理解的模型——NumNet&#xff0c;其中利用数字感知的…

2021,你好哇!发个小红包可好~

小伙伴们&#xff0c;大家新年快乐哇&#xff5e;凡是过往皆序章&#xff0c;所有将来皆可盼。2020磨难太多&#xff0c;就祝大家2021多吃不胖叭&#xff01;原创即正义&#xff01;2020年对卖萌屋来说是非常不平凡的一年。这一年的时间里&#xff0c;卖萌屋坚守内容创作的初心…

降低软件复杂性一般原则和方法

一、前言 斯坦福教授、Tcl语言发明者John Ousterhout 的著作《A Philosophy of Software Design》[1]&#xff0c;自出版以来&#xff0c;好评如潮。按照IT图书出版的惯例&#xff0c;如果冠名为“实践”&#xff0c;书中内容关注的是某项技术的细节和技巧&#xff1b;冠名为“…

LeetCode 657. 机器人能否返回原点

文章目录1. 题目2. 解题1. 题目 在二维平面上&#xff0c;有一个机器人从原点 (0, 0) 开始。给出它的移动顺序&#xff0c;判断这个机器人在完成移动后是否在 (0, 0) 处结束。 移动顺序由字符串表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R&#xff08;右&am…

论文浅尝 | 基于图匹配神经网络的跨语言知识图对齐 (ACL 2019)

本文转载自公众号&#xff1a;PaperWeekly。作者&#xff1a;王文博&#xff0c;哈尔滨工程大学硕士生&#xff0c;研究方向为知识图谱、表示学习。动机在本篇文章之前&#xff0c;跨语言知识图谱对齐研究仅依赖于从单语知识图谱结构信息中获得的实体嵌入向量。并且大多数研究将…

谷歌大改Transformer注意力,速度、内存利用率都提上去了-新的 Transformer 架构——Performer

原文地址&#xff1a;https://www.jiqizhixin.com/articles/2020-10-28-10 Transformer 有着巨大的内存和算力需求&#xff0c;因为它构造了一个注意力矩阵&#xff0c;需求与输入呈平方关系。谷歌大脑 Krzysztof Choromanski 等人最近提出的 Performer 模型因为随机正正交特性…

一文搞懂 PyTorch 内部机制

文 | ArchWalker译者序&#xff1a;这篇博文是一篇非常新的介绍PyTorch内部机制的文章&#xff0c;作者Edward Z Yang来自于Stanford大学&#xff0c;是PyTorch的核心开发者之一。文章中介绍了如何阅读PyTorch源码和扩展PyTorch的技巧。目前讲PyTorch底层的文章不多&#xff0c…

美团外卖商家端视频探索之旅

背景 美团外卖至今已迅猛发展了六年&#xff0c;随着外卖业务量级与日俱增&#xff0c;单一的文字和图片已无法满足商家的需求&#xff0c;商家迫切需要更丰富的商品描述手段吸引用户&#xff0c;增加流量&#xff0c;进而提高下单转化率和下单量。商品视频的引入&#xff0c;在…

Android官方开发文档Training系列课程中文版:构建第一款安卓应用之工程创建

这节课你将会学到&#xff1a; - 使用Android Studio创建一个工程。 - 使用命令行工具创建一个工程。 你也应该阅读&#xff1a; - 安装SDK - 管理工程 安卓项目包含了包括源代码在内的所有文件。Android SDK工具使我们很轻松的创建一个包含一系列默认目录和文件的的安卓工…

LeetCode 1051. 高度检查器

文章目录1. 题目2. 解题1. 题目 学校在拍年度纪念照时&#xff0c;一般要求学生按照 非递减 的高度顺序排列。 请你返回至少有多少个学生没有站在正确位置数量。该人数指的是&#xff1a;能让所有学生以 非递减 高度排列的必要移动人数。 示例&#xff1a;输入&#xff1a;[…

论文浅尝 | 基于动态记忆的原型网络进行元学习以实现少样本事件探测

本文转载自公众号&#xff1a;浙大KG。 论文题目&#xff1a;Meta-Learning with Dynamic-Memory-Based Prototypical Network for Few-Shot Event Detection本文作者&#xff1a;邓淑敏&#xff0c;浙江大学在读博士&#xff0c;研究方向为低资源条件下知识图谱自动化构建关键…

字节跳动破局联邦学习:开源Fedlearner框架,广告投放增效209%

本文介绍了字节跳动联邦学习技术团队自研的联邦学习平台 Fedlearner &#xff0c;分享了该平台的技术实现与落地应用体验&#xff0c;向读者展示了字节跳动如何联邦学习落地难题的突破点。作为分布式的机器学习范式&#xff0c;联邦学习能够有效解决数据孤岛问题&#xff0c;让…

软硬兼施极限轻量BERT!能比ALBERT再轻13倍?!

文 | Sheryc_王苏这个世界上有两种极具难度的工程&#xff1a;第一种是把很平常的东西做到最大&#xff0c;例如把语言模型扩大成能够写诗写文写代码的GPT-3&#xff1b;而另一种恰恰相反&#xff0c;是把很平常的东西做到最小。对于NLPer来说&#xff0c;这种“小工程”最迫在…

论文浅尝 | 基于事理图谱的脚本事件预测

论文笔记整理&#xff1a;邱圣广&#xff0c;南京大学硕士&#xff0c;研究方向为自然语言处理。链接&#xff1a;https://www.ijcai.org/proceedings/2018/0584.pdf绪论1. 脚本事件预测脚本事件预测这个任务最早是由Chambers andJurafsky于2008年提出来的&#xff0c;要求给定…

美团集群调度系统HULK技术演进

本文根据美团基础架构部/弹性策略团队负责人涂扬在2019 QCon&#xff08;全球软件开发大会&#xff09;上的演讲内容整理而成。本文涉及Kubernetes集群管理技术&#xff0c;美团相关的技术实践可参考此前发布的《美团点评Kubernetes集群管理实践》。 一、背景 HULK是美团的容器…

LeetCode 1079. 活字印刷(全排列回溯)

文章目录1. 题目2. 解题类似题目 78 子集、 90 子集 II1. 题目 你有一套活字字模 tiles&#xff0c;其中每个字模上都刻有一个字母 tiles[i]。返回你可以印出的非空字母序列的数目。 示例 1&#xff1a;输入&#xff1a;"AAB" 输出&#xff1a;8 解释&#xff1a;…

EdgeBERT:极限压缩,比ALBERT再轻13倍!树莓派上跑BERT的日子要来了?

文 | Sheryc_王苏本文首发于NLP宝藏公号【夕小瑶的卖萌屋】&#xff0c;疯狂暗示&#xff01;这个世界上有两种极具难度的工程&#xff1a;第一种是把很平常的东西做到最大&#xff0c;例如把语言模型扩大成能够写诗写文写代码的GPT-3&#xff1b;而另一种恰恰相反&#xff0c;…

论文浅尝 | 用于开放领域的问题生成

作者 | 黄焱晖单位 | 东南大学硕士研究方向 | 自然语言处理&#xff0c;知识图谱Learning to AskQuestions in Open-domain Conversational Systems with Typed Decoders动机本文的问题生成用于开放领域的问题生成&#xff0c;与传统的问题生成不同的是&#xff0c;在开放领域对…

Android官方开发文档Training系列课程中文版:构建第一款安卓应用之创建用户界面

原文地址&#xff1a;http://android.xsoftlab.net/training/basics/firstapp/building-ui.html 在这节课中&#xff0c;你会创建一个xml的布局文件&#xff0c;它包含一个Text成员和一个Button成员。在下节课中&#xff0c;你会学习到当Button按下后启动并发送Text成员的内容…