- 投稿日:2019-12-05T22:21:15+09:00
Dockerについて
ドットインストールを参考にした記事です
Dockerとは
- アプリケーションを開発、移動、実行するためのプラットフォーム
- 仮想化環境を実現するためのツール
- アプリの実行環境をラップしてくれる
- 環境の違いなんてなんのその
- 構築(Build)、移動(Ship)、実行(Run)
Vargrant
Dockerをインストールするマシンを立ち上げるもの
コンテナ
- Dockerの「イメージ」を元に作成される仮想環境の実行部分。
- オブジェクト指向でいうとインスタンス
- イメージから作られる実際の動作環境
- コンテナには、UbuntuなどのOSをはじめ、イメージで定義しているプログラム群を含み、それに加えてコンテナ起動後に個別プログラムを追加することができる
- 原則1コンテナ1アプリ
- (Dockerは、コンテナ同士をつなぐネットワーク環境の構築もできる)
Imageから勝手にコンテナを作ってスタートする
$ docker runimageの構築、コンテナ構築、起動。引数でサービスを指定しないと失敗する
コンテナがある状態
$ docker startコンテナが一つも存在しないと失敗する。
imageの 構築からコンテナの構築、起動まで。
$ docker upimageがなくてもbuildから実行してくれる
docker-compose
up
とかbuild
とかstart
とかの違いを理解できていなかったのでまとめてみた。イメージ
- コンテナを起動させるためのベース
- オブジェクト指向でいうクラスのこと
- テキストファイル(Dockerfile)からビルドされる
- Resistory(DockerHub)を使ってImageそのものを共有可能
$ docker build [DockerfileのPath]でビルド
- 通常パソコンに、OSをインストールする時にしよう・
- OSを入れ替えたり、じぶんでパソコンを作ったりする時にPSをパソコンにインストールする
- インストールする時に必要になるのが、「イメージ(ファイル)」。
その他学習したことは随時更新していきます
- 投稿日:2019-12-05T20:18:51+09:00
(クソ記事) localhost上でHTTPSなnginxコンテナを動作させ、/etc/hostsで名前解決してGmail APIのOAuth2を通す
TL;DR
できます。
できました。必要なもの
- MacOS
- mkcert (brew install)
- docker for Mac
- nginx:latest
- /etc/hostsに関する知識
- dockerに関する知識
モチベ
- わざわざドメイン取ったりDNS管理したりする必要があり、ただの静的HTMLをHTTPS公開したいだけなのに無料で出来ない。馬鹿馬鹿しい。
- じゃあlocalhostに対して、公開ドメイン名をhostsでmapしてブラウザ騙せばいいよね
- 実際に やってみた
- できた
- なおOAuth Consent Screenとかドメイン所有権確認とかは、ちゃんとDNS触ったりしたので、実は認証取るのに完全無料じゃない可能性はある。
やりかた
- コンテンツを作る。( index.html )
- nginx:latest をpullしてくる。
- mkcert で localhost と 対象のドメイン名に対応する証明書を生成し、自分のMacにinstallする。
- nginxを TCP/443 でLISTENさせ、証明書とTLS関連設定を持ったssl.confをCOPYし、ビルド
- コンテンツのディレクトリをmountさせ、docker run
- https://www.example.com/path/to/file.html みたいにアクセスしてみる
- できた
続かない
とりあえず「できた」ことだけメモっとく。
- 投稿日:2019-12-05T19:53:31+09:00
GCPでContainerデプロイする方法
Dockerを利用し、GCPのVMインスタンスにデプロイする方法をまとめます。
前提
- Githubでプロジェクトを管理
- GithubのリポジトリにDockerファイルがあるOverview
大まかな流れは以下の流れとなります。
1. Cloud BuildにPush
2. Container RegistryにPush
3. VMインスタンスをアップデートCloud BuildにPush
Cloud Buildのページにてトリガーを作成。
また、Githubと接続を行う。詳細はこちら
https://cloud.google.com/cloud-build/docs/?hl=ja接続し、トリガー条件を設定。今回はmasterブランチが更新されるとbuild開始。
Container RegistryにPush
Cloud BuildへのPushが成功すると自動的にContainer RegistryにもPushされます。
Pushされた最新のイメージの名前をコピー
[エリア]/[プロジェクトID]/[コンテナ名]:[タグ名]コマンドで行う場合
gcloud builds list
でbuild一覧を取得し、StatusがSuccessであることを確認。
gcloud container images list
でイメージ一覧を取得し、
gcloud container images list-tags --format="get(digest)” [イメージ名]
でタグを取得。
最新版のタグを組み合わせて、
[イメージ名]@[タグ名(ハッシュ化)]
のフォーマットで保存VMインスタンスをアップデート
VMインスタンスのページにてターゲットとなるインスタンスを編集。
コピーしたコンテナイメージ名をコンテナイメージのテキストフィールドに入力し、保存。コマンドで行う場合
gcloud compute instances list
でインスタンス名一覧を取得
gcloud compute instances update-container [インスタンス名] --container-image [イメージ名]@[タグ名(ハッシュ化)]
先ほどコピーした[イメージ名]@[タグ名(ハッシュ化)]を利用し、上記コマンドを実行。
- 投稿日:2019-12-05T15:17:13+09:00
Docker関連覚え書き
- 投稿日:2019-12-05T13:30:27+09:00
お手軽Hack!
メリークリスマス!
ユアマイスターアドベントカレンダーの24日目を担当させていただきます、インターンの京極と申します。
https://qiita.com/advent-calendar/2019/yourmystar今回は、Hack言語を触ってみた記事を書いてみました。ご興味ある方は年末年始のお休み中にHackしていただければ幸いです。
Hackとは
HackとはHHVMという実行環境上で動くプログラミング言語で、PHPとの互換性を持ち、Facebookによって開発が行われています。
公式サイト
https://hacklang.org/
Github
https://github.com/facebook/hhvm/tree/master/hphp/hackJava言語がJVMという実行環境で動くように、Hack言語は、HHVMという実行環境で動くということです。
公式サイトを見るとジェネリクスをサポートしていたり、ラムダがファーストクラス関数として使えるなど試してみたい気持ちがクリスマスを迎えるにあたり出てきますのでちょっと触ってみたいと思います。
Hack on Docker
マシンの直接インストールするのは避けて、Docker HubからHackの動く環境を作リます。
Dockerのは行っている環境で以下のコマンドを叩くと、そこはすでに白銀の世界ではなく、HHVMの手に入った世界の中です。
docker run -it hhvm/hhvm bash # hhvm --version HipHop VM 4.34.0 (rel) Compiler: 1575318969_858014129 Repo schema: e5c15841820ab38c7ec75ebe5ec9201013caa5bf適当なディレクトリにhello.hackを置いて、実行させてみます。
<<__EntryPoint>> function main(): noreturn { echo "Hello World!"; exit(0); }docker run -it -v $PWD:/app hhvm/hhvm hhvm /app/hello.hack Hello World!おまけにフィボナッチ数を計算するプログラムも書いてみました。普段からPHPを書く方にとっては違和感が少ないと思います。
function fib(int $n): int { if ($n <= 1) return $n; return fib($n - 1) + fib($n - 2); } <<__EntryPoint>> function main(): noreturn { echo fib(40); exit(0); }Webサーバ
調べているとHHVMはWebサーバの機能が組み込まれているということなので起動させてみます。
docker run -it -v $PWD:/var/www/public -p 12345:80 hhvm/hhvm-proxygenこうするとDocker内の/var/www/publicディレクトリに先程の、hello.hackが存在することになりますので、ブラウザからアクセスしてみます。
http://localhost:12345/hello.hackもう少しHackを書いてみる
ここまで環境構築が主だったので、もう少しプログラムを書いてみたいと思います。様々な機能がHackにはありますが、目についた面白い機能を紹介して終わりにしたいと思います。
以下の書き方をすると、 \$inc は \$a という引数を受け取り、 \$b を引数として受け取る関数を返す関数になります。 \$inc3 は \$a が3になったバージョンの関数なので、 \$inc3 に対して10を引数に渡すと、13が返ってくることが確認できます。
このようなカリー化された関数をさらっと書けるというのもHack言語の魅力だと感じました。
<<__EntryPoint>> function main(): noreturn { $inc = $a ==> $b ==> $a + $b; $inc3 = $inc(3); echo $inc3(10); exit(0); }まとめ
ちょっと触っただけでも様々な機能がHack言語にあることが分かりましたので、年末年始中にもう少しHackに触れたいと思います。メリーハッククリスマス!
- 投稿日:2019-12-05T10:31:40+09:00
proxy環境下でDocker Registryの構築
自分たちで開発した Docker コンテナをイントラネット内で使ってもらうために、Docker Registry を構築しました。構築時、proxyでハマったので簡単に手順を残します。
OS は CentOS7.7 を使用します。この構築手順は OS のインストール直後を想定しています。また、証明書や認証の設定については、省略させていただきます。Docker Registry とは
社内のみで Docker イメージを登録、取得したいケースがあります。このような場合、Dockerイメージが大量に保存されている Docker Hub を利用するのではなく、社内用のDockerイメージの保管庫が必要になります。Docker Registry は、Docker イメージを保存しておいて、提供するサービスです。Docker Registry を 利用することで、社内で Docker イメージの登録(docker push)、取得(docker pull)が可能になります。
Docker Registry も Docker イメージとして、Docker Hub に登録されていて、取得(docker pull)して、それを使ってコンテナを起動させることで、Docker Registry を構築することができます。詳細は公式サイト Docker Registry で紹介しています。
Docker のインストール
Docker Registry をインストールする前に、まず、Docker をインストールします。
各種設定
yum に proxy の設定を追加するために /etc/yum.conf を編集します。
$ sudo vi /etc/yum.conf以下を yum.conf に追加します。proxy の利用に認証が必要な場合、proxy_username, proxy_passwird も追加して下さい。今回は省略します。
/etc/yum.confproxy=http://<proxy_host>:<proxy_port>デフォルトのリポジトリ設定では、yum 実行時にタイムアウトになる可能性があるので、/etc/yum.repos.d/CentOS-Base.repo を編集します。
sudo vi /etc/yum.repos.d/CentOS-Base.repo[base], [update], [extras], [centosplus] の baseurl を以下のように置き換えます。
/etc/yum.repos.d/CentOS-Base.repo[base] baseurl=http://ftp.riken.jp/Linux/centos/$releasever/os/$basearch/ [updates] baseurl=http://ftp.riken.jp/Linux/centos/$releasever/updates/$basearch/ [extras] baseurl=http://ftp.riken.jp/Linux/centos/$releasever/extras/$basearch/ [centosplus] baseurl=http://ftp.riken.jp/Linux/centos/$releasever/centosplus/$basearch/yum update を実行して、各パッケージを最新にします。
$ sudo yum update
Docker のインストール
公式な手順 Get Docker Engine - Community for CentOS に従って、以下のようにDockerのインストールを進めます。
古いバージョンの Docker パッケージをアンインストールします。
$ sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engineDocker のインストールに必要な yum-utils, device-mapper-persistent-data, lvm2 パッケージをインストールします。
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2Docker インストール用リポジトリを yum に追加します。
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repoリポジトリーの構成を表示して、docker-ce-stable が含まれていれば問題ありません。
$ sudo yum repolist 読み込んだプラグイン:fastestmirror, langpacks Loading mirror speeds from cached hostfile repo ID repo name status base/7/x86_64 CentOS-7 - Base 10,097 docker-ce-stable/x86_64 Docker CE Stable - x86_64 61 extras/7/x86_64 CentOS-7 - Extras 305 updates/7/x86_64 CentOS-7 - Updates 711Docker をインストールします。
$ sudo yum install docker-ce docker-ce-cli containerd.io
docker -v
で Docker がインストールされたか確認できます。$ sudo docker -v Docker version 19.03.4, build 9013bf583aDocker を起動します。
$ sudo systemctl start docker以下で Docker の起動を確認します。エラーが出力されなければ、Docker は起動されています。
$ sudo docker search hello-worldDocker の設定
sudo を使わなくても Docker が使えるように、現在のユーザーを docker グループに追加します(docker グループは、Docker インストール後、追加されている)。
$ sudo usermod -aG docker $USERdocker のプロキシを設定します。詳細は公式サイトの Control Docker with systemd に記述されています。
$ sudo mkdir -p /etc/systemd/system/docker.service.d $ sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf以下のように、http-proxy.conf に proxy の情報を記述します。
/etc/systemd/system/docker.service.d/http-proxy.conf[Service] Environment="HTTP_PROXY=http://<proxy_host>:<proxy_port>" "HTTPS_PROXY=http://<proxy_host>:<proxy_port>" "NO_PROXY=localhost,127.0.0.1"設定を反映して、Docker を再起動します。
$ sudo systemctl daemon-reload $ sudo systemctl restart docker
docker info
で proxy が設定されたか確認ができます。最後の方で以下のように表示されます。$ docker info HTTP Proxy: http://<proxy_host>:<proxy_port> HTTPS Proxy: http://<proxy_host>:<proxy_port> No Proxy: localhost, 127.0.0.1以下で、OS 起動時に Docker を自動起動にします。詳細は公式サイトの Configure Docker to start on boot に記述されています。
$ sudo systemctl enable dockerDocker Registry の構築
インストールした Docker を用いて、Docker Registory を構築していきます。
イメージの取得
はじめに、Docker Registry イメージの確認をします。
$ docker search registry
docker pull
で Docker Registry イメージを取得します。$ docker pull registry Using default tag: latest latest: Pulling from library/registry c87736221ed0: Pull complete 1cc8e0bb44df: Pull complete 54d33bcb37f5: Pull complete e8afc091c171: Pull complete b4541f6d3db6: Pull complete Digest: sha256:8004747f1e8cd820a148fb7499d71a76d45ff66bac6a29129bfdbfdc0154d146 Status: Downloaded newer image for registry:latest docker.io/library/registry:latest
docker images
で registry イメージが取得できていることを確認します。$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE registry latest f32a97de94e1 8 months ago 25.8MBコンテナの起動
ホスト側に、push されたイメージを保存するために以下のディレクトリを作成します。
/root/docker/registry/取得した registry イメージをもとに Docker Registry 用のコンテナを
docker run
で起動します。ポートは5000番を使用します。$ docker run -d -p 5000:5000 registry $ docker run -d -p 5000:5000 -v /root/docker/registry/data:/var/lib/registry --restart=always --name registry01 registry:latest
docker ps
で Docker Registry コンテナが動作していることを確認します。$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 091ea25e90fe registry:latest "/entrypoint.sh /etc…" 8 seconds ago Up 25 hours 0.0.0.0:5000->5000/tcp registry01他 Docker Client から Docker Registry コンテナにアクセス
各種設定
他の環境で、前述と同じように Dockerのインストールを行います。
以下のように、http-proxy.conf の NO_PROXYに Docker Registry のIPアドレスまたはサーバ名を記述します。
/etc/systemd/system/docker.service.d/http-proxy.conf[Service] Environment="HTTP_PROXY=http://<proxy_host>:<proxy_port>" "HTTPS_PROXY=http://<proxy_host>:<proxy_port>" "NO_PROXY=localhost,127.0.0.1,<registry_host>"insecure registry の設定
Registry が暗号化されていないhttp通信の場合は、insecure registry にその Registry を登録しないと、Dockerイメージをpullすることができないので、設定します。
$ sudo vi /etc/docker/daemon.json/etc/docker/daemon.json に以下を追加します。
/etc/docker/daemon.json{ "insecure-registries":["<registry_host>:<registry_port>"] }設定を反映して、Docker を再起動します。
$ sudo systemctl daemon-reload $ sudo systemctl restart dockerイメージの登録
まず、 Docker Registry に登録するイメージを準備する。今回は確認のために hello-world イメージを
docker pull
します。$ docker pull hello-worldイメージを Docker Registry に登録するために、hello-world イメージにタグを付けます。
$ docker tag hello-world <registry_host>:5000/hello-world
docker images
で <registry_host>:5000/hello-world が作成されていることを確認します。$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest fce289e99eb9 10 months ago 1.84kB <registry_host>:5000/hello-world latest fce289e99eb9 10 months ago 1.84kB
docker push
で <registry_host>:5000/hello-world イメージを Docker Registry に登録します。$ docker push <registry_host>:5000/hello-world The push refers to repository [<registry_host>:5000/hello-world] af0b15c8625b: Pushed latest: digest: sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a size: 524イメージの取得
Docker Registry からイメージの取得する前に、確認のため、ローカルのイメージを削除します。
$ docker rmi <registry_host>:5000/hello-world
docker images
で <registry_host>:5000/hello-world が削除されていることを確認します。$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest fce289e99eb9 10 months ago 1.84kB
docker pull
で <registry_host>:5000/hello-world イメージを Docker Registry から取得します。$ docker pull <registry_host>:5000/hello-world Using default tag: latest latest: Pulling from hello-world Digest: sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a Status: Downloaded newer image for <registry_host>:5000/hello-world:latest
docker images
で <registry_host>:5000/hello-world が取得されていることを確認します。$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest fce289e99eb9 10 months ago 1.84kB <registry_host>:5000/hello-world latest fce289e99eb9 10 months ago 1.84kBregistry のイメージ一覧の取得
以下の方法で registry のイメージ一覧を取得できます。
$ curl --noproxy <registry_host> http://<registry_host>:5000/v2/_catalog {"repositories":["hello-world"]}まとめ
Docker Registry も Docker イメージとして、Docker Hub に登録されていて、取得して、それを使ってコンテナを起動させることで、Docker Registry を構築することができました。Docker Registry コンテナをイントラネット内で使用するためには、proxyの設定が不可欠です。proxy 設定と proxy を使わない設定を正しくできると動作まで辿り着けます。
もし、記述について誤りがあったり、気になることがあれば、編集リクエストやコメントでフィードバックしていただけると助かります。
参考
Docker 公式サイト他に以下の記事を参考にさせていただきました。
- 投稿日:2019-12-05T10:00:16+09:00
DockerでUnity ML-Agentsを動作させてみた(v0.11.0対応)
Unity ML-Agents(v0.9.1)をDocker上で動作させてみました。
UnityやUnity ML-Agentsの環境構築などは下記をご参考ください。
Macでhomebrewを使ってUnityをインストールする(Unity Hub、日本語化対応)
https://qiita.com/kai_kou/items/445e614fb71f2204e033MacでUnity ML-Agentsの環境を構築する(v0.11.0対応) - Qiita
https://qiita.com/kai_kou/items/0d40157cbc303fb10c22手順
v0.10.1まではDockerでの学習方法についてドキュメントがあったのですが、v0.11.0の時点でドキュメントが削除されています。情報としては若干古くなりますが、v0.11.0でもこちらを参考にして動作させることができます。
ml-agents/Using-Docker.md at 0.10.1 · Unity-Technologies/ml-agents
https://github.com/Unity-Technologies/ml-agents/blob/0.10.1/docs/Using-Docker.mdDockerのインストール
Dockerがインストールされていない場合、インストールします。
Macでbrewコマンド利用> brew cask install docker (略) > docker --version Docker version 19.03.4, build 9013bf5※Dockerを初回起動すると初期設定のためにパスワード入力が求められます。
UnityにLinuxビルドサポートコンポーネントを追加する
Unity Hubを利用してUnityにLinuxビルドサポートコンポーネントを追加します。
Unityのバージョンは2019.2.10f1
を利用しています。Unity Hubがインストールされていない場合は下記をご参考ください。
Macでhomebrewを使ってUnityをインストールする(Unity Hub、日本語化対応)
https://qiita.com/kai_kou/items/445e614fb71f2204e033
- Unity Hubアプリを起動する
- [インストール] > [Unityの利用するアプリ]右側にある[︙]をクリックして[モジュールを加える]を選択する
![]()
![]()
- [モジュールを加える]ダイアログの[Platforms]にある[Linux Build Support]にチェックを入れて[実行]ボタンをクリックする
![]()
学習用のUnityアプリをダウンロードしてビルドする
ML-Agentsリポジトリに含まれているサンプルを学習できるようにします。
ML-Agentsリポジトリをダウンロード
適当なディレクトリにリポジトリをダウンロードする。
> mkdir 適当なディレクトリ > cd 適当なディレクトリ > git clone https://github.com/Unity-Technologies/ml-agents.gitUnityアプリからサンプルプロジェクトを開く
Unity Hubでアプリを立ち上げます。
ML-Agentsを利用するにはUnityのバージョン2017.4
以上が必要となります。今回は2019.2.10f1
を利用しました。アプリが立ち上がったら「開く」ボタンから
任意のディレクトリ/ml-agents/UnitySDK
フォルダを選択します。Unityエディタのバージョンによっては、アップグレードするかの確認ダイアログが立ち上がります。
「確認」ボタンをクリックして進めます。アップグレード処理に少し時間がかかります。
起動しました。
今回は、サンプルにある[3DBall]Scenesを利用します。
- Unityアプリの下パネルにある[Project]タブから以下のフォルダまで開く
- [Assets] > [ML-Agents] > [Examples] > [3DBall] > [Scenes]
- 開いたら、[3DBall]ファイルがあるので、ダブルクリックして開く
Scenes(シーン)の設定
ML-Agentsで学習させるための設定です。
[Inspector]パネルで以下の設定を確認する
ビルド設定
- Unityアプリの[File]メニューから[Build Settings]を選択して[Build Settings]ダイアログを開く
- [Add Open Scenes]をクリックする
- [Scenes In Build]で[ML-Agents/Examples/3DBall/Scenes/3DBall]にチェックを入れる
- [Platform]で
PC, Mac & Linux Standalone
が選択されていることを確認する- [Target Platform]を
Linux
に変更する- [Architecture]を
x86_64
に変更する- [Server Build]にチェックを入れる
- [Build]ボタンをクリックする
- ファイル保存ダイアログで以下を指定してビルドを開始する
- ファイル名: 3DBall
- フォルダ名: 任意のディレクトリ/ml-agents/unity-volume
すると、
unity-volume
に以下フォルダ・ファイルが出力されます。> ls 任意のディレクトリ/ml-agents/unity-volume 3DBall.x86_64 3DBall_Dataハイパーパラメーターファイルの用意
ハイパーパラメーターファイルを
unity-volume
フォルダにコピーしておきます。> cp ml-agents/config/trainer_config.yaml ml-agents/unity-volume/Dockerイメージを作成する
すでに
Dockerfile
が用意されているので、docker build
するだけ。楽々ですね。
ml-agents-on-docker
はイメージ名となりますので、任意でOKです。> docker build -t ml-agents-on-docker ./ml-agents (略) Removing intermediate container c1384ee9d5a6 ---> 9ff8832e88dc Step 19/20 : EXPOSE 5005 ---> Running in 53253a272fb4 Removing intermediate container 53253a272fb4 ---> f0b43146ad36 Step 20/20 : ENTRYPOINT ["mlagents-learn"] ---> Running in f80f7504b790 Removing intermediate container f80f7504b790 ---> 9caddd5a62b1 Successfully built 9caddd5a62b1 Successfully tagged ml-agents-on-docker:latest > docker images REPOSITORY TAG IMAGE ID CREATED SIZE ml-agents-on-docker latest 9caddd5a62b1 2 minutes ago 1.23GB注意点
ml-agents
ディレクトリ直下でdocker build
コマンドを実行するとエラーになるのでご注意ください。> cd ml-agents > docker build -t ml-agents-on-docker . error checking context: 'file ('/Users/xxx/xxxxx/ml-agents/UnitySDK/Temp') not found or excluded by .dockerignore'.v0.10.0からPython 3.7.xにも対応しましたが、
Dockerfile
を覗いてみるとPyhtonのバージョンは3.6.4
のままでした。Dockerfile一部抜粋ENV PYTHON_VERSION 3.6.4Dockerコンテナの実行
ビルドできたら実行してみます。
bashの場合# ml-agents-3dball: コンテナ名(任意) # ml-agents-on-docker: Dockerでビルド時に付けたイメージ名 # 3DBall: Unityでビルド時に付けたアプリの名前(拡張子なし) > cd ml-agents > docker run -it --rm \ --name ml-agents-3dball \ --mount type=bind,source="$(pwd)"/unity-volume,target=/unity-volume \ -p 5005:5005 \ -p 6006:6006 \ ml-agents-on-docker:latest \ --docker-target-name=unity-volume \ --env=3DBall \ --train \ trainer_config.yaml
mlagents-learn
コマンドの--docker-target-name
オプションはdocker run
コマンドの--workdir(-w)
に置き換えることもできます。> docker run -it --rm \ --name ml-agents-3dball \ --mount type=bind,source="$(pwd)"/unity-volume,target=/unity-volume \ -w /unity-volume \ -p 5005:5005 \ -p 6006:6006 \ ml-agents-on-docker:latest \ --env=3DBall \ --train \ trainer_config.yamlfishシェルで実行する場合は、
"$(pwd)"
を"$PWD"
に置き換えます。fishの場合> cd ml-agents > docker run -it --rm \ --name ml-agents-3dball \ --mount type=bind,source="$PWD"/unity-volume,target=/unity-volume \ -p 5005:5005 \ -p 6006:6006 \ ml-agents-on-docker:latest \ --docker-target-name=unity-volume \ --env=3DBall \ --train \ trainer_config.yaml実行すると、学習が始まります。
trainer_config.yaml
のmax_steps
で指定されているステップ数が完了するか、ctrl
+c
キーで学習が終了します。> docker run (略) ▄▄▄▓▓▓▓ ╓▓▓▓▓▓▓█▓▓▓▓▓ ,▄▄▄m▀▀▀' ,▓▓▓▀▓▓▄ ▓▓▓ ▓▓▌ ▄▓▓▓▀' ▄▓▓▀ ▓▓▓ ▄▄ ▄▄ ,▄▄ ▄▄▄▄ ,▄▄ ▄▓▓▌▄ ▄▄▄ ,▄▄ ▄▓▓▓▀ ▄▓▓▀ ▐▓▓▌ ▓▓▌ ▐▓▓ ▐▓▓▓▀▀▀▓▓▌ ▓▓▓ ▀▓▓▌▀ ^▓▓▌ ╒▓▓▌ ▄▓▓▓▓▓▄▄▄▄▄▄▄▄▓▓▓ ▓▀ ▓▓▌ ▐▓▓ ▐▓▓ ▓▓▓ ▓▓▓ ▓▓▌ ▐▓▓▄ ▓▓▌ ▀▓▓▓▓▀▀▀▀▀▀▀▀▀▀▓▓▄ ▓▓ ▓▓▌ ▐▓▓ ▐▓▓ ▓▓▓ ▓▓▓ ▓▓▌ ▐▓▓▐▓▓ ^█▓▓▓ ▀▓▓▄ ▐▓▓▌ ▓▓▓▓▄▓▓▓▓ ▐▓▓ ▓▓▓ ▓▓▓ ▓▓▓▄ ▓▓▓▓` '▀▓▓▓▄ ^▓▓▓ ▓▓▓ └▀▀▀▀ ▀▀ ^▀▀ `▀▀ `▀▀ '▀▀ ▐▓▓▌ ▀▀▀▀▓▄▄▄ ▓▓▓▓▓▓, ▓▓▓▓▀ `▀█▓▓▓▓▓▓▓▓▓▌ ¬`▀▀▀█▓ INFO:mlagents.trainers:CommandLineOptions(debug=False, num_runs=1, seed=-1, env_path='3DBall', run_id='ppo', load_model=False, train_model=True, save_freq=50000, keep_checkpoints=5, base_port=5005, num_envs=1, curriculum_folder=None, lesson=0, slow=False, no_graphics=False, multi_gpu=False, trainer_config_path='trainer_config.yaml', sampler_file_path=None, docker_target_name='unity-volume', env_args=None, cpu=False) INFO:mlagents.envs: 'Ball3DAcademy' started successfully! Unity Academy name: Ball3DAcademy Number of Training Brains : 0 Reset Parameters : gravity -> 9.8100004196167 scale -> 1.0 mass -> 1.0 (略) 2019-11-07 05:31:38.593118: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA 2019-11-07 05:31:38.604956: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 2400000000 Hz 2019-11-07 05:31:38.607307: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x39ccf70 executing computations on platform Host. Devices: 2019-11-07 05:31:38.607465: I tensorflow/compiler/xla/service/service.cc:175] StreamExecutor device (0): <undefined>, <undefined> (略) 2019-11-07 05:31:40.131532: W tensorflow/compiler/jit/mark_for_compilation_pass.cc:1412] (One-time warning): Not using XLA:CPU for cluster because envvar TF_XLA_FLAGS=--tf_xla_cpu_global_jit was not set. If you want XLA:CPU, either set that envvar, or use experimental_jit_scope to enable XLA:CPU. To confirm that XLA is active, pass --vmodule=xla_compilation_cache=1 (as a proper command-line flag, not via TF_XLA_FLAGS) or set the envvar XLA_FLAGS=--xla_hlo_profile. INFO:mlagents.envs:Hyperparameters for the PPOTrainer of brain 3DBall: trainer: ppo batch_size: 64 beta: 0.001 buffer_size: 12000 epsilon: 0.2 hidden_units: 128 lambd: 0.99 learning_rate: 0.0003 learning_rate_schedule: linear max_steps: 5.0e4 memory_size: 256 normalize: True num_epoch: 3 num_layers: 2 time_horizon: 1000 sequence_length: 64 summary_freq: 1000 use_recurrent: False vis_encode_type: simple reward_signals: extrinsic: strength: 1.0 gamma: 0.99 summary_path: /unity-volume/summaries/ppo_3DBall model_path: /unity-volume/models/ppo-0/3DBall keep_checkpoints: 5 WARNING:tensorflow:From /ml-agents/mlagents/trainers/trainer.py:223: The name tf.summary.text is deprecated. Please use tf.compat.v1.summary.text instead. WARNING:tensorflow:From /ml-agents/mlagents/trainers/trainer.py:223: The name tf.summary.text is deprecated. Please use tf.compat.v1.summary.text instead. INFO:mlagents.trainers: ppo: 3DBall: Step: 1000. Time Elapsed: 10.062 s Mean Reward: 1.167. Std of Reward: 0.724. Training. (略) INFO:mlagents.trainers: ppo: 3DBall: Step: 10000. Time Elapsed: 109.367 s Mean Reward: 36.292. Std of Reward: 28.127. Training. (略) INFO:mlagents.trainers: ppo: 3DBall: Step: 49000. Time Elapsed: 520.514 s Mean Reward: 100.000. Std of Reward: 0.000. Training. (略) Converting /unity-volume/models/ppo-0/3DBall/frozen_graph_def.pb to /unity-volume/models/ppo-0/3DBall.nn IGNORED: Cast unknown layer IGNORED: StopGradient unknown layer GLOBALS: 'is_continuous_control', 'version_number', 'memory_size', 'action_output_shape' IN: 'vector_observation': [-1, 1, 1, 8] => 'sub_3' IN: 'epsilon': [-1, 1, 1, 2] => 'mul_1' OUT: 'action', 'action_probs' DONE: wrote /unity-volume/models/ppo-0/3DBall.nn file. INFO:mlagents.trainers:Exported /unity-volume/models/ppo-0/3DBall.nn file INFO:mlagents.envs:Environment shut down with return code 0.
WARNING
がかなり出力されますが、学習できました。
TensorBoard
を利用して学習の進捗を視覚的に確認することもできます。> docker exec -it \ ml-agents-3dball \ tensorboard \ --logdir=/unity-volume/summaries \ --host=0.0.0.0 (略) _np_qint32 = np.dtype([("qint32", np.int32, 1)]) /usr/local/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:525: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'. np_resource = np.dtype([("resource", np.ubyte, 1)]) TensorBoard 1.14.0 at http://0.0.0.0:6006/ (Press CTRL+C to quit)学習結果をアプリに組み込む
学習結果は、
ml-agents/unity-volume
フォルダ内に保存されます。
それをUnityアプリに組み込むことで学習結果をUnityアプリに反映できます。> ls unity-volume/ 3DBall.x86_64 3DBall_Data csharp_timers.json models summaries trainer_config.yaml > tree unity-volume/models/ unity-volume/models/ └── ppo-0 ├── 3DBall │ ├── checkpoint │ ├── frozen_graph_def.pb │ ├── model-50000.cptk.data-00000-of-00001 │ ├── model-50000.cptk.index │ ├── model-50000.cptk.meta │ ├── model-50001.cptk.data-00000-of-00001 │ ├── model-50001.cptk.index │ ├── model-50001.cptk.meta │ └── raw_graph_def.pb └── 3DBall.nn 2 directories, 10 filesUnityアプリの設定
Playerの設定を行います。
- Unityアプリの[Edit]メニューから[Project Settings]を選択する
- [Inspector]ビューの[Other Settings]欄で以下を確認・設定する
学習結果ファイルの取り込み
ターミナルかFinderで学習結果を以下フォルダにコピーします。
- 学習結果ファイル:
models/ppo-0/3DBall.nn
- 保存先:
UnitySDK/Assets/ML-Agents/Examples/3DBall/TFModels/
※すでに保存先に
3DBall.nn
ファイルが存在していますので、リネームします。> cp models/ppo-0/3DBall.nn ml-agents/UnitySDK/Assets/ML-Agents/Examples/3DBall/TFModels/3DBall_new.nn
- Unityアプリの下パネルにある[Project]タブから以下のフォルダまで開く
- [Assets] > [ML-Agents] > [Examples] > [3DBall] > [Scenes]
- 開いたら、[3DBall]ファイルがあるので、ダブルクリックして開く
- [Hierarchy]パネルから[Agent]を選択する
- Unityアプリの[Project]パネルで以下フォルダを選択する
- [Assets] > [ML-Agents] > [Examples] > [3DBall] > [TFModels]
Unityアプリの[Inspector]パネルにある[Model]という項目に[TFModels]フォルダ内の
3DBall_new.nn
ファイルをドラッグ&ドロップする
Unity上部にある[▶]ボタンをクリックする
これで、学習結果が組み込まれた状態でアプリが起動します。
参考
Macでhomebrewを使ってUnityをインストールする(Unity Hub、日本語化対応)
https://qiita.com/kai_kou/items/445e614fb71f2204e033MacでUnity ML-Agentsの環境を構築する(v0.11.0対応) - Qiita
https://qiita.com/kai_kou/items/0d40157cbc303fb10c22ml-agents/Using-Docker.md at 0.10.1 · Unity-Technologies/ml-agents
https://github.com/Unity-Technologies/ml-agents/blob/0.10.1/docs/Using-Docker.mdMacでhomebrewを使ってUnityをインストールする(Unity Hub、日本語化対応)
https://qiita.com/kai_kou/items/445e614fb71f2204e033
- 投稿日:2019-12-05T09:17:31+09:00
Ruby on Rails 6のDockerでの環境構築
Ruby on Rails Advent Calendar 2019 5日目の記事になります。
Ruby on Rails 4.2のみ経験者でちょっと触れただけですが、3年ぶりくらいに環境構築してみました。
本当は環境構築だけじゃなくて弄くり回しかったところですが、環境構築だけでタイムアップでした。【Rails】Rails 6.0 x Docker x MySQLで環境構築
zazk/Rails-6-Docker-Alpine
Quickstart: Compose and Rails
を大いに参考にさせていただきました。環境
- macOS Mojave
- Docker for Mac
- Ruby on Rails 6.0
- PostgreSQL 11.1
初期状態のディレクトリ構成
. ├── Dockerfile ├── Gemfile ├── Gemfile.lock ├── entrypoint.sh └── docker-compose.ymlDockerfileの設定
FROM ruby:2.6 RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ && apt-get update -qq \ && apt-get install -y nodejs yarn \ && mkdir /myapp WORKDIR /myapp COPY Gemfile /myapp/Gemfile COPY Gemfile.lock /myapp/Gemfile.lock RUN bundle install COPY . /myapp COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] EXPOSE 3000 CMD ["rails", "server", "-b", "0.0.0.0"]docker-compose.ymlの設定
docker-compose.ymlversion: "3" services: db: image: postgres:11.1-alpine web: build: . command: bundle exec rails server -b 0.0.0.0 volumes: - ./:/myapp ports: - "3000:3000" depends_on: - dbGemfileの設定
source 'https://rubygems.org' gem 'rails', '~>6'Gemfile.lockの作成(空のファイル)
$ touch Gemfile.lockentrypoint.shの作成
entrypoint.sh#!/bin/bash set -e # Remove a potentially pre-existing server.pid for Rails. rm -f /myapp/tmp/pids/server.pid # Then exec the container's main process (what's set as CMD in the Dockerfile). exec "$@"一旦Buildしてrails newでアプリ作成
$ docker-compose build $ docker-compose run web rails new . --force --webpack --database=postgresql再度Build
$ docker-compose build
./config/database.yml
の編集database.yml・ ・ ・ default: &default adapter: postgresql encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> host: db username: postgres development: <<: *default database: postgres ・ ・ ・docker-compose up を実行してサーバー立ち上げ
$ docker-compose upアクセス
0.0.0.0:3000にアクセスすると
苦戦したところとか
- webpackerはyarn必須で辛い。というかyarnがないとそもそもサーバーすら立ち上がらないのか...
- 依存関係が複雑すぎてbundle installでコケまくる
- とりあえず公式ドキュメント読んだ方がいい。Alpine Linux難しい。
明日は@jkr_2255さんの記事です!
- 投稿日:2019-12-05T02:08:19+09:00
Docker Experimental Featuresを有効化してCRIUをやってみる
はじめに
これはCyberAgent 20新卒 エンジニア Advent Calendar 2019の5日目の記事です。
概要
Docker v1.13.0からDocker Experimental Features(Dockerの実験的機能)が追加されました。本記事では、Docker Experimental Featuresを有効にする方法とCRIU機能を試してみます。
Docker Experimental Featuresの有効化
まず、Dockerで実験的機能を使用するには、Docker Experimental Featuresの有効化が必要です。現在のExperimental Featuresの状態は以下のコマンドで確認できます。
$ docker version -f '{{.Server.Experimental}}' false今は、Experimental Featuresは有効化になっていないので、falseとなってます。これをtrueにするには、/etc/docker/daemon.jsonに以下のJSONを定義します。
/etc/docker/daemon.json{ "experimental": true }JSONを定義したら、以下のコマンドでDocker daemonを再起動します。
$ sudo systemctl restart dockerその後にDocker Experimental Featuresの有効化されていることが確認できます。
$ docker version -f '{{.Server.Experimental}}' trueCRIU
まずCRIUって何?
CRIUとは、Checkpoint Restart In Userspaceの略でLinuxのプロセスの状態を保存して停止させ、また同じ状態で再開させる機能のことです。CRIUには、チェックポイント機能とリストア機能があり、チェックポイント機能により、コンテナ状態(メモリ情報など)をdumpして、ディスク上に書き出すことができます。また、リストア機能とは書き出した情報を読み込んでコンテナを実行することができる機能です。
実際にやってみる
コンテナの起動
まずは、サンプルのコンテナを起動します。使うイメージは、rky1011/criu-sampleです。
$ sudo docker run --name cr -d rky1011/criu-sample 7023be792739af4a27a9761a4c48342b68fd7fc04160d48573beef52ff5f365bログを確認して、コンテナが正常に起動しているか確認します。
$ sudo docker logs cr 2019/12/02 04:54:15 2019-12-02 04:54:15.012989234 +0000 UTC m=+10.003540648: count 1 2019/12/02 04:54:16 2019-12-02 04:54:16.013291109 +0000 UTC m=+11.003842518: count 2 2019/12/02 04:54:17 2019-12-02 04:54:17.013561152 +0000 UTC m=+12.004112544: count 3 2019/12/02 04:54:18 2019-12-02 04:54:18.013957634 +0000 UTC m=+13.004509047: count 4 2019/12/02 04:54:19 2019-12-02 04:54:19.014297065 +0000 UTC m=+14.004848477: count 5 2019/12/02 04:54:20 2019-12-02 04:54:20.014497531 +0000 UTC m=+15.005048944: count 6 2019/12/02 04:54:21 2019-12-02 04:54:21.014818609 +0000 UTC m=+16.005370001: count 7 2019/12/02 04:54:22 2019-12-02 04:54:22.015050647 +0000 UTC m=+17.005602048: count 8 2019/12/02 04:54:23 2019-12-02 04:54:23.015328591 +0000 UTC m=+18.005880012: count 9チェックポイントの作成
チェックポイントの作成を行います。コマンドはdocker checkpoint create {container name} {checkpoint name}です。-leave-running=falseを指定すれば、コンテナを停止せずにチェックポイントの作成をできますが、今回はチェックポイント作成と同時にコンテナを停止します。
$ sudo docker checkpoint create cr checkpoint1 checkpoint1コンテナが起動していいないことを確認できます。
$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESコンテナの復旧
checkpointを作成して停止したコンテナを再起動します。コマンドはdocker start --checkpoint {checkpoint name} {container name}です。
$ sudo docker start --checkpoint checkpoint1 crログを確認すると、カウントや時刻が途中から実行されていることを確認できます。
$ sudo docker logs cr 2019/12/02 04:54:15 2019-12-02 04:54:15.012989234 +0000 UTC m=+10.003540648: count 1 2019/12/02 04:54:16 2019-12-02 04:54:16.013291109 +0000 UTC m=+11.003842518: count 2 2019/12/02 04:54:17 2019-12-02 04:54:17.013561152 +0000 UTC m=+12.004112544: count 3 2019/12/02 04:54:18 2019-12-02 04:54:18.013957634 +0000 UTC m=+13.004509047: count 4 2019/12/02 04:54:19 2019-12-02 04:54:19.014297065 +0000 UTC m=+14.004848477: count 5 2019/12/02 04:54:20 2019-12-02 04:54:20.014497531 +0000 UTC m=+15.005048944: count 6 2019/12/02 04:54:21 2019-12-02 04:54:21.014818609 +0000 UTC m=+16.005370001: count 7 2019/12/02 04:54:22 2019-12-02 04:54:22.015050647 +0000 UTC m=+17.005602048: count 8 2019/12/02 04:54:23 2019-12-02 04:54:23.015328591 +0000 UTC m=+18.005880012: count 9 # checkpointを作成した場所 2019/12/02 04:55:35 2019-12-02 04:55:35.465808992 +0000 UTC m=+90.456360361: count 10 # コンテナをcheckpointの一から再実行 2019/12/02 04:55:36 2019-12-02 04:55:36.46625664 +0000 UTC m=+91.456808027: count 11 2019/12/02 04:55:37 2019-12-02 04:55:37.46654395 +0000 UTC m=+92.457095336: count 12 2019/12/02 04:55:38 2019-12-02 04:55:38.466772112 +0000 UTC m=+93.457323548: count 13 2019/12/02 04:55:39 2019-12-02 04:55:39.467092506 +0000 UTC m=+94.457643825: count 14まとめ
CRIUを使うと、コンテナが不意に停止しても、コンテナの実行を継続することができるようになります。現状では、実験的機能としてしか提供されていないのですが、様々な可能性を秘めていると思います。いつか本番環境でも使えると良いですね!
- 投稿日:2019-12-05T02:06:06+09:00
IBM Cloud をコンソールで操作する IBM Cloud CLI の様々な利用方法のまとめ
IBM Cloud は Web 画面でも操作できますが、操作量が多い場合には、IBM Cloud CLI ソフトウェアを利用したコンソールからの操作が快適です。
IBM Cloud CLI の利用方法は幾つかありますので、ざっと整理してまとめてみました。特に業務用PCなどで、ソフトウェアの追加に制限がある場合、これらの選択肢のどれかが役に立つとおもいます。
「Web 端末」機能を利用する
自分のPCが管理されていて、ソフトウェアのインストールが難しい場合、この 裏技 が役に立つかもしれません。
IBM Cloud の有償(PAYG/Subscription)アカウント限定の方法なのですが、Kubernetes クラスタを作成して、そのWeb 端末(コンソール)を利用する方法があります。
まずは無料の Kubernetes クラスタを作成します。30日間で削除されてしまいますので、定期的に作り直す必要があります。
「作成の要求中」の緑の進捗バーが終了するまで20~30分ほど放置します。完了したら右にある [Web端末] 機能が利用できるようになります。
以下のような表示が出ますが、ブラウザのプラグインの導入ではないようです。たぶんIBM Cloud側で対応するサーバー機能をインストールするのではないかと。[インストール] を選択して進めましょう。
そして再び [Web端末] ボタンをクリックすると、以下のような端末(ターミナル)が起動します。
ibmcloud ks
コマンドを使用するようにガイドされていますが、単なる Linux のコンソールなので、いろいろな操作が可能です。当然ながら ibmcloud CLI が用意されていますので、以下のようにログインコマンドを実行しましょう。
ibmcloud login -a cloud.ibm.com -r us-southすると以下のように普通にログインできますので、CF アプリの管理など実行できます。
git コマンド使えますし、vi でテキストファイルの編集ができましたので、ちょっとした開発なら出来てしまいそうですね。
Kubernetes クラスターをお使いの方であれば、いつでも使えるのが利点です。例えば出先でちょっと、他人のWebブラウザをプライベートモードで借りて、コンソール操作をしたい場合などに利用できそうです。ただし Kubernetes クラスター操作以外は正式な使い方ではないと思いますので、突然使えなくなるかもしれません。その点はご了承ください。
Play with Docker を利用する
自分のPCが管理されていて、ソフトウェアのインストールが難しい場合、Docker も入っていないですよね。そんな時、この 裏技 その2 が役に立つかもしれません。こちらも Web ブラウザのみで実施できる方法です。
Docker の Playground 環境である、Play with Docker サイトを利用します。Docker Hub の Docker ID があれば、無料で最長4時間、Docker 環境を試せるサイトです。
利用するのは Docker HUB にある以下のイメージです。
早速、Play with Docker にログインしてみましょう。以下のように4時間のタイマーが表示されるので、[ADD NEW INSTANCE] をクリック。
すると docker が利用できる仮想環境が作成されて、そのコンソールが標示されます。docker pull ibmcom/ibm-cloud-developer-tools-amd64 docker run -ti ibmcom/ibm-cloud-developer-tools-amd64とコマンドを入力すれば、IBM Cloud CLI の利用を開始できます。
ibmcloud login -a cloud.ibm.com -r us-southで IBM Cloud にログインし、サービスを使い始めましょう。
こちらも git コマンドを使えますし、vi でテキストファイルの編集ができましたので、ちょっとした開発なら出来てしまうでしょう。Kubernetes クラスタを操作する kubectl コマンドも入っていますよ!本格的に使用する場合、このコンソール上で CentOS などのベースイメージを元に、IBM Cloud CLI やその他必要な Docker イメージを作成し、自分用に Docker Hub に登録してしまうのもアリかもしれません。
ただし表示される警告の通り、このサイトではセキュリティ的な問題が発生する可能性があります。業務アカウントなどでの利用は避け、個人の学習やテスト目的に限定して利用するべきですし、また取り扱う情報にも注意が必要です。
最大で4時間の利用ですので、時間切れには気をつけましょう。継続して作業をしたい場合には、早めにインスタンスを再作成する必要がありそうです。ただし再作成では作業中のファイルが失われるので、いったんどこかに保持しておく必要があります。
ちょっと操作してみる
せっかくログオンしたので、NodeJS アプリを新規に作成してみましょう。
git clone https://github.com/sclorg/nodejs-ex cd nodejs-exと実行し、GitHub リポジトリから nodejs-ex サンプルをダウンロードします。せっかくですので、少し修正します。以下のように vi エディタで表示する html の中身を少し書き換えておきます。
※ vi の操作は こちら。難しい場合はスキップしてもかまいません。
vi views/index.htmlそして以下のコマンドで IBM Cloud 環境にアップロード(push)します。
ibmcloud cf push nodejs-ex -m 64M --hostname yamachan-nodejs-exこんな感じでアップロードが完了しました。
IBM Cloud の Web コンソールで、アプリが追加されているのを確認しましょう。アプリ名と使用メモリ量が、コマンドで指定した値になっています。
そして [アプリ URL にアクセス] してみましょう。公開されたホスト名がコマンドで指定された値になっていることを確認します。また html への修正(今回はタイトルの OpenShift を PWD に変更)が反映されているのも確認しましょう。
ね、ちょっとしたアプリの作成ならこんな感じで実施できちゃいます。Docker を利用する
PC に Docker が導入されていれば、話はより簡単。ターミナル (Windows の場場合は PowerShell もしくはコマンドプロンプト) を開き、以下のようにコマンドを実行します。
docker pull ibmcom/ibm-cloud-developer-tools-amd64 docker run -ti ibmcom/ibm-cloud-developer-tools-amd64 ibmcloud login -a cloud.ibm.com -r us-south
詳細は Play with Docker サイトと同じ。終了はexit
コマンドです。Docker さえ入っていれば簡単に実行できますし、PC 環境に何もインストールせず、影響を与えないので、わりとお勧めの方法です。
PC にインストールする
さて、日常的に IBM Cloud CLI を使用する方は、特に理由がなければ、PC へのインストールを実施すべきでしょう。
この場合、以下の2つのインストール方法があります。
- IBM Cloud Developer Tools CLI のインストール
- スタンドアロン IBM Cloud CLI のインストール
前者は全部入りです。IBM Cloud CLI だけでなく、Docker、git、Helm、kubectl、curl など、基本的なツールがまとめて入ります。これから開発を始める初心者にお勧めします。
それに対して後者はシンプルに IBM Cloud CLI だけをインストールします。git など既にインストール済みの上級者はこちらをお勧めします。
なお Windows7 や Windows10 Home などをお使いの場合、Docker Desktop for Windows が導入できませんので、後者のスタンドアローン版を利用してください。
というわけで
IBM Cloud CLI を利用する際のセットアップ方法について、ざっと整理してまとめてみました。
特に業務用PCなどで、ソフトウェアの追加に制限がある場合、これらの選択肢が役に立つとおもいます。また既にインストール済みの方でも、新しいバージョンをちょっと試したい場合などに、これら方法を使って貰えればと思います。
それではまた!
- 投稿日:2019-12-05T01:13:08+09:00
code-server (5) DBなども含めたMVC環境を用意してみよう (2)
これは、2019年 code-server に Advent Calender の 第4日目の記事です。今回も、code-server って何だろう?と言う事を解説していきます。
(1) code-server って何?
(2) Dockerで独自のcode-server 環境を作って見る
(3) VSCode の Plugin を 利用してみる
(4) DBなども含めたMVC環境を用意してみよう (1)
(5) DBなども含めたMVC環境を用意してみよう (2)(..) ローカルで、DBなどの環境も含めて構築するには
(..) オンライン上に置くには?
(..) K8Sなどの最近の流行りの環境と連携するには?
(..) Code-Serverを改造して、より良くしたい前回の続きで、flaskを動作させてみます。
今回の何?
Terminalが便利。Bashがオススメ
VSCodeなので、Terminalを利用できます。
Linuxをcliで操作できます。なので、別途sshを立ち上げたりdockeer-compose exec -it app bashなどして、別途 Terminalを立ち上げる必要もなくなります。
私は、bashが使いバレているので、最初にbashと入力するようにしています。
Flaskとは
軽量のWebFrameworkです。超簡単にWebページを作成する事ができます。
https://github.com/pallets/flask
Flask環境を作成してみよう!!
前回の続きから初めてみます。
requirements.txt を作成します。
requirements.txtflaskコマンドライン上で、
pip install -r requirements.txtコードを書いてみます。
main.pyfrom flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello, World!" app.run("0.0.0.0",port=8080)実行してみましょう!!
$ python main.py * Serving Flask app "main" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)http://127.0.0.1:8080/ をブラウザーで開くと、Hello,World! と表示されます
次回
db の 環境を作成してみます
PS
ソース
- 投稿日:2019-12-05T00:15:15+09:00
code-server (4) DBなども含めたMVC環境を用意してみよう (1)
これは、2019年 code-server に Advent Calender の 第4日目の記事です。今回も、code-server って何だろう?と言う事を解説していきます。
(1) code-server って何?
(2) Dockerで独自のcode-server 環境を作って見る
(3) VSCode の Plugin を 利用してみる
(4) DBなども含めたMVC環境を用意してみよう (1)
(5) DBなども含めたMVC環境を用意してみよう (2)(..) ローカルで、DBなどの環境も含めて構築するには
(..) オンライン上に置くには?
(..) K8Sなどの最近の流行りの環境と連携するには?
(..) Code-Serverを改造して、より良くしたい今回から2-3回に渡って、ローカルで動作する web framework の開発環境を作成していきます。
docker-compose を利用して、db、phpmyadmin、flask を利用した開発環境を構築してみましょう!!
今回の何?
チームでの開発環境を構築するコストを無くす事ができる
code-server の 開発元である Coder でも解説されていますが、
https://coder.com/docs/introductionチームでの開発環境を構築するコストを無くす事が、code-server で 実現できます。
一度、環境を構築して、イメージを固めることで、2度と開発環境を構築する必要がなくなります。Docker-Composeで利用してみよう
前回作成したPythonの環境を、docker-compose から呼び出すようにして呼び出してみます。
docker-compose.ymlversion: '3' services: app: build: ./app ports: - 8443:8443 - 8080:8080 volumes: - ./app:/works/app command: /works/code-server --allow-http --auth none --port 8443 /works/app以下のように配置しています。
$ find . -type f . ./app ./app/Dockerfile ./app/main.py ./docker-compose.ymldocker-compose.yml は、前回の呼び出しコマンドとほとんど同じですね!!
https://docs.docker.com/compose/compose-file/
などを、参考にすると良いでしょう。
実行してみよう
$ docker-compose build $ docker-compose up -dとする事で、code-server を 起動 できます。
そして、
ブラウザーで http://127.0.0.1:8443/ にアクセスすると、
VSCodeを開く事ができます
次回
flash という python の web framework の 環境を作成してみます
PS
ソース