1. sudo apt-get remove docker docker-engine docker.io containerd runc
2. sudo apt-get update
3. sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
4.curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
5.sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
6.sudo apt-get update
7.sudo apt-get install docker-ce docker-ce-cli containerd.io
# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker
# Add the package repositories
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
# Install nvidia-docker2 and reload the Docker daemon configuration
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd
-
使用國內安裝好的集成環境,包括cuda+cudnn+tensorflow——gpu,示例是集成環境
-
dockerhub地址
-
選擇合適的標籤(我們使用的標籤爲:all-py36-jupyter等價於all-jupyter-py36)
-
執行命令
-
sudo docker pull ufoym/deepo:all-py36-jupyter
-
-
-
使用英偉達提供的docker鏡像,這裏的鏡像只安裝了cuda,可能需要自己安裝對應版本的python和tensorflow
-
dockerhub地址
-
-
測試容器內的cuda是否可以連通顯卡驅動
-
sudo docker run --runtime=nvidia --rm ufoym/deep0:all-py36-jupyter nvidia-smi
-
正常
-
報錯
-
解決方案sudo mkdir -p /etc/systemd/system/docker.service.dsudo tee /etc/systemd/system/docker.service.d/override.conf <<EOF[Service]ExecStart=ExecStart=/usr/bin/dockerd --host=fd:// --add-runtime=nvidia=/usr/bin/nvidia-container-runtimeEOFsudo systemctl daemon-reloadsudo systemctl restart dockersudo tee /etc/docker/daemon.json <<EOF{"runtimes": {"nvidia": {"path": "/usr/bin/nvidia-container-runtime","runtimeArgs": []}}}EOFsudo pkill -SIGHUP dockerd
-
原來是nvidia-docker 沒有註冊:docker: Error response from daemon: Unknown runtime specified nvidiawhile running nvidia docke 接着尋找如何註冊: docker-engine-setup
-
執行以下命令進行註冊
-
修改配置
-
再去開啓鏡像,done。
-
-
-
創建一個容器,並進去測試是否支持gpu和查看tensorflow版本
-
sudo docker run --name py36 --runtime=nvidia -it -v /home/wjg/data:/data ufoym/deepo:all-py36-jupyter bash
-
可以看到是支持gpu的。版本爲1.8.0
-
-
查看容器內的cuda版本
-
ls /usr/local/ 可以看到爲cuda-9.0
-
-
開啓容器的ssh,可以遠程連接此docker容器
-
以下命令在容器中執行
-
apt-get update
-
apt-get install openssh-server
-
cd /
-
./etc/init.d/ssh stop //停止ssh服務
-
修改ssh配置,允許root用戶使用密碼登錄此容器
-
vim /etc/ssh/sshd_config
-
註釋掉這行:#PermitRootLogin prohibit-password 改行表示禁止root用戶使用密碼登錄
-
添加一條語句:PermitRootLogin yes 表示允許root用戶使用密碼登錄
-
-
./etc/init.d/ssh start //開啓ssh
-
修改root密碼
-
passwd root
-
輸入新的密碼即可
-
-
-
在宿主機執行以下命令,將修改後的容器提交爲鏡像,一定要在容器運行的情況下,在宿主機執行命令
-
docker commit -m "描述信息" -a "作者名" 容器ID 鏡像名:標籤
-
如docker commit -m "tf_gpu_1.8_ssh" -a "wjg" 7be82a146744 tfSSH:1.0
-
-
實例化新提交的鏡像,並映射ssh的22號端口
-
sudo docker run --name py36SSH --runtime=nvidia -it -v /home/wjg/data:/data -p 42022:22 tfSSH:1.0 bash
-
-
此時就可以用使用宿主機的 ip:42022登錄docker容器,也可以pycharm直接調用該容器的python解釋器。
-
-
ssh開機自啓動
-
在容器的/root/.bashrc下添加如下shell腳本
-
#========================start ssh============== result=`ps -ef | grep ssh | grep -v "grep"` pattern="ssh" if [ "$result" = "" ];then echo "ssh is not running, ssh is starting......." if [ -f /etc/init.d/ssh ];then cd /etc/init.d ./ssh start else echo "could not find ssh in /etc/init.d/ssh" fi else echo "ssh is running" fi
-
-
鏡像操作
-
docker search 關鍵字 去dockerhub搜索相關鏡像
-
docker pull 鏡像名:tag 拉取鏡像,:tag是可選的,默認latest
-
docker images 查看本地所有鏡像
-
docker rmi 鏡像id 刪除本地指定鏡像
-
容器操作
-
doker run --name container-name -d -it image-name安裝docker鏡像形成容器,container-name:爲容器起個名稱,image-name:安裝哪個鏡像。
-
-d 表示後臺運行
-
-p 主機端口:內部端口:主機端口映射到容器內部端口
-
-i 以交互模式運行容器,通常與-t一起使用
-
-t 分配一個僞終端
-
-
docker ps 查看運行中的容器,加上-a,可以查看所有容器
-
docker stop/start container-name/container-id 啓動關閉容器
-
dicker rm container-id 刪除容器
-
docker logs container-name/container-id 容器日誌
-
docker exec -it container-name/container-id /bin/bash 以交互的方式進入一個正在運行的容器
-
docker attach container-id 以交互的方式進入一個正在運行的容器
-
docker commit -m "描述信息" -a "作者名" 容器ID 鏡像名:標籤 使一個容器變成一個鏡像(一定要在容器運行的情況下執行)
-
Ctrl+P+Q 推出容器但不關閉容器