Docker 的優點
2138
2025-03-31
一、華為云云容器簡單介紹:
云容器引擎 CCE 是基于 K8S 和 Docker 的企業級容器服務,為企業應用提供快速部署、自動化運維、彈性伸縮等容器生命周期管理能力。
這個實踐是通過 docker 容器以及云容器引擎 CCE 平臺快速實現了網站搭建,體驗到容器為企業應用所帶來的極大的便利性。
而網站建站是一個IT從業人員的基本功,所以通過本篇文章,利用私有鏡像搭建GuestBook說明借助華為云等云生態資源,進行快速、高效的實踐,大家可以對比體會下,如果是采用CES單購、自建容器或采用自有服務器搭建的性價比之分,個人覺得,差別還是很大的,如果我們能把原本需要2天的時間縮短到2個小時,那么即使付出幾百塊錢的成本也是值得的。
二、下面對具體實踐步驟進行分享說明:
實踐的大致內容說明如下:
在安裝好 docker 環境的虛擬機中制作 Guestbook 的三個鏡像:frontend, redis 和 redisslave,并
上傳到云容器引擎 CCE 的鏡像倉庫中,通過私有鏡像發布容器服務,搭建 Guestbook 留言簿。
1、創建彈性云服務器 ECS
注冊登錄后,在頁面的左上方點擊【服務列表】,從顯示的服務中選擇【計算】-【彈性云服務器ECS】
點擊后進入彈性云服務器購買頁面:
按需計費,華北-北京一,可用區1,通用計算型1核1G,公共鏡像 ubantu 16.04,帶寬1G,確定后點擊【立即購買】
勾選同意,然后點擊提交,等待創建,然后?返回云服務器控制臺,等待片刻后,可查看到已創建好的彈性云服務器。記錄下彈性 IP 地址,以作后續登陸使用。此處如我的是?114.xx.xxx.7
2、安裝 docker 客戶端
打開 putty,輸入彈性云服務器 ECS 的彈性 IP 地址,單擊“open”。如下圖所示:
最好是保存會話,再次打開的話,就可以直接雙擊,點擊【打開】后會進入DOC命令框,輸入root和購買時設置的密碼,出現如下畫面,則表示已經登錄成功:
使用如下命令快速安裝 Docker。
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh
安裝后,使用docker?version?或docker?info?查看版本及安裝信息,如下圖所示:
docker?info?可自行嘗試
3、制作 Guestbook 鏡像
制作 Guestbook 鏡像中,需要制作三個鏡像:frontend 作為前端網頁服務鏡像,代碼邏輯全在
Frontend 組件內,redis 和 redisslave 負責存儲,互為主備
(1)制作 Frontend 組件鏡像
《1》執行如下命令,新建用于存放 frontend 組件文件的目錄。
mkdir guestbook
cd guestbook
mkdir frontend
cd frontend
如下圖所示:
《2》執行如下命令,新建 guestbook.php 文件。并復制代碼到 guestbook.php 文件中。
vi guestbook.php
guestbook.php ?文件 的 代碼?內容如下:
set_include_path('.:/usr/local/lib/php');
error_reporting(E_ALL);
ini_set('display_errors',1);
require 'Predis/Autoloader.php';
Predis\Autoloader::register();
if (isset($_GET['cmd'])===true){
$host = 'redis-master';
header('Content-Type: application/json');
if ($_GET['cmd']=='set'){
$client = new Predis\Client([
'scheme' => 'tcp',
'host' => $host,
'port' => 6379,
]);
$client->set($_GET['key'],$_GET['value']);
print('{"message": "Updated"}');
}
else {
$host = 'redis-slave';
$client = new Predis\Client ([
'scheme' => 'tcp',
'host' => $host,
'port' => 6379,
]);
$value = $client->get($_GET['key']);
print('{"data": "' . $value . '"}');
}
} else {
phpinfo();
} ?>
注意:復制上述代碼的時候,檢查頭和尾,以確保完整,如若缺失頭的部分,則把光標先移動至最頭部第一個字符,然后復制缺失的部分,粘貼
復制完成后,檢查無誤,則ESC退出輸入,SHIFT+冒號,然后輸入? wq,保存后退出文件
《3》執行如下命令,新建 controllers.js 文件。并復制代碼到 controllers.js 文件中。
vi controllers.js
controllers.js ?文件 的 代碼 內容如下 :
var redisApp = angular.module('redis',['ui.bootstrap']);
/**
*Constructor
*/
function RedisController() {}
RedisController.prototype.onRedis = function() {
this.scope_.messages.push(this.scope_.msg);
this.scope_.msg = "";
var value = this.scope_.messages.join();
this.http_.get("guestbook.php?cmd=set&key=messages&value=" + value)
.success(angular.bind(this, function(data) {
this.scope_.redisResponse = "Updated.";
}));
};
redisApp.controller('RedisCtrl',function($scope, $http, $location) {
$scope.controller = new RedisController();
$scope.controller.scope_= $scope;
$scope.controller.location_= $location;
$scope.controller.http_= $http;
$scope.controller.http_.get("guestbook.php?cmd=get&key=messages")
.success(function(data) {
console.log(data);
$scope.messages =data.data.split(",");
});
});
復制完成后,檢查無誤,則ESC退出輸入,SHIFT+冒號,然后輸入? wq,保存后退出文件
《4》執行如下命令,新建 index.html 文件。并復制代碼到 index.html 文件中。
vi index.html
index.html ?文件 的 代碼 內容如下
href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css?t=1023">
{{msg}}
復制完成后,檢查無誤,則ESC退出輸入,SHIFT+冒號,然后輸入? wq,保存后退出文件
《5》通過 ls 命令可以查詢到“frontend”目錄下已創建好的三個文件。
《6》在當前 frontend 目錄下,編寫 Dockerfile 文件構建 frontend 鏡像。
vi Dockerfile
Dockerfile ?文件 代碼內容如下:
FROM php:5-apache
RUN apt-get update
RUN pear channel-discover pear.nrk.io
RUN pear install nrk/Predis
ADD guestbook.php /var/www/html/guestbook.php
ADD controllers.js /var/www/html/controllers.js
ADD index.html /var/www/html/index.html
其中
FROM 語句:表示使用 php:5-apache 鏡像作為基礎。
RUN語句:表示使用 apt-get 命令來更新軟件包列表和安裝 Predis。
ADD語句:將本地代碼文件添加到鏡像中。
《7》執行如下命令制作 frontend 鏡像。
docker build -t?frontend .? ? ? ? ? (不要漏了最后有個點)
《8》驗證成功與否:
屏幕回顯信息如下,當出現“successfully built”的時候表示鏡像制作成功,如下圖所示:
(2)制作 redis 和 redisslave 鏡像
《1》?redis 鏡像通過如下命令直接從鏡像倉庫中獲取
docker pull redis:3.0
如下圖所示:
《2》返回 guestbook 目錄下,創建 redisslave 文件夾
cd ..
mkdir redisslave
cd redisslave
如下圖所示:
《3》編寫 run.sh 文件。
vi run.sh
run.sh ?文件 內容 如下 :
redis-server --slaveof redis-master 6379
如下圖所示:
ESC,使用SHIFT+冒號,然后輸入wq 保存并退出文檔。
《4》在當前 redisslave 目錄下,編寫 redisslave 鏡像的 Dockerfile 文件。
vi Dockerfile
Dockerfile ?文件內容如下:
FROM redis:3.0
ADD run.sh /run.sh
RUN chmod a+x /run.sh
CMD /run.sh
ESC,使用SHIFT+冒號,然后輸入wq 保存并退出文檔。
其中:
FROM 語句:表示基于 redis 鏡像。
ADD 語句:表示將本地的 run.sh 文件放到鏡像中。
RUN 語句:表示給所有用戶寫的 run.sh 賦予可執行權限。
CMD 語句:表示容器啟動后自動運行 run.sh 腳本。
《5》執行如下命令,制作 redisslave 的鏡像。
docker build -t?redisslave .? ? ? ? (不要漏了最后有個點)
屏幕回顯信息如下,當出現“successfully built”的時候表示鏡像制作成功
如下圖所示:
《6》?執行 docker images 命令,可以查看到已經制作好的 guestbook 的三個鏡像。如下圖所示:
4、連接華為云私有鏡像倉庫并上傳鏡像
(1)頁面左上角,點擊【服務列表】,從服務頁面中,選擇“云容器引擎 CCE”服務,進入云容器引擎頁面
(2)進入到云容器引擎控制臺后,進入【鏡像倉庫】。
(3)在容器鏡像服務中,選擇【組織管理】 創建組織。
為組織定義一個名稱,注意此處名稱全局唯一,名稱可能已被他人占用,請設置一個唯一的名
稱。(此處以?rongzhen?為例)
(4)組織創建成功后,進入“我的鏡像”,單擊“客戶端上傳”。點擊彈出對話框中的“生成
臨時 docker login 指令”
(5)用 putty 打開 ECS,粘貼 docker login 指令。回顯如下:
當顯示“Login Succeeded”時,已成功連接到鏡像倉庫。
(6)成功連接鏡像倉庫后,執行 docker images 命令,查看到已制作好的三個鏡像以及鏡像的版
本(TAG),現在需要對這三個鏡像打上新的標簽,然后推送到鏡像倉庫中。
(7)首先為 frontend 鏡像打上標簽并推送 frontend 鏡像到鏡像倉庫。
docker tag [{鏡像名稱}:{版本名稱}] swr.cn-north-1.myhuaweicloud.com/{組織名稱}/{鏡像名稱}:{版本
名稱}
docker push swr.cn-north-1.myhuaweicloud.com/{組織名稱}/{鏡像名稱}:{版本名稱}
{鏡像名稱}:frontend
{版本名稱}:latest
{組織名稱}:rongzhen(上述步驟中創建的組織名稱)
此處示例為:
docker tag frontend:latest swr.cn-north-1.myhuaweicloud.com/rongzhen/frontend:latest
docker push swr.cn-north-1.myhuaweicloud.com/rongzhen/frontend:latest
回顯如下:
(8)按照同樣的方式,為 redis 和 redisslave 鏡像打上標簽并推送到鏡像倉庫。
redis:
docker tag redis:3.0 swr.cn-north-1.myhuaweicloud.com/rongzhen/redis:3.0
docker push swr.cn-north-1.myhuaweicloud.com/rongzhen/redis:3.0
redisslave:
docker tag redisslave:latest swr.cn-north-1.myhuaweicloud.com/rongzhen/redisslave:latest
docker push swr.cn-north-1.myhuaweicloud.com/rongzhen/redisslave:latest
在執行redis:3.0時,如果復制不行,就直接照著手打一遍,應該就可以,復制的過程中會有一些字符出現非正常顯示
全部執行完畢后,到【容器鏡像服務】-【我的鏡像】中查看是否上傳成功
5、創建 guestbook 容器工作負載
為已經上傳的 guestbook 三個鏡像創建容器工作負載,因為三個工作負載有相關性,需要按照
順序進行創建:1.redis;2.redisslave;3.frontend。
集群的創建可查看另外一篇文章:
https://blog.csdn.net/weixin_37896608/article/details/91881053
作為操作的參照
此處直接使用之前的集群test,并使用我的鏡像進行私有鏡像創建無狀態工作負載
(1)進入到云容器引擎控制臺,打開【工作負載】界面,點擊【創建無狀態工作負載】。如下圖所示:
(2)?創建 redis 工作負載,填寫工作負載基本信息,參數參考如下:
工作負載名稱:redis
集群名稱:選擇已創建的集群,如 test
命名空間:default
實例數量:1
點擊【下一步】后,進入如下頁面,添加容器,并選擇鏡像,此處選擇【我的鏡像】,此處有兩個redis,選擇3.0的,因為這個是我們上述步驟中生成的,選擇后,點擊【確定】
容器配置頁面,使用默認,點擊【下一步】,進入添加服務頁面
添加 redis-master 服務,設置參數參考如下:
服務名稱:redis-master(此處名稱與 guestbook.php 中服務名稱保持一致)
訪問方式:集群內訪問
端口映射:協議-TCP;容器端口-6379;訪問端口-6379(此處端口號與 guestbook.php
中端口號保持一致)
如下圖所示:
單擊【確定】后,點擊 【下一步】,高級設置頁面保持默認,點擊【創建】,返回無狀態工作負載列表
(3)以同樣的方式創建 redisslave 工作負載,添加容器中選擇 redisslave 鏡像。添加服務中
設置服務名稱為“redis-slave”,容器端口與訪問端口均為“6379”
注意修改工作負載名稱和實例數量,選擇鏡像時,注意區分,其他的均可采用默認
(4)返回云容器引擎界面,繼續創建 guestbook 無狀態工作負載。
需要特別注意的是,在添加服務時,按以下步驟操作:
添加 guestbook 服務,設置參數如下:
服務名稱:guestbook
訪問類型:負載均衡
服務親和:集群級別
端口映射:協議-TCP,容器端口-80,訪問端口-80
如下圖所示:點擊【確定】,然后點擊【下一步】
其他的配置通其他操作,以上操作完畢后,返回工作負載列表,進行查看,如下圖所示:
6、訪問 guestbook 應用
通過?guestbook?工作負載的外部訪問地址,打開瀏覽器進行訪問,如下圖所示:
至此 Guestbook 網站搭建完畢。
有興趣的可以注冊華為云賬號,然后到華為云學院的微認證中進行學習和實踐,相信能收獲不少,以下是相關鏈接:
https://edu.huaweicloud.com/certifications/
附件是華為云官方的實踐指導手冊,部分截圖或操作因華為云產品的迭代更新,與實際會有差異,可以我博客為主,附件的指導手冊作為輔助,應該能更好的理解和學習
此篇博客原文發布在CSDN的網站上,歡迎訪問和關注:
https://blog.csdn.net/weixin_37896608/article/details/91881724
附件: 1 云容器快速搭建網站實驗指導手冊V2.0.pdf 3.39M 下載次數:2次
鏡像服務 云速建站 容器 彈性云服務器 ECS
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。