使用Azure Container Instances构建使用Docker容器的Wekan环境
概述
由于使用 Azure 容器实例 (Azure Container Instances) 构建 Wekan 环境遇到了一些困难,以下是当时的笔记。
環境
Windows 10 (64bit)
Azure CLI
解释
在开始作业之前,会先对相关信息进行解释。
Wekan是什么?
这是一个用于管理OSS看板的工具。
这是一个简单易用的工具的亮点。
由于可以通过拖放来轻松移动看板,因此在一些小型任务管理等方面非常方便。
Azure容器实例是什么
这项服务允许您在Azure云服务上构建容器环境。
通常在运行容器(如Docker)时需要进行服务器(如Linux)管理,但使用此服务可以仅专注于容器管理。
可以说它是所谓的无服务器服务。
必要的容器 de
这次为了搭建Wekan环境,我们将使用两个容器。
-
- Wekan 容器
- MongoDB 容器
延续化
详细情况不赘述,Docker容器在停止后,保存在容器内部的信息会消失。
本次使用的MongoDB作为保存Wekan各种信息的数据库功能使用,如果不做处理,每次容器停止都会导致数据消失。
为了持久化数据,Docker提供了容器外部保存数据的机制,称为卷(volume)。
由于Azure Container Instances是无服务器服务,为了进行持久化,它使用Azure Storage等服务的文件共享功能来替代服务器的存储。
操作步骤
创建资源组
在Azure中,需要创建每个服务所属的组。
这次我们将在美国东部地区创建一个名为mygroup1的组。
如果已经存在资源组,则可以直接使用现有的资源组,无需创建新的。
az group create --name mygroup1 --location eastus
存储相关设定
创建需要持久存储的存储空间。
创建存储账户
执行以下命令创建存储账户。
– 名称
– 请将其设定为唯一的值。(mystorage1234)
az storage account create --resource-group mygroup1 --name mystorage1234 --location eastus --sku Standard_LRS
获取存储帐户密钥
下記のコマンドでストレージのアカウントキーを取得します。
コマンド実行後に表示される文字列を保存してください。
echo $(az storage account keys list --resource-group mygroup1 --account-name mystorage1234 --query "[0].value" --output tsv)
创建文件共享
-
- name
任意の共有名を設定してください。(myshare1)
account-key
先ほど取得したアカウントキーを指定してください。
az storage share create --name myshare1 --account-name mystorage1234 --account-key xxxxxxxx
以上就完成了所需的存储构建。
容器设置
我們會對容器相關的設置進行處理。
创建配置文件
创建一个类似于docker-compose.yaml的配置文件,但要注意它是专门用于Azure容器实例的配置文件。
参考资料在这里。
apiVersion: 2018-10-01
location: eastus
# 任意のグループ名を指定
name: wekanGroup
properties:
containers:
# wekanコンテナ
- name: wekan
properties:
# WWekanのコンテナのイメージ名を指定
image: wekanteam/wekan:v4.18
# コンテナに渡す環境変数
environmentVariables:
# MongoDBのURL (localhostの27017ポート)
- name: 'MONGO_URL'
secureValue: 'mongodb://127.0.0.1:27017/wekan'
# アプリのURL.かんばんの保存などの一部機能で使用する
# my-wekan-app1234はdnsNameLabelで指定した値。
- name: 'ROOT_URL'
value: 'http://my-wekan-app1234.westus2.azurecontainer.io:8080'
resources:
requests:
# コンテナに割り当てるCPUとメモリ
cpu: 1
memoryInGb: 1.5
# このコンテナに対して硬化するポート。wekanは8080をデフォルトで使用するので開放。
ports:
- port: 8080
# mongodb用コンテナ
- name: db
properties:
# MongoDBのコンテナを指定
image: mongo:4.2.8
# MongoDB起動時の起動コマンドを指定。詳細は記事内にて説明。
command:
- 'mongod'
- '--dbpath=/data/mongoaz'
resources:
requests:
cpu: 1
memoryInGb: 1.5
# AzureStorage上で永続化するパスを指定
# MongoDB上の/data/mongoazディレクトリを永続する
volumeMounts:
- mountPath: /data/mongoaz
name: filesharevolume
# Mongoはデフォルトで27017ポートを使用するので開放する
ports:
- protocol: tcp
port: '27017'
osType: Linux
# インターネット上に公開するのでPublicとする。
ipAddress:
type: Public
# 8080ポートをインターネット上に公開する
ports:
- protocol: tcp
port: '8080'
# ユニークな値を指定。下記の設定がインターネット上で公開されるURLに使用される。
dnsNameLabel: my-wekan-app1234
# 永続化するボリュームの設定
volumes:
- name: filesharevolume
azureFile:
# 先ほど作成したAzureのストレージアカウントの情報を指定
sharename: myshare1
storageAccountName: mystorage1234
storageAccountKey: xxxxxx
tags: null
type: Microsoft.ContainerInstance/containerGroups
文件的附加说明
基本的に上記ファイル内のコメントを見ていただければわかると思いますが、一部説明を補足します。
连接到MongoDB的地址
- name: wekan
- name: 'MONGO_URL'
secureValue: 'mongodb://127.0.0.1:27017/wekan'
在Azure容器实例中,同一组容器可以通过localhost(127.0.0.1)进行访问。
因此,如果想从Wekan访问MongoDB,只需指定localhost的27017端口即可。
MongoDB的持久化设置。
- name: db
-
command:
- 'mongod'
- '--dbpath=/data/mongoaz'
# AzureStorage上で永続化するパスを指定
# MongoDB上の/data/mongoazディレクトリを永続する
volumeMounts:
- mountPath: /data/mongoaz
name: filesharevolume
在MongoDB的默认设置中,数据存储目录为”/data/db”,所以在许多Docker示例中,会将此目录持久化。
当初私も
mountPath: /data/db
といった形でデフォルトのまま使用を試みましたが、MongoDBのコンテナ起動時にエラーが出てしまいうまく動きませんでした。
調べてみると似たような事例が見つかりました。
Link1
Link2
どうやら、/data/dbディレクトリをそのままマウントすると、本来永続化したいDBファイル以外もAzureストレージ上に共有されることでパーミッション関係の問題が生じるようです。
ということで、MongoDBの起動時にデータ保存のパス(/data/mongoaz)を指定してそのパスをマウントすることで解決ができました。
部署
後は作成したyamlファイルを指定してデプロイすれば完了です。
az container create --resource-group mygroup1 --file my-wekan.yml
デプロイ後、コンテナの起動やDBの初期化等に時間がかかるのでしばらくしたらURLにアクセスしてみます。
URLが不明な場合には、AzureのポータルにWEBブラウザでアクセスしてAzure Container Instancesの該当グループを見つけて概要情報から確認できます。
今回は8080ポートで公開しているのでURL末尾にポート番号の指定が必要な点が注意です。
なお、yamlファイルの修正を行った場合、上記のコマンドを再度実行すれば反映されます。
总结
因此,我解释了使用Azure容器实例构建Wekan环境的步骤。
与在本地使用Docker时相比,涉及存储等方面的操作需要额外一步,但是无服务器环境下可以轻松创建容器应用,这非常方便。
虽然不能直接使用现成的docker-compose.yml文件,但是由于配置值等可以重新利用,所以应该不会有太大的困难。
请参阅
参考一下
Azure 文件