一、Docker基礎(chǔ)命令精講
Docker作為目前最流行的容器化技術(shù),其命令體系是掌握容器技術(shù)的基石。常用命令包括:
鏡像管理:
- docker pull <image> 從倉(cāng)庫(kù)拉取鏡像
- docker images 查看本地鏡像列表
- docker rmi <image> 刪除本地鏡像
容器操作:
- docker run [options] <image> 創(chuàng)建并啟動(dòng)容器
- docker ps [-a] 查看運(yùn)行中(或所有)容器
- docker start/stop/restart <container> 啟停容器
- docker exec -it <container> /bin/bash 進(jìn)入容器終端
- docker rm <container> 刪除容器
二、Dockerfile編寫與實(shí)踐
Dockerfile是構(gòu)建鏡像的藍(lán)圖,關(guān)鍵指令包括:
FROM指定基礎(chǔ)鏡像RUN執(zhí)行命令COPY/ADD復(fù)制文件WORKDIR設(shè)置工作目錄EXPOSE聲明端口CMD/ENTRYPOINT容器啟動(dòng)命令
示例Dockerfile:`dockerfile
FROM alpine:latest
RUN apk add --no-cache nginx
COPY nginx.conf /etc/nginx/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]`
三、生產(chǎn)環(huán)境部署策略
- 網(wǎng)絡(luò)配置:使用自定義網(wǎng)絡(luò)
docker network create實(shí)現(xiàn)容器隔離與通信 - 資源限制:通過
--memory、--cpus參數(shù)限制容器資源使用 - 健康檢查:在Dockerfile中添加
HEALTHCHECK指令 - 日志管理:配置日志驅(qū)動(dòng)和輪轉(zhuǎn)策略
四、容器數(shù)據(jù)卷與數(shù)據(jù)持久化
數(shù)據(jù)卷類型:
1. 綁定掛載:-v /host/path:/container/path
2. 命名卷:-v volume_name:/container/path
3. 匿名卷:-v /container/path
最佳實(shí)踐:
- 關(guān)鍵數(shù)據(jù)必須使用數(shù)據(jù)卷持久化
- 配置文件推薦使用綁定掛載
- 數(shù)據(jù)庫(kù)數(shù)據(jù)使用命名卷管理
五、備份與遷移方案
鏡像備份:`bash
docker save -o backup.tar image:tag
docker load -i backup.tar`
數(shù)據(jù)卷備份:`bash
docker run --rm -v volume_name:/data -v $(pwd):/backup \
alpine tar czf /backup/backup.tar.gz /data`
完整遷移流程:
1. 導(dǎo)出鏡像和數(shù)據(jù)卷
2. 在新的Docker環(huán)境中導(dǎo)入
3. 使用相同配置啟動(dòng)容器
六、服務(wù)編排與Docker Compose
通過docker-compose.yml定義多容器應(yīng)用:`yaml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: mysql:8.0
environment:
MYSQLROOTPASSWORD: password
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:`
啟動(dòng)服務(wù):docker-compose up -d
七、私有倉(cāng)庫(kù)搭建與管理
搭建私有Registry:`bash
docker run -d -p 5000:5000 --name registry \
-v /data/registry:/var/lib/registry registry:2`
鏡像推送與拉取:`bash
docker tag local-image localhost:5000/myimagedocker
push localhost:5000/myimage`
安全配置:
- 啟用TLS證書
- 配置HTTP基本認(rèn)證
- 設(shè)置訪問控制策略
八、數(shù)據(jù)處理服務(wù)容器化實(shí)踐
數(shù)據(jù)庫(kù)容器化示例:`bash
docker run -d --name mysql \
-e MYSQLROOTPASSWORD=secret \
-v mysql_data:/var/lib/mysql \
-p 3306:3306 mysql:8.0`
數(shù)據(jù)處理流水線:
1. 數(shù)據(jù)采集容器:運(yùn)行Python爬蟲或日志收集器
2. 處理容器:運(yùn)行Spark或Pandas數(shù)據(jù)處理任務(wù)
3. 存儲(chǔ)容器:MySQL/PostgreSQL/Redis
4. 可視化容器:Grafana或自定義Web界面
批處理任務(wù)調(diào)度:
使用 docker run --rm 運(yùn)行一次性處理任務(wù),結(jié)合cron實(shí)現(xiàn)定時(shí)調(diào)度。
九、安全最佳實(shí)踐
- 最小化鏡像:使用Alpine基礎(chǔ)鏡像
- 非root運(yùn)行:使用
USER指令 - 漏洞掃描:定期掃描鏡像安全漏洞
- 密鑰管理:使用Docker Secrets或外部密鑰管理服務(wù)
十、監(jiān)控與運(yùn)維
監(jiān)控方案:
- Docker原生命令:docker stats
- cAdvisor + Prometheus + Grafana
- 商業(yè)方案:Datadog, New Relic
日志收集:
- ELK/EFK棧
- 使用Fluentd日志驅(qū)動(dòng)
通過系統(tǒng)學(xué)習(xí)以上內(nèi)容,您將能夠掌握Docker在生產(chǎn)環(huán)境中的全鏈路應(yīng)用,從開發(fā)測(cè)試到部署運(yùn)維,構(gòu)建高效可靠的容器化服務(wù)體系。