docker部署tensorflow serving基礎知識
Docker簡述
dockers架構
docker技術的應用確保了不同應用程序間,實現進程級別的隔離docker架構如下圖所示。
- Docker daemon( Docker守護進程):Docker daemon是一個運行在宿主機( DOCKER-HOST)的後臺進程。
- Client( Docker客戶端):
- Images( Docker鏡像):Docker鏡像是一個只讀模板
- Container(容器):容器是鏡像的可運行實例。
- Registry:Docker Registry是一個集中存儲與分發鏡像的服務,分爲共有(dockers hub)和私有(個人創建)。
容器與虛擬機區別
容器是應用程序層的抽象,它將代碼和依賴關係打包在一起。 多個容器可以在同一臺計算機上運行,並與其他容器共享操作系統內核,每個容器都作爲用戶空間中的獨立進程運行。 容器佔用的空間少於虛擬機(容器圖像的大小通常爲幾十MB)並且幾乎立即啓動。
虛擬機(VMs)是將一臺服務器變成多臺服務器的物理硬件的抽象。 管理程序允許多臺虛擬機在單臺機器上運行。 每個VM都包含一個操作系統的完整副本,一個或多個應用程序,必需的二進制文件和佔用數十GB的庫。
安裝docker與nvidia-docker
首先參照官網安裝docker(最新版本:Docker version 19.03.8,)
How to install docker on Ubuntu 16.04
如果你打算製作或者使用涉及到cuda或者cuddn等與GPU相關的鏡像或容器,你需要安裝nvidia-docker,請按照repo裏的步驟安裝nvidia-docker:
How to install nvidia-docker on Ubuntu 16.04
問題1:
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
解決方法:
# 查看可安裝的包
apt-cache showpkg libcurl3-gnutls
# 安裝:
sudo apt-get install libcurl3-gnutls=7.47.0-1ubuntu2
安裝docker compose
後續待更新……
驗證docker 安裝是否成功,並加入開機啓動
# 驗證安裝是否成功
docker --version
docker-compose --version
# 啓動docker
systemctl start docker
# 查看docker是否已經啓動
ps -ef | grep docker
# 重啓docker
systemctl restart docker
# 加入開機啓動docker
systemctl enable docker
配置docker國內鏡像
爲了確保docker能快速加載應用程序鏡像,配置鏡像列表,指向國內的鏡像地址。
修改 /etc/docker/daemon.json 文件並添加上 registry-mirrors 鍵值。(如果該文件不存在,需要新建該文件)
[root@aiserver ~]# vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
設置docker權限組
默認的docker需要sudo權限才能運行,爲了讓當前用戶可以運行docker,需要把當前用戶加到docker組裏:
sudo groupadd docker
# 確認環境遍歷$USER是否正確,如果不對需要設置正確或者執行下面的命令時把$USER替換成當前的用戶名。
echo $USER
sudo usermod -aG docker $USER
一、鏡像操作
1.1.查看本地鏡像
列出已經下載的鏡像
docker images
1.2.搜索鏡像
在Docker Hub(或阿里鏡像)倉庫中搜索關鍵字(如mysql)的鏡像
docker search mysql
1.3.下載鏡像
在docker 官網搜索需要下載的鏡像及版本號docker hub官網
docker pull mysql
docker pull tomcat:8.5-alpine
1.4.刪除鏡像
docker images
docker rmi 91dadee7afee
1.5.構建鏡像
docker build
二、容器操作
2.1.查看正在運行的容器
# 查看幫助信息
docker COMMAND -help
# 查看運行中容器
docker ps
# 查看所有容器包括沒有啓動的
docker ps -a
2.2.啓動容器
普通啓動:
docker run --name myTomcat -d tomcat:8.5-alpine
返回值是容器的ID
b3d1907c8c3d085ed3556ca89824d67e2459f6990a00cd78794e9f864d258500
- –name:自定義容器名,不指定時,docker 會自動生成一個名稱
- -d:表示後臺運行容器
- image-name:指定運行的鏡像名稱以及 Tag
端口映射啓動:
docker run --name myTomcat -d -p 8090:8080 tomcat:8.5-alpine
使用命令:docker run --name container-name:tag -d -p 服務器端口:Docker 端口 image-name:tag
- –name:自定義容器名,不指定時,docker 會隨機自動生成一個名稱
- -d:表示後臺運行容器,等同於-d=true, 容器將會在後臺運行,否則退出後便是exit狀態了。
- image-name:指定運行的鏡像名稱以及 Tag
- -p 指定服務器與 Docker 容器的端口映射,默認情況下容器中鏡像佔用的端口是 Docker 容器中的端口,且與外界是隔絕的,必須進行端口映射才能訪問。
2.3.進入容器、下載包、退出容器
容器名爲:mycentos2
# 進入容器
docker exec -it 容器id或容器名 /bin/bash
# 查看容器裏面的進程
docker top 容器id
# 下載config命令插件
sudo apt-get install -y net-tools
# 退出容器
exit
- -it:進行交互式操作
- /bin/bash:
2.4.容器常用操作
容器名:myTomcat
# 查看安裝docker安裝信息
docker info
# 停止容器
docker stop 容器id
# 強制停止容器
docker kill 容器id
# 啓動已經停止的容器
docker start 容器id
# 刪除已經停止的容器
docker rm 容器id
# 刪除正在運行的容器
docker rm -f 容器id
# 查看日誌
docker logs myTomcat
# 查看容器日誌
docker container logs 容器id或容器名
# 查看容器所有信息
docker inspect 容器id或者容器名
# 容器重命令
docker rename [original name] [new name]
將本地文件上傳到容器
docker cp [local file path] [container id]:[container file path]
掛在本地目錄到鏡像
docker run -v [local folder path]:[container mounted path] --name [container name] -t -i [image ID | repository name] : TAG] /bin/bash