【外付けSSD】MacでDockerイメージを外へ
概要
最近、容量の空きがあと僅かだから整理しろとかいうバッジ通知が頻繁に表示される。
他にも、容量不足だから強制終了させるアプリを選べとかもよく出てくる。
今まではなんとかやれていたけど、どうしても必要なものがあって無理になったから外付けSSDを使ってみることにした。
購入物
適当に価格.comで一位だったやつを買った。
評判が一番いいのはSanDiskのエクストリームとかいうやつっぽい。
繋げてみる
届いたので早速PCに繋いでみる。
「USB外部物理ボリューム」とならない場合は、一度「消去」をやってからまた繋ぎ直すといいらしい。
Docker Imageの保存先を移そう
なんか色々とdockerでやるようになってから容量がイカれ始めた気がするので、まずはそれを解消するために、イメージの保存場所をSSD内に変更する。
ただ、Docker imageが全部消えてしまうのでそこはやり直さないといけない。
SSD内にdocker_imagesフォルダを作成して、Docker Imageの保存先を変更する。
Apply & Restartを押してしばらく待つと...
終わり
めでたく容量を空けることができました。
イメージやコンテナは全部消えてしまうので、また作り直さないといけないけどdockerならすぐにできるね。
はてなブログ(無料版)でGoogleアドセンスを利用してみたい
概要
いつも月間PVが10~20とかだったのに最近は300くらいあったりするし、広告とかやってみるか。
審査があるけど通るかは知らない。とりあえず審査に出すところまでをやってみる。
Googleアナリティクスは結構前に入れてみたが、色々みれてまあまあ面白いかったしアドセンスも面白いはず。
公式ヘルプ
公式は正義だ。
審査のコツとか申請してみたとかあるが、公式のヘルプページがあるからそれに従う。
プライバシーポリシー
このページはCookieを利用します的なやつだ。
適当に検索してよさそうなやつをコピペして作った。
無料ユーザーなので推奨されてるサイドバーへのリンク追加だけやった。
Googleアドセンス
公式ヘルプがとても丁寧です。
公式以上のものを書けないので補足だけ書きます。
アカウント取得
ページ右上のご利用開始をクリック。
サイトのURLは無料版なら「xxx.hatenablog.com」ですかね。僕は「taopo.hatenablog.com」です。
審査の申請
進むとGoogleアドセンスのホームが表示されます。
「お支払い」と「サイト」が必須になっているので入力します。
終わり
アドセンスの登録はそんなにやることなくて簡単だった。
調べながら1時間くらいで終わった。
申請通ったら面白いけど、1円でも出たら確定申告することが増えて面倒そうだからすぐやめるかも。
追記: 2日待ったら審査通ってました。
プライバシーポリシー
プライバシーポリシー
個人情報の利用目的
当ブログでは、お問い合わせや記事へのコメントの際、名前やメールアドレス等の個人情報を入力いただく場合がございます。
取得した個人情報は、お問い合わせに対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、これらの目的以外では利用いたしません。
広告について
当ブログでは、第三者配信の広告サービス(Googleアドセンス)を利用しており、ユーザーの興味に応じた商品やサービスの広告を表示するため、Cookieを使用しております。
Cookieを使用することで当サイトはお客様のコンピュータを識別できるようになりますが、お客様個人を特定できるものではありません。
Cookieを無効にする方法やGoogleアドセンスに関する詳細は「広告 – ポリシーと規約 – Google」をご確認ください。
アクセス解析ツールについて
当ブログでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しております。トラフィックデータは匿名で収集されており、個人を特定するものではありません。
お問い合わせについて
お問い合わせは当ブログ著者のTwitterアカウントへのDMやリプライをご利用ください。
【selenium + headless-chrome + docker】動かしてみる
概要
webのスクレイピングなどの自動操作でchromeをseleniumで動かそうとしたけど、chromeのバージョンに合わせてドライバーを選ばないといけないからPCによって動かなかったりchromeの更新で動かなかくなったりする。
Dockerを使えばイメージを作成した時から環境が変わることもなくて、そういう面倒なことを解消できそうなのでやってみることにした。
サーバや仮想環境内でchromeとか動かせるのかと思っていたけど、調べてみるとheadless-chromeというのでブラウザーのUIを出さずに実行できるらしい。
やったこと
以下の記事を参考に(コピペ)して起動したdockerのコンテナ内でchromeを実行する。
記事ではubuntu16.04だったが18.04でやった。
あと、いろいろエラーが出たので対応した。
Docker Desktop for Macをインストール
チップがintel製かApple製かで間違えないように。
「このMacについて」のプロセッサを見るとintelとか書いてある。
最近のだとApple製のM1チップというのが使われているらしい。
Install Docker Desktop on Mac | Docker Documentation
Dockerfileを作成(エラー対応)
適当なディレクトリを作成してDockerfileを記述。
まずは、上であげた参考記事のDockerfileをそのまま使う
From ubuntu18.0.4 # ... 略 ... RUN groupadd -g 1000 developer && \ useradd -g developer -G sudo -m -s /bin/bash 作成したいユーザー名 && \ echo '作成したいユーザー名:そのパスワード' | chpasswd # ... 略 ... User 作成したいユーザー名 # ... 略 ...
dockerのイメージを作成するとエラーが出た。
docker build -t 任意のイメージ名 .
どうやらpythonのdistutilsというモジュールがないらしいのでDockerfileに追記。
# apt-get update && \ の下 apt-get install -y python3 curl python3-distutils && \
再度docker buildをするとまたエラーが出た。
どうやらwgetというのがないらしいのでDockerfileに追記。
# apt-get update && \ の下 apt-get install -y wget && \
再度docker buildをするとまたエラーが出た。
どうやらunzipというのがないらしいのでDockerfileに追記。
# apt-get update && \ の下 apt-get install -y unzip && \
再度docker buildをするとまたエラーが出た。
どうやらchromeをインストールするのに必要なパッケージが足りていないらしいのでDockerfileに追記。
# touch /etc/default/google-chrome && \ の上 apt-get install -y libatk-bridge2.2-0 libatspi2.2-0 libgbm1 libgtk-3-0 libxkbcommon0 && \
再度docker buildをするとイメージ生成が成功した。
最終的なDockerfile。不要なパッケージのインストールもあるかもしれない
FROM ubuntu:18.04 # Install. RUN \ apt-get update && \ apt-get install -y wget && \ apt-get install -y unzip && \ apt-get install -y python3 curl python3-distutils && \ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \ python3 get-pip.py && \ pip install --upgrade pip && \ pip install selenium && \ pip install beautifulsoup4 && \ apt-get install -y libfontconfig && \ mkdir -p /home/root/src && cd $_ && \ wget -q -O /tmp/chromedriver.zip http://chromedriver.storage.googleapis.com/`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`/chromedriver_linux64.zip && \ unzip /tmp/chromedriver.zip chromedriver -d /usr/local/bin/ && \ apt-get install -y libappindicator1 fonts-liberation libasound2 libnspr4 libnss3 libxss1 lsb-release xdg-utils && \ apt-get install -y libatk-bridge2.0-0 libatspi2.0-0 libgbm1 libgtk-3-0 libxkbcommon0 && \ touch /etc/default/google-chrome && \ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \ dpkg -i google-chrome-stable_current_amd64.deb && \ apt-get install -y fonts-migmix RUN apt-get install -y sudo # add sudo user RUN groupadd -g 1000 developer && \ useradd -g developer -G sudo -m -s /bin/bash 作成したいユーザー名 && \ echo '作成したいユーザー名:作成したいパスワード' | chpasswd RUN echo 'Defaults visiblepw' >> /etc/sudoers RUN echo '作成したいユーザー名 ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers # Set japanese RUN apt-get install -y language-pack-ja-base language-pack-ja RUN locale-gen ja_JP.UTF-8 # Set environment variables. ENV LANG ja_JP.UTF-8 ENV PYTHONIOENCODIND utf_8 USER 作成したいユーザー名 # Define default command. CMD ["/bin/bash"]
コンテナ内で実行するpythonファイルを作成
適当にmain.pyというのを作る。
# main.py from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_argument('--headless') options.add_argument('--disable-gpu') driver = webdriver.Chrome(chrome_options=options) driver.get('https://www.google.com') print(driver.title)
これをdockerコンテナ内で実行するとhttps://www.google.comのタイトルタグ、つまりGoogleと表示されるはず。
さっき作成したイメージからコンテナを起動。
docker run --privileged -v "Dockerfileを作成したディレクトリのパス:/home/Dockerfileに記述した作成したいユーザー名" -ti 作成したイメージの名前
Dockerfileで作成したユーザー(今回はotam)があって、-vで指定したホスト側のディレクトリがボリュームされている。
そして、pythonファイルを実行するとGoogleと表示されるので正常にselenium + headless-chromeが動作していることがわかる。
終わりに
【EC2 + nginx + laravel】nginxとphp-fpmの設定
概要
EC2インスタンス上にnginxとphpを入れてgitに上がっているlaravelプロジェクトをブラウザで確認したい。
EC2はAmazon Linux 2を使う。
なんかhtmlは見れるけどphpは見れないみたいなこともあったから書き残しておく。(→ここ)
やること
- nginxをインストールしてnginx.confを編集
- laravelのサーバ要件を満たすようにphp及びphp拡張をインストール
- php-fpm.d/www.confを編集
- composerをインストール
- gitをインストール
- laravelの.env編集とマイグレーション
- nginxとphp-fpmを起動
- ブラウザで確認
はじめに
いつもの。rootユーザーに切り替えてやる。
sudo su - yum update
nginxをインストールしてnginx.confを編集
インストール。
amazon-linux-extras install nginx1
nginx.confを編集。
/etc/nginx/nginx.conffastcgi_passでphp-fpm.sockとしていたらhtmlにアクセスできるのにphpだとサーバーエラーとなった。
確認したら/run/php-fpmにはwww.sockがあるだけだったのでそれに合わせたらちゃんとphpも見れるようになった。
server { # ...略... root /var/www/laravelのプロジェクト/public; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass unix:/run/php-fpm/www.sock; # php-fpmディレクトリにあるsockに合わせて fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } error_page 404 /404.html; location = /40x.html { root /usr/share/nginx/html; # 40x.htmlがあるディレクトリのパス(上の方のrootを上書き) } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; # 50x.htmlがあるディレクトリのパス(上の方のrootを上書き) } # ...略... }
laravelのサーバ要件を満たすようにphp及びphp拡張をインストール
インストール。
amazon-linux-extras install php7.4
php拡張をインストール。
# 必要なphp拡張を確認(https://runebook.dev/ja/docs/laravel/docs/8.x/installation#server-requirements) php -m | grep -e bcmath -e PDO -e ctype -e fileinfo -e json -e mbstring -e openssl -e pdo -e tokenizer -e ^xml$ # インストール yum install php-bcmath php-mbstring php-xml -y
php-fpm.d/www.confを編集
以下の部分を探して編集。
user = nginx group = nginx location.owner = nginx location.group = nginx location.mode = 0660
composerをインストール
以下のsudo mv composer.phar /usr/local/bin/composerまでやればいい。
gitをインストール
httpでもsshでも好きなようにgitを使えばいい。個人的にはsshの方が好き。
yum install git cd /var/www git clone laravelプロジェクトをあげたgitリポジトリ
laravelの.env編集とマイグレーション
DB設定を.envに記述する。DBほにゃららを設定する。EC2使ってるなら多分RDSだと思う。
マイグレーション。(あれば)
php artisan migrate
nginxとphp-fpmを起動
起動。
systemctl start nginx systemctl start php-fpm
インスタンスを停止して起動した時に自動でnginxとphp-fpmが起動するようにする。
systemctl enable nginx systemctl enable php-fpm
実行状態を確認。
systemctl status nginx systemctl status php-fpm
ブラウザで確認
ブラウザでIPにアクセスすればLaravelプロジェクトのpublic/index.phpにアクセスされるので確認できる。
【AWS EC2】ssh接続ユーザーの作成とec2-userの削除
概要
毎回、インスタンスを作成するたびに調べてやっていたのでもう調べないという決意を込めての記録
デフォルトでec2-userというユーザーが作成されているが、セキュリティを強化するために別にユーザーを作成してデフォルトのは消す。
よくある初回ログイン時に初期パスワードを変更するみたいなノリ。
手順
手順というほど大したものはない。
- ec2-userでssh接続してrootユーザーに切り替え
- ユーザー作成と権限設定
- ~/.sshディレクトリをコピーして権限設定
- 作成したユーザーで再度ssh接続
- rootユーザーに切り替えてec2-userを削除
ユーザー作成
# ssh接続 ssh -i "keypairのパス" ec2-user@ec2インスタンスのip # rootユーザーに切り替え sudo su - # ユーザー作成 adduser new-user # ユーザーのパスワード設定(このユーザーでrootユーザーに切り替えるときに使う) passwd new-user # root権限をもつグループに追加 usermod -aG wheel new-user
確認
# new-userディレクトリが作成されている ls /home # new-userがwheelグループに追加されている less /etc/group | grep wheel
sshディレクトリ設定
# ec2-userの.sshをnew-userへコピー cp -r /home/ec2-user/.ssh /home/new-user # 所有者を変更 chown -r new-user:new-user /home/new-user/.ssh # パーミッションを変更 chmod 700 /home/new-user/.ssh chmod 600 /home/new-user/.ssh/authorized_keys
確認
# sshディレクトリがdrwx------、authorized_keysが-rw------- ls -la /home/new-user/.ssh
ec2-user削除
# ssh接続 ssh -i "keypairのパス" new-user@ec2インスタンスのip # rootユーザーに切り替え(passwdで設定したパスワード) sudo su - # ec2-user削除 deluser ec2-user
確認
# ec2-userが削除されている ls /home # ec2-userでssh接続できない ssh -i "keypairのパス" ec2-user@ec2インスタンスのip
終わり
大したことではないけどよくやるからちゃんと覚えておこう。
他に作業ユーザー作るときはちゃんとssh-keygenして公開鍵をauthorized_keysにコピーして使おう。
【WSL2+Docker+GPU】機械学習のために環境構築を~仮想環境編
あらすじ
機械学習の勉強のためにいろいろな環境を作れるようにしようということで、前回までに最新のwindows OS ビルドやWSLをインストールしてきた。
今回はDockerを使って仮想環境をつくる。
今回の登場物とそのバージョン
流れ
windows作業編:1~3(前回)
仮想環境編 :4~5(今回)
- windows10 build 20150(以上)をインストール
- NVIDIA Drivers for CUDA on WSL
- CUDA Toolkitをインストール
- Docker Desktop for Windowsをインストール
- NGCコンテナを動かす
Docker Desktop for Windowsをインストール
macではよく使ったけどwindowsは初めてやる。
インストール後、再起動すると立ち上がるのでチュートリアルとかをやろう。
Dockerコンテナはいろいろインストールして環境構築済みのPCとでも思っておけばいいかもしれない。ミスったと思ったら簡単に消せるところがいいね。
Dockerイメージはコンテナの設計書と考えておけばいい。
linux上にdockerやCUDAをインストールしてもいい
Docker Desktopがあるのでやらなくてもいいけど、別にもやり方があるというだけ。
正直、dockerを学びたいわけではないのでCUIとGUIでやりやすい方を選ぶといい。
なのでやりかたは省略。
Dockerの設定
日本語にしない方が分かりやすいと思う。
最初から設定がほとんどされていたからあまりすることは無かった。
NGC(NVIDIA GPU Cloud)コンテナを動かす
カタログサイトを見るとなんだかたくさん種類があるが、おススメは左上の法則よりPyTorchを選んでみる。その隣のTensorFlowが一番人気な気がするけど。
ContainerとかCollectionとか分類もいくつかあるけど基本コンテナしか使わなそう。
とりあえず、先にフォルダだけ作っておく。
wslを起動すると/mnt/c/Users/userとかいう場所にいるが、/mnt配下でdockerするのが良くないとのことなので、適当に/home/user/pythorchというフォルダを作った。
適当にtest.txtみたいなファイルも作って/pytorch下に置いておくと後で確認しやすい。
Best practices
To get the best out of the file system performance when build-mounting files, we recommend strong source code and other data that is bind-mounted into Linux containers (i.e., with
docker run -v <host-path>:<container-path>
) in the Linux file system, rather than the Windows file system. You can also refer to the from recommendation Microsoft.・ Linux containers only receive file change events (“inotify events”) if the original files are stored in the Linux filesystem. For example, some web development workflows rely on inotify events for automatic reloading when files have changed.
・ Performance is much higher when files are bind-mounted from the Linux filesystem, rather than remoted from the Windows host. Therefore avoid
docker run -v /mnt/c/users:/users
(where/mnt/c
is mounted from Windows).・ Instead, from a Linux shell use a command like
docker run -v ~/my-project:/sources <my-image>
where~
is expanded by the Linux shell to$HOME
.If you have concerns about the size of the docker-desktop-data VHDX, or need to change it, take a look at the WSL tooling built into Windows.
If you have concerns about CPU or memory usage, you can configure limits on the memory, CPU, Swap size allocated to the WSL 2 utility VM.
To avoid any potential conflicts with using WSL 2 on Docker Desktop, you must uninstall any previous versions of Docker Engine and CLI installed directly through Linux distributions before installing Docker Desktop.
コマンドをコピペして実行。
待ってる時間にPyTorchの使い方とかを調べておくといい。
※Docker Desktopを起動した状態でdockerコマンドを実行すること。起動してないとdockerコマンドはありませんとエラーになる。
docker pull nvcr.io/nvidia/pytorch:21.06-py3 # ... # 実行結果 Status: Downloaded newer image for nvcr.io/nvidia/pytorch:21.06-py3 nvcr.io/nvidia/pytorch:21.06-py3
コピペと変えた部分
- local_dir:さっき作ったpytorchフォルダを指定
- container_dir:/workspaceが作業ディレクトリっぽかったので、その配下にpytorchを置く。(-v は自分のPCと仮想環境のどのフォルダをコピーするか的なノリ)
- --name pytorch:コンテナに名前を付ける。なくてもいいけど見やすくなる。
- 21.06:選んだバージョン
docker run --gpus all -it --rm -v /home/user/pytorch:/workspace/pytorch --name pytorch nvcr.io/nvidia/pytorch:21.06-py3
自分のPC側でtest.txtを編集保存すると、コンテナ側のtest.txtに編集が反映される。
また、その逆も同様。
今後はホスト側で実装して、それをコンテナ側で実行することでGPUで処理を行うことができる。なので、一応これで環境構築としては完了。
※コンテナ内に全てあるので自分のPCにpythonをインストールする必要すらない。
ただ、エディターでwarningは表示されるかも。
おわり
これで機械学習のための環境構築ができたと思う。というよりもdockerを使うための準備だったと言えそう。
バージョン管理や依存関係に悩まされることなくやっていけそう。飽きてもdockerのcontaier, imageを削除したらきれいさっぱり元通りにできる。
仮想化っていいね。
おまけ
PytorchにしろTensorflowにしろ、使い方はそれぞれの公式チュートリアルをやって覚えようと思う。
当面は買った本の写経をして、そのあとにそれをPytorchで書き換えるようにしよ。
先はまだ長そう。