Docker 入門教程-----Docker安裝與使用(Linux系統 Ubuntu16.04、Centos 和Windows)

簡介

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 可以用來在容器中運行一個進程

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