单机环境下的服务治理与编排
·
一、什么是 Docker Compose
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它通过一个 YAML 格式的配置文件(通常为 docker-compose.yml)来声明式地定义应用的服务、网络和存储卷等。其主要作用是简化单机环境下多容器应用的部署与管理,适合开发、测试以及小型生产环境。
Compose 项目管理命令的使用
up:创建项目并启动容器ls:列出可管理的项目images:列出项目使用的镜像ps:显示项目中容器的状态logs:查看项目中容器的日志start|stop|restart:启动项目 | 停止项目 | 重启项目down:删除项目容器及网络
# 创建工作目录并进入该目录
mkdir test ; cd test
编写docker-compose.yaml文件
name: web
services:
websvc:
container_name: nginx
image: myos:nginx
使用 Docker Compose 管理项目
# -f:指定docker-compose.yaml文件的路径
docker compose -f test/docker-compose.yaml up -d
[+] Running 2/2
✔ Network web_default Created 1.5s
✔ Container nginx Started 1.3s
# 查看当前可管理的项目
docker compose ls -a
NAME STATUS CONFIG FILES
web running(1) /root/test/docker-compose.yaml
# 查看项目的状态 -p:指定项目名
docker compose -p web ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
nginx myos:nginx "nginx -g 'daemon of…" websvc 51 seconds ago Up 50 seconds 80/tcp
# 查看项目使用的镜像
docker compose -p web images
CONTAINER REPOSITORY TAG IMAGE ID SIZE
nginx myos nginx 399bd2cbc51c 265MB
# 停止、启动、重启项目
docker compose -p web stop
[+] Stopping 1/1
✔ Container nginx Stopped 0.5s
docker compose -p web start
[+] Running 1/1
✔ Container nginx Started 1.1s
docker compose -p web restart
[+] Restarting 1/1
✔ Container nginx Started 2.5s
# 查看项目中容器的日志
docker compose -p web logs
# 删除项目容器及网络
docker compose -p web down
二、Compose 语法
container_name:指定容器名称image:指定为镜像名称或镜像 IDports:暴露端口信息volumes:数据卷,支持volume、bind、tmpfs、npipenetwork_mode:设置网络模式environment:设置环境变量restart:容器保护策略,always、no、on-failurecommand:覆盖容器启动后默认执行的命令healthcheck:配置服务健康检测depends_on:服务依赖关系service_[started|healthy|comfpleted_successfully]
容器服务编排示例
测试文件
<pre>
<?PHP
//phpinfo();
//$arr = array("id" => random_int(0000,9999));
foreach (array("REMOTE_ADDR", "REQUEST_METHOD", "HTTP_USER_AGENT",
"REQUEST_URI") as $i) {
$arr[$i] = $_SERVER[$i];
}
if($_SERVER['REQUEST_METHOD']=="POST"){
$arr += $_POST;
}else{
$arr += $_GET;
}
print_R($arr);
print_R("php_host: \t".gethostname()."\n");
$n = 0;
$start = 1;
$end = isset($_GET["id"])? $_GET["id"] : 10000 ;
for($num = $start; $num <= $end; $num++) {
if ( $num == 1 ) continue;
for ($i = 2; $i <= sqrt($num); $i++) {
if ($num % $i == 0) continue 2;
}
$n++;
}
print_R($n."\n");
?>
修改Compose文件
name: web
services:
websvc:
container_name: nginx
# 默认在私有镜像仓库的library下拉取镜像,若不是则需带标签或者写绝对路径
image: myos:nginx
ports:
- 80:80
environment:
- "TZ=Asia/Shanghai"
volumes:
- type: bind
# 此目录下的nginx配置文件需配置动静分离
source: /var/webconf/
target: /usr/local/nginx/conf/
- type: bind
# 网页文件根目录
source: /var/webroot/
target: /usr/local/nginx/html/
phpsvc:
container_name: php-fpm
image: myos:php-fpm
restart: always
network_mode: "service:websvc"
volumes:
- type: bind
source: /var/webroot/
target: /usr/local/nginx/html/
验证
docker compose -f test/docker-compose.yaml up -d
[+] Running 2/2
✔ Container nginx Started 0.6s
✔ Container php-fpm Started 1.1s
docker compose ls -a
NAME STATUS CONFIG FILES
web running(2) /root/test/docker-compose.yaml
docker compose -p web ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
nginx myos:nginx "nginx -g 'daemon of…" websvc 59 seconds ago Up 58 seconds 0.0.0.0:80->80/tcp, [::]:80->80/tcp
php-fpm myos:php-fpm "/usr/sbin/php-fpm -…" phpsvc 59 seconds ago Up 58 seconds
# 查看动静分离效果
curl http://localhost/info.php
<pre>
Array
(
[REMOTE_ADDR] => 172.18.0.1
[REQUEST_METHOD] => GET
[HTTP_USER_AGENT] => curl/7.76.1
[REQUEST_URI] => /info.php
)
php_host: 1a15c562f055
1229
# 删除项目及网络
docker compose -p web down
[+] Running 3/3
✔ Container php-fpm Removed 0.1s
✔ Container nginx Removed 0.3s
✔ Network web_default Removed
嵌入式脚本示例
name: testsvc
services:
initsvc:
container_name: init
image: rockylinux:9
# 以下命令会覆盖启动容器的默认指令
command:
- sh
- -c
- |
for i in {1..9}
do
sleep 1
# $${HOSTNAME}:用于查看容器内的主机名
echo "${HOSTNAME} && $${HOSTNAME}"
done
phpsvc:
container_name: php
image: myos:php-fpm
healthcheck: # 定义健康检查
test: # 健康检查指令
- CMD
- sh
- -c
- exit [0|1] # 通过退出值判断健康检查状态,0表示成功,其他表示失败
interval: 3s # 健康检查的间隔时间
timeout: 2s # 健康检查的超时时间
retries: 2 # 健康检查的重试次数
start_period: 2s # 容器启动后延时检查时间
# 当前容器需要等initsvc成功后才能启动
depends_on:
initsvc:
condition: service_completed_successfully
nginxsvc:
container_name: nginx
image: myos:nginx
# 当前容器需等待phpsvc启动成功并通过健康检查再启动
depends_on:
phpsvc:
condition: service_healthy
验证
docker compose -f test/testsvc.yaml up -d
[+] Running 4/4
✔ Network testsvc_default Created 0.1s
✔ Container init Exited 10.0s
✔ Container php Healthy 15.8s
✔ Container nginx Started 16.2s
docker compose -p testsvc ls -a
NAME STATUS CONFIG FILES
testsvc exited(1), running(2) /root/test/docker-compose.yaml
# 查看项目中容器的状态
docker compose -p testsvc ps -a
# 查看项目内容器的日志
docker compose -p testsvc logs
php | [18-Mar-2026 15:50:35] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
php | [18-Mar-2026 15:50:35] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
init | test && 5c81f4f2f8d7
init | test && 5c81f4f2f8d7
init | test && 5c81f4f2f8d7
init | test && 5c81f4f2f8d7
init | test && 5c81f4f2f8d7
init | test && 5c81f4f2f8d7
init | test && 5c81f4f2f8d7
init | test && 5c81f4f2f8d7
init | test && 5c81f4f2f8d7
更多推荐
所有评论(0)