对开发和运维人员来说,可能最梦寐以求的就是一次性地创建或配置,可以在任意环境、任意时间让应用正常运行。而Docker恰恰是可以实现这一终极目标的瑞士军刀。

  具体来说,Docker在开发和运维过程中,具有如下几个方面的优势。

  1.更快速的交付和部署。使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完成之后,测试和运维人员可以使用相同环境来部署代码。Docker可以创建和删除容器,实现快速迭代,大量节约开发、测试、部署的时间。并且,各个步骤都有明确的配置和操作,整个过程全程可见,使团队更容易理解应用创建和工作的过程。

  2.更高效的资源利用。Docker 容器的运行不需要额外的虚拟化管理程序支持,它是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。

  3.更轻松的迁移和扩展。Docker 容器几乎可以在任意的平台运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性让用户可以在不同平台之间轻松迁移应用。

  4.更简单的更新管理。使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。并且所有修改都可以以增量的方式进行分发和更新,从而实现自动化并且高效的容器管理。

  基于Docker以上优点,我们来搭建Docker的facenet环境

Facenet简介

Facenet是一个基于Tensorflow实现的人脸识别器,其核心思想来自于论文:“FaceNet: A Unified Embedding for Face Recognition and Clustering”。此篇博客主要介绍如何用在Docker容器中搭建Facenrt环境。

  在Docker容器中运行Facenet

  Ubuntu 系列安装 Docker

  要安装最新的Docker版本,首先需要安装apt-transport-https支持,之后通过添加源来安装。

  $sudo apt-get install apt-transport-https

  $sudo apt -key adv--key server hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

  $sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"

  $sudo apt-get update
      $sudo apt-get installl xc-docker
  

  如果是较低版本的Ubuntu系统,需要先更新内核。
  

       $sudo apt-get update
  $sudoapt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring
       $sudo reboot
  然后重复上面的步骤即可。安装之后启动Docker服务。
  

  $sudo service docke rstart
  在Docker容器中搭建Facenet运行环境
  1.在docker内拉取一个Python3.5或者Python3.6的镜像。参考代码如下:
  

docker pull python:3.5

  2.通过命令sudo docker images 查看安装结果,如下图:

  

  3. 通过镜像python:3.5创建一个facenet容器,参考代码如下:

  

sudo docker run --name='docker_facenet' -dit python:3.5 /bin/bash

  4.通过命令sudo docker ps -a 查看容器,如下图:

  

  5.通过sudo docker attach docker_facenet进入容器,如下图:

  

  6.在Docker容器内安装各种运行Facenet需要的包。(同在本机上安装的那些包),参考代码如下:

  

pip install --upgrade tensorflow_gpu==1.7
pip install --upgrade numpy==1.16.2
pip install scipy==1.2.1
pip install scikit-learn
pip install opencv-python
pip install h5py
pip install matplotlib
pip install Pillow
pip install requests
pip install psutil

7.复制本地数据和代码到容器,参考指令如下:

  

docker cp /home/ubuntu/Lwh/data/3D-Face-BMP_blur_datagen.zip  docker_facenet:/lwh/facenet-master/src/align/datasets

  

  8.复制容器文件到本地宿主机,参考指令如下:

docker cp docker_facenet:/lwh/facenet-master  /home/ubuntu/Lwh/nvidia-docker-facenet

  9.运行各种Facenet程序,此时与在本机运行类似。需注意此时各个文件的路径是在docker的文件系统中的路径

  10.以上安装方法比较繁琐,后续更新Dockerfile更新方式

docker_facenet_image在Docker容器中运行Facenet环境搭建的更多相关文章

  1. Docker容器中运行ASP.NET Core

    在Linux和Windows的Docker容器中运行ASP.NET Core 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott Hanselman就捷足先登了. ...

  2. 在docker容器中运行hello world!

    在docker容器中运行hello world! docker容器可以理解为在沙盒中运行的进程.这个沙盒包含了该进程运行所必须的资源,包括文件系统.系统类库.shell 环境等等.但这个沙盒默认是不会 ...

  3. Elasticsearch核心技术(1)--- Docker容器中运行ES、Kibana、Cerebro

    Docker容器中运行ES,Kibana,Cerebro和Logstash安装与数据导入ES 想加强ES有关的知识,看了阮一鸣老师讲的<Elasticsearch核心技术与实战>收获很大, ...

  4. .Net Core 3.0 的 docker 容器中运行 无法 访问 Oracle数据库

    .Net  Core 3.0 的 docker 容器中运行 无法 访问 Oracle数据库  , 一直报下面的错误 ORA-00604: error occurred at recursive SQL ...

  5. .NetCore下使用IdentityServer4 & JwtBearer认证授权在CentOS Docker容器中运行遇到的坑及填坑

    今天我把WebAPI部署到CentOS Docker容器中运行,发现原有在Windows下允许的JWTBearer配置出现了问题 在Window下我一直使用这个配置,没有问题 services.Add ...

  6. 一个docker容器中运行多个服务还是弄一堆docker容器运行?

    不建议直接在单个 Docker 容器中运行多个程序. 以 2017年 10 月18 日 Docker 官方支持 Kubernetes 为分水岭计算,Kubernetes 赢得容器编排之战的最终胜利已经 ...

  7. 在Linux和Windows的Docker容器中运行ASP.NET Core

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott H ...

  8. 在 Docker 容器中运行应用程序

    案例说明 运行 3 个容器,实现对网站的监控. 三个容器的说明: 容器 web: 创建自 nginx 映像,使用 80 端口,运行于后台,实现 web 服务. 容器 mailer: 该容器中运行一个 ...

  9. .NetCore下利用Jenkins如何将程序自动打包发布到Docker容器中运行

    说道这一块纠结了我两天时间,感觉真的很心累,Jenkins的安装就不多说了 这里我们最好直接安装到宿主机上,应该pull到的jenkins版本是2.6的,里面很多都不支持,我自己试了在容器中安装的情况 ...

随机推荐

  1. JPA 或者Hibernate 实体类说明

    这里简单介绍Hibernate的Annotation注解 一.声明实体 @Entity对实体注释.任何Hibernate映射对象都要有这个注释@Table声明此对象映射到数据库的数据表,通过它可以为实 ...

  2. iOS限制输入解决方法

    关于iOS 键盘输入限制(只能输入字母,数字,禁止输入特殊符号): 方法一: 直接限制输入 - (void)viewDidLoad { [super viewDidLoad]; textField = ...

  3. SQLserver本地数据库开发

    远程端数据库中生成脚本 注意 远程端的数据库 是中文版的还是英文版的,一般我们装的是英文版的, 如果远程端数据库是中文版的,那么我们本地的是英文版,在生成的脚本那需要修改,同时去除相应的路劲代码. 修 ...

  4. python-https状态码

    HTTP状态码状态码的职责是当客户端向服务器发送请求时,描述返回的请求结果.借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误. 状态码的类别 >>>状态码 类别 说明 ...

  5. flask 之(六) --- API|RestfulApi

    接口概念 IOP:面向接口编程,不再关注具体的实现:只关注输入.输出. http://www.ruanyifeng.com/blog/2018/10/restful-api-best-practice ...

  6. 如何为Redis中list中的项设置过期时间

    问题 两种解决方法 有序集合 多个集合以及TTL Redis是一个伟大的工具,用来在内存中存储列表是很合适的. 不过,如果你想要快速搜索列表,同时需要让列表中每项都在一定时间后过期,应该怎么做呢? 首 ...

  7. Leetcode之动态规划(DP)专题-413. 等差数列划分(Arithmetic Slices)

    Leetcode之动态规划(DP)专题-413. 等差数列划分(Arithmetic Slices) 如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列. 例如,以下数列为 ...

  8. python copy与deepcopy (拷贝与深拷贝)

    copy与deepcopy python 中的copy与deepcopy是内存数据的操作,但是两个函数有一定的区别. 1.copy import copy list = [1, [4, 5, 6], ...

  9. 论文阅读 | Towards a Robust Deep Neural Network in Text Domain A Survey

    摘要 这篇文章主要总结文本中的对抗样本,包括器中的攻击方法和防御方法,比较它们的优缺点. 最后给出这个领域的挑战和发展方向. 1 介绍 对抗样本有两个核心:一是扰动足够小:二是可以成功欺骗网络. 所有 ...

  10. (转) Asp.net中实现同一用户名不能同时登录

    最近找了一些单点登录的,发现了这篇文章,貌似还是可以实现的,先保存了.   Web 项目中经常遇到的问题就是同一用户名多次登录的问题,相应的解决办法也很多,总结起来不外乎这几种解决办法: 将登录后的用 ...