1.什么是Docker
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然后發布到任何流行的 Linux 機器上。使用Docker可以讓每個應用彼此相互隔離,在同一台機器上同時運行多個容器,他們彼此之間共享同一個操作系統。Docker的優勢在於,它可以在更細的粒度上進行資源的管理,比虛擬化技術性能更高,更加節約資源。下面是普通虛擬化技術和Docker的對比。
2.Docker能做什么,解決了什么問題
簡化配置
虛擬機的最大好處是能在你的硬件設施上運行各種配置不一樣的平台(軟件、系統),Docker在降低額外開銷的情況下提供了同樣的功能。它能讓你將運行環境和配置放在代碼中然后部署,同一個Docker的配置可以在不同的環境中使用,這樣就降低了硬件要求和應用環境之間耦合度。
提高開發和布署效率
在軟件開發過程中,我們都想把兩件事做好,
》開發環境和和投產環境一至
》快速布署
為了達到第一個目標我們要把程序跑在不同系統的服務器上,用大量的時間去測試功能是否完整。Docker可以輕松的為任何應用創建一個輕量級的、可移植的、自給自足的鏡像,同一個鏡像可以在不同的環境中使用,從而統一環境。
Docker構建好鏡像后,可以快速布署到任何流行的 Linux 機器上,不用再次配置和安裝應用所需的依賴。最重要的是啟動一個容器是秒級別的!
隔離應用
一台服務器上可能會跑不同的應用,每個應用都有自己的依賴。容易因為依賴的不兩只造成沖突,Docker能把每個應用和他的依賴打包成獨立的單元,做到資源隔離。
其他的優點這里就不再做說明。
Docker 三大核心概念
鏡像 - Docker images
容器 - Docker containers
倉庫 - Docker repository
Image
Docker 鏡像是 Docker 容器運行時的只讀模板,每一個鏡像由一系列的層 (layers) 組成。我們可以把Image理解成 windows系統安裝光盤,你不能對安裝盤進行操作因為是只讀的,只有安裝好系統后才能保存和操作數據。
container
容器是Image的一個實例,有點像面向對象里new 一個實例。容器類似於一個輕量級的沙盒,Docker利用容器來運行和隔離應用。容器從Image啟動時,Docker會在鏡像的最上層創建一個可寫層,鏡像本身保持不變。
Repository
Docker 倉庫是存放鏡像的地方。不要把Docker的倉庫和注冊服務器Registry混淆。注冊服務器是存放倉庫的地方,每個倉庫存放某一類不同標簽Tag的鏡像。
Docker 倉庫也有公有和私有的概念。公有的 Docker 倉庫名字是 Docker Hub。Docker Hub 提供了龐大的鏡像集合供使用。這些鏡像可以是自己創建,或者在別人的鏡像基礎上創建。如果你的鏡像為私有鏡像,不想發到公網上,可以自己在本地創建一個私有的鏡像倉庫。
Install Docker
https://www.docker.com/
官網上有各種平台的詳細安裝過程,這里只描述Centos7平台下的安裝過程。
Docker需要安裝在64位系統上,Linux內核不能低於3.10。通過 uname - r可以查看你的Liunx內核版本
官方給出了兩種方案安裝Docker Engine,我們使用yun包管理進行安裝。
1.切換root權限。
2.確保你的yum包是最新的
$ sudo yum update
3.添加 yum repo
$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
4.安裝Docker
$ sudo yum install docker-engine
5.啟動Docker
$ sudo service docker start
6.在容器內運行測試鏡像,來檢查Docker是否安裝正確。
$ sudo docker run hello-world
為了能在系統啟動時運行Docker,執行下面的命令
$ sudo chkconfig docker on
Docker基本用法
Docker的默認服務器是hub.docker.com 他目前是最大的鏡像網站,由於國情原因下載上邊的鏡像,實在是慢的讓人受不了,可以搜一下國內的鏡像網站我是用的這個(不是給這個網站做廣告,確實挺下載快多了)https://hub.tenxcloud.com/
拉取鏡像
$ docker pull centos # 獲取 centos 官方鏡像
指定國內的鏡像地址
$ docker pull index.tenxcloud.com/tenxcloud/centos:centos7 #指定國內的鏡像下載地址
后邊的:centos7是tag,表明我想下載的版本是cent0s7
查看現有鏡像
docker images
運行container
我們來運行下載好的centos7
docker run -i -t 6e75 /bin/bash
docker run - 運行一個容器
-t - 分配一個(偽)tty
-i - 交互模式
6e75 - Image Id 我只輸入了前幾位,
- 只要能標識出唯一就行
/bin/bash - 運行命令 bash shell
運行完命令后我們就已經進入了centos7容器,可以執行linux命令試一下。
如果要退出輸入exit即可。
退出后容器也相應停止,如果想要在后台繼續運行可以加可選參數 -d
docker run -i -t -d 6e75 /bin/bash
查看哪些容器在運行
docker ps # 會列出在運行的
在已存在的容器上運行命令
如上邊截圖我們的centos7容器在運行,想在這個容器里運行命令可以用exec命令
docker exec -t -i 875c /bin/bash
Docker 命令幫助
$ sudo docker # docker 命令幫助
Commands:
attach Attach to a running container # 當前 shell 下 attach 連接指定運行鏡像
build Build an image from a Dockerfile # 通過 Dockerfile 定制鏡像
commit Create a new image from a container's changes # 提交當前容器為新的鏡像
cp Copy files/folders from the containers filesystem to the host path
# 從容器中拷貝指定文件或者目錄到宿主機中
create Create a new container # 創建一個新的容器,同 run,但不啟動容器
diff Inspect changes on a container's filesystem # 查看 docker 容器變化
events Get real time events from the server # 從 docker 服務獲取容器實時事件
exec Run a command in an existing container # 在已存在的容器上運行命令
export Stream the contents of a container as a tar archive
# 導出容器的內容流作為一個 tar 歸檔文件[對應 import ]
history Show the history of an image # 展示一個鏡像形成歷史
images List images # 列出系統當前鏡像
import Create a new filesystem image from the contents of a tarball
# 從tar包中的內容創建一個新的文件系統映像[對應 export]
info Display system-wide information # 顯示系統相關信息
inspect Return low-level information on a container # 查看容器詳細信息
kill Kill a running container # kill 指定 docker 容器
load Load an image from a tar archive # 從一個 tar 包中加載一個鏡像[對應 save]
login Register or Login to the docker registry server
# 注冊或者登陸一個 docker 源服務器
logout Log out from a Docker registry server # 從當前 Docker registry 退出
logs Fetch the logs of a container # 輸出當前容器日志信息
port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
# 查看映射端口對應的容器內部源端口
pause Pause all processes within a container # 暫停容器
ps List containers # 列出容器列表
pull Pull an image or a repository from the docker registry server
# 從docker鏡像源服務器拉取指定鏡像或者庫鏡像
push Push an image or a repository to the docker registry server
# 推送指定鏡像或者庫鏡像至docker源服務器
restart Restart a running container # 重啟運行的容器
rm Remove one or more containers # 移除一個或者多個容器
rmi Remove one or more images
# 移除一個或多個鏡像[無容器使用該鏡像才可刪除,否則需刪除相關容器才可繼續或 -f 強制刪除]
run Run a command in a new container
# 創建一個新的容器並運行一個命令
save Save an image to a tar archive # 保存一個鏡像為一個 tar 包[對應 load]
search Search for an image on the Docker Hub # 在 docker hub 中搜索鏡像
start Start a stopped containers # 啟動容器
stop Stop a running containers # 停止容器
tag Tag an image into a repository # 給源中鏡像打標簽
top Lookup the running processes of a container # 查看容器中運行的進程信息
unpause Unpause a paused container # 取消暫停容器
version Show the docker version information # 查看 docker 版本號
wait Block until a container stops, then print its exit code
# 截取容器停止時的退出狀態值