COPY 命令复制 microblog.py 和 boot.sh 脚本到容器用户根目录中。其中 boot.sh 脚本用于容器启动后的项
目初始化及服务启动命令配置。
RUN chmod +x boot.sh
RUN chmod 命令确保将这个新的boot.sh文件正确设置为可执行文件。如果你使用的是基于Unix的文件系统,并
且源文件已被标记为可执行文件,则复制的文件将会保留可执行权限。 此处显式地对其进行授权,是因为在
Windows上很难设置可执行权限。
ENV FLASK_APP microblog.py
ENV 命令在容器中设置环境变量。
RUN chown -R microblog:microblog ./
RUN chown 命令将存储在 /home/microblog 中的所有目录和文件的所有者设置为新的 microblog 用户,以便
在容器启动时该用户可以正确运行这些文件。
USER microblog
USER 命令使得这个新的 microblog 用户成为任何后续指令的默认用户,并且也是容器启动时的默认用户。
EXPOSE 5000
EXPOSE 命令配置该容器将用于服务的端口,以便Docker可以适当地在容器中配置网络。
ENTRYPOINT ["./boot.sh"]
ENTRYPOINT 命令定义了容器启动时应该执行的默认命令。 这是启动应用程序Web服务器的命令。
3.2. 项目初始化启动脚本
在项目目录下新建 boot.sh 脚本,用于设置容器启动后的项目初始化处理。
需要注意 gunicorn 命令之前的 exec 。 在shell脚本中, exec 触发正在运行脚本的进程被给定的命令来替换掉,而
不是将这个命令作为新进程启动。 这很重要,因为Docker会将容器的生命与其上运行的第一个进程关联起来。 在像
这样的情况下,启动进程不是容器的主进程,就需要用主进程取代启动进程,以确保容器不会提前停止。
Docker的一个有趣的方面是容器写入 stdout 或 stderr 的任何内容都将被捕获并存储为容器的日志。 出于这个原
因, --access-logfile 和 --error-logfile 都配置为 - ,将会吧日志发送到标准输出,以便由Docker作为日志存
储。
注意:此处脚本中,行分割方式需要设置为 仅LF(UNIX) 模式。
3.3. 编写.dockerignore文件
新建 .dockerignore 文件,用于忽略无需打包的文件或目录,以减少构建容器镜像的大小。该文件中的内容
与 .gitignore 一样即可。
3.4. 命令行方式构建容器镜像
评论0