使用URLOS低門檻快速開發和分發docker應用,將來微服務發展大趨勢

使用Docker技術能夠幫助企業快速水平擴展服務,從而到達彈性部署業務的能力。在雲服務概念興起以後,Docker的使用場景和範圍進一步發展,現在在微服務架構愈來愈流行的狀況下,微服務+Docker的完美組合,更加方便微服務架構運維部署落地。php

如何快速入門docker,開發屬於本身的容器應用?咱們今天不整虛的,來點實打實的乾貨:利用URLOS快速開發docker應用,並可隨意將應用導出給他人使用。html

對URLOS不瞭解的朋友,這裏大概介紹一下,URLOS是一個容器雲管理面板,基於Docker容器技術打包和運行應用,可自動識別機器和雲應用的故障並將雲應用轉移至可用的機器上,單機故障並不影響業務開展,配合雲存儲即可輕鬆搭建7x24小時持續運行的應用環境。
URLOS官網:https://www.urlos.com/
URLOS安裝方法:https://www.urlos.com/center-...
URLOS開發交流QQ羣:695164700,147882180
URLOS微信公衆號:
圖片描述mysql

安裝URLOS:linux

curl -SO https://www.urlos.com/install && chmod 544 install && ./install

安裝完成後,地址欄輸入 http://ip:9968 便可訪問。nginx

劃重點:利用URLOS開發docker應用的最基本的流程:
在這裏插入圖片描述
這裏咱們以製做一個LNP(linux+nginx+php)網站環境爲例,快速製做一個能夠導出給他人使用的docker應用。web

在開始製做以前,咱們先到docker官網註冊一個帳號,這樣咱們才能將製做好的鏡像上傳到docker倉庫,打開https://hub.docker.com/
在這裏插入圖片描述
有了hub帳號,那麼咱們開始製做吧!redis

第一步:拉取鏡像,啓動容器,進入容器

使用SSH工具鏈接主機,輸入如下命令拉取一個php:7.3.3-fpm-stretch鏡像,啓動容器並進入這個容器內部:sql

docker run -it php:7.3.3-fpm-stretch bash

在這裏插入圖片描述
看到相似上圖中相似的字符串時,表示已經成功進入容器內部,這個即是當前容器的IDdocker

第二步:更新鏡像,安裝咱們要的nginx以及PHP相關擴展

先更新一下鏡像源,國內用阿里的會快一些數據庫

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-configuredocker-php-ext-install
例如咱們要安裝pdo_mysql:

docker-php-ext-configure pdo_mysql
docker-php-ext-install pdo_mysql

而後使用 php -m查看咱們的擴展是否安裝成功。使用這種方式安裝,系統會自動生成一個配置文件,提供給
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

編譯過程當中若出現如下錯誤提示:
在這裏插入圖片描述
則執行安裝命令,而後從新編譯安裝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-developmentphp.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/* #統一將php擴展寫入到php.ini文件

而後,輸入exit退出容器,經過如下命令將更新過的容器從新打包成一個新鏡像:

docker commit -m="php-nginx-website" -a="yourname" 96b3f038590b yourhubid/php-nginx:v0.1.0

參數說明:

-m:提交的描述信息
-a:指定鏡像做者
96b3f038590b:容器ID
yourhubid/php-nginx:v0.1.0:指定要建立的目標鏡像名

可使用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(開發環境):

vim /data/urlos/master-config/config.jsonc

在這裏插入圖片描述

添加鏡像

瀏覽器地址欄輸入http://主機ip:9968,登陸URLOS,在左側菜單欄選擇鏡像管理,而後點擊右上角的添加按鈕。
在這裏插入圖片描述
輸入鏡像名稱
在這裏插入圖片描述
鏡像地址
在這裏插入圖片描述
開發者信息
在這裏插入圖片描述

添加LNP應用

在左側菜單中選擇應用管理。而後點擊右上角的添加應用按鈕:
在這裏插入圖片描述
在這裏插入圖片描述
應用的基本信息如上圖所示。
鏡像:選擇上一步驟添加的鏡像。
URLOS最低版本號:如設置此選項則表示安裝URLO的版本高於或者等於當前設置的值,才容許用戶安裝
使用。
容器端口:容器啓動時對外通訊的端口,即參數-p。網站的80、443等端口默認是對外開發的,在這裏可
以不用設置。如必須特定端口時,設置的格式{"22":true}。
標籤:應用標籤多用於搜索場景。
在這裏插入圖片描述
選項開關注解:
固定節點運行:若勾選,則表示用戶在安裝此應用時(建立此應用的服務)須要選擇安裝在某個節點(雲
主機)。若取消勾選,則表示此應用安裝在選擇的集羣(單容器運行也取消勾選),可達到負載均衡,故障
轉移的效果。
單容器運行:若勾選,則表示安裝此應用時,每一個服務只運行一個容器。與固定節點運行配合使用,即固
定節點運行時,則單容器運行。
容許特權容許:若勾選,則容器內的root擁有了真正的root權限(宿主機器的root),在容器內部就能夠作
任何事情(包括修改宿主機器的文件,啓動宿主機器其餘容器,執行mount等操做),不建議勾選。
以root用戶容許容器:這裏的root用戶是容器外部的一個普通用戶,默認勾選。若容器內部的程序禁止
root用戶容許,則取消(如:MySQL)。
掛載存儲目錄:如須要從宿主機器掛載文件到容器,則勾選。即參數 -v。
掛載時區定義文件:容器的時間與宿主機器的時間保持一致。
容器只讀:禁止向容器寫數據。
全局網絡:容許同一集羣不一樣容器網絡的容器通訊。
容許快照備份:勾選則容許執行快照備份(僅掛載了本地存儲時有效)

開啓反向代理,則能夠實現多容器共享端口,反之則不能。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
註解:
插件:由PHP語言編輯的腳本文件組成。插件的使用會讓用戶在安裝應用(建立服務)時更便捷,更智
能。這裏選擇phpWebSite:v0_1_0 --- Liu Xin ---php網站環境這個插件便可。(製做插件後續會有詳細說
明)
服務別名:建立服務時,在左上角顯示的描述。
應用數據別名:建立服務完成後,服務產生的數據或者用戶基於建立的服務須要添加新的數據,對這些數
據管理取的名字,即爲應用數據別名。(如:建立MySQL數據庫服務,用戶能夠手動添加數據庫,建立網
站服務時也能夠新增數據庫。)
服務表單步驟:建立服務時,用戶填寫表單的步驟。(數字表示必填,其餘符號表示選填)
額外掛載:將宿主機器的除存儲目錄外的其餘目錄掛載到容器。
額外啓動參數:經過docker run運行容器時的額外參數,如:--add-host a.com:192.168.0.1
在這裏插入圖片描述
註解:
安裝腳本:安裝應用時須要執行的腳本命令。

test -d /etc/nginx/conf.d/ || mkdir -p /etc/nginx/conf.d/

啓動腳本:須要啓動程序的命令。

nginx
php-fpm -D

狀態腳本:每隔2秒執行此腳本,用來檢查程序是否正常容許。當前的腳本命令用來檢查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

監控腳本:每隔1秒執行此腳本,檢查狀態腳本返回的結果判斷程序是否正常容許。若異常,則執行退腳本。

{w:statusScript:w}
[ "$statusScriptResult" != 1 ] && exit 1

退出腳本:容器關閉時以前,執行的腳本。如同,咱們關閉電腦時,系統會關閉正在容許的程序。

添加LNP模板

在這個應用,咱們須要添加模板php.inivhost.conf,而後在這兩個模板的參數設置一些變量,這樣用戶在安裝應用時,就能夠根據本身的須要動態的調整。(如:設置php的上傳大小,最大內存等)那麼如何添加模板呢?咱們在應用管理列表中找到上述建立的應用,而後點擊右側的更多選擇管理模板。
在這裏插入圖片描述
在這裏插入圖片描述
添加一個php.ini模板,而後在模板內容將php.ini文件內容複製進入,同時設置變量{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;
}
}

添加變量

變量分爲:環境變量、數據變量和擴展變量。在這裏只須要添加擴展變量。
環境變量:在操做系統中用來指定操做系統運行環境的一些參數,與日常使用的環境變量相同。有時容器啓動須要設置一些參數提供給容器內部的程序。如:MySQL容器啓動時能夠設置MYSQL_ROOT和MYSQL_ROOT_PASSWORD。
數據變量:添加存儲數據時設置的一些參數。如:往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,在左側菜單點擊導入應用,將內容粘貼進去,提交
在這裏插入圖片描述
在這裏插入圖片描述
導入成功!!點擊安裝便可。哈哈,太爽了吧。任何服務器環境可使用的應用均可以用這個方法來製做,好比微信小程序後端部分等等均可以這樣製做,方便分發和安裝。
在這裏插入圖片描述

相關文章
相關標籤/搜索