對開發和運維人員來講,可能最求之不得的就是一次性地建立或配置,能夠在任意環境、任意時間讓應用正常運行。而Docker偏偏是能夠實現這一終極目標的瑞士軍刀。python
具體來講,Docker在開發和運維過程當中,具備以下幾個方面的優點。linux
1.更快速的交付和部署。使用Docker,開發人員可使用鏡像來快速構建一套標準的開發環境;開發完成以後,測試和運維人員可使用相同環境來部署代碼。Docker能夠建立和刪除容器,實現快速迭代,大量節約開發、測試、部署的時間。而且,各個步驟都有明確的配置和操做,整個過程全程可見,使團隊更容易理解應用建立和工做的過程。docker
2.更高效的資源利用。Docker 容器的運行不須要額外的虛擬化管理程序支持,它是內核級的虛擬化,能夠實現更高的性能,同時對資源的額外需求很低。ubuntu
3.更輕鬆的遷移和擴展。Docker 容器幾乎能夠在任意的平臺運行,包括物理機、虛擬機、公有云、私有云、我的電腦、服務器等。這種兼容性讓用戶能夠在不一樣平臺之間輕鬆遷移應用。bash
4.更簡單的更新管理。使用Dockerfile,只須要小小的配置修改,就能夠替代以往大量的更新工做。而且全部修改均可以以增量的方式進行分發和更新,從而實現自動化而且高效的容器管理。服務器
基於Docker以上優勢,咱們來搭建Docker的facenet環境運維
Facenet簡介性能
Facenet是一個基於Tensorflow實現的人臉識別器,其核心思想來自於論文:「FaceNet: A Unified Embedding for Face Recognition and Clustering」。此篇博客主要介紹如何用在Docker容器中搭建Facenrt環境。測試
在Docker容器中運行Facenetspa
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更新方式