「docker」と一致するもの

Unable to install Docker Desktop 4.19.0 (106363)

  • 投稿日:
  • by
  • カテゴリ:

概要

以前インストールしていたDocker Desktop(4.3くらい)が起動しないと気付いたので、新しいものを入れようとしたらインストール失敗してしまい、その後試行錯誤してどうにかインストールできました。
古いものをアンインストールしようにもアプリの一覧等にも表示されずおかしな状態になっていました。

失敗時のログ

インストールに失敗していた頃のログは以下のような感じでした。

Version: 4.19.0 (106363)
Sha1: 
Started on: 2023/05/02 01:51:29.285
OS: Windows 10 Home
Edition: Core
Id: 2009
Build: 22621
BuildLabName: 22621.1.amd64fre.ni_release.220506-1250
 JSON 文字列が無効です。 (hresult からの例外:0x83750007) 
場所 windows.data.json.jsonvalue.parse(string input) 
場所 communityinstaller.installworkflow.setupbackendmodeandfeatures(list`1 backendmodefeaturessteps) 
場所 communityinstaller.installworkflow.<dohandled4wpackageasync>d__30.movenext() 
--- 直前に例外がスローされた場所からのスタック トレースの終わり --- 
場所 system.runtime.exceptionservices.exceptiondispatchinfo.throw() 
場所 system.runtime.compilerservices.taskawaiter.handlenonsuccessanddebuggernotification(task task) 
場所 communityinstaller.installworkflow.<doprocessasync>d__23.movenext()

インストール方法

最終的に以下を実施してインストール成功しました。

実行したコマンドは以下です。
バックエンドを指定しているのは不要だったかもしれません。

管理者権限のコマンドプロンプトで以下を実行
start /w "" "Docker Desktop Installer.exe" install --backend=wsl-2

その前に実施したのは以下の通りのフォルダ名の変更です。

C:\Users\<your user name>\AppData\Roaming\Docker to Docker_backup
C:\Users\<your user name>\AppData\Roaming\Docker Desktop to Docker Desktop_backup
C:\Users\<your user name>\AppData\Local\Docker to Docker_backup

AppData\Local\Dockerのフォルダ名変更だけではだめで、Roaming配下も変更する必要がありました。

さらにその前には、レジストリでDocker関連のものを削除するなどもしていましたので、これらも必要かもしれませんが、不要だったかもしれません。

同じようなエラーのスレッドは以下。

https://github.com/docker/for-win/issues/13387

insecure registry of Docker(GWアドベントカレンダー 8日目)

  • 投稿日:
  • by
  • カテゴリ:

この記事はGWアドベントカレンダーの8日目の記事です。

GitLabのパイプラインでdocker loginしようとすると以下のエラーで失敗しました。

 docker -l debug login -u gitlab-ci-token -p ${CI_BUILD_TOKEN} http://${CI_REGISTRY}
 Error response from daemon: Get https://xxx.xxx.xxx.xxx:4567/v2/: http: server gave HTTP response to HTTPS client

以下にあるdaemon.jsonの設定をrunnerに追加することで解決しました。 registryをHTTPS化することも考えましたが、このregistryがリバースプロキシ配下になく、一旦HTTPのままで対処しました。

Test an insecure registry

PC上でのIaC環境の概要(GWアドベントカレンダー 4日目)

  • 投稿日:
  • by
  • カテゴリ:

この記事はGWアドベントカレンダーの4日目の記事です。

自宅のPCにIaC環境を構築中ですが、その環境について少し説明します。

使用するツール

1台の物理Linuxサーバ上にすべての環境を構築します。 仮想マシンはVagrant + Virtual Boxで構築します。 コンテナはDockerで構築します。 構築ツールとしてAnsibleを使います。 CI/CDを実現するためのツールとしてGitlab、Gitlab Runnerを使います。

Gitlab、Gitlab Runnerの構築

GitlabとGitlab RunnerはAnsibleを使って、仮想マシンから作成します。 本番用とテスト用があり、テスト用の構築は本番用のGitlabのバックアップデータを使ってリストアすることで本番と同じデータを持つようにしています。

物理Linuxサーバの構築

OSインストール後の各種設定類はAnsibleにまとめようと思っていますが、まだできていません。

AnsibleとVagrantの連携

Ansibleのプレイブック(Gitlabのパイプラインからの呼び出しや手動実行)によって、Vagrant経由で仮想マシンを作成することがあります。 しかし、AnsibleのInventory PluginとしてはVagrant用のものが正式にはありません。そのため、作成した仮想マシンに対してプレイブックを実行するためには何らかの方法を考える必要があります。 一つはInventory PluginもしくはScriptを作ること、もう一つは作成する仮想マシン情報をあらかじめインベントリファイルに記載しておくことが考えられます。 どちらの方法でも実現できそうですが、どのようにするか検討中です。

今後の展望

  • 物理Linuxサーバ構築用のパイプライン構築
  • Kubernetesを動かす。 その上で、各種アプリケーションを動かす予定です。

「しくみがわかるKubernetes」を読んだ。

  • 投稿日:
  • by
  • カテゴリ:

「しくみがわかるKubernetes」を読みました。

ほんとに仕組みがわかった気になりました。 これまでminikubeでhello worldをやっただけの経験でしたが、kubernetesがどういう仕組みになっているかの全体像を掴むことができました。

この本ではDockerなどのコンテナそのものについての説明はほとんどありません。
コンテナそのものを知らないとそもそもkubernetesの良さもわからないかもしれませんが、
この本で説明しているのはコンテナの管理をするkubernetesの仕組みです。 コンテナがどのような仕組みのものなのか、コンテナイメージはどのように作るのかというようなことは知らなくても読み進めることができると思います。

しくみを説明する本ですので、kubernetsの全体像としてどのようなコンポーネントで構成されているのかや、それぞれのコンポーネントの役割が説明されています。
また、Infrastructure as Codeの観点から、すべての定義をファイルに残すべきということも随所で述べてあります。
本文中に登場する定義ファイルはダウンロードできるようになっており、実際に試すことも可能です。
読者自身が実機で試す際も、細かな定義はすべてファイルに記載されているので、実際に打つコマンドはそれを適用するためのコマンドばかりです。

Kubernetesの環境を自分で構築するのは大変ですが、Azureで提供されているAKS(Azure Kebernetes Service)を使うことで簡単に利用を開始できます。
提供されているサンプルコードもAKS向けのものとなっているので、手軽に動作確認ができるようになっています。

この本ではKubernetesの主要コンポーネントの紹介と構成検討のポイントなどが述べられています。
含まれていないのは構築手順やオプションのコンポーネント等です。
例えば、ネットワークやストレージのコンポーネントについてはあまり説明がありません。
そのため、この本だけを見て自分でKubernetesを構築したいという方には向きませんが、クラウド上のマネージドサービスとしてKubernetesを使いたいという人には向いていると思います。
自分で環境を構築したいという人でも、この本を読むことで全体像がイメージできるようになりますので、具体的な検討へのステップとしては有効と思います。

Docker Desktop for Windowsの導入

  • 投稿日:
  • by
  • カテゴリ:

Docker Desktop for Windowsを導入してみました。

dockerコンテナを作って動かしたいのが目的です。 Windowsを使うのは、普段使っているOSがWindowsだからで、コンテナはLinuxのものを使います。 そうしたときに、docker Engineをどこで動かすかの選択肢があります。

  • Windows (Docker Desktop for Windows)
  • Windows上のLinux VM(Hyper-VやVirtual Box上のLinux VMでLinux用のDocker Engineを動かす)

開発用にLinux VMを動かしているのでそちらでDockerを使っても良いのですが、わざわざVMを起動して使うのも面倒そうなのでWindows上で動かすことにしました。 ただ、Windows上で動かすと言っても、実際にはDocker用のLinux VMがHyper-Vを使って起動します。 そのため、自分でLinux VMを用意して動かすのと仕組みはそれほど変わりません。

Docker Desktop for Windowsの場合、Docker ClientはWindows上で動きますが、Docker EngineはLinux VM上で動きます。 自分でLinux VMを用意して使う場合はDocker ClientもDocker EngineもLinux VM上で動きます。 コンテナそのものはどちらもLinux VM上で動きます。

Docker Desktop for Windowsを使う場合、DockerfileやコンテナにコピーするファイルをLinux VMから利用できるようにする必要があります。 どのドライブをアクセス可能にするかは、settingsから設定できます。 なお、コンテナからマウントして使うようなデータ領域としてはWindows上の領域は不向きで、data volumeやdata containerを使う方が良いようです。これには二つの理由があって、一つはWindows上の領域はLinux上からみて、rwxrwxrwxのモードで見えます。もう一つは、SMBを使ってLinux VMに領域を見せる際、NOBRLオプションが付いているため、ロックができない場合がある点です。 これらはDocker Desktop for Windowsのドキュメントの最初の方(Shared drives)に書いてあります。

と、ここまでやってから大事なことに気づきました。 開発用にLinux VMを動かしていますが、そちらはVirtual Boxを使っています。 Docker Desktop for WindowsはHyper-Vを使います。 これらの共存はできないので、どちらを使うか選ぶ必要があります。。つづく。。

kubenetes導入顛末記 その2

  • 投稿日:
  • by
  • カテゴリ:

その1でとりあえず動作するところまで確認できたので、ここからはチュートリアルに沿ってやってみる。

https://kubernetes.io/docs/tutorials/hello-minikube/

nodeアプリケーション作成

server.jsというhello worldを作成。

node server.jsで動作確認して問題ないことを確認。

Docker Containerイメージ作成

Dockerfileを作成。

以下のコマンドで環境変数を設定。そしてビルド。

eval $(minikube docker-env)
docker build -t hello-node:v1 .


Deployment作成

以下のコマンドでPodも作成されて動いているらしい。

でも、ローカルIPからしか接続できないらしい。試しにminikube sshでログインしてみたけども8080ポートで待ち受けているプロセスはなかった。。nodeコマンドは動作中だったので他のポートで待っているみたいだけど。どこで変換しているのか。。

kubectl run hello-node --image=hello-node:v1 --port=8080 --image-pull-policy=Never

Service作成

外からもアクセスできるようにServiceを作成する。

kubectl expose deployment hello-node --type=LoadBalancer

以下のコマンドで得られるURLにアクセスすると無事に表示される。どのポートで待っているのかの謎はこれで解ける。でも、ポートが8080ではないんだな。なんでだろ。

minikube service --url hello-node

アクセスログは以下で参照できた。pod-nameも補完してくれて良い感じ。

kubectl logs <POD-NAME>

アプリの更新

Docker Containerイメージを作成してDeploymentを更新。

docker build -t hello-node:v2 .
kubectl set image deployment/hello-node hello-node=hello-node:v2

これだけで新しいイメージが使われるようになった。Dashboardでも確認。

heapster addonの有効化

性能監視用のaddonらしい。以下で有効にするとdashboardのoverviewでCPUとメモリのグラフが表示されて、ほかのところにもそういった情報が追加される。

minikube addons enable heapster

Clean up

作成したものを削除する。

kubectl delete service hello-node
kubectl delete deployment hello-node
docker rmi hello-node:v1 hello-node:v2 -f
minikube stop
eval $(minikube docker-env -u)