linux實現(xiàn)開機自動啟動Docker并運行特定鏡像的容器
方法 1:使用 Docker 的 --restart 策略(簡單高效,推薦)
這是最簡潔直接的方案,利用 Docker 內(nèi)置的重啟策略來實現(xiàn):
?確保 Docker 開機啟動?:
sudo systemctl enable docker
?啟動容器時添加重啟策略?:
docker run -d \ --name my-container \ --restart=unless-stopped \ # 關(guān)鍵參數(shù)! nginx:latest
(可選)如果容器已存在,更新配置:
docker update --restart=unless-stopped my-container
| 重啟策略 | 行為 |
|---|---|
| unless-stopped | 除非手動停止,否則系統(tǒng)重啟后自動運行(推薦) |
| always | 總是重啟(即使手動停止后也會自動重啟) |
| on-failure | 僅當(dāng)容器非正常退出時重啟 |
方法 2:使用 Systemd 服務(wù)(更精細(xì)控制)
當(dāng)需要更復(fù)雜的啟動順序或參數(shù)時使用:
?創(chuàng)建服務(wù)文件?:
sudo vi /etc/systemd/system/docker-myapp.service
添加以下內(nèi)容?(替換為你的鏡像和參數(shù)):
[Unit] Description=My Docker Container Service After=docker.service # 確保在 Docker 啟動后運行 Requires=docker.service [Service] Type=simple # 確保先移除舊容器(清理) ExecStartPre=-/usr/bin/docker rm -f my-container # 啟動新容器 ExecStart=/usr/bin/docker run \ --name my-container \ -p 80:80 \ nginx:latest # 停止命令 ExecStop=/usr/bin/docker stop my-container # 清理命令 ExecStopPost=/usr/bin/docker rm my-container TimeoutStartSec=90 Restart=on-failure [Install] WantedBy=multi-user.target
?啟用服務(wù)?:
sudo systemctl daemon-reload sudo systemctl enable docker-myapp.service sudo systemctl start docker-myapp.service
常見鏡像啟動示例
1. 啟動 MySQL 容器
docker run -d \ --name mysql-db \ --restart=unless-stopped \ -e MYSQL_ROOT_PASSWORD=123456 \ -p 3306:3306 \ -v /data/mysql:/var/lib/mysql \ mysql:8.0
2. 啟動 Nginx 容器
docker run -d \ --name web-server \ --restart=unless-stopped \ -p 80:80 \ -p 443:443 \ -v /path/to/html:/usr/share/nginx/html \ -v /path/to/nginx.conf:/etc/nginx/nginx.conf \ nginx:alpine
3. 啟動自定義應(yīng)用
docker run -d \ --name my-app \ --restart=unless-stopped \ -p 8080:3000 \ -e ENV=production \ my-registry.com/my-custom-image:v1.2
重要注意事項
?1.安全加固?:
# 限制容器權(quán)限 --security-opt="no-new-privileges" \ --read-only \ --cap-drop=ALL
?.2資源限制?:
--cpus="1.0" \ --memory="512m" \ --memory-swap="1g"
3.?日志管理?:
--log-opt max-size=10m \ --log-opt max-file=3
4.?健康檢查?:
docker inspect --format='{{json .State.Health}}' my-container
驗證和調(diào)試
1.檢查服務(wù)狀態(tài)?:
systemctl status docker-myapp.service
2.?查看容器日志?:
docker logs -f my-container
3.?測試重啟?:
sudo reboot # 重啟后驗證 docker ps curl http://localhost
4.?診斷啟動問題?:
journalctl -u docker-myapp.service -b -n 100 --no-pager
最佳實踐建議
1.?使用 Docker Compose(生產(chǎn)推薦)??:
version: '3'
services:
web:
image: nginx:alpine
restart: unless-stopped
ports:
- "80:80"
db:
image: mysql:8.0
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: secret
然后設(shè)置 systemd 啟動 compose:
ExecStart=/usr/local/bin/docker-compose -f /path/to/docker-compose.yml up
2.?版本控制?:
- 始終指定容器標(biāo)簽(如 nginx:1.23-alpine 而非 nginx:latest)
- 在 Dockerfile 或 compose 文件中固化版本
3.?數(shù)據(jù)持久化?:
-v mysql_data:/var/lib/mysql # 使用命名卷
通過以上方法,您可以確保 CentOS 7 啟動時自動運行 Docker 并啟動指定的容器鏡像。對于大多數(shù)場景,方法 1 的 --restart=unless-stopped 是最簡單可靠的解決方案。
以上就是linux實現(xiàn)開機自動啟動Docker并運行特定鏡像的容器的詳細(xì)內(nèi)容,更多關(guān)于linux自動啟動docker的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Linux與Windows跨平臺文件共享的實現(xiàn)方案
在智慧工廠的應(yīng)用場景中,常常需要通過工控機集中讀取多臺設(shè)備生成的日志來獲取運行數(shù)據(jù),由于設(shè)備通常運行 Windows 系統(tǒng),而工控機多采用 Linux 環(huán)境,所以本文介紹了Linux與Windows跨平臺文件共享的實現(xiàn)方案,需要的朋友可以參考下2025-04-04
apache虛擬主機配置: 二級目錄訪問跳轉(zhuǎn)到其他根文件夾
這篇文章主要介紹了apache虛擬主機配置: 二級目錄訪問跳轉(zhuǎn)到其他根文件夾,需要的朋友可以參考下2016-11-11
linux防火墻配置教程之訪問外網(wǎng)web實驗(3)
這篇文章主要為大家詳細(xì)介紹了linux防火墻配置教程之訪問外網(wǎng)web的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04
解決xmapp中Apache端口號占用問題(Apache不能正常啟動)
小伙伴們安裝xmapp后發(fā)現(xiàn)Apache不能正常開啟,下面小編給大家?guī)砹藊mapp中Apache端口號占用問題的解決方法(Apache不能正常啟動),需要的朋友參考下吧2017-05-05

