Docker 容器
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 機上登陸賬號
。
。
。
未完待續
下一步實現【一處構建,處處運行】