Docker 容器
官方文檔:https://docs.docker.com/
1. Docker是什麼?
Docker 是開源的應用容器引擎,基于 Go 語言 并遵從Apache2.0協定開源。
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實作虛拟化。
容器是完全使用沙箱機制,互相之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
Q&A
a.什麼是容器?
依托與linux 核心功能的虛拟化技術
b. docker 是什麼?
能夠把應用程式自動部署到容器的開源引擎
c. docker 跟原有的工具有何差別?
- 傳統的部署模式是:安裝(包管理工具或者源碼包編譯)->配置->運作;
- Docker的部署模式是:複制->運作。
d. docker 會對伺服器端開發/部署帶來什麼變化?
實作更輕量級的虛拟化,友善快速部署
2. Docekr應用場景
web應用的自動化打包和釋出
自動化測試和持續內建、釋出
在服務型環境中部署和調整資料庫或其他應用
3. Docker 優勢:
持續內建、版本控制、可移植性、隔離性和安全性
4. Docker的安裝
Docker 安裝【41 開發伺服器安裝執行個體】
1. 安裝最新版
# install docker
1. curl -fsSL https://get.docker.com | sudo bash -s docker --mirror Aliyun
2. rm -rf get-docker.sh
安裝指定版本
檢視新版本清單:
yum list docker-ce --showduplicates | sort -r
選擇指定版本:
sudo yum install docker-ce-18.03.0.ce-1.el7
檢視安裝的版本:
docker -v
2.設定開機啟動
sudo systemctl enable docker
sudo systemctl restart docker
3.配置鏡像加速器(原有 dockerHub 鏡像源較慢)
建立檔案夾:
sudo mkdir -p /etc/docker
編輯 /etc/docker/daemon.json 檔案,沒有則建立,添加如下内容
{
"registry-mirrors": ["https://*****.mirror.aliyuncs.com"]
}
或者直接執行以下指令:
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://*****.mirror.aliyuncs.com"]
}
EOF
tips:https://*****.mirror.aliyuncs.com 是阿裡雲免費提供的鏡像加速位址,可在阿裡雲賬号"容器鏡像服務"中免費擷取
4.重新開機docker
sudo systemctl daemon-reload sudo systemctl restart docker
<<< 踩到的坑 >>>
1. 啟動時報錯:
xfsprogs版本低
yum install xfsprogs
2.修改 伺服器docker存儲庫位置(預設位置磁盤不夠,做了修改)
/data/dockerlib
修改 docker 預設存儲路徑(伺服器磁盤不夠才去修改)
# 關閉docker服務
systemctl stop docker.service
# 移動資料到新的目錄
mv /var/lib/docker /data/dockerlib
# 修改docker.service檔案,使用-g參數指定存儲位置
vim /usr/lib/systemd/system/docker.service
在 ExecStart=/usr/bin/dockerd 後添加 --graph /data/dockerlib
ExecStart=/usr/bin/dockerd --graph /data/dockerlib
# reload配置檔案
systemctl daemon-reload
# 重新開機docker
systemctl restart docker.service
【Docker的解除安裝】
docker 解除安裝不幹淨
例如:
官網介紹docker解除安裝的方法一般為
1> yum remove docker-ce -y
2> rm -fr /var/lib/docker*
但試過後依然無法安裝新版本,尤其是高版本降到低版本docker,問題在于docker并沒有解除安裝幹淨
正确的解除安裝方法如下:
1> yum list installed|grep docker 檢視
2> yum remove [docker名稱]
5. Docker之docker-compose 元件
Compose 是 Docker 容器進行編排的工具,定義和運作多容器的應用,可以一條指令啟動多個容器,使用Docker Compose不再需要使用shell腳本來啟動容器。
Compose 通過一個配置檔案來管理多個Docker容器,在配置檔案中,所有的容器通過services來定義,然後使用docker-compose腳本來啟動,停止和重新開機應用,和應用中的服務以及所有依賴服務的容器,非常适合組合使用多個容器進行開發的場景。
docker-compose預設的模闆檔案是 docker-compose.yml,其中定義的每個服務都必須通過 image 指令指定鏡像或 build 指令(需要 Dockerfile)來自動建構。
docker-compose的安裝
#下載下傳docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#給docker-compose執行權限
sudo chmod +x /usr/local/bin/docker-compose
#測試安裝是否成功,成功的話列印出docker-compose的版本資訊
docker-compose --version
<<< 踩到的坑 >>>
下載下傳docker-compose 時報錯
error:
curl: (35) Peer reports incompatible or unsupported protocol version.
原因:
curl 不相容或不支援的協定版本
解決方法(更新curl):
yum update -y nss curl libcurl
6. Docker 之網絡配置
首先,要實作網絡通信,機器需要至少一個網絡接口(實體接口或虛拟接口)來收發資料包;此外,如果不同子網之間要進行通信,需要路由機制。
Docker 中的網絡接口預設都是虛拟的接口。虛拟接口的優勢之一是轉發效率較高。 Linux 通過在核心中進行資料複制來實作虛拟接口之間的資料轉發,發送接口的發送緩存中的資料包被直接複制到接收接口的接收緩存中。對于本地系統和容器内系統看來就像是一個正常的以太網卡,隻是它不需要真正同外部網絡裝置通信,速度要快很多。
Docker 容器網絡就利用了這項技術。它在本地主機和容器内分别建立一個虛拟接口,并讓它們彼此連通(這樣的一對接口叫做 veth pair)
1. 檢視docker 獨立網絡
docker network ls
2. 建立獨立網絡環境
直接複制執行以下指令,可自定義網絡IP
#!/bin/bash
docker network create \
--driver=bridge \
--subnet=171.205.0.0/16 \
--ip-range=171.205.0.0/24 \
--gateway=171.205.0.1 \
zhh-net
tips:zhh-net 是建立網絡的名稱(可建立不同網絡,供不同容器組使用)
<<< 踩到的坑 >>>
在41伺服器建立網絡的時候,使用172網段,與主控端(即41伺服器)網段沖突,導緻主控端與容器網絡不通容器網絡
3. 删除網絡
docker network rm [name]
4. 檢視目前網絡使用
docker network inspect name/id
============Cloud 微服務 Docker 部署 執行個體=============
準備工作:
1. docker , docker compose 和 虛拟網絡(非必要,會預設) 環境安裝配置 完成
2. 搭建阿裡雲私有鏡像倉庫(有不同的雲都提供免費的鏡像服務,自行選擇)
a.建立阿裡雲賬号,免費擷取 容器鏡像服務
b.在容器鏡像服務中,建立命名空間來存放鏡像
c.在需要使用私有倉庫的 docker 機上登陸賬号
。
。
。
未完待續
下一步實作【一處建構,處處運作】