Docker簡介和安裝 Docker是什麼 Docker 是一個應用打包、分發、部署的工具 你也可以把它理解為一個輕量的虛擬機,它只虛擬你軟體需要的運行環境,多餘的一點都不要, 而普通虛擬機則是一個完整而龐大的系統,包含各種不管你要不要的軟體。 跟普通虛擬機的對比 | 特性 | 普通虛擬機 | Do ...
Docker簡介和安裝
Docker是什麼
Docker 是一個應用打包、分發、部署的工具
你也可以把它理解為一個輕量的虛擬機,它只虛擬你軟體需要的運行環境,多餘的一點都不要,
而普通虛擬機則是一個完整而龐大的系統,包含各種不管你要不要的軟體。
跟普通虛擬機的對比
特性 | 普通虛擬機 | Docker |
---|---|---|
跨平臺 | 通常只能在桌面級系統運行,例如 Windows/Mac,無法在不帶圖形界面的伺服器上運行 | 支持的系統非常多,各類 windows 和 Linux 都支持 |
性能 | 性能損耗大,記憶體占用高,因為是把整個完整系統都虛擬出來了 | 性能好,只虛擬軟體所需運行環境,最大化減少沒用的配置 |
自動化 | 需要手動安裝所有東西 | 一個命令就可以自動部署好所需環境 |
穩定性 | 穩定性不高,不同系統差異大 | 穩定性好,不同系統都一樣部署方式 |
打包、分發、部署
打包:就是把你軟體運行所需的依賴、第三方庫、軟體打包到一起,變成一個安裝包
分發:你可以把你打包好的“安裝包”上傳到一個鏡像倉庫,其他人可以非常方便的獲取和安裝
部署:拿著“安裝包”就可以一個命令運行起來你的應用,自動模擬出一摸一樣的運行環境,不管是在 Windows/Mac/Linux。
Docker部署的優勢
常規應用開發部署方式:自己在 Windows 上開發、測試 --> 到 Linux 伺服器配置運行環境部署。在學習一些東西的時候可以讓自己從複雜的部署和配置中解放出來,能夠全身心的去學習。
問題:我機器上跑都沒問題,怎麼到伺服器就各種問題了
用 Docker 開發部署流程:自己在 Windows 上開發、測試 --> 打包為 Docker 鏡像(可以理解為軟體安裝包) --> 各種伺服器上只需要一個命令部署好
優點:確保了不同機器上跑都是一致的運行環境,不會出現我機器上跑正常,你機器跑就有問題的情況。
Docker 通常用來做什麼
- 應用分發、部署,方便傳播給他人安裝。特別是開源軟體和提供私有部署的應用
- 快速安裝測試/學習軟體,用完就丟(類似小程式),不把時間浪費在安裝軟體上。例如 Redis / MongoDB / ElasticSearch / ELK
- 多個版本軟體共存,不污染系統,例如 Python2、Python3,Redis4.0,Redis5.0
- Windows 上體驗/學習各種 Linux 系統
重要概念:鏡像、容器
鏡像:可以理解為軟體安裝包,可以方便的進行傳播和安裝。
容器:軟體安裝後的狀態,每個軟體運行環境都是獨立的、隔離的,稱之為容器。
Windows安裝
寫在前面,如果直接在windows上安裝docker的話,需要註意vm虛擬機是不是在掛載狀態,安裝docker後,掛載狀態的虛擬機就無法啟動了,只能重啟
桌面版:https://www.docker.com/products/docker-desktop
伺服器版:https://docs.docker.com/engine/install/#server
-
安裝後重啟前先做如下操作:
-
控制面板->程式->啟用或關閉 windows 功能,開啟 Windows 虛擬化和 Linux 子系統(WSL2)
-
設置開機啟動 Hypervisor
bcdedit /set hypervisorlaunchtype auto
註意要用管理員許可權打開 PowerShell
-
確保 BIOS 已開啟虛擬化,下圖檢查是否已開啟好
-
Linux安裝
- 環境準備
yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim -y
- 安裝docker
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
- 更新本地鏡像源
# 設置docker鏡像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
#安裝docker
yum install -y docker-ce
-
啟動docker
systemctl start docker # 啟動docker服務 systemctl stop docker # 停止docker服務 systemctl restart docker # 重啟docker服務
[luomuchen@docker201 /]$ systemctl status docker ● docker.service - Docker Application Container Engine Active: active (running) since 二 2022-10-25 15:22:09 CST; 1h 11min ago #active (running)為啟動成功
設置鏡像源
windows
鏡像加速器 | 鏡像加速器地址 |
---|---|
Docker 中國官方鏡像 | https://registry.docker-cn.com |
DaoCloud 鏡像站 | http://f1361db2.m.daocloud.io |
Azure 中國鏡像 | https://dockerhub.azk8s.cn |
科大鏡像站 | https://docker.mirrors.ustc.edu.cn |
阿裡雲 | https://<your_code>.mirror.aliyuncs.com |
七牛雲 | https://reg-mirror.qiniu.com |
網易雲 | https://hub-mirror.c.163.com |
騰訊雲 | https://mirror.ccs.tencentyun.com |
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.ccs.tencentyun.com"
]
Linux
#創建文件夾
mkdir -p /etc/docker
#在文件夾中創建一個文件
touch daemon.json
#寫入配置
vim daemon.json
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.ccs.tencentyun.com"
]
}
#重新載入文件
sudo systemctl daemon-reload
#重啟docker
sudo systemctl restart docker
Docker快速安裝軟體
直接安裝的缺點
- 安裝麻煩,可能有各種依賴,運行報錯。例如:WordPress,ElasticSearch,Redis,ELK
- 可能對 Windows 並不友好,運行有各種相容問題,軟體只支持 Linux 上跑
- 不方便安裝多版本軟體,不能共存。
- 電腦安裝了一堆軟體,拖慢電腦速度。
- 不同系統和硬體,安裝方式不一樣
Docker 安裝的優點
- 一個命令就可以安裝好,快速方便
- 有大量的鏡像,可直接使用
- 沒有系統相容問題,Linux 專享軟體也照樣跑
- 支持軟體多版本共存
- 用完就丟,不拖慢電腦速度
- 不同系統和硬體,只要安裝好 Docker 其他都一樣了,一個命令搞定所有
安裝Redis
使用命令行執行:
docker run -d -p 6379:6379 --name redis redis:latest
命令參考:https://docs.docker.com/engine/reference/commandline/run/
安裝Workpress
-
workpress需要掛載資料庫,所以這裡採用docker-compose.yml的方式
version: '3.1' services: wordpress: image: wordpress restart: always ports: - 8080:80 environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: exampleuser WORDPRESS_DB_PASSWORD: examplepass WORDPRESS_DB_NAME: exampledb volumes: - wordpress:/var/www/html db: image: mysql:5.7 restart: always environment: MYSQL_DATABASE: exampledb MYSQL_USER: exampleuser MYSQL_PASSWORD: examplepass #MYSQL_ROOT_PASSWORD: 123456 #如果mysql報錯無法啟動,則加上這一條。 MYSQL_RAND::OM_ROOT_PASSWORD: '1' volumes: - db:/var/lib/mysql volumes: wordpress: db:
執行命令行
docker-compose up -d
-
註意:這裡的docker-compose.yml存放目錄不能包含中文,否則會報錯,命令行要在當前目錄下執行。