Docker 是一個(gè)流行的開源容器平臺(tái),通過(guò)將應(yīng)用程序及其依賴項(xiàng)打包在輕量級(jí)容器中,并運(yùn)行在宿主機(jī)上,在不同的操作系統(tǒng)、組件和工具之間實(shí)現(xiàn)了代碼的可靠性和可移植性。
# 新建容器并運(yùn)行(運(yùn)行在后臺(tái),不會(huì)停止)
$ docker run -itd --name=my-container nginx:latest
# 檢查容器運(yùn)行狀態(tài)
$ docker ps
# 停止容器
$ docker stop my-container
# 檢查容器狀態(tài)
$ docker ps -a
# 重新啟動(dòng)已停止的容器
$ docker start my-container
在實(shí)際應(yīng)用中,很多時(shí)候需要確保 Docker 容器在出現(xiàn)問(wèn)題或者容器維護(hù)期間不間斷地運(yùn)行。因此,Docker 提供了幾種不間斷服務(wù)的方法。
1. 自動(dòng)重新啟動(dòng)容器
Docker 允許在容器退出時(shí)自動(dòng)重新啟動(dòng)容器。這意味著如果一個(gè)服務(wù)崩潰或者容器在維護(hù)期間被停止了,Docker 會(huì)自動(dòng)重新啟動(dòng)它。通過(guò)以下命令啟動(dòng)容器時(shí),可以添加 --restart 選項(xiàng),并選擇容器退出時(shí)動(dòng)作。
$ docker run -itd --restart=always --name=my-container nginx:latest
2. 使用Docker Compose
Docker Compose 是一個(gè)工具,可讓您通過(guò) YAML 文件定義多個(gè)容器,并在共同的網(wǎng)絡(luò)中運(yùn)行它們。您可以使用 Compose 定義和部署多個(gè) Docker 容器,以便它們能夠一起在同一主機(jī)上運(yùn)行。
version: '3'
services:
redis:
image: "redis:alpine"
container_name: "redis"
restart: always
myapp:
build: .
image: '/myapp'
depends_on:
- redis
ports:
- "5000:5000"
restart: always
3. 使用Docker Swarm Mode
Docker Swarm Mode 是一種容器集群管理工具,可以在多臺(tái)計(jì)算機(jī)之間管理和編排容器。它可以創(chuàng)建容器、擴(kuò)展容器、部署服務(wù),還可以完成負(fù)載均衡和服務(wù)發(fā)現(xiàn)的功能。
在 Docker Swarm Mode 中,當(dāng)容器崩潰或關(guān)閉時(shí),Swarm 管理器將自動(dòng)重新啟動(dòng)它們。在模式中部署服務(wù)時(shí),您可以使用 --replicas 指定多個(gè)副本,并且 Swarm 會(huì)自動(dòng)管理復(fù)制品的副本始終保持運(yùn)行狀態(tài)。
# 初始化 Swarm
$ docker swarm init
# 部署服務(wù)
$ docker service create \
--name my-service \
--replicas 3 \
--detach=false \
nginx:latest
總之,Docker 的不間斷服務(wù)使得容器可以像傳統(tǒng)的服務(wù)器那樣穩(wěn)定并長(zhǎng)時(shí)間運(yùn)行。通過(guò)自動(dòng)重新啟動(dòng)、使用 Docker Compose 和 Docker Swarm Mode,我們可以保證服務(wù)在任何情況下都處于可用狀態(tài)。