簡介
Docker是一種新興的虛擬化技術,能夠一定程度上的代替傳統虛擬機。不過,Docker 跟傳統的虛擬化方式相比具有衆多的優勢。我也將Docker類比於Python虛擬環境,可以有效的配置各個版本的開發環境,比如深度學習與Java環境。
docker:有兩個版本:docker-ce(社區版)和docker-ee(企業版)
docker-compse:可運行和管理多個docker容器
優勢
本人主要想用來配置開發環境,由於實驗室機器系統環境版本等衝突的問題。
先用一張Docker — 從入門到實踐裏的圖整體感受一下其獨特的優勢:
更高效的利用系統資源:由於容器不需要進行硬件虛擬以及運行完整操作系統等額外開銷,Docker 對系統資源的利用率更高。無論是應用執行速度、內存損耗或者文件存儲速度,都要比傳統虛擬機技術更高效。因此,相比虛擬機技術,一個相同配置的主機,往往可以運行更多數量的應用。
更快速的啓動時間:傳統的虛擬機技術啓動應用服務往往需要數分鐘,而Docker 容器應用,由於直接運行於宿主內核,無需啓動完整的操作系統,因此可以做到秒級、甚至毫秒級的啓動時間。大大的節約了開發、測試、部署的時間。
一致的運行環境:開發過程中一個常見的問題是環境一致性問題。由於開發環境、測試環境、生產環境不一
致,導致有些bug 並未在開發過程中被發現。而Docker 的鏡像提供了除內核外完整的運行時環境,確保了應用運行環境一致性,從而不會再出現「這段代碼在我機器上沒問題啊」這類問題。
持續交付和部署:Docker是build once,run everywhere. 使用Docker 可以通過定製應用鏡像來實現持續集成、持續交付、部署。開發人員可以通過Dockerfile 來進行鏡像構建,並結合持續集成(Continuous Integration) 系統進行集成測試,而運維人員則可以直接在生產環境中快速部署該鏡像,甚至結合持續部署(Continuous Delivery/Deployment) 系統進行自動部署。
更輕鬆的遷移:Docker 使用的分層存儲以及鏡像的技術,使得應用重複部分的複用更爲容易,也使得應用的維護更新更加簡單,基於基礎鏡像進一步擴展鏡像也變得非常簡單。此外,Docker 團隊同各個開源項目團隊一起維護了一大批高質量的官方鏡像,既可以直接在生產環境使用,又可以作爲基礎進一步定製,大大的降低了應用服務的鏡像製作成本。使用Dockerfile 使鏡像構建透明化,不僅僅開發團隊可以理解應用運行環境,也方便運維團隊理解應用運行所需條件,幫助更好的生產環境中部署該鏡像。
鏡像(Image)
鏡像,從認識上簡單的來說,就是面向對象中的類,相當於一個模板。從本質上來說,鏡像相當於一個文件系統。Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之後也不會被改變。
容器(Container)
容器,從認識上來說,就是類創建的實例,就是依據鏡像這個模板創建出來的實體。容器的實質是進程,但與直接在宿主執行的進程不同,容器進程運行於屬於自己的獨立的命名空間。因此容器可以擁有自己的root 文件系統、自己的網絡配置、自己的進程空間,甚至自己的用戶ID 空間。容器內的進程是運行在一個隔離的環境裏,使用起來,就好像是在一個獨立於宿主的系統下操作一樣。這種特性使得容器封裝的應用比直接在宿主運行更加安全。
倉庫(Repository)
倉庫,從認識上來說,就好像軟件包上傳下載站,有各種軟件的不同版本被上傳供用戶下載。鏡像構建完成後,可以很容易的在當前宿主機上運行,但是,如果需要在其它服務器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,Docker Registry 就是這樣的服務。
Win10安裝Docker:
win7、win8 等需要利用 docker toolbox 來安裝,國內可以使用阿里雲的鏡像來下載
下載地址:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/
docker toolbox 是一個工具集,它主要包含以下一些內容:
Docker CLI 客戶端,用來運行docker引擎創建鏡像和容器
Docker Machine. 可以讓你在windows的命令行中運行docker引擎命令
Docker Compose. 用來運行docker-compose命令
Kitematic. 這是Docker的GUI版本
Docker QuickStart shell. 這是一個已經配置好Docker的命令行環境
Oracle VM Virtualbox. 虛擬機
下載完成之後直接點擊安裝,安裝成功後,桌邊會出現三個圖標,入下圖所示:
點擊 Docker QuickStart 圖標來啓動 Docker Toolbox 終端。
如果系統顯示 User Account Control 窗口來運行 VirtualBox 修改你的電腦,選擇 Yes。
Docker支持64 位版本的Windows 10 Pro,且必須開啓Hyper-V。開啓方式爲:打開“控制面板”->“程序”-> “啓動或關閉Windows功能”,找到Hyper-V並勾選,確定重啓電腦。
Win10下載:https://docs.docker.com/docker-for-windows/install/
Ubuntu16.04安裝:
1、卸載舊版本的Docker
sudo apt-get remove docker docker-engine docker.io docker-ce
注:舊版本的Docker被稱作docker或者docker-engine,Docker CE(社區版)包現在被叫做docker-ce,如果之前安裝過了,需要先卸載。
2、更新apt安裝包索引
sudo apt-get update
3、查看可安裝docker版本
apt-cache madison docker-ce
4、安裝docker18.03
sudo apt-get install docker-ce=<VERSION>
sudo apt-get install docker-ce=18.03.0~ce-0~ubuntu
或 sudo pip install docker
以下安裝可選:
1、安裝依賴包:sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
2、添加官方密鑰 執行該命令時,如遇到長時間沒有響應說明網絡連接不到docker網站,需要使用代-理進行。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
顯示OK,表示添加成功.
3、添加倉庫:
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
Centos安裝docker:
安裝一些必要的系統工具:sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加軟件源信息:sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新 yum 緩存:sudo yum makecache fast
安裝 Docker-ce:sudo yum -y install docker-ce
啓動 Docker 後臺服務:sudo systemctl start docker
使用腳本安裝 Docker
使用 sudo
或 root
權限登錄 Centos。確保 yum 包更新到最新:sudo yum update
3、執行 Docker 安裝腳本。
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
執行這個腳本會添加 docker.repo
源並安裝 Docker。
4、啓動 Docker 進程:sudo systemctl start docker
刪除 Docker CE:
$ sudo yum remove docker-ce
$ sudo rm -rf /var/lib/dock
更新/卸載Docker
Docker更新:sudo apt upgrade
Docker卸載:sudo apt-get purge docker-ce sudo rm -rf /var/lib/docker
重新啓動服務
sudo systemctl daemon-reload
sudo systemctl restart docker
建立docker 用戶組(註銷系統重新進入系統,就可以直接使用docker開頭了(注意:一定要註銷後再進系統))
默認情況下,docker 命令會使用Unix socket 與Docker 引擎通訊。而只有root 用戶和docker 組的用戶纔可以訪問Docker 引擎的Unix socket。出於安全考慮,一般Ubuntu系統上不會直接使用root 用戶。因此,更好地做法是將需要使用docker 的用戶加入docker用戶組。
建立docker組:sudo groupadd docker
將當前用戶加入docker組:sudo usermod -aG docker $USER
重新啓動服務: sudo service docker restart
配置國內鏡像加速:
新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 來配置 Daemon。請在該配置文件中加入(沒有該文件的話,請先建一個):
在/etc/docker/daemon.json 中寫入如下內容(如果文件不存在請新建該文件){
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}
下載image :
啓動服務:sudo service docker start
下載鏡像:sudo docker pull ubuntu:16.04
常用命令:
啓動交互式容器:docker run -t -i --name=容器的名字 IMAGE_NAME /bin/bash -i是交互模式啓動 -t是在命令行下啓動
-i --interactive=true | false,默認是false -t --tty=true | false,默認是false
docker run -i -t --privileged=true -d -p 4489:4489/tcp --name 容器的名字 ubuntu:16.04 /bin/bash
docker run -i -t ubuntu /bin/bash
查看容器:docker ps [-a] [-l] 省略 列出正在運行的容器 -a all 列出所有容器 -l latest 列出最近的容器
查看指定容器:docker inspect name | id
name指代具體的容器名稱,id則是容器的唯一id標識。inspect命令可以詳細的展示出容器的具體信息。
docker run -d -p -v創建並啓動一個容器,在run後面加上-d參數,則會創建一個守護式容器在後臺運行。-P:將容器內部使用的網絡端口映射到我們使用的主機上。-v:表示需要將本地哪個目錄掛載到容器中,格式:-v <宿主機目錄>:<容器目錄>宿機目錄必須是絕對的
容器的端口映射
命令:run [-P] [-p]
-P,–publish-all=true | false,大寫的P表示爲容器暴露的所有端口進行映射;
-p,–publish=[],小寫的p表示爲容器指定的端口進行映射,有四種形式:
containerPort:只指定容器的端口,宿主機端口隨機映射; docker run -p 80
hostPort:containerPort:同時指定容器與宿主機端口一一映射;docker run -p 8080:80
ip::containerPort:指定ip和容器的端口; docker run -p 0.0.0.0::80
ip:hostPort:containerPort:指定ip、宿主機端口以及容器端口。 docker run -p 0.0.0.0:8080:80
docker ps -a 查看已經創建的容器
docker ps -s 查看已經啓動的容器
docker start con_name 啓動容器名爲con_name的容器
docker stop con_name 停止容器名爲con_name的容器
docker logs con_name 獲取容器名爲con_name的容器日誌
docker command --help 命令 查看相關參數意義
docker rm con_name 刪除容器名爲con_name的容器
docker rename old_name new_name 重命名一個容器
docker attach con_name 將終端附着到正在運行的容器名爲con_name的容器的終端上面去,前提是創建該容器時指定了相應的sh執行這個命令後,按下回車鍵,會進入容器的命令行Shell中。
docker inspect 查看容器的詳細信息
docker top con_name 查看容器名爲con_name的容器內部的進程
docker exec 可以用來在容器中運行一個進程