- 投稿日:2021-10-13T23:27:49+09:00
うるせえさっさと docker buildx させろ - ubuntuならこれ一撃で動くよ!
「最新のMacからラズパイ4、それに従来のamd64まで マルチに対応したコンテナが作れる docker buildx」 なにそれすごい! 無慈悲.sh ❯ docker buildx docker: 'buildx' is not a docker command. See 'docker --help' おおう... どうも2021/10時点で、「Windows/Mac版 Docker Desktop」なら設定一箇所変えるだけで使えるようですが、 Linux版はプロプリなバイナリを含む関係で apt 一発では入らないのでした。 てわけで tl&dr; なアナタに、一撃設定スクリプトを書いてみました。 Dockerデーモンの再起動までやっちゃいます。 /etc/docker/daemon.json を弄るので、もし何か設定をされている場合は上書きされてしまうのでご注意下さい!! setup_docker_buildx.sh #!/usr/bin/env bash # 必要なパッケージ sudo apt-get install -y qemu qemu-user-static binfmt-support debootstrap # linuxではbuildxランタイムの手動インストールが必要 # 参考: https://docs.docker.com/buildx/working-with-buildx/ mkdir -p ~/.docker/cli-plugins/ cd ~/.docker/cli-plugins/ || exit wget https://github.com/docker/buildx/releases/download/v0.6.3/buildx-v0.6.3.linux-amd64 mv buildx-v0.6.3.linux-amd64 docker-buildx chmod a+x ~/.docker/cli-plugins/docker-buildx sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.backup$(date '+%Y%m%d_%H%M%S') echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json sudo systemctl restart docker 数分で終わります。(複数アーキテクチャが並列ビルドされてちょっと面白いです) 終わったら docker buildx versionが実行出来ることを確認します: 試す.sh ❯ docker buildx version github.com/docker/buildx v0.6.3-docker 266c0eac611d64fcc0c72d80206aa364e826758d お、何か動いてる! 上記がOKでしたら、こんな感じで従来の docker build だった部分をそのまま docker buildx build + オプション指定に置き換えて実行すれば、 だいたい一発で動いちゃうと思います。こりゃすごい build_and_push.sh # まずビルダーを作成 docker buildx create --name armBuilder docker buildx use armBuilder # multi arch ビルド & プッシュ docker buildx build . \ --platform linux/amd64,linux/arm64/v8 \ --output=type=image,push=true \ --tag taiyodayo/my_app エラー無く実行できたら多分成功です!おめでとうございます! ubuntuやalpineベースのイメージは結構な割合でそのままビルドできちゃう印象です。 こりゃ Apple Silicon が捗ります。 さてここからは確認だけですので忙しい方は読み飛ばしてOKです! まず docker hub から イメージがマルチアーキになっているか確認します: うへーいしっかりarm64/amd64が選べるようになってます! コマンドからも確認できます。 docker image inspect taiyodayo/my_app するとJSONでイメージのマニフェストが確認できます # M1 MacBook Air から docker pull taiyodayo/my_app した場合 "Architecture": "arm64", "Os": "linux", "Size": 611768789, "VirtualSize": 611768789, # amd64のUbuntuマシンで docker pull taiyodayo/my_app した場合 "Architecture": "amd64", "Os": "linux", "Size": 658537637, "VirtualSize": 658537637, しっかり各アーキテクチャごとにビルドされてますね! なにげに push も一緒に出来たり buildx、色々試しがいがありそうです。 こりゃ楽しい!
- 投稿日:2021-10-13T21:53:30+09:00
windows10 homeにDocker for windowsを導入する手順のまとめ
今回Docker導入にあたり自分が引っかかったところがあったので自分用にまとめておきます。 ※参考サイト(導入まで) https://qiita.com/zaki-lknr/items/db99909ba1eb27803456 ※仮想サーバ作って自作webサイトを表示する https://qiita.com/sugurutakahashi12345/items/dc23dab2613b0e6103e8 導入のところサイトでは書かれていなかったので、注意点としてDockerはwindows 10 home とwindows 10 proでは導入の際に手順が違うので注意!! ※自分はこのせいで4時間くらい無駄にしたので覚えておく またなにか新しいPCで導入するときに見直します
- 投稿日:2021-10-13T21:17:09+09:00
EC2にDockerをインストールし、WordPressを構築 (DBはRDS)
はじめに 表題の通りです。DBをRDSにした場合のやり方になります。 前提条件 ・DBは、RDSのMySQLを使用します。 EC2にDockerをインストール こちらの記事↓と全く同じコマンドで、dockerでWordPressが構築できます。 AWS EC2 docker + wordpress インストール ただし、docker-compose.ymlファイルは以下のコードをコピペしてください。 Dockerfileも同じディレクトリ内に入れておいてください。 FROM wordpress:5.8.0-php7.4-apache RUN set -ex; \ apt-get update && apt-get install -y \ wget \ unzip \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # テーマのダウンロード WORKDIR /tmp/wp-themes RUN wget https://wp-cocoon.com/download/791/cocoon-master-2.1.9.1.zip # テーマを配置 RUN unzip './*.zip' -d /usr/src/wordpress/wp-content/themes # 不要ファイル削除 RUN apt-get clean RUN rm -rf /tmp/* WORKDIR /usr/src/wp-plugins RUN set -ex; \ wget -q -O amazon-s3-and-cloudfront.zip https://downloads.wordpress.org/plugin/amazon-s3-and-cloudfront.1.4.3.zip \ && unzip -q -o '*.zip' -d /usr/src/wordpress/wp-content/plugins \ && chown -R www-data:www-data /usr/src/wordpress/wp-content/plugins \ && rm -f '*.zip' # 所有者の変更 RUN chown -R www-data:www-data /usr/src/wordpress/wp-content/themes WORKDIR /var/www/html docker-compose.yml version: '3' services: wordpress: build: . # カレントディレクトリのDockerfileでイメージをビルド image: wordpress ports: - '80:80' # ローカルのport80でコンテナのport80にアクセスできるようにする environment: WORDPRESS_DB_HOST: xxxxxxx.ap-northeast-1.rds.amazonaws.com # rdsのエンドポイント WORDPRESS_DB_NAME: wordpress WORDPRESS_DB_USER: wp_user WORDPRESS_DB_PASSWORD: wp_pass volumes: - .:/var/www/html restart: always 以下の3点は、EC2にSSH接続後、RDSに接続し、RDS内に作成していきます。 ・WORDPRESS_DB_NAME: wordpress ・WORDPRESS_DB_USER: wp_user ・WORDPRESS_DB_PASSWORD: wp_pass RDSに接続し、DB名等を作成 EC2を作成し、ssh接続後、RDSにwordpressのDBを作成しますので、下記のコマンドを入力します。 DB名とユーザー名とパスワードを作成します。 $ sudo yum update $ sudo yum install -y mysql $ mysql -h [RDSエンドポイント] -u RDS作成時のユーザー名 -p Enter password: RDS作成時のパスワード > create database wordpress; Query OK, 1 row affected (0.01 sec) > create user wp_user@'%' identified by 'wp_pass'; > GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'wp_user'@'%' WITH GRANT OPTION; Query OK, 0 rows affected (0.01 sec) > show databases; +--------------------+ | Database | +--------------------+ | information_schema | | innodb | | mysql | | performance_schema | | sys | | wordpress | +--------------------+ >exit #wp_userでログインできることを確認します。 $ mysql -h [RDSエンドポイント] -u wp_user -p EC2のパプリックIPにアクセスすると、WordPressの画面が表示されました! Dockerの自動起動設定 EC2が再起動した際、Dockerが自動で起動するよう設定します。 $ sudo systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) service; disabledと表示され、自動起動設定されていませんので、設定しましょう。 $ sudo systemctl enable docker Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. $ sudo systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) enabledと表示されていますので、自動起動設定されていることがわかります。 ちなみに自動起動設定をOFFもできます。 $ sudo systemctl disable docker Removed symlink /etc/systemd/system/multi-user.target.wants/docker.service. Docker起動中に、EC2を停止させた場合 Docker起動中に、EC2を停止させ、再度起動させた状態で、docker-composeコマンドを使用すると以下のエラー文がでます。 $ docker-compose up -d Traceback (most recent call last): File "urllib3/connectionpool.py", line 677, in urlopen File "urllib3/connectionpool.py", line 392, in _make_request File "http/client.py", line 1277, in request File "http/client.py", line 1323, in _send_request File "http/client.py", line 1272, in endheaders File "http/client.py", line 1032, in _send_output File "http/client.py", line 972, in send File "docker/transport/unixconn.py", line 43, in connect FileNotFoundError: [Errno 2] No such file or directory During handling of the above exception, another exception occurred: Traceback (most recent call last): File "requests/adapters.py", line 449, in send File "urllib3/connectionpool.py", line 727, in urlopen File "urllib3/util/retry.py", line 410, in increment File "urllib3/packages/six.py", line 734, in reraise File "urllib3/connectionpool.py", line 677, in urlopen File "urllib3/connectionpool.py", line 392, in _make_request File "http/client.py", line 1277, in request File "http/client.py", line 1323, in _send_request File "http/client.py", line 1272, in endheaders File "http/client.py", line 1032, in _send_output File "http/client.py", line 972, in send File "docker/transport/unixconn.py", line 43, in connect urllib3.exceptions.ProtocolError: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory')) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "docker/api/client.py", line 214, in _retrieve_server_version File "docker/api/daemon.py", line 181, in version File "docker/utils/decorators.py", line 46, in inner File "docker/api/client.py", line 237, in _get File "requests/sessions.py", line 543, in get File "requests/sessions.py", line 530, in request File "requests/sessions.py", line 643, in send File "requests/adapters.py", line 498, in send requests.exceptions.ConnectionError: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory')) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "docker-compose", line 3, in <module> File "compose/cli/main.py", line 80, in main File "compose/cli/main.py", line 189, in perform_command File "compose/cli/command.py", line 70, in project_from_options File "compose/cli/command.py", line 153, in get_project File "compose/cli/docker_client.py", line 43, in get_client File "compose/cli/docker_client.py", line 170, in docker_client File "docker/api/client.py", line 197, in __init__ File "docker/api/client.py", line 222, in _retrieve_server_version docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory')) [3185] Failed to execute script docker-compose 焦らず、docker ps -aコマンドをしてみましょう $ docker ps -a Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? dockerが起動されていないことが原因です。 $ systemctl start docker Failed to start docker.service: The name org.freedesktop.PolicyKit1 was not provided by any .service files See system logs and 'systemctl status docker.service' for details. だめですね。原因は、実行権限がないことです。sudoを足しましょう。 $ sudo systemctl start docker [ec2-user@ip-10-0-1-94 wordpress]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES xxxxxx kyt-prod "docker-entrypoi" 43 minutes ago Up 31 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp wordpress_wordpress_1 コンテナが起動しました!! WordPressが使用できます!! 参考 AWS EC2 docker + wordpress インストール
- 投稿日:2021-10-13T18:50:56+09:00
docker-compose で不思議なエラー
当方、mac os Catalina 10.15.7(19H2)+Docker desktop よくわかっておりませんが・・ Dockerでselenium動かしてるんだけど docker-compose up -d したら以下のようなエラーが発生し起動できず・・ $ docker-compose up -d WARNING: Some networks were defined but are not used by any service: backend Starting pppp1 ... error ERROR: for pppp1 Cannot start service pppp1: error while creating mount source path '/host_mnt/private/var/db/timezone/tz/2021a.1.0/zoneinfo/Asia/Tokyo': mkdir /host_mnt/private/var/db/timeStarting pppp1 ... done ERROR: for pppp1 Cannot start service pppp1: error while creating mount source path '/host_mnt/private/var/db/timezone/tz/2021a.1.0/zoneinfo/Asia/Tokyo': mkdir /host_mnt/private/var/db/timezone/tz/2021a.1.0: operation not permitted ERROR: Encountered errors while bringing up the project. 権限ないんかな・・ 調べてみると /private/var/db/timezone/tz/2021a.2.0 というディレクトリはあるので、 sudo cp -rfp /private/var/db/timezone/tz/2021a.2.0 /private/var/db/timezone/tz/2021a.1.0 としてやったら docker-compose up -dが正常に動いて起動した よくわかっておりません・・
- 投稿日:2021-10-13T17:58:50+09:00
docker【laravel覚書】
dockerでlaravelで再度作業する際ののコンテナ起動をするコマンド ./vendor/bin/sail up -d とすることで再び始められる
- 投稿日:2021-10-13T13:54:35+09:00
colimaでlima+dockerのセットアップを少しシンプルにする
colimaは最小限のセットアップでmacOS上にコンテナランタイムを構築することを目標としているプロジェクトです。 このプロジェクトを利用することでDocker Desktop for Macと似たような感覚でlima+dockerをセットアップすることができます。 インストール homebrewを利用して必要なパッケージをインストールした後にcolimaをインストールします。 # Homebrewのインストール /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # lima、docker、kubectlのインストール brew install lima docker kubectl # colimaのインストール curl -LO https://github.com/abiosoft/colima/releases/download/v0.2.0/colima-amd64 sudo install colima-amd64 /usr/local/bin/colima # インストールが成功しているかどうかの確認 colima version VMとコンテナの起動 VMとコンテナを起動して、debianからecho 'Hello, World!'を実行してみます。 # VMの起動 colima start # コンテナの起動 docker run --rm debian:10 bash -c 'echo Hello, World!' VMはデフォルトでは以下の設定で起動します。 cpu: 2 memory: 2GiB disk: 60GiB 以下のようにオプションを指定すると設定を変更して起動することができます。 # cpu: 1 # memory: 2GiB # disk 10GiB colima start --cpu 1 --memory 2 --disk 10 Volumeマウントの補足 書き込み可能なVolumeに対するlimaのサポートは実験段階1であるため、デフォルトでは読み取り専用のVolumeとしてマウントされます。 書き込みが必要である場合は、VMの起動時にオプションを付けるようにしましょう。 # VMの起動(with DocumentsディレクトリをVMにマウント) colima start --mount $HOME/Documents/:w # 適当な名前の作業用のディレクトリを作成して移動 mkdir $HOME/Documents/colima_volume/ cd $HOME/Documents/colima_volume/ # カレンディレクトリをマウントし、マウントしたディレクトリ内に新たなディレクトリを作成する docker run --rm --volume "$(pwd):/opt" -it debian:10 bash -c "mkdir /opt/sample_dir" # カレントディレクトリの情報を取得 ls # => sample_dirが作成されているはず VMの停止 # VMの停止 colima stop # VMの削除 colima delete > https://github.com/abiosoft/colima/blob/305d01fa83e0024738dfd028920cf72858f6a600/README.md#faq > Colima uses Lima for the VM and Lima's support for writable volumes is still experimental. > https://github.com/lima-vm/lima/blob/544d15d5af3ff3eb144148a36c17bc8f62f92a9c/pkg/limayaml/default.yaml#L43 > Setting writable to true is possible, but untested and dangerous. ↩
- 投稿日:2021-10-13T09:56:33+09:00
Windows11のWSL上でGPUを使おう!(2021/10時点)
1.本記事の目的 Windows11ではWSL上でGPUが使用できるようになりました。(WSLg:Windows Subsystem for Linux GUI、と呼ばれています)WSL側でGPUが使用できるようになったことで、GUIプログラムや機械学習のプログラムをWSL上で動作させることができるようになります。 さっそく、Window11上で環境を構築していきましょう! 2.使用する環境の前提 Windows 11がインストールしてあること NVIDIAのグラフィックボードが搭載されていること もし、Windows11への更新がまだの場合は手動のインストール(参考:)ができますので、そちらをためしてみましょう。残念ながらWindows10秋の更新(21H2)には、グラフィック機能はサポートされない様子ですので、Windows11にアップデートを行ってください。 グラフィックスの機能は当初、WSL2で搭載されるという話でした。Windows10でWSL2はサポートされましたが、グラフィックスの機能は搭載されず、結局、Windows11からのサポートとなったようです。Windows11に移行できないHWも多そうですので、ぜひ、Windows10のWSL2にもサポートしてほしいところです。 3.Windows側でグラフィックドライバーの更新 WSLgを使用するには、Windows側のグラフィックドライバーを更新する必要があります。以下から最新版のグラフィックドライバーをダウンロードします。 3.WSL上にLinuxをインストール Power Shellを管理者権限で起動します。 Ubuntu-20.04 をインストールします。 > wsl --install -d Ubuntu-20.04 4.LinuxにWSL用のCUDAをインストール Linuxを起動し、WSL用のCUDAを入れていきます。ポイントはここです。] ①Linux側でのドライバーは不要 ②WSL用のCUDAを入れる 以下、WSL上でのLinuxでのCUDA 11.4.0の場合のコマンドを示しています。機械学習ユーザー(TensorFlow/PyTorch)の方は必要なバージョンに適宜読み替えてCUDAをインストールお願いします。 $ wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin $ sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600 $ wget https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda-repo-wsl-ubuntu-11-4-local_11.4.0-1_amd64.deb $ sudo dpkg -i cuda-repo-wsl-ubuntu-11-4-local_11.4.0-1_amd64.deb $ sudo apt-key add /var/cuda-repo-wsl-ubuntu-11-4-local/7fa2af80.pub $ sudo apt-get update $ sudo apt-get -y install cuda 通常、CUDAをインストールするとグラフィックドライバ等までインストールされてしまいますが、その依存関係を修正したうえで最後にインストールかけているということでしょうか。 5. GPUが使える仮想環境(Docker)をインストール WSL上のLinuxにDockerもインストールできます。この場合、Dockerの中でもGPUを使うことができます。Windows->WSLのLinux->Docker内のLinuxという3階建て構成です。 この場合、DockerもGPU対応にする必要があります。 まずは素のDocker-CEをインストールします。 $ curl https://get.docker.com | sh つづいて、NVIDIA Container Toolkit(旧名:nvidia-docker2)をインストールします。 $ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) $ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - $ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list $ sudo apt-get update $ sudo apt-get install -y nvidia-docker2 また、ユーザーをdockerグループに追加します。(これをしないとdockerコマンドがユーザーから起動できません) $ sudo usermod -aG docker $USER 最後にWSL上のdockerサービスを再起動します。 $ sudo service docker stop $ sudo service docker start 以上で環境は構築されたと思います。 6. nvidia-smiコマンドのパス なお、nvidia-smiコマンドは、ちょっと変なところにインストールされていてびっくりしました。 パスが通っていないので、最後にパスを通してください。 $ sudo cp /usr/lib/wsl/lib/nvidia-smi /usr/bin $ sudo chmod +x /usr/bin/nvidia-smi 7. 参考 本稿では以下を参考にしています。 https://docs.nvidia.com/cuda/wsl-user-guide/index.html
- 投稿日:2021-10-13T06:02:47+09:00
Docker マウントの理解
Dockerのコンテナの中のファイルをVsCodeで編集したい。 その悩みはバインドマウントをすることで解決します。 [参考記事] https://nyakanishi.work/docker_mount/ https://qiita.com/aki_55p/items/63c47214cab7bcb027e0 バインドマウントとボリュームマウントについて知っておきたいこと バインドマウント コンテナ内の特定のディレクトリやファイルをDockerホストにマウントさせリンクする。 リンクしたディレクトリ内のファイルを修正するとコンテナ内のファイルも修正される。 ※ホストマシン上でVscodeを使ってファイルを修正したい時はこっちを使う。 ボリュームマウント コンテナの外(Dockerホスト上)にストレージ領域(ボリューム)を作成してコンテナ内の特定のディレクトリをリンクさせる。 コンテナを削除してもマウントしたディレクトリ内のデータはボリュームに保持されているため、利用していたボリュームをマウントすることで同じデータを持つコンテナが作れる。1つのボリュームを参照し、複数のコンテナに同じファイルを共有したりすることができる。 -vオプションか--mountオプションでマウントできる ・どちらのオプションを使うかによって書き方が異なる。 ・--mountオプションの方が推奨されている。 -vオプションではタイプミスしてもタイプミスした名前で新しいディレクトリを作成し、コンテナへのマウントを行う。 --mountオプションではホスト側に存在しないディレクトリやファイルを指定するとエラーになる。 よって--mountオプションの方が推奨されている。 マウントの方法の違い バインドマウント #-vオプションの場合 # docker run -itd --name 任意の名前 -p 8080:80 -v ホスト側PATH:コンテナ側PATH イメージ $ docker run -itd --name sample-nginx -p 8080:80 -v /Users/<ユーザ名>/tmp_dir:/usr/share/nginx/html nginx:latest #--mountオプションの場合 # docker run -itd --name 任意の名前 -p 8080:80 --mount type=bind,src=ホスト側PATH,dst=コンテナ側PATH イメージ $ docker run -itd --name sample-nginx -p 8080:80 --mount type=bind,src=/Users/<ユーザ名>/tmp_dir,dst=/usr/share/nginx/html nginx:latest #上下とも同じことをしています ボリュームマウント #ボリュームマウントを使用する際は、事前にボリュームをホストマシン上で作成する。 $ docker volume create sample-volume #-vオプションの場合 # docker run -itd --name 任意の名前 -p 8080:80 -v ボリューム名:コンテナ側PATH イメージ $ docker run -itd --name sample-nginx -p 8080:80 -v sample-volume:/usr/share/nginx/html nginx:latest #--mountオプションの場合 # docker run -itd --name 任意の名前 -p 8080:80 --mount type=volume,src=ボリューム名,dst=コンテナ側PATH イメージ $ docker run -itd --name sample-nginx -p 8080:80 --mount type=volume,src=sample-volume,dst=/usr/share/nginx/html nginx:latest #上下とも同じことをしています
- 投稿日:2021-10-13T01:52:24+09:00
docker環境でvscodeのrubocop拡張が反応しない時の対処法
はじめに vscode の rubocop 拡張 ruby-rubocop を Docker 環境で使用したところかなり詰まったのでその備忘録です。 ホストに rubocop をインストールすれば良いという記事が散見されましたが、根本的な解決になっていません。ここではホストを汚さずコンテナ内の rubocop を参照するような解決方法をあげます。 一人でも多くの方の参考になれば幸いです。 何も設定していない時のエラー ( rubocop 拡張入れただけ) command /Users/horisho/.rbenv/shims/rubocop returns empty output! please check configuration. ホストに rubocop は存在しないので、 docker コンテナに実行先を向けないといけません。 初期設定 こちらのIssueコメントを参考に設定をしました。 rubocop の実行ファイルを作成し、実行環境を Docker コンテナ内に向けている形です。 ディレクトリ構成は以下のようです。 $ tree -L 2 -a . ├── .vscode │ └── settings.json ├── api │ ├── .rubocop.yml │ ├── rubocop │ └── 略 ├── docker-compose.yml └── 略 ファイルの中身は以下のようです。 api/rubocop #!/bin/bash docker-compose exec -T api bundle exec rubocop -c .rubocop.yml "$@" docker-compose.yml version: "3" services: api: build: context: ./api command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" depends_on: - db - redis volumes: - './api:/myapp' ports: - '3010:3000' tty: true stdin_open: true env_file: - .env # 以下略 .vscode/settings.json { "ruby.rubocop.executePath": "./api/" } rubocop 周りの設定ファイルはapiディレクトリに含め、起動コンテナにマウントしている状態です。また、Issueコメントとは異なり、 rubocop 拡張の実行パスを./apiに向けています。 遭遇したエラーメッセージ command ./api/rubocop returns empty output! please check configuration. ./rubocop is not executable 結論(修正方法) rubocop 実行ファイルをdocker-compose.ymlと同階層に配置し、実行パスをIssueコメント同様./に修正すれば良い。 $ tree -L 2 -a . ├── .vscode │ └── settings.json ├── api │ ├── .rubocop.yml │ └── 略 ├── docker-compose.yml ├── rubocop └── 略 .vscode/settings.json { "ruby.rubocop.executePath": "./" } 原因 rubocop 実行ファイル(/apiディレクトリ)で docker-compose コマンドを実行しています。当然 docker-compose は同階層の docker-compose.yml を参照しにいきますが、 /api ディレクトリには存在せず、ルートディレクトリに存在します。そのため、コンテナが見つからずエラーというわけです。 注意点 rubocop実行ファイルでdocker-compose exec api ...とexecコマンドを実行しているため、コンテナがすでに立ち上がっていないとエラーで怒られます。
- 投稿日:2021-10-13T00:39:49+09:00
Docker + VSCode上に機械学習/深層学習 + Pythonの環境構築する方法(コード整形, lint, 補完あり / Jupyter Notebookのプロセスなし)
ネット上の記事を探していても以下のことを達成する環境構築に触れている記事がなかったのでメモとして残しておきます。 VSCode = Docker の動作環境にしたい 逆にVSCode以外にリソースを割きたくない Jupyter LabやJupyter Notebookのプロセスを立ち上げたくない VSCodeのコード実行機能を使いたい Pythonの補完を最大限使いたい Jupyter Notebookブラウザで使うと補完弱すぎて泣きそうになるので Pythonの静的型チェックやlinter, formatterを良い感じに使いたい Pythonのコード汚くなりがちなので Docker Imageで使える機械学習/深層学習ライブラリを選択したい sklearn用のimageやtensorflow用のimageなど TL;DR 以下のGitHub repositoryをCloneしてVSCodeで開けばOKです。 (余計なファイルも sample.py しか入ってません) $ git clone git@github.com:shierote/python-ml-on-docker-vscode.git $ cd python-ml-on-docker-vscode $ code . 0-1. VSCodeの環境構築 VSCodeのインストール 0-2. Dockerの環境構築 Docker Desktopのインストール 1. VSCodeに Remote - Containers Extensionを入れる VSCodeへ拡張機能を入れる方法 Remote - Containers 2. VSCodeでDockerを使う設定 Docker $ cd /path/to/proj $ touch Dockerfile $ touch docker-compose.yml 以下は anaconda(numpyとかpandasとかがあらかじめ入っているやつ)のimageを利用しています。 別の環境を使いたい場合は後述しています。 Dockerfile FROM continuumio/anaconda3 RUN python -m pip install -U flake8 autopep8 ipykernel docker-compose.yml version: "3" services: dev: init: true build: . volumes: - .:/workspace:cached command: /bin/sh -c "while sleep 1000; do :; done" Remote - Containers $ cd /path/to/proj $ mkdir .devcontainer $ touch .devcontainer/devcontainer.json devcontainer.json { "name": "好きな名前", "dockerComposeFile": [ "../docker-compose.yml", ], "service": "dev", "workspaceFolder": "/workspace", "settings": {}, "extensions": [ "ms-python.python", "streetsidesoftware.code-spell-checker", "oderwat.indent-rainbow" ] } VSCode $ cd /path/to/proj $ mkdir .vscode $ touch .vscode/settings.json setting.json { "python.linting.enabled": true, "python.linting.flake8Enabled": true, "python.linting.flake8Args": [ "--ignore=E111, E114, E402, E501" ], "python.formatting.provider": "autopep8", "python.formatting.autopep8Args": [ "--indent-size=2", "--ignore=E111, E114, E402, E501" ], "python.pythonPath": "/home/ubuntu/python3-venv/bin/python", "python.languageServer": "Pylance", "[python]": { "editor.formatOnSave": true, }, "cSpell.words": [], } 3. VSCodeでDockerを使ってみる プロジェクトのディレクトリをVSCodeで開きます。 すると "Reopen in Container" とポップアップがでるのでクリックします。 でなかった場合は 左下の > <のような青いマークをクリックして "Reopen in Container" をクリックします。 これで自動的にContainerのbuildが始まります。 buildが終われば(左下が Dev Container: .. のような表示になれば) Containerの環境でVSCodeが使えます!! ちなみに図の # %% というsyntaxで .py ファイルをJupyterのように各セル単位で実行できます。 例は sample.py 参照してみてください。 そちらの解説は こちらの記事 に詳しく書いてあります。 【画像で説明】VSCodeをJupyter化する ~.pyファイルをセル単位で実行~ - Qiita flake8 や autopep8 をインストールして、.vscode/settings.json で設定しているので、Pythonコードが綺麗に整形されたり、使われてない変数にWarningが出せると思います!! 使いたくなければ pip install せず、.vscode/settings.json の設定も消してください。 4. カスタマイズするには? pip install したい場合 上図の TERMINAL でpip commandを実行すればOKです。 /workspace# pip install numpy /workspace# pip install pandas anacondaを使いたい、scikit-learnを使いたいなどの環境を選びたい場合 上のDockerfileのImageを変えれば良いです。 あるいは RUN でエラーにならないなら、pip installでも可能です。 python 3.9.7を使いたい場合 Dockerfile FROM python:3.9.7 RUN python -m pip install -U flake8 autopep8 ipykernel python 3.6.15 + alpineを使いたい場合 Dockerfile FROM python:3.6.15-alpine RUN python -m pip install -U flake8 autopep8 ipykernel tensorflow, pytorchを m1 macbook ホストで使いたい場合 Dockerfile FROM sonoisa/deep-learning-coding:pytorch1.6.0_tensorflow2.3.0 RUN python -m pip install -U flake8 autopep8 ipykernel こちらのimageは以下の記事を参考に使わせていただいてます。 M1搭載Macでも環境を汚さずにDeep Learningしたい! - Qiita その他、こういう使い方をしたいなどがあればコメントしてください。