linux實(shí)現(xiàn)開(kāi)機(jī)自動(dòng)啟動(dòng)Docker并運(yùn)行特定鏡像的容器
方法 1:使用 Docker 的 --restart 策略(簡(jiǎn)單高效,推薦)
這是最簡(jiǎn)潔直接的方案,利用 Docker 內(nèi)置的重啟策略來(lái)實(shí)現(xiàn):
?確保 Docker 開(kāi)機(jī)啟動(dòng)?:
sudo systemctl enable docker
?啟動(dòng)容器時(shí)添加重啟策略?:
docker run -d \ --name my-container \ --restart=unless-stopped \ # 關(guān)鍵參數(shù)! nginx:latest
(可選)如果容器已存在,更新配置:
docker update --restart=unless-stopped my-container
重啟策略 | 行為 |
---|---|
unless-stopped | 除非手動(dòng)停止,否則系統(tǒng)重啟后自動(dòng)運(yùn)行(推薦) |
always | 總是重啟(即使手動(dòng)停止后也會(huì)自動(dòng)重啟) |
on-failure | 僅當(dāng)容器非正常退出時(shí)重啟 |
方法 2:使用 Systemd 服務(wù)(更精細(xì)控制)
當(dāng)需要更復(fù)雜的啟動(dòng)順序或參數(shù)時(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 啟動(dòng)后運(yùn)行 Requires=docker.service [Service] Type=simple # 確保先移除舊容器(清理) ExecStartPre=-/usr/bin/docker rm -f my-container # 啟動(dòng)新容器 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
常見(jiàn)鏡像啟動(dòng)示例
1. 啟動(dòng) 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. 啟動(dòng) 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. 啟動(dòng)自定義應(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
重要注意事項(xiàng)
?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
驗(yàn)證和調(diào)試
1.檢查服務(wù)狀態(tài)?:
systemctl status docker-myapp.service
2.?查看容器日志?:
docker logs -f my-container
3.?測(cè)試重啟?:
sudo reboot # 重啟后驗(yàn)證 docker ps curl http://localhost
4.?診斷啟動(dòng)問(wèn)題?:
journalctl -u docker-myapp.service -b -n 100 --no-pager
最佳實(shí)踐建議
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 啟動(dòng) 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 # 使用命名卷
通過(guò)以上方法,您可以確保 CentOS 7 啟動(dòng)時(shí)自動(dòng)運(yùn)行 Docker 并啟動(dòng)指定的容器鏡像。對(duì)于大多數(shù)場(chǎng)景,方法 1 的 --restart=unless-stopped 是最簡(jiǎn)單可靠的解決方案。
以上就是linux實(shí)現(xiàn)開(kāi)機(jī)自動(dòng)啟動(dòng)Docker并運(yùn)行特定鏡像的容器的詳細(xì)內(nèi)容,更多關(guān)于linux自動(dòng)啟動(dòng)docker的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Linux與Windows跨平臺(tái)文件共享的實(shí)現(xiàn)方案
在智慧工廠(chǎng)的應(yīng)用場(chǎng)景中,常常需要通過(guò)工控機(jī)集中讀取多臺(tái)設(shè)備生成的日志來(lái)獲取運(yùn)行數(shù)據(jù),由于設(shè)備通常運(yùn)行 Windows 系統(tǒng),而工控機(jī)多采用 Linux 環(huán)境,所以本文介紹了Linux與Windows跨平臺(tái)文件共享的實(shí)現(xiàn)方案,需要的朋友可以參考下2025-04-04apache虛擬主機(jī)配置: 二級(jí)目錄訪(fǎng)問(wèn)跳轉(zhuǎn)到其他根文件夾
這篇文章主要介紹了apache虛擬主機(jī)配置: 二級(jí)目錄訪(fǎng)問(wèn)跳轉(zhuǎn)到其他根文件夾,需要的朋友可以參考下2016-11-11linux防火墻配置教程之訪(fǎng)問(wèn)外網(wǎng)web實(shí)驗(yàn)(3)
這篇文章主要為大家詳細(xì)介紹了linux防火墻配置教程之訪(fǎng)問(wèn)外網(wǎng)web的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04解決xmapp中Apache端口號(hào)占用問(wèn)題(Apache不能正常啟動(dòng))
小伙伴們安裝xmapp后發(fā)現(xiàn)Apache不能正常開(kāi)啟,下面小編給大家?guī)?lái)了xmapp中Apache端口號(hào)占用問(wèn)題的解決方法(Apache不能正常啟動(dòng)),需要的朋友參考下吧2017-05-05