WinマシンにDocker入れて開発環境を整える
はじめに
ラズパイでいろいろやってきたけどpythonでプログラミングするならばWinマシンに開発環境あるといいなーってなったので早速準備します。
環境
- Win10 Pro 1909
- Docker Desktop version 19.03.8, build afacb8b
- docker-compose version 1.25.4, build 8d51620a
- PostgreSQL 12.2
参考文献
じつは数日前にdockerだけ入れてました。docker-composeも一緒に入った気がする。
ハロワしたらお決まりのエラー。
Unable to find image 'hellow-world:latest' locally
C:\Program Files\Docker\Docker\resources\bin\docker.exe: Error response from daemon: pull access denied for hellow-world, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
言われた通り、docker loginしたら出なくなりました。言われたことは守ろうね!
さて、Docker-composeを使ってpostgresを入れていきましょう
サクッとymlを書きましょ。中身はRaspberryPiで使っているものと同じような感じにしましょ。
version: "3"
services:
postgres-sm:
image: postgres:latest
container_name: "postgres-sm"
ports:
- 15432:5432
volumes:
- "pgdata:/var/lib/postgresql/data"
- "./pg_init.d:/docker-entrypoint-initdb.d"
environment:
- "POSTGRES_USER=dev"
- "POSTGRES_PASSWORD=dev"
- "POSTGRES_DB=SmartMeterDB"
#restart: always
volumes:
pgdata:
初期作成用sqlはこんな感じ。 ラズパイで使っているものをそのまま持ってきましたとさ。
/* CREATE DATABASE for Metabase*/
CREATE DATABASE metabasedb;
/* CREATE TABLE for TEST*/
CREATE TABLE "SMDB_TEST_static1" (
"ID" SERIAL NOT NULL,
"delta" DOUBLE PRECISION NULL DEFAULT 0,
"sumpower" DOUBLE PRECISION NULL DEFAULT 0,
"date" TIMESTAMP NULL DEFAULT NULL,
PRIMARY KEY ("ID")
)
;
ymlとsqlを書いたら保存。sqlの保存先はymlで指定している通り、ymlの保存されているディレクトリの下(pg_init.dの中)に保存。ymlが保存されているディレクトリでdocker-compose upを実行。標準出力を出さないようにdオプションを付けます。
ボリュームだけ先にdocker volume create pgdataで作っちゃってたのは内緒。
PS C:\Users\<user>\Documents\Docker> docker-compose up -d
Creating network "docker_default" with the default driver
Creating volume "docker_pgdata" with default driver
Pulling postgres-sm (postgres:latest)...
latest: Pulling from library/postgres
54fec2fa59d0: Pull complete
30a95add0890: Pull complete
57bc798d3c84: Pull complete
a41bedb2c5de: Pull complete
589548c3abb4: Pull complete
c4c6b75d5deb: Pull complete
8f8c045a6a99: Pull complete
69f9dd86b24d: Pull complete
45bbaba740ff: Pull complete
1761ca7befa0: Pull complete
57feb34018f4: Pull complete
bede8373accc: Pull complete
6e4c69fbe63b: Pull complete
8a7949704ab2: Pull complete
Digest: sha256:d96835c9032988c8a899cb8a3c54467dae81daaa99485de70e8c9bddd5432d92
Status: Downloaded newer image for postgres:latest
Creating postgres-sm ... done
PS C:\Users\<user>\Documents\Docker>
PS C:\Users\<user>\Documents\Docker> docker-compose ps -a
Name Command State Ports
-----------------------------------------------------------------------------
postgres-sm docker-entrypoint.sh postgres Up 0.0.0.0:15432->5432/tcp
PS C:\Users\<user>\Documents\Docker>
PS C:\Users\<user>\Documents\Docker> docker-compose exec postgres-sm /bin/bash
root@1507efcef0c5:/#
root@1507efcef0c5:/# psql -V
psql (PostgreSQL) 12.2 (Debian 12.2-2.pgdg100+1)
root@1507efcef0c5:/#
立ちました。ちゃんと内部にも入れました。
外部クライアントから接続して、できるか確認。
できていますね~。
イメージの状態を確認。試しに取ったalpine版と容量を比較。
PS C:\Users\<user>\Documents\Docker> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
postgres alpine ae192c4d3ada 8 days ago 152MB
postgres latest 0f10374e5170 9 days ago 314MB
hello-world latest bf756fb1ae65 4 months ago 13.3k
alpineはほんと軽いですね。半分か。
とはいえ、RaspberryPiにはオリジナルで建ててしまったので、そのまま使うことに。問題がなければ早々にalpineに移行したほうがよいかもなぁ。
volumeってどこに保存されているんだろうかと気になってしまったので探してみたら、C:\ProgramData\DockerDesktop\vm-dataにDockerDesktop.vhdxとして保存されていました。いったんdockerを止めてマウントさせようとしましたができませんでした。
追加で確認していたらCドライブが枯渇する人を発見。
ちゃんと管理しないと、ストレージを急に食われてびっくりすることがあるみたい。初期設定はMAXになっているので、16GBにしました。使用領域を増やす分には設定変更とrestartsするだけみたいですが、減らす場合には全てが消えるみたいです。減らすならば最初ですね。外部ドライブあればもっと大きい容量を指定できますが、あいにく無いのでしかたないです。image、containr、volume等はいらなくなったら削除しないとですね。
その他
コンソールの画面をずーっと引用でごまかしてきたんですが、見づらいなぁとおもったので、コンソール風のCSSを導入しました。
スマホ版でうまく反映されていなかったので、下記を参考にしてみましたが、うまくいかず。Pro入れろってことですよね~。アフィでもやろうかしら。
レスポンシブデザインなるものを設定してみたけど、表示が小さくなってしまうのね。ちょっと考え物だなぁ
完走した感想
環境整備はサクッと終わらせて、さっさと本題をやりたいとこですが、環境作るのたーのしー。めっちゃ丁寧に書いてしもた。
これPCでいったん全てできるようにしてからラズパイに実装させるべきだな。。。armとx86でpythonの動きは変わらんっしょ。
いろいろ調べてて、Windows Subsystem for Linux(WSL)に出会いました。WSLについて知らなかったのですが、進化版のWSL2がWin10-2004で来るとかちょっと面白くなってきていますね。高性能マシンほしいなぁ。
Dockerではないコンテナとしてsingularityなるものがあるみたいです。こっちは科学計算系、GPUパワーを使う際に有効だとか。Jetson NanoがあるのでAI系をやりだしたらつかってみたいところ。
ゴミスペックのwinマシンに適当なlinux入れてサーバー化するのもやりたい。Docker運用するつもりなので軽めのやつなんか探してやってみたいけど時間かかりそうでござる。
やりたい祭りでつらい~~~1年間ぐらいGWにならないかな。