【環境搭建】 docker的使用和管理

管理員方面

安裝docker

因爲服務器上的docker是安裝好的,所以此部分內容遇到新機器再進行完善

拉取Image,創建container

首先要在Docker Hub上看看什麼樣的鏡像是你想要的:
在這裏插入圖片描述使用下面命令拉取鏡像到本地:

sudo docker pull 名字:某個標籤

比如我這裏的命令是:

sudo docker pull nvidia/cuda:9.2-cudnn7-devel-ubuntu16.04

在這裏插入圖片描1述
使用下面命令查看本地所有的鏡像:

sudo docker images
  • REPOSITORY:鏡像所屬的倉庫
  • TAG:鏡像的標籤
  • IMAGE ID:鏡像ID
  • CREATED:鏡像創建時間
  • SIZE:鏡像大小

獲取鏡像後,選擇自己想要的鏡像,使用其對應的IMAGE ID創建container:

sudo docker create -ti -p 主機端口一:22 -p 主機端口二:8888 -v 主機某路徑:container內某路徑 --runtime nvidia --name 定義container名稱 IMAGE ID /bin/bash

比如我這裏的命令是:

sudo docker create -ti -p 10703:22 -p 10713:8888 -v /media/project/:/project --runtime nvidia --name zhangchen c3f9dc2eddd8 /bin/bash
  • -p:綁定主機某一端口和container的ssh端口(22)以及另一個主機端口和jupyter notebook端口(8888),主機端口自定義一個大值,因爲前1024號端口是系統預留的
  • -v:將主機的一個路徑和container中一個路徑進行綁定,container可以通過此路徑和主機進行數據交互
  • –runtime nvidia(兩個槓):container可以使用GPU

管理container

創建container後,container沒有掛起,使用下面命令掛起container:

sudo docker start CONTAINER ID 

CONTAINER ID使用下面命令查看:

sudo docker container ps -a
//帶-a參數,會顯示所有container信息
sudo docker container ps
//不帶-a參數,只顯示當前掛起的container信息

使用下面命令從主機進入某一container:

sudo docker attach CONTAINER ID

執行命令後,再敲擊回車進入container環境
新的container需要安裝ssh,否則用戶無法通過ssh遠程登錄container,安裝過程如下:

apt-get update

必需先執行這個命令,否則apt-get無法使用
因爲container下有root權限,所以沒有sudo命令
因爲此時apt-get是國外的源,apt-get下載非常慢,所以先用國外的源下載vim,再用vim修改apt的源

apt-get install vim

下載成功後,將apt的源修改成清華的源:

cp /etc/apt/sources.list /etc/apt/sources.list.bak
rm /etc/apt/sources.list
vim /etc/apt/sources.list

.bak是備份文件的後綴
將清華的源粘貼到新建的sources.list文件中後,保存文件
Ubuntu 鏡像使用幫助
在這裏插入圖片描述
更新源:

apt-get update

修改完成後,下載安裝ssh:

apt-get install openssh-server

安裝完成後,做如下修改:

vim /etc/ssh/sshd_config
在文件中找到 #PermitRootLogin without-password
注意有的linux系統這條語句可能有微小的差別
將之去掉#改爲 PermitRootLogin yes

啓動ssh服務:

service ssh start

(Ctrl + p) + (Ctrl+q)退出當前container,如果使用(Ctrl + d)退出container,container會停止掛載

  • 設置container用戶遠程登錄密碼:
passwd
  • 刪除某一container使用如下命令:
sudo docker rm CONTAINER ID
  • 停止使用,也就是停止掛載某一container使用如下命令:
sudo docker stop CONTAINER ID
  • 刪除某一鏡像使用如下命令:
sudo docker image rm IMAGE ID
  • 使用如下命令將某一container提取成鏡像:
sudo docker commit CONTAINER ID
  • 使用如下命令查看更多命令:
sudo docker --help

用戶方面

ssh登錄docker

ssh -p 端口號 root@主機IP地址
//注意此時應該用小寫的p

(Ctrl + d)退出container

使用scp

scp -P
//注意此時應該用大寫的P

源碼編譯安裝python3

有些原始鏡像做的contaienr是沒有python的,需要進入container源碼編譯安裝

apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev  libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat-dev

安裝依賴

wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz

下載源碼包

tar -xvf Python-3.6.1.tar.xz

解壓源碼包

./configure --prefix=/usr/python3 --enable-shared CFLAGS=-fPIC
make
make install

編譯安裝

ln -s /usr/python/bin/python3 /usr/bin/python
ln -s /usr/python/bin/pip3 /usr/bin/pip

生成軟鏈接

cp /usr/python3/lib/libpython3.6m.so.1.0 /usr/lib

拷貝庫文件到/usr/lib

使用jupyter notebook

pip install jupyter notebook

下載jupyter notebook
將jupyter notebook相關可執行文件路徑添加到.bash_profile文件

ipython

在ipython命令行裏輸入:

from notebook.auth import passwd
passwd()

自定義密碼,會返回一個密鑰

quit()

退出ipython

jupyter notebook --generate-config

生成jupyter notebook的配置文件
但是有可能會報錯ascii碼怎樣怎樣,這篇博客的解決方法是正確的:
docker 容器中亂碼解決辦法

locale
locale -a
LANG=C.UTF-8 
source /etc/profile

執行上面四條語句後再生成jupyter notebook的配置文件

vim ~/.jupyter/jupyter_notebook_config.py

打開配置文件

c.NotebookApp.ip='*'
c.NotebookApp.password = u生成的密鑰
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888

在配置文件最下面加上面的內容,保存退出

jupyter notebook --allow-root 

在container中執行上面的命令啓動jupyter notebook

在本地瀏覽器上輸入:
服務器IP地址:創建container時給jupyter notebook留的端口號
成功進入jupyter notebook

結語

如果您有修改意見或問題,歡迎留言或者通過郵箱和我聯繫。
手打很辛苦,如果我的文章對您有幫助,轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章