1、Docker介紹
假如一臺物理機器有128核,多個服務可以同時部署在該機器上,每個服務分配不同的核數,比如電商搞活動的時候,下單服務流量會變大,則可以把用戶服務的核數臨時抽一部分給下單服務,不用去買機器解決這個事;
Docker是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口;
簡單來說就是:
1、可以快速部署啓動應用
2、實現虛擬化,完整資源隔離
3、一次編寫,四處運行(有一定的限制,比如Docker是基於Linux 64bit的,無法在32bit的linux/Windows/unix環境下使用)
2、爲什麼用Docker
- 提供一次性的環境,假如需要安裝Mysql,則需要安裝很多依賴庫、版本等,如果使用Docker則通過鏡像就可以直接啓動運行
- 快速動態擴容,使用docker部署了一個應用,可以製作成鏡像,然後通過Dokcer快速啓動
- 組建微服務架構,可以在一個機器上模擬出多個微服務,啓動多個應用
- 更好的資源隔離和共享
一句話:開箱即用,快速部署,可移植性強,環境隔離
3、Centos7安裝Docker
阿里雲(centos7)安裝Docker手冊:
https://help.aliyun.com/document_detail/51853.html?spm=a2c4g.11186623.6.820.RaToNY
安裝yum源:
# yum install epel-release –y
# yum clean all
# yum list
安裝並運行Docker:
# yum install docker-io –y
# systemctl start docker
檢查安裝結果:
# docker info
出現Docker信息
Docker守護進程(後臺進程)管理
# systemctl start docker #運行Docker守護進程
# systemctl stop docker #停止Docker守護進程
# systemctl restart docker #重啓Docker守護進程
其他centos安裝Docker時的一些錯誤解決方式
https://blog.csdn.net/daluguishou/article/details/52080250
4、Docker鏡像、倉庫、容器
鏡像Docker images:
容器運行時的只讀模板,操作系統+軟件運行環境+用戶程序
容器Docker containers:
通過鏡像生成容器
容器包含了某個應用運行所需要的全部環境
倉庫Docker registeries:
用來保存鏡像,有公有和私有倉庫,好比Maven的中央倉庫和本地私服;
Docker中央倉庫:https://hub.docker.com/
三者關係:
對比面向對象的方式
Dokcer 裏面的鏡像 : Java裏面的類 Class User.class
Docker 裏面的容器 : Java裏面的對象 Object new出來的user對象
通過類創建對象,通過鏡像創建容器
5、Docker容器常用命令實戰
常用命令(安裝部署好Dokcer後,執行的命令是docker開頭),下邊的xxx指的是鏡像名稱
5.1、搜索、下載(拉取)、刪除鏡像:
docker search xxx
eg:搜索RabbitMQ鏡像
docker search rabbitmq:management
列出當前系統存在的鏡像
docker images
刪除鏡像
#rmi後加 -f 可以強制刪除
docker rmi IMAGE_NAME
也可以根據ID刪除
拉取鏡像:
# xxx是具體某個鏡像名稱(格式 REPOSITORY:TAG)
docker pull xxx
eg:拉取RabbitMQ鏡像
docker pull rabbitmq:management
這是因爲默認倉庫在國外,我們可以改爲國內倉庫源
vi /etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
國內倉庫地址:
Docker中國區官方鏡像
https://registry.docker-cn.com
網易
http://hub-mirror.c.163.com
中國科技大學
https://docker.mirrors.ustc.edu.cn
阿里雲容器 服務
https://cr.console.aliyun.com/
改了之後重啓docker,重新拉取
下載完成後:
5.2、運行容器
# 運行一個容器:下邊兩種方式都可以
docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:management
docker run -d --name "maltose" -p 5672:5672 -p 15672:15672 rabbitmq:management
# docker run - 運行一個容器
# -d 後臺運行
# -p 端口映射
# rabbitmq:management (格式 REPOSITORY:TAG),如果不指定tag,默認使用最新的
# --name "xxx"
返回一個id值,即容器ID
查看當前運行的容器
docker ps
在瀏覽器直接訪問RabbitMQ
http://192.168.237.130:15672/
用戶名密碼默認都是guest
檢查容器內部信息:
docker inspect 容器名稱(就是--name後的值,也可以是id值)
停止某個容器:
docker stop 容器名稱
啓動某個容器:
docker start 容器名稱
移除某個容器:
docker rm 容器名稱 (容器必須是停止狀態)
由於屏幕的問題,name的值一定要找對
5.3、使用Docker部署Nginx服務器
獲取鏡像
docker search nginx
拉取鏡像
docker pull nginx
啓動nginx(這裏啓動多個nginx)
docker run -d --name "maltose1" -p 8088:80 nginx
docker run -d --name "maltose2" -p 8089:80 nginx
docker run -d --name "maltose3" -p 8090:80 nginx
訪問:
如果是阿里雲服務,記得配置安全組,騰訊雲也需要配置,這個就是一個防火牆
linux下訪問URL地址:
curl "http://127.0.0.1:8088"
瀏覽器也可以訪問到:
http://192.168.237.130:8088/
5.4、公司Docker鏡像倉庫使用
公共鏡像倉庫:
官方:https://hub.docker.com/,基於各個軟件開發或者有軟件提供商開發的
非官方:其他組織或者公司開發的鏡像,供大家免費試用(前邊提到過:網易、阿里等)
私有鏡像倉庫:
用於存放公司內部的鏡像,不提供給外部試用;
eg:公司內部使用SpringCloud 開發了一個支付系統後,做成一個鏡像 (操作系統+軟件運行環境+用戶程序)
6、構建自己的私有鏡像倉庫
瞭解:
jenkins自動構建————自動將自己的私有鏡像部署到服務器裏;
阿里雲Docker鏡像地址
點擊"管理控制檯"後進入如下界面,先開通一下倉庫服務
開通後:
創建鏡像倉庫
完成創建:
可以在這裏看到操作步驟:
操作指南:
這裏將本地的RabbitMQ作爲我們的私有鏡像推送到阿里雲私有倉庫,關於如何將自己的鏡像打包,下次總結
本地鏡像:
1、登錄
docker login --username=東風麥芽糖 registry.cn-shenzhen.aliyuncs.com
#會提示輸入密碼
2、推送
#先打一個TAG: docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/maltose/maltose_images:[鏡像版本號]
docker tag 2f415b0e9a6e registry.cn-shenzhen.aliyuncs.com/maltose/maltose_images:ma_rabbitmq-v1.0.2
#推送
docker push registry.cn-shenzhen.aliyuncs.com/maltose/maltose_images:ma_rabbitmq-v1.0.2
3、拉取鏡像
線上服務器拉取鏡像:
docker login --username=東風麥芽糖 registry.cn-shenzhen.aliyuncs.com
docker pull registry.cn-shenzhen.aliyuncs.com/maltose/maltose_images:ma_rabbitmq-v1.0.2
啓動容器:
docker run -d --name "maltose" -p 5672:5672 -p 15672:15672 2f415b0e9a6e