Angular CLI を npm install しようとしたら、EEXIST: file already exists .... といったエラーが出た場合の対応
環境
- macOS 10.15.5
- node: 13.11.0
- npm: 6.13.7
angular cli をインストールしようとした際に遭遇したエラー
% npm install -g @angular/cli npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 npm ERR! code EEXIST npm ERR! syscall symlink npm ERR! path ../lib/node_modules/@angular/cli/bin/ng npm ERR! dest /usr/local/bin/ng npm ERR! errno -17 npm ERR! EEXIST: file already exists, symlink '../lib/node_modules/@angular/cli/bin/ng' -> '/usr/local/bin/ng' npm ERR! File exists: /usr/local/bin/ng npm ERR! Remove the existing file and try again, or run npm npm ERR! with --force to overwrite files recklessly. npm ERR! A complete log of this run can be found in: npm ERR! /Users/watashi/.npm/_logs/2020-07-09T08_20_01_508Z-debug.log
解決した方法
- エラーに表示されていた通り、
File exists: /usr/local/bin/ng.
なのでRemove the existing file and try again, or run npm with --force to overwrite files recklessly.
します
% sudo rm -rf /usr/local/bin/ng
その後、通常通りインストールします
% npm install -g @angular/cli
Dockerで立ち上げたContainerの挙動に手元のコードの変更を即時反映させる方法
Dockerで立ち上げたContainerの挙動に、手元のコードの変更を即時反映させる方法です。
Volumeを指定してマウントする
version: '3' services: bot: image: watashino/image tty: true volumes: - ../:/src # <path in local>:<path in container> build: context: .. dockerfile: ./docker/services/bot/Dockerfile
container側のパスは絶対パスじゃないと怒られました。
docker-compose upをしてもプロセスが終了してしまうことへの対応
基本的には docker はフォアグラウンドでプロセスが走っていれば docker container のプロセスが終了することは無いと思っていたのですが、うまくいかないことがあったのでその対応を書き残しておきます。
tty: true にする
docker-compose.yml
version: '3' services: bot: image: watashino/image tty: true # make container stay launched volumes: - ../:/src build: context: .. dockerfile: ./docker/services/bot/Dockerfile
でも tty: true
を付けているのに、commandを実行するとコンテナが終わってしまう。
bashを対話モードで起動させておく
Dockerfile
CMD bash -c "npm start && /bin/bash"
これによって、プロセスが起動状態のままになりました。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3ae0sguc0f2c watashino/image "/bin/sh -c 'bash -c…" 28 minutes ago Up 28 minutes bot
Docker Image関連のコマンドの使い方からDockerはどう使うのか雰囲気を知ろうと細かく書き出してみた
対象
- Dockerは使ってる、使ったことあるし、なんとなく環境も作ったり作らなかったりする
- やれと言われれば自分一人でもググったりしてなんとか立ち上げられるけど、説明してと言われると言葉に詰まる
- Dockerについてなんとなく図解することはできるけど、じゃあ実際にどういうコードを書けばいいのか説明にこまる
- 毎回コマンドをググる、ショートカットで対応しているけど根本的にはわからない
- (↑主に私です :sweat: )
環境
- MacOSX 10.15.3
- docker desktop 2.2.x
まずDockerといっても何を使っているのかを知る
$ docker version
Client: Docker Engine - Community Version: 19.03.5 API version: 1.40 Go version: go1.12.12 Git commit: 633a0ea Built: Wed Nov 13 07:22:34 2019 OS/Arch: darwin/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.5 API version: 1.40 (minimum version 1.12) Go version: go1.12.12 Git commit: 633a0ea Built: Wed Nov 13 07:29:19 2019 OS/Arch: linux/amd64 Experimental: true containerd: Version: v1.2.10 GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339 runc: Version: 1.0.0-rc8+dev GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657 docker-init: Version: 0.18.0 GitCommit: fec3683
ここでわかったのは、Docker Desktopをインストールして使っている際のDockerとは、Docker Engineという仕組みのことをいう様です。そしてDocker EngineにはClientとServerがある様です。 あと、containerはdaemonで動いているんですね(表現があいまいですみません)
Dockerのコマンドにどんなものがあるか知る
Dockerコマンドは、要するにDocker Engineを操作する為のコマンドということです。
$ docker --help
dockerコマンドの基本的な型
Usage: docker [OPTIONS] COMMAND
普通ですね。
dockerコマンドのオプション
Options: --config string Location of client config files (default "/Users/watashi/.docker") -c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use") -D, --debug Enable debug mode -H, --host list Daemon socket(s) to connect to -l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info") --tls Use TLS; implied by --tlsverify --tlscacert string Trust certs signed only by this CA (default "/Users/watashi/.docker/ca.pem") --tlscert string Path to TLS certificate file (default "/Users/watashi/.docker/cert.pem") --tlskey string Path to TLS key file (default "/Users/watashi/.docker/key.pem") --tlsverify Use TLS and verify the remote -v, --version Print version information and quit
まだどう使うのかはわかりません。
dockerコマンドで指定できる管理コマンド
Management Commands: builder Manage builds checkpoint Manage checkpoints config Manage Docker configs container Manage containers context Manage contexts image Manage images network Manage networks node Manage Swarm nodes plugin Manage plugins secret Manage Docker secrets service Manage services stack Manage Docker stacks swarm Manage Swarm system Manage Docker trust Manage trust on Docker images volume Manage volumes
なんとなく出てきました。 config, container, image, network, service, volume.... なんかDockerの勉強をしていて聞いたことがあるような単語たちですね。
ちなみにこれらはさらに docker system --help
みたいな形で中を見ることができる様です。(--helpをつけなくても、同じ出力はみれます)
例: docker systemコマンドの詳細
$ docker system --help
% docker system --help Usage: docker system COMMAND Manage Docker Commands: df Show docker disk usage events Get real time events from the server info Display system-wide information prune Remove unused data
docker system prune
はつい最近使いましたが、全ての停止中のコンテナ、ボリューム、ネットワーク、イメージを一括削除
するコマンドです。 停止中
を unused
、 すべてのcontainer, volume, network, image
を data
と表現しているんですね。
Dockerでは prune
はこの様な意味を持って使われているようで、docker system prune
以外にも docker images prune
なども出来る様です。
dockerコマンドで指定する操作コマンド(アクション・命令)
Commands: attach Attach local standard input, output, and error streams to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between a container and the local filesystem create Create a new container deploy Deploy a new stack or update an existing stack diff Inspect changes to files or directories on a container's filesystem events Get real time events from the server exec Run a command in a running container export Export a container's filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on Docker objects kill Kill one or more running containers load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart one or more containers rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive (streamed to STDOUT by default) search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers version Show the Docker version information wait Block until one or more containers stop, then print their exit codes
build, exec, info, inspect, logs, pause, ps, rename, restart, rm, rmi, run, などなど、使った記憶があるものや、dockerでなくても他のコマンドと一緒に使ったことがある単語が登場しました。
基本的には、よく聞いた事があるようなコマンドたちですね。
めんどくさそうなのが、 rm
は container
を削除し、 rmi
が image
を削除するというところかなと思いました。
Docker Imageの確認
Docker imageを表示させるためのコマンド
$ docker images --help
気をつけなくてはいけないのは、docker images
と docker image
は少し意味が違っています。
Command | Command Domain | コマンドの意味 |
---|---|---|
docker images | docker | dockerが扱う操作コマンド |
docker image | docker image | docker imageを扱う管理コマンド |
些細な意味の違いではありますが、このあたりが意識しておくのは大切かもしれません。
出力例
REPOSITORY TAG IMAGE ID CREATED SIZE ${id}.dkr.ecr.${region}.amazonaws.com/${repositoryName} 8 b895764be967 11 hours ago 2.82GB watashino/dockerImage latest b3b481eaf996 11 hours ago 2.82GB
使い方
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
ポイントは、repositoryは <repository_name>:<tag>
という表記も対応可能ということ。
Options: -a, --all Show all images (default hides intermediate images) --digests Show digests -f, --filter filter Filter output based on conditions provided --format string Pretty-print images using a Go template --no-trunc Don't truncate output -q, --quiet Only show numeric IDs
Docker image の作成(ビルド)
https://docs.docker.com/engine/reference/commandline/build/
使い方を確認
$ docker build <path | url> $ docker image build <path | url>
docker-compose を使ったビルドについて
dockerを扱うとき、主にビルドするときでしょうか、よく docker compose
という機能が利用されます。これは複数のコンテナを管理する為のツールで、 docker-compose.yml
という名前の設定ファイルでよく扱われているかと思います。
docker-compose を使ったビルド
$ docker-compose build
下の様なdocker-composeファイルがあれば、 Dockerfile
のパスとの関係性上適切なパスで上のコマンドを叩くことでビルドされます。
また、下のコマンドではビルドと起動を一緒に行う事もできます。
$ docker-compose -up --build
version: '3' services: app: image: watashino/docker_image build: context: .. dockerfile: ./watashino/Dockerfile container_name: container_name
ちなみにこの docker-compose はバージョンによって対応している Docker Engine のバージョンが異なります。なので、Docker Engineのバージョンが古く、docker composeのバージョンが新しかったりすると、書き方的にエラーになったりもします。 バージョンについてはこちら
Docker image を削除
使い方を確認
$ docker image rm --help Usage: docker image rm [OPTIONS] IMAGE [IMAGE...] Remove one or more images Aliases: rm, rmi, remove Options: -f, --force Force removal of the image --no-prune Do not delete untagged parents
ポイント
- imageは複数指定できること。
- rmではなくrmi, remove などでも代用可能なこと
-f
で強制削除が可能なこと
使っていないimageを全部一括削除
$ docker image prune $ docker image rm $(docker images -q)
ポイント
prune
は使われていないものを削除するといった意味を持っていましたが、ここでも同様でしたdocker image rm $(docker images -q)
はdocker image rm
という操作コマンドの対象にdocker images -q
で出力される複数のimage idを指定しています
対象の image を削除
$ docker image rm <image id> $ docker rmi <image id>
どちらでも大丈夫でした。
ここで最初にわかんなかったのが、 対象の指定の仕方は image id
ということです。repositoryではありません。
$ docker images
を叩くと、何がrepositoryで何がimage idなのかわかります。
一旦終わりに
docker の image に関するコマンドについての備忘録でしたが、分かっている人からしたら当たり前なことかと思います。 でもよく分かっていない人からすると、整理するのに少し役立つかもしれません。
なお、この記事は備忘録になります。自分一人で調べてもわかんないけど、だれかと一緒にやるとぱっと解決策を見つけられたりもしたので、そういう意味も込めてこの記事を残しています。
そこまでDockerを分かっていない人の為のコマンドまとめ(随時更新)
徐々にデータを追加していきます
環境
- MacOSX 10.15.3
- docker desktop 2.2.x
Dockerそのものがわからんとき
command | meaning | note |
---|---|---|
docker --help | dockerコマンドの内容 |
削除したいとき
command | meaning | note |
---|---|---|
docker image rm |
指定した |
複数の |
一括削除したいとき
command | meaning | parent command | note |
---|---|---|---|
docker system prune --all | 使用されていない Container, Network, Image, Volumeが削除されます | docker system | |
docker image prune | 使用されていないImageが削除されます(なにかの都合で残ってしまったデータ、何にも紐付かないデータなどは削除されません) | docker image | |
docker image prune --all | 使用されていないImageが削除されます | docker image | |
docker image rm $(docker images -q) | 使用されていないImageが削除されます | docker image |
イメージをビルドしたりし直したりするとき
command | meaning | parent command | note |
---|---|---|---|
docker-compose build | Docker imageをフォアグラウンドでビルドします。 | ||
docker-compose up -d | Docker imageが見つからない場合のみビルドしてから起動します。 | ||
docker-compose up -d --build | Docker imageビルドしてから起動します。 |
動かしたいとき
command | meaning | parent command | note |
---|---|---|---|
docker-compose up -d | Docker imageをバックグラウンドでビルドします。イメージが見つからないときはビルドしてから動かします |
その他覚えておくと良さそうなワード
word | domain | meaning | examples | note |
---|---|---|---|---|
prune | 操作系コマンド | 使われていない対象を一括削除する | docker system prune, docker image prune | |
-q | オプション | 表示するデータを絞る | docker images -q, docker image rm $(docker images -q) |
Apple Watchアプリ(WatchKit App, WatchOS)の実機検証時のトラブルを諸々解消
WatchOS用のアプリケーションを実装している最中のことですが、 当然のように実機検証したくなりました。
実機検証自体は、簡単で 検証したいAppleWatchとPairingしてあるiPhoneをMacにつなぐとXcodeが **「いい感じに認識」** してくれて、Watch Kit AppからRunするだけです。
しかし、いい感じに認識してくれず色々とうまく行かなかった為、コツコツと解消しました。
今回はその備忘録です。
- Xcode: Version 10.1 (10B61)
- WatchOS: 5.1.3
問題1
paired device unavailable for development
Apple Watchの実機でアプリの動作検証したかったのですが、👇の様なエラーとなりました。
解決方法
以下のことをして解決しました。
開発に使用しているiPhoneと対象のAppleWatchのpairingを切る
- このとき
Suicaの残高が失われます。Apple Payに連携して防ぎましょう
的なアラートが表示され焦りました💦結果、表示される指示の通り行えば問題ありませんでした
- このとき
再度Pairingを行う
- 時間がかかります
- 色々通知が表示されます
-
- 「このMacを信頼しますか」といったアラートがAppleWatchにでます
- 🎉直りました🎉 🎉🎉🎉🎉🎉🎉
問題2
Could not launch....
Watchアプリが立ち上がってくれません。iPhoneを見ても、AppleWatchをみても、動いた形跡もないので、実機転送もできてなさそうでした。
解決方法
普通にエラーダイアログに書いてあるとおりにしましたが、うまくいきませんでした。 なので、 Xcode の再起動 も行いました。 そして直りました。
問題3
The operation couldn’t be completed.
The operation couldn’t be completed. Unable to launch because it has an invalid code signature, inadequate entitlements or its profile has not been explicitly trusted by the user.
👆のエラーがでました👇
解決方法
Apple Watchの画面を見てみると、対象のアプリケーションは転送されているようでした。iPhoneも同様。
Apple Watchでアプリを立ち上げてみると、 信頼していないdeveloper ~~ を信頼してこのApple WatchでAppを実行しますか?
のダイアログが表示され、信頼するボタンをタップしました。
🎉すると起動しました🎉
まとめ
久しぶりにブログを書いたのですが、ほんと基本的な内容になりました。 こういった内容の記事はすぐに古くなるのですが、実行した環境や日付と一緒に備忘録として残しておくのはいいかもしれないって改めて思いました。
【進路】国連や国際機関で働く為の道筋
大学に入る前くらいから、いつか国連で働いて国際社会の安定のために後継するんだ、と思っていたことをふと思い出しました。
でも大学在学中に、色々起きて、それどころではなくなって、いつしかこの思いも忘れてしまいました。
最近ふとしたことから国連で働くことについて思い出したので、 どうしたら働けるのか、簡単に調べてみました。
まずはどんなポストがあるのかチェック
なにはともあれここですね。 実際の国連事務局での募集情報になります。
次に日本国籍保有者なら外務省 国際機関人事センター
そこにはこんなpdfがあったりして、いろんな情報が掲載されています。
http://www.mofa-irc.go.jp/dl-data/UN_brochure.pdf
twitterとかもありました
これらを見てみると、『国際機関』で働くには、思っていたよりもたくさんのポストがあり、可能性が示されているんだなぁと思いました。
わりと大学生にとっては、チャンスは多い印象を受けました。
国連事務局への道筋
国連事務局ヤング・プロフェッショナル・プログラム(YPP)試験への応募
これは、国連事務局若手職員を採用するための試験の様です。 募集対象は毎年異なるとのことです。
ちなみに2018年6月13日現在では募集中の様です。 www.mofa-irc.go.jp
https://hr.un.org/sites/hr.un.org/files/YPP%202018%20Flyer-English%20%28June%202018%29_final_0.pdf
ジュニア・プロフェッショナル・オフィサー(JPO)派遣制度への応募
日本外務省が行っているプログラムです。 将来的に国際機関で勤務する正規の職員を志望する若手の日本人の方を対象に、国際機関の正規職員となるために必要な知識・経験を積んで頂く機会を提供する目的で、派遣に係る経費を負担し、一定期間(原則2年間)各国際機関へ職員として派遣するようです。
空きポストを待つ
国連を含めた国際機関の場合
空きポスト情報が日本外務省で公開されています。 www.mofa-irc.go.jp
ポストが空いたらメールをくれるサービスもあるようです。 www.mofa-irc.go.jp
また、FAOやOECDなど若手向けの採用試験を実施している国際機関があるようです。
http://www.fao.org/employment/vacancies/junior-professional-programme/en/
条件について
他の様々な求人情報と同じ様に、色々な条件が設定されています。 ほとんどの募集にはビジネスレベルで英語が使いこなせる条件がついています。
他にも、学位、専門分野、経験などがあります。
また、つらい条件として、年齢と項目があるものもあります。 このへんはどうにかならないのでしょうかね。
最後に
以上、簡単に国連・国際機関で働く道筋を簡単にまとめました。 もちろん他にもルートはあると思います。 国際機関は公共機関であることがほとんどの様です。(当たり前なのかな) なので、日本のお硬い組織へのエントリーに似ているのかなと想像しましたが、実際に経験したことがないので定かではありません。
ちなみに、昔実際にお勤めされている方からお話を聞いたときは、割とシビアな世界でしたが、 ハイレベルな専門職になると、様子も違ってくるようでした。
なにはともあれ、自分に英語とそれ以外の専門性をつけることが求められるようですね。