一、容器化基础知识
华为云免费试用服务器:https://activity.huaweicloud.com/free_test/index.html
阿里云docker容器教程:https://edu.aliyun.com/course/3111900/lesson/341807097
查询ip地址:www.ip138.com
二、容器化搭建企业应用实战
2024-阿里云容器训练营.docx
2024-6-12-三创=容器训练营.docx
1、完整实战步骤:
1、选择阿里云ESC云服务器,完成基本配置(内存、核数、安全组规则、用户名密码)
2、开通容器镜像服务ACR(个人版)。(创建时需要和ECS在同一地域下,否则ECS无法通过内网访问镜像仓库。)
(1)创建镜像仓库命名空间
(2)创建命名空间下的镜像仓库
(3)代码源选择本地仓库
3、ESC中安装docker服务,并启动,检查docker运行状态
4、ESC中构建wordPress镜像
(1)创建目录,并下载dockerfile和配置文件docker-entrypoint.sh
(2)制作镜像 docker build
(3)查看本地当前镜像
5、将ESC本地构建的镜像上传至ACR
(1)登陆个人镜像仓库ACR,docker login。(镜像仓库登陆以及后续打标签、推送均通过专有网络地址:registry-vpc.vn来操作速度会更快)
(2)新增ACR镜像tag,按照格式打上标签再推送到ACR方便管理
(3)docker push
6、ecs按照wordpress数据库mariadb
(1)yum按照mariadb,并启动,初始化,设置密码
(2)创建wordpress数据库 create database wordpress
(3)授权root账号远程访问
7、通过镜像运行wordpress应用
(1)在ecs上创建站点文件持久化存储目录(目录为esc服务器本地目录)
(2)运行docker镜像(运行本地创建好/或pull下来的镜像)
(3)拉去镜像前,必须要先登陆镜像仓库ACR,否则无权限
docker run --name wordpress -p 80:80 -d -v /var/www/html:/var/www/html registry-vpc.cn-hangzhou.aliyuncs.com/wordpress-***/wordpress:v1
8、访问并配置wordpress应用
(1)浏览器访问esc公网,端口80
(2)在wordpress界面配置数据库(数据库主机填入服务器的私有IP地址)
process status 显示运行中的进程、用户、CPU、内存
-aux:
-a 显示所有终端进程
-u 以用户易读格式显示
-x显示没有控制终端进程
ps -aux |grep docker
2、关键点
(1)安全组规则
用网络上的客户端连接容器中的mysql服务,会出现问题,在申请的华为云服务器与网络客户端之间,有一道安全组,默认只开放22端口,如果需要访问其他端口(如33061)需要设置安全组。是在ecs服务器外部,设置了一层防火墙,所有访问都需要经过它过滤。
[图片]
(2)其他问题
1、问题一:在华为云服务器启动docker,并启动mysql容器,此时外网用户如何访问?访问经历哪些步骤?
- 启动mysql容器,会事先定义端口映射规则,如33061:3306,即将容器3306端口映射到云服务器外网的33061端口(这个端口用于让外部用户访问)。容器相当于虚拟机,有自己虚拟的ip地址,ecs服务器在互联网中为公网ip,内部的容器使用私网ip地址。
- 当外部用户访问云服务器的公网端口33061时,会通过NAT将公网地址转化为私网地址,最后访问到容器的3306端口
- 外部用户用sqlyog(模拟客户端软件)连接mysql
- 在云服务器外部,华为/阿里云会设置安全组(实质上是防火墙)用于过滤访问。
- 安全组规则默认只开放22端口,需要开启33061端口访问权限,此时外网用户可以访问33061端口
2、问题二:从容器化搭建企业应用反应-容器化的发展历程
(1)随着云计算技术的迅速发展,小陈紧跟前沿技术,学习云计算相关技术也熟悉了阿里云产品,希望用云服务器来搭建公司网站。
(2)在云服务器上搭建应用,相同应用、在不同运行环境中执行结果不同,移植性问题(小则引起应用更新失败,大则拉低工作效率,产生生产事故,严重影响业务。
(3)容器解决移植性问题,在学习容器,了解服务器虚拟化知识
(4)已学习容器和docker基础知识,需要搭建公司的网站。
(4)但这些镜像从哪来,公司的网站原本只是一些代码,还不是镜像文件,如何把代码、运行环境打包在一起称为镜像?
构建:将应用程序和运行环境打包成镜像
发布:镜像文件发布到仓库,
运行:获取已发布的镜像,运行成容器
构建:基于dockerfile构建,将构建过程每个步骤写到脚本中,通过dockerbuild放手构建,整个过程清晰、可见,而docker commit通过命令直接构建,只有构建者才知道整个过程,难以重现。
dockerfile用于构建镜像的文本文件,包含了所需的指令和说明。dockerfile是一种被docker程序解释的脚本(编写时要符合dockerfile规则,dockerfile由一条条命令构成,每条命令对应linux下的命令)
(5)镜像放在哪好
放在镜像仓库中,称为镜像发布
(6)为什么要发布镜像
宣告这个镜像时可部署的正式版本,可作为后期生产环境的部署、更新应用的基准
(7)为什么要发布到镜像仓库,而不是本地服务器
一个协同项目中,又开发、测试、运维多个角色,每个角色不止一个人,希望能够中应用构建到发布的不同阶段形成良好的协作,就需要大家能访问的镜像仓库作为协作平台。
(8)公有镜像仓库最知名的github,需要私有还是公有镜像仓库?
私有,公司网站的一些素材,关联到企业的品牌形象和数据信息,二次开发的代码也涉及到了用户、支付等敏感数据。
(9)有必要自建私有镜像仓库嘛?
没必要,工作中心聚焦在核心业务上,使用阿里云提供的镜像服务ACR更加方便、可靠、高安全性。