一.Docker的由來
Docker 最初是 dotCloud 公司創始人Solomon Hykes 在法國期間發起的一個公司內部項目。
2010年的專門做PAAS平臺,但是到了2013年的時候,像亞馬遜,微軟,Google都開始做PAAS平臺。
到了2013年,公司資金鏈斷裂,不得不倒閉,于是將公司內的核心技術對外開源,核心技術就是Docker。
由于開源了Docker,到了2014年的時候,得到了各輪融資,于是公司開始全神貫注的維護Docker。
二.Docker的思想
Docker是一種容器化技術,也是一種虛擬化技術
封裝:將需要的操作系統,環境,軟件封裝到一個鏡像中。
標準化:
運輸的標準化:Docker提供了中央倉庫,所有官方的鏡像都放在了這個中央倉庫中,當需要使用某一個鏡像時,通過相應的方式拉取即可。
命令的標準化:Docker提供了一些列的命令,幫助我們去獲取鏡像,管理容器等等操作。
提供了REST的API:基于標準REST的API衍生出了很多的圖形化界面,如Rancher等。
隔離性:Docker在運行鏡像時,會在Linux的內核中,單獨的開辟一片空間,這片空間不會影響到其他程序。容器是完全使用沙箱機制,相互隔離,容器性能開銷極低。
鏡像(Image):Docker 鏡像(Image),就相當于是一個 root 文件系統。比如官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統的 root 文件系統。
容器(Container):鏡像(Image)和容器(Container)的關系,就像是面向對象程序設計中的類和對象一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。
倉庫(Repository):倉庫可看成一個代碼控制中心,用來保存鏡像。
三、Docker的安裝
3.1 下載Docker依賴的環境
安裝Docker,需要先將依賴的環境全部下載,就像Maven依賴JDK一樣。
yum -y install yum-utils device-mapper-persistent-data lvm2
3.2 指定Docker鏡像源
默認情況下,下載Docker會從國外服務器下載,速度較慢,我們可以設置為阿里云鏡像源,速度更快。
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.3 安裝Docker
采用yum的方式安裝。
yum makecache fast
yum -y install docker-ce
3.4 啟動Docker并測試
安裝成功后,需要手動啟動,設置為開機自啟,并測試。
# 啟動Docker服務
systemctl start docker
# 設置開機自動啟動
systemctl enable docker
# 查看Docker服務狀態
systemctl status docker
#不開機自動啟動docker
systemctl disable docker
#停止docker
systemctl stop docker
# 重啟
systemctl restart docker
?
四、Docker的中央倉庫【重點
】
Docker官方的中央倉庫:這個倉庫是鏡像最全的,但是下載速度較慢。
https://hub.docker.com/
國內的鏡像網站:網易蜂巢,daoCloud等,下載速度快,但是鏡像相對不全。
登錄
Hub · DaoCloud (推薦使用)
在公司內部會采用私服的方式拉取鏡像,需要添加配置,如下……
# 設置從哪個鏡像源下載鏡像
vi /etc/docker/daemon.json?
?
# 設置從ustc下載鏡像, 速度快
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
?
# 重啟docker服務
systemctl restart docker
# 需要創建或修改/etc/docker/daemon.json,并添加如下內容,"ip:port"可以編寫多個。
{"registry-mirrors": ["https://registry.docker-cn.com"],"insecure-registries": ["ip:port"] ?
}
?
# 重啟docker服務
systemctl restart docker
五、鏡像的操作【重點
】
5.1 搜索鏡像
搜索中央倉庫鏡像
docker search 鏡像名稱
5.2 拉取鏡像
從中央倉庫拉取鏡像到本地
docker pull 鏡像名稱[:tag]
?
# 舉個栗子:docker pull daocloud.io/library/tomcat:8.5.15-jre8
5.3 查看本地全部鏡像
查看本地已經安裝過的鏡像信息,包含標識,名稱,版本,更新時間,大小
docker images
5.4 刪除本地鏡像
鏡像會占用磁盤空間,可以直接手動刪除,
標識
通過 查看獲取
docker rmi 鏡像的標識 | 鏡像名稱:tag
docker rmi b8dfe9ade316
docker rmi daocloud.io/library/tomcat:8.5.15-jre8
5.5 鏡像的導入導出
如果出現網絡故障,可以采過硬盤的方式傳輸鏡像,雖然不規范,但是有效。
但是這種方式導出的鏡像名稱和版本都是null,需要手動修改
# 將本地的鏡像導出
docker save -o 導出的路徑 鏡像id
doeker save -o /usr/local/abc.tar b8dfe9ade316
# 加載本地的鏡像文件
docker load -i 鏡像文件
docker load -i /usr/local/abc.tar
# 修改鏡像名稱
docker tag 鏡像id 新鏡像名稱:版本
docker tag b8dfe9ade316 mytomcat:1.0
六、容器操作【重點
】
6.1 運行容器
運行容器需要指定具體鏡像,如果鏡像不存在,會直接下載
# 簡單操作
docker run 鏡像的標識 | 鏡像名稱[:tag]
docker run b8dfe9ade316
docker run daocloud.io/library/tomcat:8.5.15-jre8
# 常用的參數
docker run -di -p 宿主機端口:容器端口 --name 容器名稱 鏡像的標識|鏡像名稱[:tag]
docker run -di -p 8090:8080 --name my_container b8dfe9ade316
# -i 表示運行容器
# -d:代表后臺運行容器(守護式進程)
# -t: 為容器重新分配一個偽輸入終端,通常與 -i 同時使用。
# -it : 創建交互式進程
# -p 宿主機端口:容器端口:為了映射當前Linux的端口和容器的端口
# --name 容器名稱:指定容器的名稱
守護式進程: 創建容器,自動后臺運行容器
交互式進程:創建容器,自動進入容器,退出容器后,自動關閉容器
6.2 查看正在運行的容器
查看全部正在運行的容器信息
docker ps [-qa]
# -a:查看全部的容器,包括沒有運行
# -q:只查看容器的標識
6.3 查看容器日志
查看容器日志,以查看容器運行的信息
docker logs -f 容器id
# -f:可以滾動查看日志的最后幾行
6.4 進入容器內容部
可以進入容器內部進行操作
docker exec -it 容器id bash
docker exec -it 容器名稱 bash
6.5 復制內容到容器
將宿主機的文件復制到容器內部的指定目錄
docker cp 文件名稱 容器id:容器內部路徑
6.6 重啟&啟動&停止&刪除容器
容器的啟動,停止,刪除等操作,后續經常會使用到
# 重新啟動容器
docker restart 容器id
?
# 啟動停止運行的容器
docker start 容器id
?
# 停止指定的容器(刪除容器前,需要先停止容器)
docker stop 容器id
# 停止全部容器
docker stop $(docker ps -qa)
?
# 刪除指定容器
docker rm 容器id
# 刪除全部容器
docker rm $(docker ps -qa)
七、Docker應用
7.1 Docker安裝Tomcat
運行Tomcat容器,為部署SSM工程做準備
docker run -d -p 8080:8080 --name tomcat daocloud.io/library/tomcat:8.5.15-jre8
7.2 Docker安裝MySQL
運行MySQL容器,為部署SSM工程做準備
docker run -d -p 3307:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 daocloud.io/library/mysql:5.7.4
?
# 宿主機中通過 3366連接 容器中的mysql
[root@localhost logs]# mysql -uroot -P 3366 -proot -h 192.168.1.135