摘要:使用技術可以幫助企業(yè)快速水平擴展服務,從而到達彈性部署業(yè)務的能力。例如我們要安裝然后使用查看我們的擴展是否安裝成功。啟動和,檢查是否正常運行。單容器運行若勾選,則表示安裝此應用時,每個服務只運行一個容器。
使用Docker技術可以幫助企業(yè)快速水平擴展服務,從而到達彈性部署業(yè)務的能力。在云服務概念興起之后,Docker的使用場景和范圍進一步發(fā)展,如今在微服務架構越來越流行的情況下,微服務+Docker的完美組合,更加方便微服務架構運維部署落地。
如何快速入門docker,開發(fā)屬于自己的容器應用?我們今天不整虛的,來點實打?qū)嵉母韶洠豪肬RLOS快速開發(fā)docker應用,并可隨意將應用導出給他人使用。
對URLOS不了解的朋友,這里大概介紹一下,URLOS是一個容器云管理面板,基于Docker容器技術打包和運行應用,可自動識別機器和云應用的故障并將云應用轉(zhuǎn)移至可用的機器上,單機故障并不影響業(yè)務開展,配合云存儲便可輕松搭建7x24小時持續(xù)運行的應用環(huán)境。
URLOS官網(wǎng):https://www.urlos.com/
URLOS安裝方法:https://www.urlos.com/center-...
URLOS開發(fā)交流QQ群:695164700,147882180
URLOS微信公眾號:
安裝URLOS:
curl -SO https://www.urlos.com/install && chmod 544 install && ./install
安裝完成后,地址欄輸入 http://ip:9968 即可訪問。
劃重點:利用URLOS開發(fā)docker應用的最基本的流程:
這里我們以制作一個LNP(linux+nginx+php)網(wǎng)站環(huán)境為例,快速制作一個可以導出給他人使用的docker應用。
在開始制作之前,我們先到docker官網(wǎng)注冊一個賬號,這樣我們才能將制作好的鏡像上傳到docker倉庫,打開https://hub.docker.com/
有了hub賬號,那么我們開始制作吧!
使用SSH工具連接主機,輸入以下命令拉取一個php:7.3.3-fpm-stretch鏡像,啟動容器并進入這個容器內(nèi)部:
docker run -it php:7.3.3-fpm-stretch bash
看到類似上圖中類似的字符串時,表示已經(jīng)成功進入容器內(nèi)部,這個便是當前容器的ID
先更新一下鏡像源,國內(nèi)用阿里的會快一些
set -ex && sed -i "s@security.debian.org@mirrors.aliyun.com@" /etc/apt/sources.list set -ex && sed -i "s@deb.debian.org@mirrors.aliyun.com@" /etc/apt/sources.list apt-get update
更新完成之后,再來安裝nginx,默認安裝目錄為/etc/nginx
apt-get install -y nginx
官方鏡像默認是沒有ps -ef 命令,因此需要手動安裝
apt-get install -y procps
安裝PHP擴展。安裝php自帶的一些擴展時,可以使用docker-php-ext-configure和docker-php-ext-install。
例如我們要安裝pdo_mysql:
docker-php-ext-configure pdo_mysql docker-php-ext-install pdo_mysql
然后使用 php -m查看我們的擴展是否安裝成功。使用這種方式安裝,系統(tǒng)會自動生成一個配置文件,提供給
php加載,使用命令查看:
ls -l /usr/local/etc/php/conf.d/
gd擴展安裝
apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpegdir=/usr/include/ docker-php-ext-install gd
如果需要安裝memcached、redis擴展,則需要下載擴展到容器,然后手動編譯安裝。地址:
https://pecl.php.net/package/...
https://pecl.php.net/package/...
memcached擴展安裝:
curl -O https://pecl.php.net/get/memcached-3.1.3.tgz tar xf memcached-3.1.3.tgz && cd memcached-3.1.3 phpize ./configure
編譯過程中若出現(xiàn)以下錯誤提示:
則執(zhí)行安裝命令,然后重新編譯安裝memcached擴展:
apt-get install -y libmemcached-dev ./configure make && make install
添加extension=memcached.so語句到php.ini文件。安裝完成后通過命令查看擴展存放的位置
ls /usr/local/lib/php/extensions/no-debug-non-zts-20170718/
php安裝目錄:/usr/local/php
php.ini的配置文件目錄:/usr/local/etc/php/。在這個目錄下有兩個文件:php.ini-development和php.iniproduction。
因此,我們需要將php.ini-production文件重命名為php.ini。以后手動編譯安裝php擴展后需要添加extension=xx.so到php.ini。
啟動Nginx和php,檢查是否正常運行。
nginx && php-fpm -D第三步:打包鏡像
在打包成鏡像之前,我們先將nginx、php-fpm關閉,刪除一些不需要的應用以及清理一些安裝的緩存文件,從而減小最終打包成鏡像的大小。
apt-get purge vim make apt-get autoremove apt-get autoclean rm -f /usr/local/etc/php/conf.d/* #統(tǒng)一將php擴展寫入到php.ini文件
然后,輸入exit退出容器,通過以下命令將更新過的容器重新打包成一個新鏡像:
docker commit -m="php-nginx-website" -a="yourname" 96b3f038590b yourhubid/php-nginx:v0.1.0
參數(shù)說明:
-m:提交的描述信息
-a:指定鏡像作者
96b3f038590b:容器ID
yourhubid/php-nginx:v0.1.0:指定要創(chuàng)建的目標鏡像名
可以使用docker images命令來查看我們的新鏡像
第四步:上傳鏡像使用docker login命令登錄 hub.docker.com,按提示輸入賬號和密碼即可
使用docker push命令將打包好的新鏡像上傳至鏡像倉庫:
docker push yourhubid/php-nginx:v0.1.0第五步:登錄URLOS制作應用
注意:需要修改將/data/urlos/master-config/config.jsonc文件的envType的值設置為dev(開發(fā)環(huán)境):
vim /data/urlos/master-config/config.jsonc添加鏡像
瀏覽器地址欄輸入http://主機ip:9968,登錄URLOS,在左側菜單欄選擇鏡像管理,然后點擊右上角的添加按鈕。
輸入鏡像名稱
鏡像地址
開發(fā)者信息
在左側菜單中選擇應用管理。然后點擊右上角的添加應用按鈕:
應用的基本信息如上圖所示。
鏡像:選擇上一步驟添加的鏡像。
URLOS最低版本號:如設置此選項則表示安裝URLO的版本高于或者等于當前設置的值,才允許用戶安裝
使用。
容器端口:容器啟動時對外通信的端口,即參數(shù)-p。網(wǎng)站的80、443等端口默認是對外開發(fā)的,在這里可
以不用設置。如必須特定端口時,設置的格式{"22":true}。
標簽:應用標簽多用于搜索場景。
選項開關注解:
固定節(jié)點運行:若勾選,則表示用戶在安裝此應用時(創(chuàng)建此應用的服務)需要選擇安裝在某個節(jié)點(云
主機)。若取消勾選,則表示此應用安裝在選擇的集群(單容器運行也取消勾選),可達到負載均衡,故障
轉(zhuǎn)移的效果。
單容器運行:若勾選,則表示安裝此應用時,每個服務只運行一個容器。與固定節(jié)點運行配合使用,即固
定節(jié)點運行時,則單容器運行。
允許特權允許:若勾選,則容器內(nèi)的root擁有了真正的root權限(宿主機器的root),在容器內(nèi)部就可以做
任何事情(包括修改宿主機器的文件,啟動宿主機器其他容器,執(zhí)行mount等操作),不建議勾選。
以root用戶允許容器:這里的root用戶是容器外部的一個普通用戶,默認勾選。若容器內(nèi)部的程序禁止
root用戶允許,則取消(如:MySQL)。
掛載存儲目錄:如需要從宿主機器掛載文件到容器,則勾選。即參數(shù) -v。
掛載時區(qū)定義文件:容器的時間與宿主機器的時間保持一致。
容器只讀:禁止向容器寫數(shù)據(jù)。
全局網(wǎng)絡:允許同一集群不同容器網(wǎng)絡的容器通信。
允許快照備份:勾選則允許執(zhí)行快照備份(僅掛載了本地存儲時有效)
開啟反向代理,則可以實現(xiàn)多容器共享端口,反之則不能。
注解:
插件:由PHP語言編輯的腳本文件組成。插件的使用會讓用戶在安裝應用(創(chuàng)建服務)時更便捷,更智
能。這里選擇phpWebSite:v0_1_0 --- Liu Xin ---php網(wǎng)站環(huán)境這個插件即可。(制作插件后續(xù)會有詳細說
明)
服務別名:創(chuàng)建服務時,在左上角顯示的描述。
應用數(shù)據(jù)別名:創(chuàng)建服務完成后,服務產(chǎn)生的數(shù)據(jù)或者用戶基于創(chuàng)建的服務需要添加新的數(shù)據(jù),對這些數(shù)
據(jù)管理取的名字,即為應用數(shù)據(jù)別名。(如:創(chuàng)建MySQL數(shù)據(jù)庫服務,用戶可以手動添加數(shù)據(jù)庫,創(chuàng)建網(wǎng)
站服務時也可以新增數(shù)據(jù)庫。)
服務表單步驟:創(chuàng)建服務時,用戶填寫表單的步驟。(數(shù)字表示必填,其他符號表示選填)
額外掛載:將宿主機器的除存儲目錄外的其他目錄掛載到容器。
額外啟動參數(shù):通過docker run運行容器時的額外參數(shù),如:--add-host a.com:192.168.0.1
注解:
安裝腳本:安裝應用時需要執(zhí)行的腳本命令。
test -d /etc/nginx/conf.d/ || mkdir -p /etc/nginx/conf.d/
啟動腳本:需要啟動程序的命令。
nginx php-fpm -D
狀態(tài)腳本:每隔2秒執(zhí)行此腳本,用來檢查程序是否正常允許。當前的腳本命令用來檢查apache是否啟動。
status1=0 && (ps -ef|grep "php-fpm"|grep "master process"|grep -v "grep") && status1=1; status2=0 && (ps -ef|grep "nginx"|grep "master process"|grep -v "grep") && status2=1; if [ ${status1} != 0 ] && [ ${status2} != 0 ]; then statusScriptResult=1 fi
監(jiān)控腳本:每隔1秒執(zhí)行此腳本,檢查狀態(tài)腳本返回的結果判斷程序是否正常允許。若異常,則執(zhí)行退腳本。
{w:statusScript:w} [ "$statusScriptResult" != 1 ] && exit 1
退出腳本:容器關閉時之前,執(zhí)行的腳本。如同,我們關閉電腦時,系統(tǒng)會關閉正在允許的程序。
添加LNP模板在這個應用,我們需要添加模板php.ini、vhost.conf,然后在這兩個模板的參數(shù)設置一些變量,這樣用戶在安裝應用時,就可以根據(jù)自己的需要動態(tài)的調(diào)整。(如:設置php的上傳大小,最大內(nèi)存等)那么如何添加模板呢?我們在應用管理列表中找到上述創(chuàng)建的應用,然后點擊右側的更多選擇管理模板。
添加一個php.ini模板,然后在模板內(nèi)容將php.ini文件內(nèi)容復制進入,同時設置變量{w:upload_max_filesize:w}、{w:PHP_memory_limit:w}。
[PHP] engine = On short_open_tag = Off precision = 14 output_buffering = 4096 zlib.output_compression = Off implicit_flush = Off unserialize_callback_func = serialize_precision = -1 disable_functions = disable_classes = zend.enable_gc = On expose_php = On max_execution_time = 30 max_input_time = 60 memory_limit = 128M error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT display_errors = Off display_startup_errors = Off log_errors = On log_errors_max_len = 1024 ignore_repeated_errors = Off ignore_repeated_source = Off report_memleaks = On html_errors = On variables_order = "GPCS" request_order = "GP" register_argc_argv = Off auto_globals_jit = On post_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 = Off file_uploads = On upload_max_filesize = {w:upload_max_filesize:w} max_file_uploads = 20 allow_url_fopen = On allow_url_include = Off default_socket_timeout = 60 extension=gd.so extension=memcached.so extension=sockets.so extension=mysqli.so extension=pdo_mysql.so [CLI Server] cli_server.color = On [Date] [filter] [iconv] [imap] [intl] [sqlite3] [Pcre] [Pdo] [Pdo_mysql] pdo_mysql.default_socket= [Phar] [mail function] SMTP = localhost smtp_port = 25 mail.add_x_header = Off [ODBC] odbc.allow_persistent = On odbc.check_persistent = On odbc.max_persistent = -1 odbc.max_links = -1 odbc.defaultlrl = 4096 odbc.defaultbinmode = 1 [Interbase] ibase.allow_persistent = 1 ibase.max_persistent = -1 ibase.max_links = -1 ibase.timestampformat = "%Y-%m-%d %H:%M:%S" ibase.dateformat = "%Y-%m-%d" ibase.timeformat = "%H:%M:%S" [MySQLi] mysqli.max_persistent = -1 mysqli.allow_persistent = On mysqli.max_links = -1 mysqli.default_port = 3306 mysqli.default_socket = mysqli.default_host = mysqli.default_user = mysqli.default_pw = mysqli.reconnect = Off [mysqlnd] mysqlnd.collect_statistics = On mysqlnd.collect_memory_statistics = Off [OCI8] [PostgreSQL] pgsql.allow_persistent = On pgsql.auto_reset_persistent = Off pgsql.max_persistent = -1 pgsql.max_links = -1 pgsql.ignore_notice = 0 pgsql.log_notice = 0 [bcmath] bcmath.scale = 0 [browscap] [Session] session.save_handler = files session.use_strict_mode = 0 session.use_cookies = 1 session.use_only_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.cookie_path = / session.cookie_domain = session.cookie_httponly = session.cookie_samesite = session.serialize_handler = php session.gc_probability = 1 session.gc_divisor = 1000 session.gc_maxlifetime = 1440 session.referer_check = session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0 session.sid_length = 26 session.trans_sid_tags = "a=href,area=href,frame=src,form=" session.sid_bits_per_character = 5 [Assertion] zend.assertions = -1 [COM] [mbstring] [gd] [exif] [Tidy] tidy.clean_output = Off [soap] soap.wsdl_cache_enabled=1 soap.wsdl_cache_dir="/tmp" soap.wsdl_cache_ttl=86400 soap.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} set $websiteRoot "/data/www/{w:indexDirName:w}"; root $websiteRoot; index index.html index.htm index.php; client_max_body_size {w:upload_max_filesize:w}; client_body_buffer_size 128; location / { {w:rewriteContents:w} } location ~ .(php|phtml)$ { include fastcgi.conf; fastcgi_pass 127.0.0.1:9000; } location ~ /.ht { deny all; } }添加變量
變量分為:環(huán)境變量、數(shù)據(jù)變量和擴展變量。在這里只需要添加擴展變量。
環(huán)境變量:在操作系統(tǒng)中用來指定操作系統(tǒng)運行環(huán)境的一些參數(shù),與平常使用的環(huán)境變量相同。有時容器啟動需要設置一些參數(shù)提供給容器內(nèi)部的程序。如:MySQL容器啟動時可以設置MYSQL_ROOT和MYSQL_ROOT_PASSWORD。
數(shù)據(jù)變量:添加存儲數(shù)據(jù)時設置的一些參數(shù)。如:往MySQL數(shù)據(jù)服務添加數(shù)據(jù)庫時,需要填寫dbName,dbPassword,status,charset。具體可以使用可以創(chuàng)建MySQL服務,然后在管理數(shù)據(jù)庫中添加數(shù)據(jù)庫。
擴展變量:即普通變量。如:上述在模板中設置的變量{w:upload_max_filesize:w}、{w:PHP_memory_limit:w}。變量的格式:{w:變量名:w}。
添加PHP最大內(nèi)存變量:PHP_memory_limit
添加上傳大小限制:upload_max_filesize
至此,LMP應用已經(jīng)制作完成,我們在應用管理列表中,選擇剛才制作好的應用,點擊創(chuàng)建服務
部署完成后,地址欄輸入域名訪問一下,如果訪問正常,說明我們制作的應用沒有問題了,可以導出供他人安裝!
將我們制作的應用導出,可將導出的文件發(fā)布到任何地方,供他人安裝使用,只要對方的主機安裝了URLOS,都可以完美運行(無需考慮兼容性問題)我們制作的應用。
導出的文件為txt文本。只要其他用戶使用URLOS直接導即可。下面是導入方法:
打開文本,全選復制其中內(nèi)容
登錄URLOS,在左側菜單點擊導入應用,將內(nèi)容粘貼進去,提交
導入成功??!點擊安裝即可。哈哈,太爽了吧。任何服務器環(huán)境可以使用的應用都可以用這個方法來制作,比如微信小程序后端部分等等都可以這樣制作,方便分發(fā)和安裝。
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/27771.html
摘要:云計算深入,驅(qū)動市場過去十年,云計算服務取得了長足的發(fā)展。之于云計算的重要性,相當于操作系統(tǒng)之于電腦。細分市場投融資活躍全球云計算服務模式中,雖然市場份額最小,但是增速卻是最快的。向進軍已是云計算產(chǎn)業(yè)投資者和創(chuàng)業(yè)者的新戰(zhàn)略方向。1. 互聯(lián)網(wǎng)應用風口快速迭代,為企業(yè)提供風口型解決方案的PaaS服務商重要性凸顯。2. PaaS領域資本熱度增高,Docker技術平臺和通訊云平臺是今年最熱的細分領域...
摘要:由于汽車對安全性可靠性實時性,和傳感器帶寬算力的高要求,及其復雜的軟件供應鏈生態(tài),智能汽車會催生下一代計算操作系統(tǒng)。軟件生態(tài)與容器放眼智能汽車的生態(tài)圈,今天的座艙與兩個域計算機都是以整體解決方案的方式售賣給整車廠。 ?【CSDN 編者按】智能汽車正在被軟件定義,而以軟件為中心的新架構也...
摘要:近日,愛分析在京舉辦了愛分析中國云計算高峰論壇,本次論壇以云化萬物,智動未來為主題,探討云計算行業(yè)的發(fā)展趨勢。演講實錄黃啟功大家好首先做一下自我介紹,我是時速云黃啟功,感謝愛分析的邀請,我今天分享的主題叫云原生應用實踐與未來趨勢。 近日,愛分析在京舉辦了 2018 愛分析·中國云計算高峰論壇,本次論壇以云化萬物,智動未來為主題,探討云計算行業(yè)的發(fā)展趨勢。愛分析邀請了云計算領域標桿公司時...
閱讀 2088·2023-04-25 19:15
閱讀 2268·2021-11-23 09:51
閱讀 1274·2021-11-17 09:33
閱讀 2179·2021-08-26 14:15
閱讀 2493·2019-08-30 15:54
閱讀 1591·2019-08-30 15:54
閱讀 2178·2019-08-30 12:50
閱讀 1144·2019-08-29 17:08