【Docker】コンテナ間の通信はdocker-composeのnetworksを上手く使おう
概要
コンテナ間で通信するために、docker-composeのnetworksを使うことができます。
コードはこちら
テスト準備
docker-compose build docker-compose up -d
テスト用docker-compose
version: '3.2' services: test_service_one: image: ubuntu:latest container_name: test_service1 build: ./ networks: - test_network tty: true stdin_open: true privileged: true test_service_two: image: ubuntu:latest container_name: test_service2 build: ./ networks: - test_network tty: true stdin_open: true privileged: true networks: test_network:
テスト実行結果
pingを実行すると双方のコンテナ内から通知できていることが分かります。
user@wsl:~/develop/dockers/docker_network_sample$ docker exec -it test_service1 ping test_service2 -c 5 PING test_service2 (172.18.0.3) 56(84) bytes of data. 64 bytes from test_service2.docker_network_sample_test_network (172.18.0.3): icmp_seq=1 ttl=64 time=0.157 ms 64 bytes from test_service2.docker_network_sample_test_network (172.18.0.3): icmp_seq=2 ttl=64 time=0.046 ms 64 bytes from test_service2.docker_network_sample_test_network (172.18.0.3): icmp_seq=3 ttl=64 time=0.060 ms 64 bytes from test_service2.docker_network_sample_test_network (172.18.0.3): icmp_seq=4 ttl=64 time=0.097 ms 64 bytes from test_service2.docker_network_sample_test_network (172.18.0.3): icmp_seq=5 ttl=64 time=0.041 ms --- test_service2 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4130ms rtt min/avg/max/mdev = 0.041/0.080/0.157/0.043 ms user@wsl:~/develop/dockers/docker_network_sample$ docker exec -it test_service2 ping test_service1 -c 5 PING test_service1 (172.18.0.2) 56(84) bytes of data. 64 bytes from test_service1.docker_network_sample_test_network (172.18.0.2): icmp_seq=1 ttl=64 time=0.286 ms 64 bytes from test_service1.docker_network_sample_test_network (172.18.0.2): icmp_seq=2 ttl=64 time=0.040 ms 64 bytes from test_service1.docker_network_sample_test_network (172.18.0.2): icmp_seq=3 ttl=64 time=0.042 ms 64 bytes from test_service1.docker_network_sample_test_network (172.18.0.2): icmp_seq=4 ttl=64 time=0.044 ms 64 bytes from test_service1.docker_network_sample_test_network (172.18.0.2): icmp_seq=5 ttl=64 time=0.082 ms --- test_service1 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4152ms rtt min/avg/max/mdev = 0.040/0.098/0.286/0.094 ms
最後に
docker-composeのnetworksを使うことでコンテナ間の通信ができることが分かりますね。
【Docker】UbuntuのDockerを最新バージョンにアップデートする
環境
- Ubuntu 18.04LTS
アップデート前のDockerバージョン
Client: Docker Engine - Community Version: 19.03.13 API version: 1.40 Go version: go1.13.15 Git commit: 4484c46d9d Built: Wed Sep 16 17:02:36 2020 OS/Arch: linux/amd64 Experimental: false
アップデート方法
sudo apt-get update sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io
アップデート後のDockerバージョン
Client: Docker Engine - Community Version: 20.10.6 API version: 1.41 Go version: go1.13.15 Git commit: 370c289 Built: Fri Apr 9 22:46:01 2021 OS/Arch: linux/amd64 Context: default Experimental: true
pipを実行すると「Did not provide a command」になる場合
WindowsでPython環境を構築し、
ちゃんとPATHも通しているが
コマンドプロンプトでpipを実行すると
「Did not provide a command」
になる場合があります。
原因
恐らく、環境変数でPythonより上位に以下のパスがあるため、
PythonのpipよりもPerlのpipが優先されていることが原因です。
C:\strawberry\perl\bin\pip C:\strawberry\perl\bin\pip.bat
対処
perlを削除するか、Pythonのpipをperlよりも上位に設定すると解消されます。
ただ、perlのpipが使えなくなるため、注意が必要です。
【顔検出】超簡単PythonとOpenCVを使った顔検出
はじめに
最近ではコモディティ化したといえる顔認識技術。
顔認識技術では一般的に
顔検出(どこに顔があるか)→顔照合
という流れで登録済みの顔を特定しています。
今回は顔検出を超簡単にPythonとOpenCVを用いて実現しました。
(なんと118行!)
ソースコード
今回作成したコードは以下になります。
事前にPython(pipenv)環境が整っていれば3ステップで顔検出可能になります。
使用した技術
OpenCVに搭載されているdnnライブラリを使い、
学習済みの顔検出用caffeモデルを用いて顔を検出しています。
顔検出前:
顔検出結果:
最後に
顔検出だけで何か面白いものを作るのは難しいかもしれませんが、
他の技術やサービスと組み合わせてみると良いかもしれません。
例えば、SNSに画像をアップするためのモザイク処理や
Alexaスキルと連携して顔をみつけたら挨拶する(つまらない。。。)等でしょうか。
何にせよ、こんなに簡単に顔検知を実装できる時代って便利ですね。
これからITエンジニアを目指す人が覚悟すべき重要3ポイント
はじめに
ここ1年でITエンジニアにジョブチェンジしようと考えている人がかなり多くなっています。 既に華麗にジョブチェンジできた方も出てきているでしょう。 まだどうすべきか迷っている方も多いのではないでしょうか?
私としてはより多くITエンジニアが増えることを望んでいますし、 ITエンジニアになって良かったと思える人が多いことを願うばかりです。 ただ、ITエンジニアで食い続けることはそんなに楽ではないということも知っておいてほしいと考えています。
ということで、今回は現役CTOの私が考える、これからITエンジニアを目指す人が覚悟すべき重要3ポイントを挙げようと思います。
これからITエンジニアを目指す人が覚悟すべき重要3ポイント
- 習うより慣れよだよ
- 勉強し続けなければならないよ
- 技術だけでは年収は頭打ちだよ(一部の天才エンジニアは除く)
習うより慣れよだよ
頭の中で論理を組み立てていくという点でプログラミングは将棋に似ています。 なので、将棋を勉強しているだけで実際に打たない人が強くなることは無いように、 ITエンジニアも知識だけ習得していては成長しません。 少しでも多くコードを書く人が強くなります。 また、実際にコードを書いていると多くの壁にぶつかります。 そういった壁の乗り越え方を実践していくことで強くなっていきます。 まるで筋繊維が切れて筋肉が大きくなるかのように。
とはいえ、知識は必要になるので勉強はしましょう。
勉強し続けなければならないよ
15年前にはiOS・Androidアプリ開発者はいなかった 10年前にAWSを使っている開発者はほとんどいなかった 5年前ではAIが民衆化しておらず扱える開発者はほんの一部だった
このように、次にどのような技術が流行するかわからないのがITの世界で、 ITエンジニアは都度習得・理解していく必要が出てきます。 習得していかない人は食いっ逸れることは少ないかもしれませんが、収入が上がりにくくなるでしょう。
とはいえ、新しいモノ好きでないと勉強し続けることはかなり大変です。。 なので、自分には厳しいかなと思ったらPM等、IT知識が多少あればこなせるポジションに移ることもありと思います。(最近ではエンジニアよりマネージャー職がかなり不足しています。)
技術だけでは年収は頭打ちだよ(一部の天才エンジニアは除く)
これまでの開発は分業度合い(営業、業務設計、システム設計、実装等)がかなり強くありました。 しかし、これから社会の流れが加速する中で分業していくと時間がかかりすぎてしまいます。 それぞれの境界線が薄くなっていき、マルチで仕事を遂行できる人の重要性が高くなっていきます。
この点、ジョブチェンジの方は有利です。 現在の仕事の知識・ノウハウを持ってITエンジニアになるので、 関連する業界、事業を顧客に持つ企業に携わると重宝されるでしょう。 ITエンジニアは良くも悪くもオタク気質が強い人が多いので、 差別化して収入アップできると考えています。
最後に
今回は現役CTOの私が考える、これからITエンジニアを目指す人が覚悟すべき重要3ポイントを挙げました。
少し脅しのように感じる方もいるかもしれませんが、 私としてはより多くITエンジニアが増えることを望んでいますし、 ITエンジニアになって後悔する人が出てきてほしくないと思っています。
とりあえずITエンジニアに挑戦し、自分に向いてなければ以前の業種に戻っても良いと思います。 少なくともITに関する知識は増えていると思うので、 マイナスにはならないでしょう。
人生100年時代。色々挑戦していきましょう!
【Docker】/home/****/.docker/config.json: permission deniedが発生したらやること
Ubuntu 18.04LTSにて、
docker ps
等のコマンドで以下が発生した。
WARNING: Error loading config file: /home/****/.docker/config.json: open /home/****/.docker/config.json: permission denied
上記「****」はユーザー名
その場合は、以下を実行しましょう。
sudo chown ${USER}:${USER} /home/vaak/.docker/config.json
他のサイトで以下のようにして対応している方もいるようですが、
誰でもアクセスできるようにはセキュリティ的にしない方が良いです。
(というか、777を設定すれば何とかなるという考え方が危険です。)
sudo chmod 777 /home/****/.docker/config.json