使用Docker技术可以帮助企业快速横向扩展服务,从而实现服务弹性部署的能力。云服务概念兴起后,Docker的使用场景和范围有了进一步的发展。在微服务架构越来越流行的今天,微服务+Docker的完美结合更加方便了微服务架构运维部署的实施。如何快速入门docker,开发自己的容器应用?今天我们不闹,来点实事:使用URLOS快速开发docker应用,并且可以随意导出应用给别人使用。对于不了解URLOS的朋友,这里简单介绍一下。URLOS是一个容器云管理面板,基于Docker容器技术打包运行应用。它可以自动识别机器和云应用程序故障,并将云应用程序转移到可用机器上。单机故障不影响业务发展,配合云存储,轻松搭建7x24小时不间断运行的应用环境。URLOS官网:https://www.urlos.com/URLOS安装方法:https://www.urlos.com/center-...URLOS开发交流QQ群:695164700、147882180URLOS微信公众号:安装URLOS:curl-SOhttps://www.urlos.com/install&&chmod544install&&./install安装完成后,在地址栏输入http://ip:9968访问。要点:使用URLOS开发docker应用的最基本流程:这里以制作一个LNP(linux+nginx+php)网站环境为例,快速创建一个可以导出给别人的docker应用。在开始制作之前,我们先去docker官网注册一个账号,这样我们就可以把做好的镜像上传到docker仓库,打开https://hub.docker.com/有了hub账号,下面开始制作!第一步:拉取镜像,启动容器,进入容器并使用SSH工具连接主机,输入以下命令拉取一个php:7.3.3-fpm-stretch镜像,启动容器并进入容器:dockerrun-itphp:7.3.3-fpm-stretch当bash看到类似上图的字符串,就说明已经成功进入容器。这是当前容器的ID。第二步:更新镜像,安装我们想要的nginx和PHP相关的扩展先更新镜像源,在国内使用阿里set-ex\&&sed-i's@security.debian.org@mirrors会更快。aliyun.com@'/etc/apt/sources.listset-ex\&&sed-i's@deb.debian.org@mirrors.aliyun.com@'/etc/apt/sources.listapt-getupdate更新后完成后,安装nginx。默认安装目录为/etc/nginxapt-getinstall-ynginx官方镜像默认没有ps-ef命令,需要手动安装apt-getinstall-yprocps安装PHP扩展。在安装一些php自带的扩展时,可以使用docker-php-ext-configure和docker-php-ext-install。比如我们要安装pdo_mysql:docker-php-ext-configurepdo_mysqldocker-php-ext-installpdo_mysql然后使用php-m查看我们的扩展是否安装成功。使用这种安装方式,系统会自动生成一个配置文件供php加载,使用命令查看:ls-l/usr/local/etc/php/conf.d/gd扩展安装apt-getinstall-ylibfreetype6-dev\libjpeg62-turbo-dev\libpng-devdocker-php-ext-configuregd--with-freetype-dir=/usr/include/--with-jpegdir=/usr/include/docker-php-ext-installgd如果需要安装memcached和redis扩展,需要将扩展??下载到容器中,然后手动编译安装。地址:https://pecl.php.net/package/...https://pecl.php.net/package/...memcached扩展安装:curl-Ohttps://pecl.php.net/get/memcached-3.1.3.tgztarxfmemcached-3.1.3.tgz&&cdmemcached-3.1.3phpize./configure如果编译出现如下错误信息:执行安装命令,然后重新编译安装memcached扩展:apt-getinstall-ylibmemcached-dev./configuremake&&makeinstall添加extension=memcached.so语句到php.ini文件。安装完成后,使用命令查看扩展存放的位置ls/usr/local/lib/php/extensions/no-debug-non-zts-20170718/php安装目录:/usr/local/phpphp.ini配置文件目录:/usr/local/etc/php/。此目录中有两个文件:php.ini-development和php.iniproduction。因此,我们需要将php.ini-production文件重命名为php.ini。以后手动编译安装php扩展后,需要在php.ini中加入extension=xx.so。启动Nginx和php,检查是否正常运行。nginx&&php-fpm-D第三步:打包镜像在打包成镜像之前,我们先关闭nginx和php-fpm,删除一些不需要的应用程序,清理一些已安装的缓存文件,以减少最终打包成镜像的大小。apt-getpurgevimmakeapt-getautoremoveapt-getautocleanrm-f/usr/local/etc/php/conf.d/*#统一将php扩展写入php.ini文件然后,输入exit退出容器,通过以下命令将更新后的容器重新打包成新镜像:dockercommit-m="php-nginx-website"-a="yourname"96b3f038590byourhubid/php-nginx:v0.1.0参数说明:-m:提交说明-a:指定镜像作者96b3f038590b:ContainerIDyourhubid/php-nginx:v0.1.0:指定要创建的目标镜像名称可以使用dockerimages命令查看我们的新镜像第四步:上传镜像使用用于登录集线器的dockerlogin命令。docker.com,根据提示输入账号和密码,然后使用dockerpush命令将打包后的新镜像上传到镜像仓库:dockerpushyourhubid/php-nginx:v0.1.0第五步:登录URLOS创建应用注意:需要修改将/data/urlos/master-config/config.jsonc文件的envType值设置为dev(开发环境):vim/data/urlos/master-config/config.jsoncadd镜像浏览器地址栏输入http://Hostip:9968,登录URLOS,在左侧菜单栏中选择ImageManagement,然后点击右上角的Add按钮。输入镜像名称、镜像地址、开发者信息,添加LNP应用,在左侧菜单中选择应用管理。然后点击右上角的添加应用按钮:应用的基本信息如上图所示。镜像:选择上一步添加的镜像。URLOS最低版本号:如果设置了该选项,则表示要安装的URLOS版本高于或等于当前设置的值,允许用户安装使用。容器端口:容器启动时对外通信的端口,即参数-p。网站的80、443等端口默认是对外开发的,这里不用设置。如果需要特定端口,请设置格式{"22":true}。标签:应用标签多用于搜索场景。选项开关注意:固定节点操作:如果勾选,表示用户在安装此应用(创建此应用的服务)时需要选择安装在某个节点(云主机)上。如果不勾选,则表示应用安装在选中的集群中(单容器运行也没有勾选),可以达到负载均衡和故障转移的效果。Singlecontainerrunning:如果勾选,表示在安装这个应用时,每个服务只会运行一个容器。与固定节点运行配合使用,即固定节点运行时,单个容器运行。Allowprivileges允许:如果勾选,则容器中的root拥有真正的root权限(宿主机的root),可以在容器内部做任何事情(包括修改宿主机的文件,启动宿主机的其他容器,以及执行挂载等操作),不建议勾选。允许容器为root用户:这里的root用户是容器外的普通用户,默认勾选。如果容器内部的程序禁止root用户允许,则取消(例如:MySQL)。挂载存储目录:如果需要从宿主机挂载文件到容器,勾选。那就是参数-v。挂载时区定义文件:容器时间与宿主机时间一致。容器只读:禁止向容器写入数据。全局网络:允许同一集群中不同容器网络之间的容器通信。允许快照备份:如果勾选,则允许快照备份(仅在挂载本地存储时有效)。如果启用反向代理,多个容器可以共享端口,反之亦然。注:插件:由PHP语言编写的脚本文件组成。插件的使用将使用户安装应用程序(创建服务)变得更简单、更智能。这里选择phpWebSite:v0_1_0---刘鑫---php网站环境,就是插件。(后面制作插件时会有详细说明)服务别名:创建服务时左上角显示的描述。应用数据别名:服务创建完成后,服务产生的数据或者用户需要在创建服务的基础上添加新的数据。用于管理这些数据的名称是应用程序数据别名。(例如:创建一个MySQL数据库服务,用户可以手动添加数据库,也可以在创建网站服务时添加新的数据库。)服务表单步骤:创建服务时,用户填写表单的步骤。(数字为必填项,其他符号可选)附加挂载:将宿主机除存储目录外的其他目录挂载到容器中。附加启动参数:通过dockerrun运行容器时的附加参数,如:--add-hosta.com:192.168.0.1注:安装脚本:安装应用时需要执行的脚本命令。测试-d/etc/nginx/conf.d/||mkdir-p/etc/nginx/conf.d/启动脚本:需要启动程序的命令。nginxphp-fpm-D状态脚本:每2秒执行一次该脚本,检查程序是否正常允许。当前脚本命令用于检查apache是??否启动。status1=0&&(ps-ef|grep"php-fpm"|grep"主进程"|grep-v"grep")&&status1=1;status2=0&&(ps-ef|grep"nginx"|grep"master处理"|grep-v"grep")&&status2=1;if[${status1}!=0]&&[${status2}!=0];thenstatusScriptResult=1fi监控脚本:每1秒执行一次这个脚本,检查status脚本返回的结果,判断程序是否正常。如果有异常,执行退出脚本。{w:statusScript:w}["$statusScriptResult"!=1]&&exit1退出脚本:容器关闭前执行的脚本。例如,当我们关闭计算机时,系统会关闭正在允许的程序。添加LNP模板在本应用中,我们需要添加模板php.ini和vhost.conf,然后在这两个模板的参数中设置一些变量,以便用户在安装应用时可以根据自己的需要进行动态调整。(例如:设置php的上传大小,最大内存等)那么如何添加模板呢?我们在应用管理列表中找到上面创建的应用,然后点击右侧的更多,选择管理模板。添加一个php.ini模板,然后将php.ini文件的内容复制到模板内容中,并设置变量{w:upload_max_filesize:w}、{w:PHP_memory_limit:w}。[PHP]engine=Onshort_open_tag=Offprecision=14output_buffering=4096zlib.output_compression=Offimplicit_flush=Offunserialize_callback_func=serialize_precision=-1disable_functions=disable_classes=zend.enable_gc=Onexpose_php=Onmax_execution_time=30max_input_time=60memory_limit=128Merror_reporting=E_ALL&~E_DEPRECATED&~E_STRICTdisplay_errors=Offdisplay_startup_errors=Offlog_errors=Onlog_errors_max_len=1024ignore_repeated_errors=Offignore_repeated_source=Offreport_memleaks=Onhtml_errors=Onvariables_order="GPCS"request_order="GP"register_argc_argv=Offauto_globals_jit=Onpost_max_size={w:PHP_memory_limit:w}auto_prepend_file=auto_append_file=default_mimetype="text/html"default_charset="UTF-8"doc_root=user_dir=enable_dl=Offfile_uploads=Onupload_max_filesize={w:upload_max_filesize:w}max_file_uploads=20allow_url_fopen=Onallow_url_include=Offdefault_socket_timeout=60extension=gd.soextension=memcached.soextension=sockets.soextension=mysqli.soextension=pdo_mysql.so[CLI服务器]cli_server.color=On[Date][filter][iconv][imap][intl][sqlite3][Pcre][Pdo][Pdo_mysql]pdo_mysql.default_socket=[Phar][邮件功能]SMTP=localhostsmtp_port=25mail.add_x_header=Off[ODBC]odbc.allow_persistent=Onodbc.check_persistent=Onodbc.max_persistent=-1odbc.max_links=-1odbc。defaultlrl=4096odbc.defaultbinmode=1[Interbase]ibase.allow_persistent=1ibase.max_persistent=-1ibase.max_links=-1ibase.timestampformat="%Y-%m-%d%H:%M:%S"ibase.dateformat="%Y-%m-%d"ibase.timeformat="%H:%M:%S"[MySQLi]mysqli.max_persistent=-1mysqli.allow_persistent=Onmysqli.max_links=-1mysqli.default_port=3306mysqli.default_socket=mysqli.default_host=mysqli.default_user=mysqli.default_pw=mysqli.reconnect=Off[mysqlnd]mysqlnd.collect_statistics=Onmysqlnd.collect_memory_statistics=Off[OCI8][PostgreSQL]pgsql.allow_persistent=Onpgsql。auto_reset_persistent=Offpgsql.max_persistent=-1pgsql.max_links=-1pgsql.ignore_notice=0pgsql.log_notice=0[bcmath]bcmath.scale=0[browscap][Session]session.save_handler=filessession.use_strict_mode=0session.use_cookies=1session.use_only_cookies=1session.name=PHPSESSIDsession.auto_start=0session.cookie_lifetime=0session.cookie_path=/session.cookie_domain=session.cookie_httponly=session.cookie_samesite=session.serialize_handler=phpsession.gc_probability=1session.gc_divisor=1000session.gc_maxlifetime=1440session.referer_check=session.cache_limiter=nocachesession.cache_expire=180session.use_trans_sid=0session.sid_length=26session.trans_sid_tags="a=href,area=href,frame=src,form="session.sid_bits_per_character=5[断言]zend.assertions=-1[COM][mbstring][gd][exif][Tidy]tidy.clean_output=Off[soap]soap.wsdl_cache_enabled=1soap.wsdl_cache_dir="/tmp"soap.wsdl_cache_ttl=86400soap.wsdl_cache_limit=5[sysvshm][ldap]ldap.max_links=-1[dba][opcache][curl][openssl]添加Nginx虚拟站点配置vhost.conf模板server{server_name{w:domains:w};{w:listenLines:w}设置$websiteRoot"/data/www/{w:indexDirName:w}";root$websiteRoot;indexindex.htmlindex.htmindex.php;client_max_body_size{w:upload_max_filesize:w};client_body_buffer_size128;location/{{w:rewriteContents:w}}location~\.(php|phtml)${includefastcgi.conf;fastcgi_pass127.0.0.1:9000;}location~/\.ht{denyall;}}addvariable变量分为:环境变量、数据变量和扩展变量这里只需要添加扩展变量。环境变量:在操作系统中用于指定操作系统运行环境的一些参数,与通常的环境变量相同。有时容器启动需要设置一些参数提供给容器内的程序。例如:MYSQL_ROOT和MYSQL_ROOT_PASSWORD可以在MySQL容器启动的时候设置。数据变量:添加一些存储数据时设置的参数。例如:在MySQL数据服务中添加数据库时,需要填写dbName、dbPassword、status、charset。具体可以创建一个MySQL服务,然后在管理数据库中添加一个数据库。扩展变量:普通变量。例如:上面模板中设置的变量{w:upload_max_filesize:w}和{w:PHP_memory_limit:w}。变量的格式:{w:变量名:w}。添加PHP最大内存变量:PHP_memory_limit添加上传大小限制:upload_max_filesize至此,LMP应用程序已创建。在应用管理列表中,我们选择刚刚创建的应用,点击创建服务,部署完成后,在地址栏输入域名即可访问。如果访问正常,说明我们做的应用没有问题,可以导出来给别人安装!第六步:导出应用导出我们制作的应用,导出的文件可以发布到任何地方,供其他人安装使用。只要对方主机安装了URLOS,就可以完美运行(无需考虑兼容性问题)。应用。导出的文件是txt文本。其他用户只要使用URLOS直接导入即可。以下是导入方法:打开文本,全选复制内容登录URLOS,点击左侧菜单导入申请,将内容粘贴进去,提交导入成功!!点击安装。哈哈,太酷了。任何可以在服务器环境下使用的应用都可以用这种方式制作,比如微信小程序的后台部分等都可以用这种方式制作,方便分发和安装。
