コンテナイメージを作成して実行する
コンソールで次のコマンドを実行します。
docker run busybox echo ”Hello world”
复制代码
出力:
その背後にある理論的根拠:
単純なNode.jsアプリケーションを実行します
app.jsとDockerfileの2つのファイルを作成します
app.js
const http = require('http');
const os = require('os');
console.log("Kubia server starting...");
var handler = function(request, response) {
console.log("Received request from " + request.connection.remoteAddress);
response.writeHead(200);
response.end("You've hit " + os.hostname() + "\n");
};
var www = http.createServer(handler);
www.listen(8080);
复制代码
ここでは、HTTPサーバーがポート8080で開始されています。サーバーは、ステータスコード200 OK
とテキストでYou've hit <hostname>
各要求に応答します。
Dockerfile
FROM node:7 # from定义了基础镜像
ADD app.js /app.js #把app.js文件添加到镜像根目录
ENTRYPOINT ["node", "app.js"] #运行的命令
复制代码
コンテナイメージをビルドして実行します
docker build -t kubia .
复制代码
ビルドプロセスはDockerクライアントによって実行されるのではなく、ファイルのディレクトリ全体をDockerデーモンにアップロードしてそこで実行されます。Linux以外のOSでDockerを使用する場合、クライアントはホストOSで実行されますが、デーモンは仮想マシン内で実行されます。
ヒント:ビルドディレクトリに不要なファイルを含めないでください。ビルドが遅くなります。特に、Dockerデーモンがリモートマシンで実行されている場合はそうです。
イメージをビルドするとき、Dockerfile内の個々の命令はそれぞれ新しいレイヤーを作成し、それぞれを異なるイメージで再利用できます。
次のコマンドを使用します。
docker image
ローカルに保存されている画像を一覧表示すると、作成したばかりの画像情報が表示されます
次のコマンドを使用して、イメージを実行できます。
docker run --name kubia-container -p 8080:8080 -d kubia
复制代码
注文 | 説明する |
---|---|
- 名前 | 実行中のコンテナ名 |
--d | バックグラウンドプロセス |
-p | ネイティブポートマッピングコンテナポート |
次に、 http:// localhost:8080を介してアプリにアクセスしてみます
curl localhost:8080
复制代码
単一ノードのKubernetesクラスターを実行するようにMinikubeを構成する
Minikubeを使用するのが、Kubernetesクラスターを実行する最も簡単で最速の方法です。Minikubeは、シングルノードクラスターを構築するためのツールであり、Kubernetesのテストとローカルでのアプリケーションの開発の両方に役立ちます。
インストール
公式ドキュメントを参照して、独自のプラットフォームにインストールできます
起動
minikube start
复制代码
这里很多人在启动的时候可能会遇到安装各种组件失败的情况,建议你可以使用如下命令进行
minikuebe start --memory=5700 --cpus=4 --registry-mirror=https://qe1j0wqo.mirror.aliyuncs.com --kubernetes-version=v1.19.0
复制代码
指定代理和kubernets版本,后续重启也是用此命令启动即可。
查看集群信息:
kubectl cluster-info
复制代码
可以运行
minikube ssh
登录到 Minikube VM 并从内部探索它
在Kubernetes上运行第一个应用
部署 Node.js 应用
kubectl run kubia --image=luksa/kubia --port=8080
复制代码
可以使用命令kubectl get po
或者 minikuebe dashboard
查看已经运行 pod。
介绍 Pod
它使用多个共存容器的理念。这组容器就叫作 pod。一个 pod 是一组紧密相关的容器,它们总是一起运行在同一个工作节点上,以及同一个 Linux 命名空间中。每个 pod 就像一个独立的逻辑机器,拥有自己的 IP、主机名、进程等,运行 一个独立的应用程序。
容器、 pod及物理工作节点之间的关系:
在 Kubernetes 中运行 luksa/kubia
容器镜像:
访问Web应用
创建一个服务应用,作为访问 kubia 的网络连接入口:
kubectl expose po kubia --type=LoadBalancer --name kubia-http
复制代码
但是 Minikube 不支持 LoadBalancer 类型的服务,因此服务不会有外部IP,所以无法直接访问应用。但是可以通过外部端口访问服务,在控制台执行以下命令:
minikube service kubia-http
复制代码
此时会打开浏览器并访问 http://127.0.0.1:61478 获取响应内容
pod 的存在是短暂的,一个 pod 可能会在任何时候消失,或许因为它所在节点发生故障, 或许因为有人删除了 pod, 或者因为 pod 被从一个健康的节点剔除了。 当其中任何一种情况发生时,新的pod与替换它的pod具有不同的IP地址。这就是需要服务的地方。解决不断变化的 pod IP 地址的问题,以及在一个固定的 IP和端口 上对外暴露多个 pod。