docker 打包 php 應用

big_cat發表於2023-01-19

專案檔案

./
├── Dockerfile
├── env.php
└── index.php

Dockerfile

#基礎映象
FROM php:7.4-cli

# copy 當前宿主機目錄下的內容到映象目錄
COPY . /apps/demo

# 設定工作目錄
WORKDIR /apps/demo

# 定義一些環境變數作為執行引數
ENV APP_NAME=""
ENV APP_VER="0.0.1"

# 設定容器入口程式(此時的 pwd 在工作目錄下)
ENTRYPOINT ["php", "./index.php"]

tips: 如果需要登入容器後再啟動服務,可以設為啟動一個 bash 會話來保證容器不退出

ENTRYPOINT ["bash", "-c", "echo welcome to docker"]

反正入口程式一定要有 會話保持 的特性,否則容器執行完命令後就會自動退出了。

index.php

<?php
// loop 作為入口程式 防止容器執行結束自動退出
// 生產中大都是 http、websocket、tcp 等服務
while (true) {
    echo "hello docker" . PHP_EOL;
    sleep(3);
}

env.php

<?php
// 讀取容器中的環境變數
echo getenv("APP_NAME") . PHP_EOL;
echo getenv("APP_VER") . PHP_EOL;

打包映象

# 打包要養成版本號的良好習慣
docker build -t php-demo:v1 .
docker build -t php-demo:v2 .

# 檢視本地映象
docker images

建立/執行容器

# 使用映象建立容器 傳入環境變數
docker run -it \
--privileged=true \
-e APP_NAME="php-demo-1" \
-e APP_VER="1.0.1" \
--name php-demo-1 php-demo:v1

# 檢視容器
docker ps

# 登入容器
docker exec -it php-demo-1 bash

# 讀取環境變數
php env.php

檔案 cp

# 複製宿主機檔案到容器
docker cp tmp.php php-demo-1:/apps/demo
# 複製容器檔案到宿主機
docker cp php-demo-1:/apps/demo/env.php env.php

相關文章