【環境搭建】 docker的使用和管理
管理員方面
安裝docker
因爲服務器上的docker是安裝好的,所以此部分內容遇到新機器再進行完善
拉取Image,創建container
首先要在Docker Hub上看看什麼樣的鏡像是你想要的:
使用下面命令拉取鏡像到本地:
sudo docker pull 名字:某個標籤
比如我這裏的命令是:
sudo docker pull nvidia/cuda:9.2-cudnn7-devel-ubuntu16.04
使用下面命令查看本地所有的鏡像:
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
結語
如果您有修改意見或問題,歡迎留言或者通過郵箱和我聯繫。
手打很辛苦,如果我的文章對您有幫助,轉載請註明出處。