- 投稿日:2020-11-08T23:57:15+09:00
DockerでBINDを試してみた
普段私はDNSサーバの開発や運用に携わっているのですが、仕事の傍らDockerを勉強しています。
DockerでBINDを試してみたので、備忘録も兼ねて共有しようと思います。キャッシュ、権威DNSの構成も試しています。
実行環境
私が試した環境は以下の通りです。
- Windows 10
- WSL2
- Docker Desktop
DockerがインストールされていればMacでもLinuxでも動くはずです。
まずは1台の構成
Dockerfileの用意
ディレクトリの構成は以下となっています。
bind/ ├ Dockerfile ├ named.conf └ example.comDockerfileFROM centos:7 RUN yum -y update RUN yum install -y bind RUN /usr/sbin/rndc-confgen -a -b 512 -k rndc-key RUN chmod 755 /etc/rndc.key EXPOSE 53/UDP EXPOSE 53/TCP COPY named.conf /etc/bind/ COPY example.com /etc/bind/master/ CMD ["/usr/sbin/named", "-c", "/etc/bind/named.conf", "-g", "-u", "named"]named.confinclude "/etc/rndc.key"; controls { inet 127.0.0.1 allow { 127.0.0.1; } keys { "rndc-key"; }; }; acl "access-list" { 127.0.0.1; 172.17.0.0/16; }; options { directory "/etc/named/"; pid-file "/run/named/"; dump-file "/var/named/named_dump.db"; statistics-file "/var/named/named.stats.log"; zone-statistics yes; version ""; masterfile-format text; recursive-clients 10000; tcp-clients 10000; allow-recursion { access-list; }; allow-query { access-list; }; allow-query-cache { access-list; }; }; view "internal" { recursion yes; zone "example.com" IN { type master; file "/etc/bind/master/example.com"; }; };example.com$TTL 900 @ IN SOA example.com. postmaster.example.com. ( 2020062101 ; Serial Number 1800 ; Refresh 900 ; Retry 1209600 ; expire 900 ; minimum ) ; IN NS example.com. IN A 1.2.3.4 www IN A 5.6.7.8named.confの設定はほぼ最小限にしています。
用意したファイルの説明
- BINDパッケージ
今回はBINDはyumでインストール。古いバージョンですが、試すだけなのでこれでも大丈夫です。
- Dockerfile内のEXPOSE
通信を想定するポートを指定します。DNSでは53ポートを使用します。
- named.conf, example.comといったファイルのコピー
BINDの設定に必要なファイルをイメージに追加します。
COPYするファイルはDockerfileを置いたディレクトリ内のファイルを指定します。
- BINDの起動
普通はsystemctlを使って起動するのですが、コンテナだと残念ながらできないようなので、直接
named
を指定して起動します。イメージのビルド
$ docker build -t bind .途中警告みたいなものがでるかもしれませんが、気にしなくても大丈夫です。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE bind latest b634adb26126 About an hour ago 412MBイメージができたことを確認します。
ビルドしたイメージを利用してコンテナを起動
docker run -dit -p 53:53 -p 53:53/udp --name bind bind:latestここでは
-p
でポートマッピングを設定しています。$ docker ps b81999d14571 bind:latest "/usr/sbin/named -c …" About an hour ago Up About an hour 0.0.0.0:53->53/tcp, 0.0.0.0:53->53/udp bindコンテナが起動できていることを確認できれば成功です。
digで動作確認
digコマンドはドメインをDNSサーバに問いかけて、IPアドレスを教えてくれるコマンドです。
このコマンドを用いて動作確認を行いたいと思います。ホスト側で以下のコマンドを打ってみてください
$ dig @localhost example.com ; <<>> DiG 9.16.1-Ubuntu <<>> @localhost example.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58542 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ; COOKIE: 95bb6b3867347d2a659e18f05fa40fa7705d1af930ac0b3b (good) ;; QUESTION SECTION: ;example.com. IN A ;; ANSWER SECTION: example.com. 900 IN A 1.2.3.4 ;; AUTHORITY SECTION: example.com. 900 IN NS example.com. ;; Query time: 10 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Nov 05 23:43:51 JST 2020 ;; MSG SIZE rcvd: 98
example.com
で設定したIPアドレス1.2.3.4
が表示されていることがわかります。
ちなみにwww.example.com
を問い合わせても設定したアドレス5.6.7.8
が表示されています。$ dig @localhost www.example.com ; <<>> DiG 9.16.1-Ubuntu <<>> @localhost www.example.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17044 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ; COOKIE: fc8594f5fe0fda2a5b28b3f65fa41035d0243f359a253da7 (good) ;; QUESTION SECTION: ;www.example.com. IN A ;; ANSWER SECTION: www.example.com. 900 IN A 5.6.7.8 ;; AUTHORITY SECTION: example.com. 758 IN NS example.com. ;; ADDITIONAL SECTION: example.com. 758 IN A 1.2.3.4 ;; Query time: 10 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Nov 05 23:46:13 JST 2020 ;; MSG SIZE rcvd: 118キャッシュ、権威DNSの構成を試す
先程は1台のDNSサーバのみでしたが、実際の運用だとクライアントからの問い合わせを受けて、クライアントの代わりに問い合わせを行うキャッシュDNSとゾーン情報を管理している権威DNS 2つの役割を持つDNSサーバを用います。
この構成もDockerで試してみたいと思います。
コンテナ起動
まずは先程作成したコンテナを削除しましょう
$ docker rm bind今度は2台のコンテナを作成します。
$ docker run -dit -p 53:53 -p 53:53/udp --name bind_cache bind:latest $ docker run -dit --name bind_auth bind:latestクライアントからの応答を受けるのはキャッシュDNSだけなので、キャッシュDNSにはポートマッピングの設定を入れます。
権威DNSはクライアントとは直接通信しないので設定していません。一度
bind_cache
,bind_auth
のIPアドレスを確認しましょう。$ docker inspect bind_cache | grep IPAddress "SecondaryIPAddresses": null, "IPAddress": "172.17.0.2", "IPAddress": "172.17.0.2", $ docker inspect bind_auth | grep IPAddress "SecondaryIPAddresses": null, "IPAddress": "172.17.0.3", "IPAddress": "172.17.0.3",
bind_cache
の方は172.17.0.2
、bind_auth
の方は172.17.0.3
というIPアドレスであることがわかりました。キャッシュDNSの設定
キャッシュDNSの
named.conf
を編集するために以下のコマンドを入力してコンテナの中に入ります。$ docker exec -it bind_cache /bin/bashvi などで
view internal
の部分を以下のように編集します/etc/bind/named.conf・ ・ ・ view "internal" { recursion yes; zone "." { type forward; forwarders { 172.17.0.3; }; forward only; }; };
forwarders
に先程確認した権威DNSのIPアドレスを入力します。権威DNSの設定
今度は権威DNSの
named.conf
を見てみましょう。$ docker exec -it bind_auth /bin/bash同様にvi などで
named.conf
を編集します
acl access-list
というところに注目してください。/etc/bind/named.confinclude "/etc/rndc.key"; controls { inet 127.0.0.1 allow { 127.0.0.1; } keys { "rndc-key"; }; }; acl "access-list" { 127.0.0.1; 172.17.0.0/16; }; ・ ・
acl access-list
では通信を許可するIPアドレスを指定します。
先程確認したキャッシュDNSのIPアドレスは172.17.0.2
でした。 今回は初期設定で172.17.0.0/16
を許可しているのでこのままでも問題ないですが、キャッシュDNSのIPアドレスを指定しておきましょう。/etc/bind/named.confinclude "/etc/rndc.key"; controls { inet 127.0.0.1 allow { 127.0.0.1; } keys { "rndc-key"; }; }; acl "access-list" { 127.0.0.1; 172.17.0.2; // 172.17.0.2に変更 }; ・ ・以上で設定は完了です。
設定を反映するために再起動しておきましょう。
2つコンテナが起動していることが確認できれば成功です。$ docker restart bind_auth $ docker restart bind_cache $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f0b2f14e26f2 bind:latest "/usr/sbin/named -c …" About an hour ago Up 6 minutes 53/tcp, 53/udp bind_auth b81999d14571 bind:latest "/usr/sbin/named -c …" 2 days ago Up 6 minutes 0.0.0.0:53->53/tcp, 0.0.0.0:53->53/udp bind_cacheもし起動していない場合は、
named.conf
の設定がうまく行っていないと考えられます。(;のつけ忘れなど,docker logs
を使えばエラーの内容が見れると思います)
その場合は、以下のコマンドで起動できなかったコンテナを一度削除して、コンテナを作成するところからやった方が楽かもしれません。$ docker logs bind_XXX $ docker rm bind_XXX または docker rm [コンテナID]digで動作確認
先ほどと同様にdigコマンドを用いて動作確認を行います。
$ dig @localhost example.com ; <<>> DiG 9.16.1-Ubuntu <<>> @localhost example.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58542 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ; COOKIE: 95bb6b3867347d2a659e18f05fa40fa7705d1af930ac0b3b (good) ;; QUESTION SECTION: ;example.com. IN A ;; ANSWER SECTION: example.com. 900 IN A 1.2.3.4 ;; AUTHORITY SECTION: example.com. 900 IN NS example.com. ;; Query time: 10 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Nov 05 23:43:51 JST 2020 ;; MSG SIZE rcvd: 98
example.com
で設定したIPアドレスが表示されていることがわかります。ちなみに権威DNSで定義ていないドメインも引くことができます。
$ dig @localhost www.google.com ; <<>> DiG 9.16.1-Ubuntu <<>> @localhost www.google.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53253 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 9 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ; COOKIE: 3181d4115c9c0426b42bd02e5fa6a8a6a04cb4d481be1221 (good) ;; QUESTION SECTION: ;www.google.com. IN A ;; ANSWER SECTION: www.google.com. 300 IN A 172.217.26.36 ;; AUTHORITY SECTION: google.com. 171777 IN NS ns1.google.com. google.com. 171777 IN NS ns4.google.com. google.com. 171777 IN NS ns3.google.com. google.com. 171777 IN NS ns2.google.com. ;; ADDITIONAL SECTION: ns4.google.com. 171777 IN A 216.239.38.10 ns2.google.com. 171777 IN A 216.239.34.10 ns1.google.com. 171777 IN A 216.239.32.10 ns3.google.com. 171777 IN A 216.239.36.10 ns4.google.com. 171777 IN AAAA 2001:4860:4802:38::a ns2.google.com. 171777 IN AAAA 2001:4860:4802:34::a ns1.google.com. 171777 IN AAAA 2001:4860:4802:32::a ns3.google.com. 171777 IN AAAA 2001:4860:4802:36::a ;; Query time: 120 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sat Nov 07 23:01:10 JST 2020 ;; MSG SIZE rcvd: 335感想
思っていたよりも簡単にできました。
実運用で使えるのかどうかはわかりませんが、色々試してみたい思います。
次はキャッシュDNSにUnboundを使ってみようと思います。
- 投稿日:2020-11-08T22:45:10+09:00
購入済みUdemy講座・学習状況 (2020/11/08~ 2020/11/09更新)
独学の教材として、先月頃からUdemyを使用し始めました。
自分が購入したものを以下記載していきたいと思います。
(セールでとりあえず買っておいた、という未着手のものが多々あります)そもそもUdemyとは
Udemyトップページ
Udemyの仕組みに関するよくある質問上記ページをご覧いただくとお分かりになると思いますが、動画配信のオンライン学習サービスです。
一度購入しておくと、その後期間無制限で何度も見ることができます。
"2万円"などの高額な講座もあるのですが、毎月と言ってよいほど頻繁にセールが開催され、1500円で購入できたりするので、そのタイミングでまとめ買いをするとお得かと思います。
(買って満足してしまう罠がありますが)購入した講座一覧
※購入して積みっぱなしにしないよう戒めのために公開しておきます。
★★★受講完了済み★★★
「はじめての AI」 by Grow with Google
講座内容
AI の基礎知識とその仕組みについて学習し、画像認識や音声認識について実際のデモをご覧いただきながら体感していただきます。基本知識だけでなく、事例や具体的にそれがどのような仕組みで動いているかも紹介することで、AI を活用するヒントを得ることを目指します。「AWS:ゼロから実践するAmazon Web Services。手を動かしながらインフラの基礎を習得」 by 山浦 清透
講座内容
★ゼロからAWSの重要サービスを使いこなせるように!実際にネットワークやサーバーを構築し、インフラの基礎概念を習得します。
本講座は、「はじめてAWSを学ぶ方」や「インフラにあまり詳しくない方」を対象に、「AWSの重要サービスを使い、自分でネットワークやサーバーを構築できるようになる」ことを目指したコースです。
セクションごとに、インフラの基礎概念を学びながら、手を動かし実際に構築していく、という構成になっています。
(以下略)「Git: もう怖くないGit!チーム開発で必要なGitを完全マスター」 by 山浦 清透
講座内容
★ゼロからプロのチーム開発の現場でGitを使いこなせるよう完全マスターします
こちらのコースは未経験の方でも、プロのチーム開発の現場で必要とされるGitの全てを習得することを目的としたコースです。
(略)
こちらのコースでは、まずGitの仕組みを図解でしっかりと理解していきます。
Gitってそもそも何のためにあるのか、コミットした時にどういう風にデータを保存しているのか、マージやリベースした時に何が起こっているのか、ブランチってどういう風に実現しているのか。
そういうことを仕組みから理解することで、Gitの分かりづらいコマンドを自信を持って使えるようになります。なにより、Gitを使う上でのハードルであるステージやブランチ、HEADの概念を完全に理解することができます。
その上で、実際にプロジェクトを作成しGitHubを用いながら、コマンドを実行して学んでいきます。
スキルを身につける上で、実際に作りながら学んでいくことはとても大切です。理解したものを実践することで本当に使えるスキルを身に付けていきます。
(以下略)「現役シリコンバレーエンジニアが教えるPythonで始めるスクラッチからのブロックチェーン開発入門」 by 酒井 潤
2020/11/09完了
講座内容
このコースではブロックチェーンの技術とPythonを用いて仮想通貨の送金システムを構築しながらブロックチェーンの根幹にある技術、考え方とその応用方法をハンズオンで学びます。
(以下略)★★★受講中★★★
「現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル」 by 酒井 潤
講座内容
このコースでは、Python3の基礎である入門コースを一通り終えた後に、今後のアプリケーション開発に役立つためのPythonのテクニックやデーターベースアクセス(SQLite, MySQL, MongoDB, SQLAlchemy, memcached, Hbase, neo4j etc)、WEB(Flask, socket, RPC etc)、インフラ自動化(Fabric, Ansible)、並列化(スレッド、マルチプロセス)、テスト(Unittest, pytest, Tox, Selenium, etc)、暗号化(pycrypto, hashlib)、グラフィック(turtle, Tkinter)、データ解析(numpy, pandas, matplotlib, scikit-learn), キューイングシステム(ZeroMQ, Celery)、非同期処理(asyncio)などのPythonを使った応用編を取り入れております。
(以下略)★★★今後着手★★★
Python
「現役シリコンバレーエンジニアが教えるPythonでFXのシストレFintechアプリの開発」 by 酒井 潤
講座内容
今回扱うFintech技術では、日本でも人気のあるFXの自動トレードをPythonで行い、グローバルで使われているOandaサービスのAPIを使って行います。日本で人気があるという理由でFXにしましたが、FXではなくても、APIを使ってトレードするやり方さえ学べば、例えば株式や仮想通貨のトレードなどでも十分に使える技術を学ぶことができますので、FXにご興味ない方でも自動トレードが何かということを学べる講座になっております。
(以下略)「Python+FlaskでのWebアプリケーション開発講座!!~0からFlaskをマスターしてSNSを作成する~」 by N Matsumoto
講座内容
【この講座について】
Pythonの基本的な使い方、Flaskのウェブアプリケーション開発の基本的な技術、Flaskの機能の有効活用方法、サーバサイドウェブフレームワークで利用されるMVTモデル、サーバサイドのセキュリティ、テーブル設計、SNSサンプルアプリケーション開発を通じた実践的なアプリケーション開発など、PythonのWebエンジニア必修のスキルが身につきます!!
(以下略)「Python デザインパターンマスター講座~Pythonの基本文法、コーディング規約、命名規約、プログラミング技術~」 by N Matsumoto
講座内容
【この講座について】
プログラミングを勉強し、オブジェクト指向を覚えたが実際にどういう風にコードを書けばよいか。良いコード、恥ずかしくないコードというのはどういうコードなのか理解するためにこの講座を作成しました。
コーディング規約、命名規約、コードレビュー、オブジェクト指向のベストプラクティスのSOLIDの原則、デザインパターンを通じて、良いプログラムが何なのかを理解し、技術力を身に着けます。
また、デザインパターンは転職活動の面接などでも聞かれることがあり、身に着けて損のないスキルです
(以下略)「【E資格の前に】PyTorchで学ぶディープラーニング実装」 by 株式会社 AVILEN
講座内容
<概要>
ディープラーニングの実装、実務活用のイメージが沸かない、難しそう...そんなお悩みはありませんか?
当講座は、Pythonの基本文法とNumpyの知識さえあれば、誰でもディープラーニング(DL)を実装できるPyTorchの入門講座となっています。
特別な理論や数式は扱わず、まずは実装して、ディープラーニングのイメージを掴むことをゴールとしています。
AIスペシャリスト集団、株式会社AVILENの執行役員である吉川武文氏が、PyTorchによるディープラーニング実装術を公開。
当講座で扱うプログラムは全て皆様にプレゼントします、実務でもご活用ください。Go
「現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発」 by 酒井 潤
講座内容
このコースでは、Goの基礎である入門コースを一通り終えた後に、次世代のFintech(金融+テクノロジー)のアプリケーションとしてビットコインを自動でシステムトレードを行うアプリを開発します。
多くの言語の良い部分を取りれたGoは、コードを実行する際のパフォーマンスも良く、近年急速にライブラリも充実して来ており、シリコンバレーで多くの企業が取り入れ始めました。日本では、ドキュメントも少なく、Go言語を使う機会があまりないかもしれませんが、世界のトップ企業はすでに使い始めているため、技術レベルで世界から遅れないように今からGo始めると良いかと思います。
(以下略)AWS
「これだけでOK! AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座(SAA-C02試験対応版)」 by Edutech Global , inc.
本講座は全てのIT従事者にとって必須となるAWSの基本資格「AWS 認定ソリューションアーキテクト – アソシエイト試験」を合格を目指し、そのための知識や経験を獲得できるように設計されています。
この講座を通して、AWSの知識とノウハウを獲得し、「AWS 認定ソリューションアーキテクト – アソシエイト試験」を突破しましょう!!「Ultimate AWS Certified Solutions Architect Associate 2020」 by Stephane Maarek
講座内容
Concretely, here's what we'll learn to pass the AWS Certified Solutions Architect Associate exam:
- The AWS Fundamentals: IAM, EC2, Load Balancing, Auto Scaling, EBS, EFS, Route 53, RDS, ElastiCache, S3, CloudFront
- The AWS CLI: CLI setup, usage on EC2, best practices, SDK, advanced usage
- In-Depth Database comparison: RDS, Aurora, DynamoDB, Neptune, ElastiCache, Redshift, ElasticSearch, Athena
- Monitoring, Troubleshooting & Audit: AWS CloudWatch, CloudTrail
- AWS Integration & Messaging: SQS, SNS, Kinesis
- AWS Serverless: AWS Lambda, DynamoDB, API Gateway, Cognito
- AWS Security best practices: KMS, SSM Parameter Store, IAM Policies
- VPC & Networking in depth
- AWS Other Services Overview: CICD (CodeCommit, CodeBuild, CodePipeline, CodeDeploy), CloudFormation, ECS, Step Functions, SWF, EMR, Glue, OpsWorks, ElasticTranscoder, AWS Organizations, Workspaces, AppSync, Single Sign On (SSO)
- Tips to ROCK the examDocker
「米シリコンバレーDevOpsエンジニア監修!超Docker完全入門(2020)【優しい図解説とハンズオンLab付き】」 by CS Career Kaizen
講座内容
このコースを一文でまとめると?
このコースは、アプリ開発やDevOps経験初心者の方が、Linuxの簡単な基礎(カーネル・シェル・STDIN・STDOUT・TTY)とDocker(イメージ・コンテナ・VMとの違い・Docker compose・ネットワーキング・Volume)を初心者として1から学び、コンテナ化できるデベロパーやDevOpsとしてキャリアアップを目指す方向けのコースです。「米国AI開発者がゼロから教えるDocker講座」 by かめ れおん
講座内容
Dockerの基本的な使い方から現場で役立つ応用的な使い方まで,米国で活躍するAI開発者が講師となって徹底的に解説します.
プログラミングの知識がない人でも,問題なく受講できます.Kubernetes
「米シリコンバレーDevOpsエンジニア監修!超Kubernetes完全入門(2020)【優しい図解説とハンズオン】」 by CS Career Kaizen
講座内容
このコースを一文でまとめると?
このコースは、アプリ開発やDevOps経験初心〜中級者の方が、Linuxの簡単な基礎(カーネル・シェル・STDIN・STDOUT・TTY)とDocker(イメージ・コンテナ・VMとの違い・Docker compose・ネットワーキング・Volume)をベースにして、Kubernetesクラスター上にコンテナ化されたアプリをディプロイ・構築・起動というK8sデベロパー初心者として1から学び、コンテナ化できるデベロパーやDevOpsとしてキャリアアップを目指す方向けのコースです。アジャイル開発
「現役シリコンバレーエンジニアが教えるアジャイル開発」 by 酒井 潤
講座内容
このコースでは、あらゆるレベルのビジネスプロフェッショナルが理解しやすい方法でアジャイルとスクラムの基本をカバーします。アジャイルとスクラムの基礎に関するこのコースから得られる知識を使用して、アジャイルとスクラムに適した環境を作成できます。
アジャイルとスクラムの開発方法を取り入れれば、プロジェクトが失敗するのを防ぐことにも繋がる可能があります。このAjailプロジェクト管理方法は、チームワークが特に重要であり、チームメンバー間の相互信頼を高め、対人関係を改善することもできるでしょう。
このコースは、シリコンバレーでアジャイル開発経験14年の現役エンジニアが教授いたします。アルゴリズム
「現役シリコンバレーエンジニアが教えるアルゴリズム・データ構造・コーディングテスト入門」 by 酒井 潤
講座内容
恐らく、皆さん「アルゴリズムって本当に必要なの?」っと疑問に思っている方もいらっしゃるかと思います。例えば、「実際の現場であまり使わないなー」とか、「今の仕事はWEBのフレームワークのやり方さえ覚えれば、WEBアプリなんて簡単に作れちゃうし」などなどあるとは思います。
ただ、考えていただきたいのですが、なぜあのGAFAと言われるGoogle、Apple, Facebook、Amazonが入社試験で必ずアルゴリズム、データ構造のコーディング面接があるかを考えてみてください。
皆さんもお聞きしたことがあるかもしれませんが、Google検索アルゴリズム、Tesla自動運転アルゴリズムなど世界をリードして最先端の技術革新をしている会社では、ちょっとでもコードが早くなるように、プログラマーが、最適なコードを書く必要があるのです。
(以下略)Unity(C#)
「Unity3D入門の決定版!RPG開発の基本をUnityインストラクターと共に進めるハンズオンコース【スタジオしまづ】」 by 嶋津 恒彦
【講座内容】
・Unityのインストール
・Unityの操作方法とゲームを作る基礎(コードでものを変化させる方法)
・C#プログラミングの基礎(基礎的な文法をイラストと演習問題付き)
・3Dミニゲーム開発(キャラクターを移動せさてゴールしたら終了するゲーム制作)
・3Dアニメーションの基礎(設定・Scriptによる切り替えスキル)
------ここまでが準備-------
・3DRPGの開発
・Playerキャラクターの移動と攻撃実装
・Enemyキャラクターの移動と攻撃実装
・各キャラクターの非ダメージとHP実装
・コンボとスタミナとHPゲージの演出実装「Unity ゲーム開発:インディーゲームクリエイターが教える C#の基礎からゲームリリースまで【スタジオしまづ】」 by 嶋津 恒彦
講座内容
初心者の方でもゲームをリリースできるように、講座の構成は
Unityのインストール
Unityでゲームを作る基礎(コードでものを変化させる簡単な方法)
プログラミングの基礎(ゲーム開発に必要な最低限のスキル)
ゲーム開発のテクニック(ボタンの取得やデータの保存など)
を1話完結形式で学び、基礎力をつけた後
RPGの作成
AppStore/Google Playへのリリース
に取り掛かかります。講座を終えたときには自身のゲームを実際にストアに並べることができるようになっています。「Unityゲーム開発入門:Unityインストラクターが教えるマリオ風2Dアクションゲームを作成する方法【スタジオしまづ】」 by 嶋津 恒彦
講座内容
任天堂からこの夏Nintendo Switch向けに発売されたスーパーマリオメーカー 2。ゲーム開発の専門的な知識がなくても
オリジナルのゲームが開発できることで注目を浴びています。この講座ではスーパーマリオメーカー 2のようにステージを作成するUnityのテクニックが習得できます。
また、ステージ作成だけではなくアクションゲーム開発に必要なC#・アニメーション・当たり判定など総合的なUnityの力がこれ一本で身につく完全攻略版です。
- 投稿日:2020-11-08T22:45:10+09:00
購入済みUdemy講座 (2020/11/08時点)
独学の教材として、先月頃からUdemyを使用し始めました。
自分が購入したものを以下記載していきたいと思います。
(セールでとりあえず買っておいた、という未着手のものが多々あります)そもそもUdemyとは
Udemyトップページ
Udemyの仕組みに関するよくある質問上記ページをご覧いただくとお分かりになると思いますが、動画配信のオンライン学習サービスです。
一度購入しておくと、その後期間無制限で何度も見ることができます。
"2万円"などの高額な講座もあるのですが、毎月と言ってよいほど頻繁にセールが開催され、1500円で購入できたりするので、そのタイミングでまとめ買いをするとお得かと思います。
(買って満足してしまう罠がありますが)購入した講座一覧
※購入して積みっぱなしにしないよう戒めのために公開しておきます。
★★★受講完了済み★★★
「はじめての AI」 by Grow with Google
講座内容
AI の基礎知識とその仕組みについて学習し、画像認識や音声認識について実際のデモをご覧いただきながら体感していただきます。基本知識だけでなく、事例や具体的にそれがどのような仕組みで動いているかも紹介することで、AI を活用するヒントを得ることを目指します。「AWS:ゼロから実践するAmazon Web Services。手を動かしながらインフラの基礎を習得」 by 山浦 清透
講座内容
★ゼロからAWSの重要サービスを使いこなせるように!実際にネットワークやサーバーを構築し、インフラの基礎概念を習得します。
本講座は、「はじめてAWSを学ぶ方」や「インフラにあまり詳しくない方」を対象に、「AWSの重要サービスを使い、自分でネットワークやサーバーを構築できるようになる」ことを目指したコースです。
セクションごとに、インフラの基礎概念を学びながら、手を動かし実際に構築していく、という構成になっています。
(以下略)「Git: もう怖くないGit!チーム開発で必要なGitを完全マスター」 by 山浦 清透
講座内容
★ゼロからプロのチーム開発の現場でGitを使いこなせるよう完全マスターします
こちらのコースは未経験の方でも、プロのチーム開発の現場で必要とされるGitの全てを習得することを目的としたコースです。
(略)
こちらのコースでは、まずGitの仕組みを図解でしっかりと理解していきます。
Gitってそもそも何のためにあるのか、コミットした時にどういう風にデータを保存しているのか、マージやリベースした時に何が起こっているのか、ブランチってどういう風に実現しているのか。
そういうことを仕組みから理解することで、Gitの分かりづらいコマンドを自信を持って使えるようになります。なにより、Gitを使う上でのハードルであるステージやブランチ、HEADの概念を完全に理解することができます。
その上で、実際にプロジェクトを作成しGitHubを用いながら、コマンドを実行して学んでいきます。
スキルを身につける上で、実際に作りながら学んでいくことはとても大切です。理解したものを実践することで本当に使えるスキルを身に付けていきます。
(以下略)★★★受講中★★★
「現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル」 by 酒井 潤
講座内容
このコースでは、Python3の基礎である入門コースを一通り終えた後に、今後のアプリケーション開発に役立つためのPythonのテクニックやデーターベースアクセス(SQLite, MySQL, MongoDB, SQLAlchemy, memcached, Hbase, neo4j etc)、WEB(Flask, socket, RPC etc)、インフラ自動化(Fabric, Ansible)、並列化(スレッド、マルチプロセス)、テスト(Unittest, pytest, Tox, Selenium, etc)、暗号化(pycrypto, hashlib)、グラフィック(turtle, Tkinter)、データ解析(numpy, pandas, matplotlib, scikit-learn), キューイングシステム(ZeroMQ, Celery)、非同期処理(asyncio)などのPythonを使った応用編を取り入れております。
(以下略)★★★今後着手★★★
Python
「現役シリコンバレーエンジニアが教えるPythonで始めるスクラッチからのブロックチェーン開発入門」 by 酒井 潤
講座内容
このコースではブロックチェーンの技術とPythonを用いて仮想通貨の送金システムを構築しながらブロックチェーンの根幹にある技術、考え方とその応用方法をハンズオンで学びます。
(以下略)「現役シリコンバレーエンジニアが教えるPythonでFXのシストレFintechアプリの開発」 by 酒井 潤
講座内容
今回扱うFintech技術では、日本でも人気のあるFXの自動トレードをPythonで行い、グローバルで使われているOandaサービスのAPIを使って行います。日本で人気があるという理由でFXにしましたが、FXではなくても、APIを使ってトレードするやり方さえ学べば、例えば株式や仮想通貨のトレードなどでも十分に使える技術を学ぶことができますので、FXにご興味ない方でも自動トレードが何かということを学べる講座になっております。
(以下略)「Python+FlaskでのWebアプリケーション開発講座!!~0からFlaskをマスターしてSNSを作成する~」 by N Matsumoto
講座内容
【この講座について】
Pythonの基本的な使い方、Flaskのウェブアプリケーション開発の基本的な技術、Flaskの機能の有効活用方法、サーバサイドウェブフレームワークで利用されるMVTモデル、サーバサイドのセキュリティ、テーブル設計、SNSサンプルアプリケーション開発を通じた実践的なアプリケーション開発など、PythonのWebエンジニア必修のスキルが身につきます!!
(以下略)「Python デザインパターンマスター講座~Pythonの基本文法、コーディング規約、命名規約、プログラミング技術~」 by N Matsumoto
講座内容
【この講座について】
プログラミングを勉強し、オブジェクト指向を覚えたが実際にどういう風にコードを書けばよいか。良いコード、恥ずかしくないコードというのはどういうコードなのか理解するためにこの講座を作成しました。
コーディング規約、命名規約、コードレビュー、オブジェクト指向のベストプラクティスのSOLIDの原則、デザインパターンを通じて、良いプログラムが何なのかを理解し、技術力を身に着けます。
また、デザインパターンは転職活動の面接などでも聞かれることがあり、身に着けて損のないスキルです
(以下略)「【E資格の前に】PyTorchで学ぶディープラーニング実装」 by 株式会社 AVILEN
講座内容
<概要>
ディープラーニングの実装、実務活用のイメージが沸かない、難しそう...そんなお悩みはありませんか?
当講座は、Pythonの基本文法とNumpyの知識さえあれば、誰でもディープラーニング(DL)を実装できるPyTorchの入門講座となっています。
特別な理論や数式は扱わず、まずは実装して、ディープラーニングのイメージを掴むことをゴールとしています。
AIスペシャリスト集団、株式会社AVILENの執行役員である吉川武文氏が、PyTorchによるディープラーニング実装術を公開。
当講座で扱うプログラムは全て皆様にプレゼントします、実務でもご活用ください。Go
「現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発」 by 酒井 潤
講座内容
このコースでは、Goの基礎である入門コースを一通り終えた後に、次世代のFintech(金融+テクノロジー)のアプリケーションとしてビットコインを自動でシステムトレードを行うアプリを開発します。
多くの言語の良い部分を取りれたGoは、コードを実行する際のパフォーマンスも良く、近年急速にライブラリも充実して来ており、シリコンバレーで多くの企業が取り入れ始めました。日本では、ドキュメントも少なく、Go言語を使う機会があまりないかもしれませんが、世界のトップ企業はすでに使い始めているため、技術レベルで世界から遅れないように今からGo始めると良いかと思います。
(以下略)AWS
「これだけでOK! AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座(SAA-C02試験対応版)」 by Edutech Global , inc.
本講座は全てのIT従事者にとって必須となるAWSの基本資格「AWS 認定ソリューションアーキテクト – アソシエイト試験」を合格を目指し、そのための知識や経験を獲得できるように設計されています。
この講座を通して、AWSの知識とノウハウを獲得し、「AWS 認定ソリューションアーキテクト – アソシエイト試験」を突破しましょう!!「Ultimate AWS Certified Solutions Architect Associate 2020」 by Stephane Maarek
講座内容
Concretely, here's what we'll learn to pass the AWS Certified Solutions Architect Associate exam:
- The AWS Fundamentals: IAM, EC2, Load Balancing, Auto Scaling, EBS, EFS, Route 53, RDS, ElastiCache, S3, CloudFront
- The AWS CLI: CLI setup, usage on EC2, best practices, SDK, advanced usage
- In-Depth Database comparison: RDS, Aurora, DynamoDB, Neptune, ElastiCache, Redshift, ElasticSearch, Athena
- Monitoring, Troubleshooting & Audit: AWS CloudWatch, CloudTrail
- AWS Integration & Messaging: SQS, SNS, Kinesis
- AWS Serverless: AWS Lambda, DynamoDB, API Gateway, Cognito
- AWS Security best practices: KMS, SSM Parameter Store, IAM Policies
- VPC & Networking in depth
- AWS Other Services Overview: CICD (CodeCommit, CodeBuild, CodePipeline, CodeDeploy), CloudFormation, ECS, Step Functions, SWF, EMR, Glue, OpsWorks, ElasticTranscoder, AWS Organizations, Workspaces, AppSync, Single Sign On (SSO)
- Tips to ROCK the examDocker
「米シリコンバレーDevOpsエンジニア監修!超Docker完全入門(2020)【優しい図解説とハンズオンLab付き】」 by CS Career Kaizen
講座内容
このコースを一文でまとめると?
このコースは、アプリ開発やDevOps経験初心者の方が、Linuxの簡単な基礎(カーネル・シェル・STDIN・STDOUT・TTY)とDocker(イメージ・コンテナ・VMとの違い・Docker compose・ネットワーキング・Volume)を初心者として1から学び、コンテナ化できるデベロパーやDevOpsとしてキャリアアップを目指す方向けのコースです。「米国AI開発者がゼロから教えるDocker講座」 by かめ れおん
講座内容
Dockerの基本的な使い方から現場で役立つ応用的な使い方まで,米国で活躍するAI開発者が講師となって徹底的に解説します.
プログラミングの知識がない人でも,問題なく受講できます.Kubernetes
「米シリコンバレーDevOpsエンジニア監修!超Kubernetes完全入門(2020)【優しい図解説とハンズオン】」 by CS Career Kaizen
講座内容
このコースを一文でまとめると?
このコースは、アプリ開発やDevOps経験初心〜中級者の方が、Linuxの簡単な基礎(カーネル・シェル・STDIN・STDOUT・TTY)とDocker(イメージ・コンテナ・VMとの違い・Docker compose・ネットワーキング・Volume)をベースにして、Kubernetesクラスター上にコンテナ化されたアプリをディプロイ・構築・起動というK8sデベロパー初心者として1から学び、コンテナ化できるデベロパーやDevOpsとしてキャリアアップを目指す方向けのコースです。アジャイル開発
「現役シリコンバレーエンジニアが教えるアジャイル開発」 by 酒井 潤
講座内容
このコースでは、あらゆるレベルのビジネスプロフェッショナルが理解しやすい方法でアジャイルとスクラムの基本をカバーします。アジャイルとスクラムの基礎に関するこのコースから得られる知識を使用して、アジャイルとスクラムに適した環境を作成できます。
アジャイルとスクラムの開発方法を取り入れれば、プロジェクトが失敗するのを防ぐことにも繋がる可能があります。このAjailプロジェクト管理方法は、チームワークが特に重要であり、チームメンバー間の相互信頼を高め、対人関係を改善することもできるでしょう。
このコースは、シリコンバレーでアジャイル開発経験14年の現役エンジニアが教授いたします。アルゴリズム
「現役シリコンバレーエンジニアが教えるアルゴリズム・データ構造・コーディングテスト入門」 by 酒井 潤
講座内容
恐らく、皆さん「アルゴリズムって本当に必要なの?」っと疑問に思っている方もいらっしゃるかと思います。例えば、「実際の現場であまり使わないなー」とか、「今の仕事はWEBのフレームワークのやり方さえ覚えれば、WEBアプリなんて簡単に作れちゃうし」などなどあるとは思います。
ただ、考えていただきたいのですが、なぜあのGAFAと言われるGoogle、Apple, Facebook、Amazonが入社試験で必ずアルゴリズム、データ構造のコーディング面接があるかを考えてみてください。
皆さんもお聞きしたことがあるかもしれませんが、Google検索アルゴリズム、Tesla自動運転アルゴリズムなど世界をリードして最先端の技術革新をしている会社では、ちょっとでもコードが早くなるように、プログラマーが、最適なコードを書く必要があるのです。
(以下略)Unity(C#)
「Unity3D入門の決定版!RPG開発の基本をUnityインストラクターと共に進めるハンズオンコース【スタジオしまづ】」 by 嶋津 恒彦
【講座内容】
・Unityのインストール
・Unityの操作方法とゲームを作る基礎(コードでものを変化させる方法)
・C#プログラミングの基礎(基礎的な文法をイラストと演習問題付き)
・3Dミニゲーム開発(キャラクターを移動せさてゴールしたら終了するゲーム制作)
・3Dアニメーションの基礎(設定・Scriptによる切り替えスキル)
------ここまでが準備-------
・3DRPGの開発
・Playerキャラクターの移動と攻撃実装
・Enemyキャラクターの移動と攻撃実装
・各キャラクターの非ダメージとHP実装
・コンボとスタミナとHPゲージの演出実装「Unity ゲーム開発:インディーゲームクリエイターが教える C#の基礎からゲームリリースまで【スタジオしまづ】」 by 嶋津 恒彦
講座内容
初心者の方でもゲームをリリースできるように、講座の構成は
Unityのインストール
Unityでゲームを作る基礎(コードでものを変化させる簡単な方法)
プログラミングの基礎(ゲーム開発に必要な最低限のスキル)
ゲーム開発のテクニック(ボタンの取得やデータの保存など)
を1話完結形式で学び、基礎力をつけた後
RPGの作成
AppStore/Google Playへのリリース
に取り掛かかります。講座を終えたときには自身のゲームを実際にストアに並べることができるようになっています。「Unityゲーム開発入門:Unityインストラクターが教えるマリオ風2Dアクションゲームを作成する方法【スタジオしまづ】」 by 嶋津 恒彦
講座内容
任天堂からこの夏Nintendo Switch向けに発売されたスーパーマリオメーカー 2。ゲーム開発の専門的な知識がなくても
オリジナルのゲームが開発できることで注目を浴びています。この講座ではスーパーマリオメーカー 2のようにステージを作成するUnityのテクニックが習得できます。
また、ステージ作成だけではなくアクションゲーム開発に必要なC#・アニメーション・当たり判定など総合的なUnityの力がこれ一本で身につく完全攻略版です。
- 投稿日:2020-11-08T21:28:37+09:00
Dockerのベースイメージの記述方法
ベストプラクティスを読んでみた
可能であれば、自分のイメージの元として現在の公式レポジトリを使います。私たちは Debian イメージ を推奨します。これは、非常にしっかりと管理されており、ディストリビューションの中でも最小(現在は 100 MB 以下)になるよう維持されているからです。
というわけでDebian系を使うようにしましょう。
どうやって選ぶの?
- ベースのOSを決める。ubuntuとかcentosとかpythonとか。
- docker searchコマンドで公式を選ぶ。無難にSTARSが一番多いやつでいいでしょう。
- Dockerhubで公式のイメージを検索するとTags一覧があるのでそこから選ぶ。
- FROM {イメージ名}:{タグ名}
例
FROM python:rc-alpine3.12
- 投稿日:2020-11-08T21:27:47+09:00
既存のRailsアプリのローカル環境にDockerを導入する方法【Rails6 / MySQL8】
はじめに
本記事は私が既存のポートフォリオアプリのローカル環境に
Docker
を導入した際の手順になります。
Docker
の公式ドキュメントはPostgreSQL
での手順解説になっているためMySQL
になると公式ドキュメントの手順解説はなく、
また、Rails6
での情報もRails5
と比べるとやはり少なく、結果、Rails6
+MySQL
という組み合わせでの情報がとても少なかったです。
そのため、私自身様々なエラーが出て試行錯誤しましたので、本記事がこれからRails6
+MySQL
という組み合わせでDocker
を導入する方の助けになれば幸いです。
なお、筆者は就職活動中の実務未経験の初学者のため、誤っている点などあるかもしれません。
その際はコメントにて教えて頂けると幸いです。前提条件
Mac版 DockerDesktop
のインストールが完了していることDocker
が起動済みであること※筆者の場合、上記インストールと起動は「ゼロからはじめるDockerによるアプリケーション実行環境構築」を観ながらやりました。
Docker
の全体像を学ぶ上でもとてもわかりやすく、おすすめです。バージョン
- Ruby 2.6.5
- Rails 6.0.3.2
- MySQL 8.0.21
手順1 Dockerfile作成
既存アプリケーションのルートディレクトリに
Dockerfile
を作成し、下記のように記述します。
※今回はアプリのディレクトリ名をsample_appとします。
ここはあなたのアプリのディレクトリ名に置き換えてください。DockerfileFROM ruby:2.6.5 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 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs yarn WORKDIR /sample_app COPY Gemfile ./Gemfile COPY Gemfile.lock ./Gemfile.lock RUN gem install bundler RUN bundle install COPY . /sample_app 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"]手順2 docker-compose.yml作成
こちらも手順1と同じく、既存アプリケーションのルートディレクトリに
docker-compose.yml
を作成し、下記のように記述します。docker-compose.ymlversion: '3' #docker-composeのバージョン services: db: image: mysql:8.0.21 #既存アプリとあわせる。ターミナルに[$ mysql --version]で確認 environment: MYSQL_ROOT_PASSWORD: vxgbizakqc #あなたのパスワード MYSQL_DATABASE: root ports: - "4306:3306" volumes: - ./mysql-confd:/etc/mysql/conf.d web: build: . command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/sample_app ports: - 3000:3000 depends_on: - db tty: true stdin_open: true volumes: mysql-data:手順3 entrypoint.sh作成
こちらも手順1・手順2と同じく、既存アプリケーションのルートディレクトリに
entrypoint.sh
を作成し、下記のように記述します。entrypoint.sh#!/bin/bash set -e # Remove a potentially pre-existing server.pid for Rails. rm -f /sample_app/tmp/pids/server.pid # Then exec the container's main process (what's set as CMD in the Dockerfile). exec "$@"手順4 config/database.ymlの編集
config
ディレクトリにあるdatabase.yml
を下記のように編集します。config/database.ymldefault: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: vxgbizakqc #あなたのパスワード socket: /tmp/mysql.sock host: db development: <<: *default database: sample_app_development test: <<: *default database: sample_app_test手順5 Dockerイメージの作成
ターミナルで下記のコマンドを実行し、
Dockerイメージ
を作成します。ターミナルMacBook-Pro:sample_app$ docker-compose build手順6 Dockerコンテナを起動
ターミナルで下記のコマンドを実行し、
Dockerコンテナ
を起動します。ターミナルMacBook-Pro:sample_app$ docker-compose up手順7 コンテナ内にデータベースを作成する
ターミナルで下記のコマンドを実行し、コンテナ内にデータベースを作成します。
ターミナルMacBook-Pro:sample_app$ docker-compose run web rails db:create上のコマンドを実行すると先ほど編集した
database.yml
を元にデータベースを作成します。
データベースの作成が成功すると下記のように表示されます。ターミナルreating sample_app_web_run ... done Created database 'sample_app_development' Created database 'sample_app_test'
手順8 作成したデータベースのマイグレーションを実行
ターミナルで下記のコマンドを実行し、データベースのマイグレーションを実行します。
ターミナルMacBook-Pro:sample_app$ docker-compose run web rails db:migrateデータベースのマイグレーションが成功すると下記のように表示されます。
ターミナルCreating sample_app_web_run ... done == 20209165960112 DeviseCreateUsers: migrating ================================ -- create_table(:users) -> 0.0253s #中略 -- add_index(:notifications, :comment_id) -> 0.0251s == 20209165960112 CreateNotifications: migrated (0.1280s) =====================手順9 Gemのインストール
さぁ、長かったDocker導入もこれでいよいよラストです。
ターミナルで下記のコマンドを実行し、Gem
をインストールします。ターミナルMacBook-Pro:sample_app$ docker-compose exec web bundle install以上です!!
localhost:3000
に接続するとアプリケーションが表示されています。参考文献
今回は以下の記事や動画教材を参考にさせて頂いた結果Dockerを導入することができました。
記事を書いて下さった方々、動画教材作成者の小島様、ありがとうございます。
- 投稿日:2020-11-08T21:09:39+09:00
Autowareを動かしてみた
概要
2019年2月に刊行された Autoware の書籍がある。
2020年10月に、これを見ながら、PCにインストールしてAutowareを動かしてみた。
やってみた限り、書籍記載の推奨環境で、インストール手順通りにやってもAutowareの動作までは辿りつけなかった。
書籍では、動作に必要なソフトウェアのバージョン指定が無い為、最新の環境でインストールするとバージョンの組み合わせの問題で動作できない。
また、書籍記載のgithubのリポジトリには必要なファイルが存在していなかった。
書籍記載の推奨環境とインストール手順
推奨環境
- Ubuntu 16.04 LTS
- Intel Core i7 (8コア)
- メモリ 16GB以上
- ストレージ 30GB以上のSSD
- GPU NVIDIA GeForce GTX 980M かそれ以上のもの
インストール手順
- 古いDockerのアンインストール
- Docker CE のインストール(バージョン指定無し)
- 動作確認(hello-world)
- NVIDIA Dockerのセットアップ(バージョン v1.0.1)
- 動作確認
- Autoware Dockerのセットアップ(1.8.0-kinetic)
私の環境とインストール手順
推奨環境
- Ubuntu 16.04 LTS
- Intel Core i7 (8コア)
- メモリ 16GB以上
- ストレージ SSD 128GB
- GPU NVIDIA Quadro P400
インストール手順
- 古いDockerのアンインストール
- Docker CE のインストール(17.12.1)
- 動作確認(hello-world)
- 自ユーザをdockerグループに追加して、自ユーザからdockerを起動できるようにする
- NVIDIA Dockerのセットアップ(バージョン v2.0.3)
- 動作確認
- Autoware Dockerのセットアップ(1.12.0-kinetic)
参考
- Autoware Docker環境の構築
- 上記が最も参考になった。
- nvidia-docker2のインストール(On Ubuntu 16.04 LTS)
- nvidia-docker2のインストールについて参考になった
詳細
こちら を参照
- 投稿日:2020-11-08T20:12:51+09:00
【エラー解決】springをdockerで環境構築しようとした際に発生
目的
エラー発生。
Dockerで開発環境を構築した際に遭遇した。
エラー文と解決策を忘れないように載せておく結論
以前作ったコンテナはプロジェクトではなくコマンドで削除しないと消えないことがわかった
ポート番号でエラーがおきた原因は分からなかった。状況
javaのspringをdockerで環境構築をしようとした際に発生した。
Flywayをマイグレーションツールとして入れていた。【環境構築】
$ docker-compose up -d Starting vi_bank_db_1 ... error ERROR: for vi_bank_db_1 Cannot start service db: Ports are not available: listen tcp 0.0.0.0:3306: bind: address already in use $ lsof -i :3306 →何も表示されないエラー
ERROR: for db Cannot start service db: Ports are not available: listen tcp 0.0.0.0:3306: bind: address already in use ERROR: Encountered errors while bringing up the project. $ docker-compose down WARNING: Found orphan containers (vi_bank_flyway-repair_1, vi_bank_flyway-info_1, vi_bank_flyway-migrate_1, vi_bank_flyway-clean_1) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up. Removing vi_bank_db_1 ... done Removing network vi_bank_default $ docker-compose up -d --remove-orphans Creating network "vi_bank_default" with the default driver Removing orphan container "vi_bank_flyway-migrate_1" Removing orphan container "vi_bank_flyway-repair_1" Removing orphan container "vi_bank_flyway-info_1" Removing orphan container "vi_bank_flyway-clean_1" Creating vi_bank_db_1 ... error ERROR: for vi_bank_db_1 Cannot start service db: Ports are not available: listen tcp 0.0.0.0:3306: bind: address already in use ERROR: for db Cannot start service db: Ports are not available: listen tcp 0.0.0.0:3306: bind: address already in use解説
Found orphan containers
同じプロジェクトにすでにコンテナがあるよ、注意されました。
以前個人で作ったコンテナが残ったままだったようです。
Dockerでの開発初めてなので勉強になります。
これのdocker-compose up -d
が実行されない原因のようです。
エラーにしたがってコマンドを実行します$ docker-compose up -d --remove-orphans【解決策】
- ポート番号を3306→3307に変更した
docker-compose.ymlversion: '3.7' services: db: image: mysql:8.0.20 ports: - "3307:3306"その後
$ docker-compose up -d Recreating vi_bank_db_1 ... done $ docker-compose exec db mysql -u docker -p パスワード入力→成功 mysql>発生したエラー
ERROR: for vi_bank_db_1 Cannot start service db: Ports are not available: listen tcp 0.0.0.0:3306: bind: address already in use対処法
$ lsof -i :3306 #何も表示されない $ docker-compose up -d Recreating vi_bank_db_1 ... done更新201108
エラー解決
Gradleのjavaのバージョンが設定できていなかった。
参考にした記事(いつもありがとうございます)
DockerでMySQLを利用する[docker container run オプション]
Error starting userland proxy: listen tcp0.0.0.0:3306: bind: address already in use
- 投稿日:2020-11-08T18:45:56+09:00
laravel migration失敗した話
migrationに失敗してエラーが出たので、解決策を共有します。
やりたかったことは、usersテーブルの追加です。
なので、下記コマンドを実行しました。php artisan make:migration create_users_table //users table 作成エラー内容
どうやら、未定義の定数だそうです。
ErrorException Use of undefined constant JSON_INVALID_UTF8_SUBSTITUTE - assumed 'JSON_INVALID_UTF8_SUBSTITUTE'ネットで検索してみると、PHPのバージョンに関する問題でした。
PHP7.2以降じゃないと出るエラーだとか
バージョンを確認するとPHP7.1でした。そもそも、dockerコンテナ外でmigrationしてました。
ってことで、dockerコンテナの中へPHPのバージョンは7.4でした
そして、
migrationも無事通りました!!
- 投稿日:2020-11-08T17:42:26+09:00
DockerでSambaサーバーを立てる
DockerでSambaサーバーを立ててみます。
環境
- Chromebox Series 3
- Wi-Fiアダプタを除去し、USB3.0アダプタ 1に換装
- システムドライブ: SunEastのmsata 128GB
- Ubuntu 20.04
- データドライブ: ADATA HV620
構築
dperson/samba が有名らしいので、これを使います。
https://hub.docker.com/r/dperson/samba
dockerを入れていない場合は、好きな方法でインストールしてください。
sudo snap install dockerコンテナを作ります。
sudo docker create -it -p 139:139 -p 445:445 --name smbsrv -v 共有したいパス:/path1 dperson/samba \ -p -r\ -u "ユーザー名;パスワード" \ -s "share;/path1;yes;no;no;ユーザー名"コンテナを起動させます。
sudo docker start smbsrv
うまくいけば、以下のようなログが表示されます。
# docker logs smbsrv Added user ユーザー名. smbd version 4.12.2 started. Copyright Andrew Tridgell and the Samba Team 1992-2020 daemon_ready: daemon 'smbd' finished starting up and ready to serve connections以下のメッセージは、オプションがおかしかったときに表示されます。
適切に書き直して、作り直してください。The 'command' (if provided and valid) will be run instead of sambadocker createの部分について簡単な説明
- Docker自体のオプションはイメージ名「dperson/samba」より前に、dperson/sambaのオプションはイメージ名より後ろに書きます。
- -sオプションは、 「共有フォルダ名;Docker内のSambaのアクセス場所;browseableか(ネットワークコンピューターで表示をするか);readonlyか(読み取り専用か);guestか(ゲストユーザーを認めるか);アクセス可能なユーザーリスト(,区切り)」という意味です。
- Windowsでは、「\サーバーのIPアドレス\share」でアクセスできます。
- -r オプションはゴミ箱の無効化です
Windowsからのアクセス
ネットワークの場所の追加をして、ユーザー名とパスワードを入力するだけです。
その他
CrystalDiskMarkをやってみました。1ギガビットイーサネットです。
HDD
SSD
参考
https://www.atmarkit.co.jp/ait/articles/0005/22/news008.html
SATA電源が必要です。USB給電のケーブルを使いました。 ↩
- 投稿日:2020-11-08T17:28:42+09:00
【Dockerチートシート】
Dockerコマンドのチートシート
コンテナをバックグラウンドで動かす(起動後にdetachする)
https://docs.docker.com/engine/reference/run/#detached--d
docker run -d <image>コンテナからExit後に自動的に削除する
https://docs.docker.com/engine/reference/run/#clean-up---rm
docker run --rm <image>
- 投稿日:2020-11-08T17:08:59+09:00
DockerでLaravel開発環境構築(Mac)
■構成
docker-laravel
├ docker-compose.yml
├ docker
│ ├ php
│ │ ├ php.ini
│ │ └ Dockerfile
│ └ nginx
│ └ default.conf
└ server■手順
1.Dockerのデスクトップアプリをダウンロード
公式サイトより手順に従いダウンロード(簡単です)
https://www.docker.com/products/docker-desktop2.Docker.appを起動
terminalopen /Applications/Docker.app3.ディレクトリ作成
docker-laravelという作業用フォルダ(名称は任意)をデスクトップに用意し、
その中に上記構成でフォルダ、ファイルを配置します。
※面倒であれば以下より、git cloneを。
https://github.com/masayan1126/docker-laravel4.主要ファイル
詳細は割愛します(githubを参照ください。)
・docker-compose.yml
・Dockerfile
・php.ini
・default.conf(nginx設定ファイル)5.Dockerを起動してlaravelプロジェクトを作成
・dockerを起動(少し時間かかります)
docker-compose.ymlがあるディレクトリで実行$ docker-compose up -d・phpコンテナに入る
$ docker-compose exec php bash・Laravelプロジェクト作成
・下記コマンド後にserverディレクトリ以下にLaravelプロジェクトが構築される。
root@ae5eec7aea3c:/var/www#$ composer create-project laravel/laravel docker-laravel-app(プロジェクト名)・localhostへアクセスし、laravelのトップ画面を確認できれば成功。
6.ついでにmysqlも
・mysqlコンテナに入り、ログインできれば接続完了。
terminal$ docker exec -it db-host-practice bashterminalmysql -u docker -p Enter password: パスワード・.envファイルを修正(docker-compose.ymlの内容に合わせる)
.envDB_CONNECTION=mysql DB_HOST=db-host-practice DB_PORT=3306 DB_DATABASE=[docker-composeで定義したデータベース名] DB_USERNAME=[docker-composeで定義したユーザ名] DB_PASSWORD=[docker-composeで定義したパスワード名]・マイグレーション
root@4ef799d9efc8:/var/www/docker-laravel-app#php artisan migrate※うまくいかなければ、以下を試す。
・php artisan cache:clear
- 投稿日:2020-11-08T16:51:20+09:00
pytest-dockerでデータベースをfixtureする
「データベースをDockerでfixtureするpytest環境例」として次を用意した。
こちらの記事はMySQLだったがPostgreSQLでも確認してみた。
なお、データベース接続インターフェースのライブラリーとして、
を利用したが、他のものを利用する場合もほぼ同じだと思う。
conftest.py の fixture例
pytest-dockerのサンプルでhttpbinの起動待ちしているところ、
def is_responsive(url): try: response = requests.get(url) if response.status_code == 200: return True except ConnectionError: return False @pytest.fixture(scope="session") def http_service(docker_ip, docker_services): """Ensure that HTTP service is up and responsive.""" # `port_for` takes a container port and returns the corresponding host port port = docker_services.port_for("httpbin", 80) url = "http://{}:{}".format(docker_ip, port) docker_services.wait_until_responsive( timeout=30.0, pause=0.1, check=lambda: is_responsive(url) ) return urlこれのデータベース版。アプリケーション側ではSQLAlchemy等のORMを使う場合でも直接接続ライブラリーでconnectしてみた。ORM経由だとSQLAlchemyのcreate_engine()のタイミングなのかどうなのかよくわからないし。ドライバーライブラリー経由で接続して起動確認してるってことを明示する感じで。
MySQL container の場合
MySQLコンテナーが立ち上がりconnect()に対してExceptionがでなくなるまで待つ
def is_mysqld_ready(docker_ip): try: pymysql.connect( host=docker_ip, user=os.getenv('MYSQL_USER', ''), password=os.getenv('MYSQL_PASSWORD', ''), db=os.getenv('MYSQL_DATABASE', '') ) return True except: return False@pytest.fixture(scope="session") def database_service(docker_ip, docker_services): docker_services.wait_until_responsive( timeout=30.0, pause=0.1, check=lambda: is_mysqld_ready(docker_ip) ) returnPostgreSQL container の場合
一緒ですね。
def is_postgresql_ready(docker_ip): try: psycopg2.connect( "postgresql://{user}:{password}@{host}/{db}".format( user=os.getenv('POSTGRES_USER', ''), password=os.getenv('POSTGRES_PASSWORD', ''), host=docker_ip, db=os.getenv('POSTGRES_DB', '') ) ) return True except: return False@pytest.fixture(scope="session") def database_service(docker_ip, docker_services): docker_services.wait_until_responsive( timeout=30.0, pause=0.1, check=lambda: is_postgresql_ready(docker_ip) ) returndocker-compose.yml
# MySQLの場合 version: "3" services: database: image: mysql:5.7 ports: - 3306:3306 volumes: - ./initdb.d:/docker-entrypoint-initdb.d environment: - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} - MYSQL_DATABASE=${MYSQL_DATABASE}# PostgreSQLの場合 version: "3" services: database: image: postgres:13 ports: - 5432:5432 volumes: - ./initdb.d:/docker-entrypoint-initdb.d environment: - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_DB=${POSTGRES_DB}スキーマとテストデータの準備
あとはdocker-composeでヴォリュームマウントされ初期化実行される
./initdb.d:/docker-entrypoint-initdb.d
の./initdb.d
フォルダにSQLや初期化シェルスクリプトなどを放り込んでおけばテスト可能に。Qiitaの記事だと、Docker で MySQL 起動時にデータの初期化を行う など。
- 投稿日:2020-11-08T12:11:38+09:00
Raspberry PiにDockerをインストール
概要
動作確認機種
- Raspberry Pi 3 Model B+
- Raspberry Pi Zero W
インストール
※参考:https://docs.docker.com/engine/install/debian/
パッケージを最新化します。
sudo apt update
Dockerインストールスクリプトをダウンロードし、実行します。
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh
pi
ユーザをdocker
グループに参加させます。sudo usermod -aG docker pi
pi
ユーザでシェルにログインしている場合は、ログアウトしてから、ログインし直します。logout
動作確認
※参考:https://docs.docker.com/engine/install/linux-postinstall/
次のコマンドを実行し、動作確認します。
docker -v
Docker version 19.03.13, build 4484c46次のコマンドを実行し、
hello-world
してみます。docker run hello-worldUnable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 4ee5c797bcd7: Pull complete Digest: sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (arm32v7) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/自動起動
問題なければ、Raspbian OS起動時にdockerを自動起動するように設定します。
sudo systemctl enable docker