1.1 環境不一致
我本地運行沒問題啊:由于環境不一致,導致相同的程序,運行結果卻不一致。
1.2 隔離性
哪個哥們又寫死循環了,怎么這么卡:在多用戶的操作系統下,會因為其他用戶的操作失誤影響到你自己編些的程序。
1.3 彈性伸縮
淘寶在雙11的時候,用戶量暴增:需要很多很多的運維人員去增加部署的服務器,運維成本過高的問題。
1.4 學習成本
學習一門技術,得先安裝啊:學習每一門技術都要先安裝響應的軟件,但是還有他所依賴的各種環境,安裝軟件成本快高過學習成本啦。
二、Docker介紹
2.1 Docker的由來
一幫年輕人創業,創辦了一家公司,2010年的專門做PAAS平臺。但是到了2013年的時候,像亞馬遜,微軟,Google都開始做PAAS平臺。到了2013年,公司資金鏈斷裂,不得不倒閉,于是將公司內的核心技術對外開源,核心技術就是Docker。由于開源了Docker,到了2014年的時候,得到了C輪的融資
9500W。于是公司開始全神貫注的維護Docker。
Docker主要作者-所羅門 |
---|
image.png
|
Docker的作者已經離開了維護Docker的團隊 |
---|
image.png
|
2.2 Docker的思想
集裝箱:會將所有需要的內容放到不同的集裝箱中,誰需要這些環境就直接拿到這個集裝箱就可以了。
標準化:
- 運輸的標準化:Docker有一個碼頭,所有上傳的集裝箱都放在了這個碼頭上,當誰需要某一個環境,就直接指派大海去搬運這個集裝箱就可以了。
- 命令的標準化:Docker提供了一些列的命令,幫助我們去獲取集裝箱等等操作。
- 提供了REST的API:衍生出了很多的圖形化界面,Rancher。
隔離性:Docker在運行集裝箱內的內容時,會在Linux的內核中,單獨的開辟一片空間,這片空間不會影響到其他程序。
中央倉庫|注冊中心:超級碼頭,上面放的就是集裝箱
鏡像:就是集裝箱
容器:運行起來的鏡像
三、Docker的安裝
3.1 下載Docker依賴的環境
想安裝Docker,需要先將依賴的環境全部下載,就像Maven依賴JDK一樣
參考:https://developer.aliyun.com/article/110806
如果已安裝,可以先刪除
[root@localhost ~]# yum -y remove docker-ce
[root@localhost local]# yum -y install yum-utils device-mapper-persistent-data lvm2
3.2 指定Docker鏡像源
默認下載Docker回去國外服務器下載,速度較慢,我們可以設置為阿里云鏡像源,速度更快
[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.3 安裝Docker
依然采用yum的方式安裝
[root@localhost ~]# yum makecache fast
[root@localhost ~]# yum -y install docker-ce
3.4 啟動Docker并測試
安裝成功后,需要手動啟動,設置為開機自啟,并測試一下Docker
# 啟動Docker服務
[root@localhost ~]# systemctl start docker
# 測試 hello-world
[root@localhost ~]# docker run hello-world
注:關閉防火墻之后docker需要重啟
[root@localhost ~]#service docker restart
四、Docker的中央倉庫【重點
】
Docker官方的中央倉庫:這個倉庫是鏡像最全的,但是下載速度較慢。
國內的鏡像網站:網易蜂巢,daoCloud等,下載速度快,但是鏡像相對不全。
https://c.163yun.com/hub#/home
http://hub.daocloud.io/ (推薦使用)
在公司內部會采用私服的方式拉取鏡像,需要添加配置,如下……
# 需要創建/etc/docker/daemon.json,并添加如下內容
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["ip:port"]
}
# 重啟兩個服務
systemctl daemon-reload
systemctl restart docker
五、鏡像的操作【重點
】
5.1 拉取鏡像
從中央倉庫拉取鏡像到本地
docker pull 鏡像名稱[:tag]
[root@localhost ~]# docker pull daocloud.io/library/tomcat:8.5.15-jre8
5.2 查看本地全部鏡像
查看本地已經安裝過的鏡像信息,包含標識,名稱,版本,更新時間,大小
[root@localhost ~]# docker images
5.3 刪除本地鏡像
鏡像會占用磁盤空間,可以直接手動刪除,表示通過查看獲取
docker rmi 鏡像的標識(需要先刪除該鏡像創建的容器)
[root@localhost ~]# docker rmi b8dfe9ade316
5.4 鏡像的導入導出
如果因為網絡原因可以通過硬盤的方式傳輸鏡像,雖然不規范,但是有效,但是這種方式導出的鏡像名稱和版本都是null,需要手動修改
# 將本地的鏡像導出
docker save -o 導出的路徑 鏡像id
# 導出到當前路徑,鏡像命名為:mytomcat
[root@localhost ~]# docker save -o ./mytomcat b8dfe9ade316
# 加載本地的鏡像文件
docker load -i 鏡像文件
[root@localhost ~]# docker load -i mytomcat
# 修改鏡像名稱
docker tag 鏡像id 新鏡像名稱:版本
[root@localhost ~]# docker tag b8dfe9ade316 tomcat:8.5
六、容器操作【重點
】
6.1 運行容器
運行容器需要制定具體鏡像,如果鏡像不存在,會直接下載
# 簡單操作
docker run 鏡像的標識|鏡像名稱[:tag]
# 常用的參數
docker run -d -p 宿主機端口:容器端口 --name 容器名稱 鏡像的標識|鏡像名稱[:tag]
# -d:代表后臺運行容器
# -p 宿主機端口:容器端口:為了映射當前Linux的端口和容器的端口
# --name 容器名稱:指定容器的名稱(自定義)
[root@localhost ~]# docker run -d -p 8888:8080 --name mytomcat8.5 b8dfe9ade316
# 測試:瀏覽器訪問 虛擬機ip:8888
6.2 查看正在運行的容器
查看全部正在運行的容器信息
docker ps [-qa]
# -a:查看全部的容器,包括沒有運行
# -q:只查看容器的標識
[root@localhost ~]# docker ps
6.3 查看容器日志
查看容器日志,以查看容器運行的信息
docker logs -f 容器id
# -f:可以滾動查看日志的最后幾行
[root@localhost ~]# docker logs -f 4411f56f1fbb
6.4 進入容器內容部
可以進入容器內部進行操作
docker exec -it 容器id bash
[root@localhost ~]# docker exec -it 4411f56f1fbb bash
# 退出當前容器 exit
root@4411f56f1fbb:/usr/local/tomcat# exit
6.5 復制內容到容器
將宿主機的文件復制到容器內部的指定目錄
docker cp 文件名稱 容器id:容器內部路徑
# 把主機root目錄下的a.txt文件拷貝到容器的temp目錄下(由于tomcat默認路徑在/usr/local/tomcat)
[root@localhost ~]# docker cp /root/a.txt 441:/usr/local/tomcat/temp
# 把容器的temp目錄下的a.txt拷貝到主機root目錄下
[root@localhost ~]# docker cp 441:/usr/local/tomcat/temp/a.txt /root
6.6 重啟&啟動&停止&刪除容器
容器的啟動,停止,刪除等操作,后續經常會使用到
# 重新啟動容器
[root@localhost ~]# docker restart 容器id
# 啟動停止運行的容器
[root@localhost ~]# docker start 容器id
# 停止指定的容器(刪除容器前,需要先停止容器)
[root@localhost ~]# docker stop 容器id
# 停止全部容器
[root@localhost ~]# docker stop $(docker ps -qa)
# 刪除指定容器
[root@localhost ~]# docker rm 容器id
# 刪除全部容器
[root@localhost ~]# docker rm $(docker ps -qa)