思考:用容器搭建应用主要有哪些步骤?
初步学习了容器相关知识后,小陈准备开始搭建公司网站。为了少走弯路,还是打算找大刘请教一下。
小陈:师傅,我快速的学习了容器和Docker基础知识,现在就要开始搭建我们公司的网站了。我看了下,用容器来跑公司网站,过程不很复杂,对吧?
大刘:用容器运行应用就是简单、易用。你知道用容器搭建应用主要有哪几步?
小陈:应该是用 docker run 一个镜像吧。
大刘:那么镜像从哪儿来呢?比如,我们的公司网站,原本只是一些代码,还不是镜像文件,怎么把代码、运行环境等打包在一起变成镜像呢?
小陈:还没了解到。请师傅赐教!
大刘:搭建并运行应用,包含三个重要过程,分别是构建、发布和运行:1)构建就是把应用程序和运行环境打包成镜像。2)发布就是把镜像文件发布到镜像仓库,表示可以用来运行了。3)运行,就是获取已发布的镜像,运行成容器。构建、发布和运行,与docker中的build、ship、run其实是一个意思。
小陈:明白了。师傅,我这次搭建,也走构建、发布、运行的搭建过程吧?
大刘:嗯。这就开干吧,遇到什么问题,随时来找我。
采用容器技术搭建并运行企业网站,需要经历三个主要过程:
- 构建(build):把应用代码和运行环境一起,制作成镜像文件
- 发布(release):将镜像文件发布到镜像仓库。
- 运行(run):从镜像仓库中获取镜像并运行。
容器镜像如何构建
将WordPress应用制作成容器镜像
Docker镜像制作通常有两种方式:
- 基于docker commit 制作镜像。
- 基于Dockerfile制作镜像,为主流镜像的制作方式。
小陈对构建应用镜像的两种方式,还没有概念,到底选择哪种呢?
小陈:师傅,构建镜像有 docker commit 和 Dockerfile 两种方式,哪种更好呢?
大刘:问得好。docker commit 是通过命令直接构建镜像,只有构建者才知道构建的过程,构建过程难以重现。用Dockerfile构建镜像,则是把构建过程的每个步骤都写到脚本中,通过 docker build 执行脚本的方式来构建镜像,这样做的好处是,整个过程都是可见的、清晰的。应用的构建属于软件工程的一部分,都要追求过程可控、可查、可重现。这么说,你觉得应该用哪种方式更合适?
小陈:清楚了。构建镜像的工作是团队工作的一部分,理应透明可控,需要用Dockerfile来构建。谢谢师傅!
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。我们可以理解Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。Docker程序读取Dockerfile,解决这些命令间的依赖关系,根据指令生成定制的镜像。
相比镜像这种黑盒子,Dockerfile这种显而易见的脚本更容易被开发者接受,它明确的表明镜像是怎么产生的。有了Dockerfile,当我们需要定制自己额外的需求时,只需在Dockerfile上添加或者修改指令,重新生成镜像即可,省去了敲命令的麻烦。
Dockerfile文件的编写需要遵循相应的要求和规范,Docker官方提供了相应的说明和指导,如果您想学习这方面的知识,建议可以参考Docker官方文档:Dockerfile参考。
基于Dockfile构建镜像并运行,会经历如下过程:
其中Dockerfile、Image、Container的关系如下:
- Dockerfile是软件开发的基础
- Docker镜像(Image)是软件的交付品
- Docker容器(Container)则可以认为是软件的运行态
- Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署、运行与运维,三者共同构成了 Docker 技术的底座。
构建网站应用镜像的步骤
明白以上原理之后,我们知道构建网站应用的WordPress镜像之前,需要先编写好Dockerfile文件。在本次课程中为了验证快速搭建网站,所以使用Docker官方镜像提供的WordPress的Dockerfile文件。
整体步骤如下(具体操作会在实验环节中呈现):
1、创建WordPress镜像制作目录。
# 创建WordPress镜像制作目录makeWordpress并进入该目录 mkdir -p /makeWordpress cd /makeWordpress
2、下载Dockerfile文件和docker-entrypoint.sh预处理脚本,赋予脚本执行权限。
# 下载Dockerfile文件和配置文件 wget https://raw.githubusercontent.com/docker-library/wordpress/841f2801d0a6d0cf73321a5554d6bade4c143417/php7.3/apache/Dockerfile wget https://raw.githubusercontent.com/docker-library/wordpress/841f2801d0a6d0cf73321a5554d6bade4c143417/php7.3/apache/docker-entrypoint.sh # 设置文件权限 chmod 755 docker-entrypoint.sh
3、运行Docker build命令,利用Dockerfile制作WordPress镜像。
# 制作wordpress镜像,并存放到makeWordpress目录 docker build -t="wordpress:v1" /makeWordpress
4、运行Docker images查看制作出的镜像。
# 查看构建完成的镜像 docker images
练习实验:通过ACR快速部署网站应用
https://developer.aliyun.com/adc/scenario/exp/79f68855f1194655bb08e125b59ec104?