1. 程式人生 > >centos 使用 systemctl 使 docker 容器(container)開機啟動

centos 使用 systemctl 使 docker 容器(container)開機啟動

docker 提供了簡單的操作容器的命令。但是他操作容器的命令不屬於系統。

由於太簡單,必然有很多不足。例如 啟動順序、依賴性檢查、失敗服務恢復等,均需要一個成熟的系統服務管理軟體來完成。

本文使用redis作為例子:
第一步:下載映象

# docker pull docker.io/redis

第二步:啟動映象

# docker run -d --name redis_server -p 6379:6379 redis

第三步:進入/etc/systemd/system/目錄並建立docker-container\@.service檔案

#cd /etc/systemd/system/
#vi /etc/systemd/system/docker-container\@.service

注意:不要以為docker-container\@.service缺少了什麼,他的名字就叫這個。

將一下內容複製進去

[Unit]
Description=Docker Container %I
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a %i
ExecStop=/usr/bin/docker stop -t 2 %i

[Install]
WantedBy=default.target

第四步:設定開機啟動(注意:開機先啟動docker才能再啟動容器)

# systemctl enable docker.service
# systemctl enable docker-container\@redis.service

第五步:檢查是否能正常啟動

# systemctl start docker-container\@redis.service
# systemctl status docker-container\@redis.service

第四第五步 呼叫的docker-container\@redis.service服務,實際上是docker-container\@.service 服務。redis替換了第三步內容的 %i
最後重啟試試。


以下方法僅用於未啟動的容器

要是需要在容器中加入環境變數的話, 就必須使用docker run 而不是docker start了,請參考一下內容。
特別注意:
1、使用 systemctl stop docker-container\@redis_server.service 是會刪除容器的,刪除了容器的內容就沒有了。
2、docker run的地方不能加-d,加了-d就是分離模式了。

vi /etc/systemd/system/docker-container\@redis_server.service

[Service]
ExecStart=
ExecStart=/usr/bin/docker run --env foo=bar --name %i redis
ExecStopPost=/usr/bin/docker rm -f %i