制作镜像示例
制作SAE应用镜像的方式与您日常制作镜像的方式没有任何差异。如果您不熟悉如何制作镜像,可以参考本文提供的示例。
确保环境中已安装并运行Docker,您可以通过执行
docker --version
来验证。进入项目所在路径,创建名为
Dockerfile
的文件。不同语言的Dockerfile
示例如下。Java
假设目录结构如下:
. ├── Dockerfile # 新建的Dockerfile文件 ├── target │ ├── my-app.jar # 打包项目时生成的JAR包 ├── src # 构建镜像仅与Dockerfile和jar包有关,与源码和其他配置文件无关。 │ ├── ... ├── pom.xml
则Dockerfile内容如下:
# 指定基础镜像,以openjdk 8为例 FROM openjdk:8-jdk-alpine # 将本地的jar包拷贝到镜像中 COPY ./target/my-app.jar / # 设置启动命令 ENTRYPOINT ["java", "-jar", "/my-app.jar"]
PHP
假设目录结构如下:
. ├── Dockerfile # 新建的Dockerfile文件 ├── entrypoint.sh # 新建的容器启动脚本 ├── php │ ├── index.php │ └── phpinfo.php ├── nginx │ ├── nginx.conf │ ├── conf.d │ | ├── default.conf │ ├── fastcgi_params │ ├── ...
则Dockerfile内容如下:
# 指定基础镜像,以PHP-FPM镜像为例 FROM php:8.2-fpm-alpine # 安装Nginx RUN apk add --no-cache nginx # 将 Nginx 配置文件复制到容器 COPY nginx/ /etc/nginx/ # 将 PHP 文件复制到工作目录 COPY php/ /var/www/html/ # 将本地启动脚本复制到镜像,容器启动时执行启动脚本 COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"]
启动脚本entrypoint.sh内容如下:
#!/bin/sh # 启动 PHP-FPM 后台运行 php-fpm -D # 检查 PHP-FPM 是否启动成功 if ! pgrep "php-fpm" >/dev/null then echo "PHP-FPM failed to start!" exit 1 fi # 前台运行 Nginx nginx -g "daemon off;"
Python
假设目录结构如下:
. ├── Dockerfile # 新建的Dockerfile文件 ├── entrypoint.sh # 新建的容器启动脚本 ├── my_app │ ├── requirements.txt │ ├── main.py │ ├── my_package │ | ├── __init__.py │ | ├── ...
则Dockerfile内容如下:
# 指定基础镜像,以Python 3.9镜像为例 FROM python:3.9 # 将本地python代码复制到镜像 RUN mkdir -p /my_app COPY my_app/ /my_app/ # 根据requirements.txt在镜像中安装依赖。 RUN pip install -r /my_app/requirements.txt # 将本地启动脚本复制到镜像,容器启动时执行启动脚本 COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"]
启动脚本entrypoint.sh内容如下:
#!/bin/sh # 本示例通过Gunicorn启动my_app/main.py中的app,app是一个Flask实例。其中,Flask、Gunicorn通过requirements.txt指定。 gunicorn -w 3 -b 0.0.0.0:8080 my_app.main:app
Node.js
以通过Nginx部署前端项目为例,假设目录结构如下:
. |- Dockerfile # 新建的Dockerfile文件 |- nginx-conf # 存放Nginx配置文件 | |- nginx.conf | |- conf.d | | |- default.conf | |- ... |- package.json |- src | |- ... |- dist # 存放项目构建后生成的静态资源文件 | |- index.html | |- static | | |- ...
则Dockerfile内容如下:
# 指定基础镜像 FROM nginx:1.22 # 复制本地的静态资源文件到容器环境的指定路径 COPY ./dist /usr/share/nginx/html/ # 复制本地的Nginx配置文件到容器环境的指定路径 COPY ./nginx-conf /etc/nginx/ # 沿用基础镜像中的启动命令,无需额外设置
构建镜像:
docker build -t <镜像名称>:<镜像tag> .
(例如docker build -t my-app:1.0 .
)根据镜像仓库类型,选择使用同账号ACR实例的镜像部署应用、使用不同账号ACR实例的镜像部署应用或使用非ACR实例的镜像部署应用。