对开发和运维人员来说,可能最梦寐以求的就是一次性地创建或配置,可以在任意环境、任意时间让应用正常运行。而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"
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更新方式