- 投稿日:2022-03-23T23:12:58+09:00
dockerコマンドメモ
Dockerのコマンドメモ イメージの取得 docker pull IMAGE イメージからコンテナ作成 docker create [OPTIONS] IMAGE名 -h: host名 -name: コンテナ名 コンテナ起動 docker start [OPTIONS] コンテナ イメージ取得+コンテナ作成+起動 docker run [OPTIONS] コンテナ COMMAND * 起動しているコンテナに別pidで接続 docker exec [OPTIONS] コンテナ名 コマンド docker exec -it COMTAINER /bin/bash -it: /bin/bashと組み合わせると、shellが出てくる(お約束)
- 投稿日:2022-03-23T22:55:44+09:00
Docker公式mysqlコンテナで日本語入力を可能にする方法
何が起きたか? docker公式mysqlコンテナを使用していたのですが、添付画像のように mysqlコンテナ内に入って、bashで日本語入力してエンターを押すと 入力した日本語が消える問題が発生しました。 ※半角英数字は入力、実行ともに出来る。 原因 原因としては下記参考URLにもありますが、 ・databaseの文字コードが対応していない ・日本語環境を追加していない の二つでした。 参考URL↓ https://teratail.com/questions/268253 解決方法 まず、docker-compose.ymlしか定義していない場合は、 db用のDockerfileを作成する必要があります。 下記が実際に解決したDokcerfile定義になります。 省力している箇所もありますが各プロジェクトに合わせて、 随時修正して下さい。 docker-compose.yml db: image: mysql:8.0 container_name: sample ###### 省略 ###### # 以下追加 command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci # ここまで 続いてDockerfile FROM mysql:8.0 COPY my.cnf /etc/mysql/conf.d/my.cnf # 日本語環境を追加 RUN apt-get update && apt-get install -y locales \ && sed -i -e 's/# \(ja_JP.UTF-8\)/\1/' /etc/locale.gen \ && locale-gen \ && update-locale LANG=ja_JP.UTF-8 # ここまで ENV LC_ALL ja_JP.UTF-8 ENV TZ Asia/Tokyo ENV LANG=ja_JP.UTF-8 CMD ["mysqld"] EXPOSE 3306 以上の設定でdocker公式mysqlコンテナでも、 日本語が扱えるようになっているはずです! これでやっと日本語のinsertが実行できる。。。 今やDockerは必須スキルになりつつあるなぁ〜
- 投稿日:2022-03-23T22:55:44+09:00
Docker mysqlコンテナで日本語入力できない
何が起きたか? docker公式mysqlコンテナを使用していたのですが、添付画像のように mysqlコンテナ内に入って、bashで日本語入力してエンターを押すと 入力した日本語が消える問題が発生しました。 ※半角英数字は入力、実行ともに出来る。 原因 原因としては下記参考URLにもありますが、 ・databaseの文字コードが対応していない ・日本語環境を追加していない の二つでした。 参考URL↓ https://teratail.com/questions/268253 解決方法 まず、docker-compose.ymlしか定義していない場合は、 db用のDockerfileを作成する必要があります。 下記が実際に解決したDokcerfile定義になります。 省力している箇所もありますが各プロジェクトに合わせて、 随時修正して下さい。 docker-compose.yml db: image: mysql:8.0 container_name: sample ###### 省略 ###### # 以下追加 command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci # ここまで 続いてDockerfile FROM mysql:8.0 COPY my.cnf /etc/mysql/conf.d/my.cnf # 日本語環境を追加 RUN apt-get update && apt-get install -y locales \ && sed -i -e 's/# \(ja_JP.UTF-8\)/\1/' /etc/locale.gen \ && locale-gen \ && update-locale LANG=ja_JP.UTF-8 # ここまで ENV LC_ALL ja_JP.UTF-8 ENV TZ Asia/Tokyo ENV LANG=ja_JP.UTF-8 CMD ["mysqld"] EXPOSE 3306 以上の設定でdocker公式mysqlコンテナでも、 日本語が扱えるようになっているはずです! これでやっと日本語のinsertが実行できる。。。 今やDockerは必須スキルになりつつあるなぁ〜
- 投稿日:2022-03-23T22:44:14+09:00
Dockerで、Rails 6系とMySQL8の開発環境の構築(OS : mac)
Rails 6系とMySQL8 で開発環境を作る docker-compose upでrails serverを起動できるようにすること ホストのファイルシステムとコンテナのファイルシステムを同期させること 勉強中の初学者です。誤りなどのご指摘いただければ嬉しいです! 流れ 各種ファイルの作成 イメージのBuild rails new でアプリ作成 -> Gemfileが上書きされる 新しいGemfileでイメージの再ビルド database.yml の設定,DB生成 コンテナ起動&サーバ起動 確認 各種ファイル作成 下記を作成します。 dockerfile docker-compose.yml Gemfile Gemfile.lock $ mkdir docker_rail_mysql $ cd docker_rail_mysql dockerfile作成 FROM ruby:2.6 RUN apt-get update && apt-get install -y \ build-essential \ libpq-dev \ nodejs RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && apt-get install -y nodejs RUN npm install --global yarn WORKDIR /docker_rail_mysql COPY Gemfile Gemfile.lock /docker_rail_mysql/ RUN bundle install RUN rm -f tmp/pids/server.pid CMD ["rails","s","-b","0.0.0.0"] docker-compose.yml作成 docker-compose.yml version: '3' volumes: db-data: services: web: build: . ports: - '3000:3000' container_name: 'web' volumes: - '.:/docker_rail_mysql' tty: true stdin_open: true depends_on: - db db: image: mysql:8 container_name: 'db_mysql' volumes: - 'db-data:/var/lib/mysql' environment: - 'MYSQL_ROOT_PASSWORD=password' - 'TZ=Asia/Tokyo' ports: - 3306:3306 Gemfile作成 source 'https://rubygems.org' gem 'rails', '~>6' Gemfile.lockを作成 Gemfile.lockの内容はありません。 コマンド まずは、docker-composeで、imageとcontainerを作ります。 $ docker-compose run web bash コンテナー上でのコマンド rails newコマンドで、Gemfileは上書きされます。 $ rails new . -force --database=mysql --webpacker $ exit config/database.yml 変更 default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: <%= ENV.fetch("MYSQL_USERNAME", "root") %> password: <%= ENV.fetch("MYSQL_PASSWORD", "password") %> host: <%= ENV.fetch("MYSQL_HOST", "db") %> development: <<: *default database: docker_development test: <<: *default database: docker_test production: <<: *default database: docker_homework_production username: root password: <%= ENV['DOCKER_DATABASE_PASSWORD'] %> コマンド 貧弱なGemfileで作られた最初のimageは削除して、 新しいGemfileでもう1回buildしましょう。 $ docker-compose down $ docker-compose up --build -d $ docker-compose run web rails db:create $ docker-compose up host側のWEBブラウザで確認 http://localhost:3000/ host側のdocker-homeworkフォルダの内容をgithubにpushしておくと、 下記のコマンドで、どこでも同じ環境構築ができるようになります。 $ git clone -b [ブランチ名] https://github.com/〜 $ cd docker $ docker-compose run web rails db:create $ docker-compose up 最後に これで構築完了です。 かなり時間がかかりましたが、無数のエラーを出しながら、dockerにもっと慣れてきたと思います。 参考になったら嬉しいです。 参考にしたサイト https://qiita.com/nsy_13/items/9fbc929f173984c30b5d https://qiita.com/A-Kira/items/f401aea261693c395966 https://qiita.com/ape/items/885e97ed1978f972d266 https://zenn.dev/yuma_ito_bd/scraps/1adb89dfe0661c
- 投稿日:2022-03-23T21:03:24+09:00
自宅のNASにDocker環境を用意してスマートホーム化 #1
スマートホーム化したいけどラズパイ導入とかちょっと面倒。。 ということで自宅にあったNASにDocker環境を構築して、NodeREDコンテナを作成しました。 必要なもの QNAPのNAS (自宅のはエントリモデルのTS-230) QTS環境 (管理者権限, バージョンはちょいちょい変わるので出来なかったらスミマセン) 手順 QTS環境にログイン ContainerStationアプリをインストール NodeREDイメージをインストール NodeREDを開く QTS環境にログイン 私の画面はこんな感じです。 ContainerStationアプリをインストール なければAppCenterからインストールします インストールするとNASのルートに"Container"フォルダが作成されます ↓ NodeREDイメージをインストール "Create"タブから"nodered"を検索してイメージのインストールを行います。 バージョンはlatestでよいでしょう。(再現性薄くてスミマセン) その他設定も一旦デフォルトで問題ないです。 インストールすると、Overviewに追加したイメージのコンテナが起動します。(図にはmysqlがいますが気にせず。。) NodeREDを開く ブラウザで[NASのIP]:[ポート番号1880]でアクセスすると開けます。 これでお手軽ノンコードプログラミング!! → NEXT: SwitchBotを実行
- 投稿日:2022-03-23T17:14:52+09:00
【Docker】WSL 2 installation is incomplete.の対象方法
環境 windows11 症状 Docker desktopをインストールしたところ、下記のエラーが表示されました。 翻訳すると、「WSL2のインストールが不完全です」と言われていました。 拡大 urlを発火させると、ここに飛びました。 解決方法 下記からLinuxカーネル更新プログラムをインストールします。 Linuxアップデートセットアップウィザードが表示されるので「Next」を押下。 そのまま、「finish」を押下して完了させます。 そのあと、さっきのダイアログに戻って「Restart」を押下します。 すると、エラーが解消されました! 参考
- 投稿日:2022-03-23T15:40:50+09:00
Jekyllをdockerで使ってみました
今までVirtualBoxで仮想環境を作り、LAMPなどを構築していました。 仮想化の勉強をしている中でdockerは、VirtualBoxよりも早いと知りました。 そのためMacにdockerをインストールして、環境を作りました。 そして静的なウェブサイトを作るジェネレーターとして関心があったJekyllを、dockerで試してみました。 ちゃんとdockerに、Jekyllがありました。 今回は、下記の記事を参考にしました。 環境を作る中で、備忘録で書き加えます。 指定のディレクトリを作るときは、親フォルダの下に mkdir -p ./app/_site/ と作ると一度にディレクトリを作ることが出来ます。 私は、htmlappとして、親フォルダを作りました。 このフォルダの中に、docker-compose.ymlを作りました。 ディレクトリは、このような形になります。 これから変換する拡張子mdファイルは、 ./app/_site/ に配置しましょう。 先に docker-compose up を実行してから、変換したいファイルを配置しましょう。 感想 Jekyllを使うための環境を作らなくても良いので、手軽にJekyllを使うことができると思いました。 静的なサイトを作る案件が出たときに、このコンテナーを実行して生産性の向上を図りたいと思います。
- 投稿日:2022-03-23T14:32:24+09:00
TVを録画するためRaspberry Pi4にdocker-mirakurun-epgstationをインストールする
録画サーバを作ろうと思った経緯 みなさんこんにちは。まずは録画サーバを作ろうと思った経緯を話したいと思います。 私自身はそんなにテレビを見ませんw が、以下の理由から作ろうと思いました。 ・サーバの知識があまりないから勉強になると思った ・子供や嫁さんがテレビ好きのためいつでも見れるようにしてあげたいと思った ・家にあるレコーダだと出先に見れない&古くなってきたのでいつ壊れてもおかしくない(15年選手) 正直3つ目の理由がメインで車で出かけた時に見れたらいいなーって気持ちで作成しました。 なぜラズパイ?ってのは手元にあったサーバになりそうなものがラズパイだけだったからです。 docker-mirakurun-epgstation とは l3tnun様が公開しているEPGstationという録画管理システム?のDocker版です。 https://github.com/l3tnun/docker-mirakurun-epgstation Docker版じゃないものもありますが、個人的にスクラップビルド(試行錯誤)しやすいDocker版を選びました。 ※詳細設定等はDocker版じゃないものも一緒に見たほうが理解しやすいと思います。 ちなみに私の認識だと以下の区分けだと思っています。 なのでmirakurunさえ入っていればコマンドベースでの録画は可能です。 TV:mirakurun レコーダ:EPGstation 一点重要なことがこの記事もそうですが、github上には公式版を改造した亜種版がいくつかあります。 各管理者が各々更新しているものもありますが、公式版に比べると陳腐化しやすいので 個人的には公式版を使用したほうがいいと思います。 (私は最初亜種版を使用し沼にハマりました、、、決して亜種版が悪いというわけではないですが、、、) 環境 物品 品名 サーバ Raspberry Pi4 4GB チューナ PLEX Q1UD カードリーダ ACR39-NTTcom B-cASカード 地デジ専用 SDカード Samsung microSDカード64GB EVO Plus microSDXC UHS-I U1 充電ケーブル Anker PowerLine III USB-C & USB-C 2.0ケーブル 充電器 Anker PowerPort Atom III (Two Ports) (PD対応 60W 2ポートUSB-A & USB-C 急速充電器) テレビアンテナケーブル ノイズフィルタ対策済みのやつがいいかも アッテネータ Q1UDが内部で増幅してるっぽいので信号レベルが問題なければ不要 OS(32bit-armv7l) No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 11 (bullseye) Release: 11 Codename: bullseye 手順 使えないコマンドが合った場合は適宜パッケージのインストールが必要。 SDカードにラズパイOSをインストールする 先駆者を参考にしてください~(今後別記事で書く予定) ラズパイの初期設定を行う 先駆者を参考にしてください~(今後別記事で書く予定) Dockerをインストールする 先駆者を参考にしてください~(今後別記事で書く予定) Docker-composeをインストールする 先駆者を参考にしてください~(今後別記事で書く予定) チューナとカードリーダの設定 以下のコマンドで公式サイトからドライバをDL、解凍する ドライバインストール wget http://plex-net.co.jp/plex/px-s1ud/PX-S1UD_driver_Ver.1.0.1.zip unzip PX-S1UD_driver_Ver.1.0.1.zip sudo cp PX-S1UD_driver_Ver.1.0.1/x86/i386/isdbt_rio.inp /lib/firmware/ ドライバを反映させるため再起動する 再起動 sudo reboot ドライバが認識されているか確認(PX-S1UDが4つ認識されていればOK) Q1UDはS1UDが4つ搭載されてるイメージになります。 ドライバ確認 pi@raspberry:~ $ dmesg | grep PX-S1UD [ 2.766557] usb 1-1.3.1: Product: PX-S1UD Digital TV Tuner [ 3.003321] usb 1-1.3.2: Product: PX-S1UD Digital TV Tuner [ 3.233368] usb 1-1.3.3: Product: PX-S1UD Digital TV Tuner [ 3.493271] usb 1-1.3.4: Product: PX-S1UD Digital TV Tuner カードリーダを認識させるため必要なパッケージをインストール パッケージインストール sudo apt install build-essential sudo apt install pcscd libpcsclite-dev libccid pcsc-tools -y pcscdが動いていることを確認 pcscd確認 pi@raspberry:~ $ service pcscd statusservice pcscd status ● pcscd.service - PC/SC Smart Card Daemon Loaded: loaded (/lib/systemd/system/pcscd.service; indirect; vendor preset: enabled) Active: inactive (dead) TriggeredBy: ● pcscd.socket Docs: man:pcscd(8) カードリーダを接続しB-CASカードを挿入し、認識されているか確認する B-CASカード確認 pi@raspberry:~ $ pcsc_scan | grep B-CASB-CAS Japanese Chijou Digital B-CAS Card (pay TV) pcscdはdocker-mirakurun-epgstationで管理するため停止する pcscd停止 sudo systemctl stop pcscd.socket sudo systemctl disable pcscd.socket 必要なものをDL、インストールする B-CASデコード用ライブラリ(libarib25)をインストール(ビルド) cmakeが既に入ってる場合は不要 sudo apt install cmake -y git clone https://github.com/stz2012/libarib25 cd libarib25 cmake . make sudo make install 録画用ライブラリ(recdvb-1.3.2)をDL、解凍 automakeが既に入ってる場合は不要 sudo apt install automake -y wget http://www13.plala.or.jp/sat/recdvb/recdvb-1.3.2.tgz tar xvzf recdvb-1.3.2.tgz cd recdvb-1.3.2 HTTPストリームをできるようにするため以下を編集 NW内全機器でのHTTPストリーム配信許可設定 vi recpt1.c ↓をコメントアウト // struct hostent *peer_host; // peer_host = gethostbyaddr((char *)&peer_sin.sin_addr.s_addr, // sizeof(peer_sin.sin_addr), AF_INET); // if ( peer_host == NULL ){ // fprintf(stderr, "gethostbyname failed\n"); // return 1; // } ↓を編集 ・編集前 fprintf(stderr,"connect from: %s [%s] port %d\n", peer_host->h_name, inet_ntoa(peer_sin.sin_addr), ntohs(peer_sin.sin_port)); ・編集後 fprintf(stderr,"connect from: %s port %d\n", inet_ntoa(peer_sin.sin_addr), ntohs(peer_sin.sin_port)); 信号レベルの表示を詳細化するため以下を編集 信号レベル表示変更 vi recpt1core.c ↓を編集(/* globals */のvoid以下に追記) /* globals */ <snip> void print_stat(struct dtv_stats stat) { switch (stat.scale) { case FE_SCALE_NOT_AVAILABLE: fprintf(stderr, "N/A"); break; case FE_SCALE_COUNTER: fprintf(stderr, "%lld", stat.uvalue); break; case FE_SCALE_RELATIVE: fprintf(stderr, "%lf", (float)stat.uvalue / 655.35); break; case FE_SCALE_DECIBEL: fprintf(stderr, "%lf", (float)stat.svalue / 1000); break; } } void ↓を編集(calc_cn(void)以下をコメントアウトおよび追記) calc_cn(void) { // int strength=0; // ioctl(fefd, FE_READ_SNR, &strength); // fprintf(stderr,"SNR: %d\n",strength); struct dtv_property prop[4]; struct dtv_properties props; prop[0].cmd = DTV_STAT_CNR; prop[1].cmd = DTV_STAT_ERROR_BLOCK_COUNT; prop[2].cmd = DTV_STAT_TOTAL_BLOCK_COUNT; prop[3].cmd = DTV_STAT_SIGNAL_STRENGTH; props.props = prop; props.num = 4; if (ioctl(fefd, FE_GET_PROPERTY, &props) < 0) { fprintf(stderr,"Error\n"); } else { fprintf(stderr, "CNR: "); print_stat(prop[0].u.st.stat[0]); fprintf(stderr, " ERRBLK: "); print_stat(prop[1].u.st.stat[0]); fprintf(stderr, " TOTALBLK: "); print_stat(prop[2].u.st.stat[0]); fprintf(stderr, " SIG: "); print_stat(prop[3].u.st.stat[0]); fprintf(stderr, "\n"); } } 録画用ライブラリ(recdvb-1.3.2)をビルドする recdvb-1.3.2をビルド ./autogen.sh ./configure --enable-b25 EXTRA_SID=1 make sudo make install 録画できるかどうか確認(内容まで確認して問題なければOK) 録画確認(TBSを10秒録画する) pi@raspberry:~ $ recdvb --b25 --strip --sid hd 22 10 test.m2ts using B25... enable B25 strip pid = 16318 device = /dev/dvb/adapter0/frontend0 Using DVB card "Siano Mobile Digital MDTV Receiver" tuning to 527143 kHz polling. Overflow error, trying again (status = -1, errno = 75)..ok CNR: 0.000000 ERRBLK: N/A TOTALBLK: N/A SIG: -37.000000 bcas->init failed Cannot start b25 decoder Fall back to encrypted recording Recording... Available sid = 1048 1049 1432 1183 Chosen sid = 1048 Available PMT = 0x101 0x102 0x1fc8 0x7f0 Recorded 10sec 信号レベルが取得できるかどうか確認する(CNR:25、ERRBLK:0、SIG:-35~-40程度あればOK) 信号レベル確認(チューナ0でTBSの信号レベルを5秒確認) pi@raspberry:~ $ timeout 5 recdvbchksig --dev 0 22 device = /dev/dvb/adapter0/frontend0 Using DVB card "Siano Mobile Digital MDTV Receiver" tuning to 527143 kHz polling..ok CNR: 0.000000 ERRBLK: N/A TOTALBLK: N/A SIG: -38.000000 CNR: 25.000000 ERRBLK: 2413 TOTALBLK: 5178 SIG: -37.000000 CNR: 25.000000 ERRBLK: 0 TOTALBLK: 2656 SIG: -37.000000 CNR: 25.000000 ERRBLK: 0 TOTALBLK: 16186 SIG: -37.000000 CNR: 25.000000 ERRBLK: 0 TOTALBLK: 26560 SIG: -37.000000 SIGTERM received. cleaning up... docker-mirakurun-epgstationをインストール docker-mirakurun-epgstationをセットアップする docker-mirakurun-epgstationをgitから取得しインストール curl -sf https://raw.githubusercontent.com/l3tnun/docker-mirakurun-epgstation/v2/setup.sh | sh -s cd docker-mirakurun-epgstation Docker-compose.ymlを修正する DBを変更(その他変更したいものがあれば適宜修正) vi docker-compose.yml ↓を修正する(mariadb:10.5はラズパイだと上手く動作しない) mysql: image: jsurf/rpi-mariadb # image: mariadb:10.5 Dockerfileを修正する monoをインストールするようにを修正(Amatsukazeをリモート実行するため) cd epgstation vi debian.Dockerfile ↓を追記する(末尾に追加) ※debianのversionが10以外の場合は別途確認が必要 # Install mono RUN apt-get update && \ apt-get install -y apt-transport-https dirmngr gnupg ca-certificates && \ apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF && \ echo "deb https://download.mono-project.com/repo/debian stable-buster main" | tee /etc/apt/sources.list.d/mono-official-stable.list && \ apt-get update && \ apt-get install -y mono-complete config.ymlを修正する monoを使用できるようにするため設定(不要かも) cd config vi config.yml ↓を修正する(monoを追加) ffmpeg: /usr/local/bin/ffmpeg ffprobe: /usr/local/bin/ffprobe mono: /usr/local/bin/mono docker-mirakurun-epgstationを起動する コンテナを作成、起動する docker-compose up -d mirakurunとEPGstationにアクセスできるか確認 アクセス確認 EPGstation・・・http://[ラズパイIPアドレス]:8888 mirakurun・・・http://[ラズパイIPアドレス]:40772 mirakurunをチャンネルスキャンする チャンネルをスキャン、再起動 curl -X PUT "http://localhost:40772/api/config/channels/scan" sudo reboot 番組表が表示されていることを確認し録画、エンコードを試してみる EPGstationに再度アクセスして番組表が表示されることを確認 ※1時間程度反映までかかる 録画やエンコードを試してみて正常に録画されていることを確認する デバッグに便利なコマンド EPG更新機能ログ tail -n10000 ~/docker-mirakurun-epgstation/epgstation/logs/EPGUpdater/system.log | grep -e WARN -e ERROR 録画機能ログ tail -n10000 ~/docker-mirakurun-epgstation/epgstation/logs/Operator/system.log | grep -e WARN -e ERROR エンコード機能ログ tail -n10000 ~/docker-mirakurun-epgstation/epgstation/logs/Service/system.log | grep -e WARN -e ERROR 課題、問題点、ハマったこと 4つあるチューナのうち一部のチャンネル、チューナで信号レベルが弱い時がある Q1UDの問題?可能性としては熱暴走、ノイズを拾っちゃってるとか、、、 チューナの動作が安定しない Q1UDの問題?とりあえずACアダプタはつなげずにラズパイのバスパワーのみにしたら安定した ハードウェアエンコードが使えない 32bit版のbullseyeOS以降だとOMX_H.264が対応してないっぽい ⇒メインPC(win10 pro)でAMATSUKAZE(エンコードソフト)サーバを立ててエンコード自体はメインPCで実施する形で解決 番組表が初回しか更新されない 亜種版を使ったのが原因、公式サイト手順でEPGstationを入れたら解決した! ※DBが上手く動作しなかったのが原因っぽい 公式サイト手順で上手く動作しなかった 「mariadb:10.5」がラズパイだと動作しない ⇒ラズパイ用mariaDBを使用することで解決した! VLCでテレビをリアルタイムに見たい ⇒参考サイト見て! 参考にさせてもらったサイト docker-mirakurun-epgstation(公式サイト) EPGstation(公式サイト) EPGstation作成者(Twitter) USB接続で地デジ4チャンネル録画できるチューナーPX-Q1UDを買ったそして試した How To Install Mono on Debian 10 ラズパイ用mariaDB mirakurun を使って VLC でテレビを視聴する。
- 投稿日:2022-03-23T12:10:02+09:00
[Rails] Address already in use が発生してrails sができなかった
前提 ・Dockerで環境構築をしている ・Rails 6.1.5 エラーの内容 `initialize': Address already in use - bind(2) for "0.0.0.0" port 3000 (Errno::EADDRINUSE) 原因 既に3000Portが使われているため同じポート番号は使えないよというエラー 解決策 3000Portを使用しているプロセスを終了する ①3000Portを使用しているプロセスの番号を調べる # 現在、実行しているプロセスを表示するコマンド $ ps -x PID TTY STAT TIME COMMAND 1 pts/0 Ss+ 0:00 irb 8 pts/1 Ss+ 0:00 /bin/bash 15 pts/2 Ss+ 0:00 /bin/bash 32 pts/1 Z+ 0:00 [ruby] <defunct> 64 pts/3 Ss+ 0:00 /bin/bash 919 pts/4 Ss 0:00 /bin/bash 1559 pts/1 Sl+ 0:00 spring server | rails-app | started 72 hours ago 2288 pts/4 Sl+ 0:20 puma 5.6.2 (tcp://0.0.0.0:3000) [rails-app] 2689 ? Ssl 13:18 spring app | rails-app | started 45 hours ago | test mode 2690 ? Ssl 13:19 spring app | rails-app | started 45 hours ago | development mode 2728 pts/5 Ss 0:00 /bin/bash 3115 pts/5 R+ 0:00 ps -x 後から気づいたがプロセス多いと探すの大変だからgrepで検索する方が良さそう $ ps -x | grep 0.0.0.0:3000 2288 pts/4 Sl+ 0:01 puma 3.12.6 (tcp://0.0.0.0:3000) [rails_app] 3168 pts/5 S+ 0:00 grep 0.0.0.0:3000 ②killコマンドでプロセスを終了する # killコマンドにはPIDの番号を渡す $ kill 2288 もう一度ps -xで確認するとプロセスが消えているはずだが、消えていなければ下記のコマンドで強制終了する #-9オプションで強制終了 $ kill -9 2288 プロセスが終了していることを確認したらrails sすれば起動できるはず。
- 投稿日:2022-03-23T09:28:20+09:00
DockerよりMySQLを使用する
Dockerを通じてMySQLを使⽤するための起動や使⽤方法について記録しました。 環境 macOS Big Sur 11.1 (Silicon m1 chip) Docker 20.10.6 事前準備 MySQL Workbench MySQL Workbench は、データベースアーキテクト、開発者、DBA のための統合ビジュアルツールです。(公式サイトより) インストールの仕方は主に二つあります: 公式サイトで提供されたインストーラにてインストールします。 macOSの場合は、homebrewでのインストールが可能です。 Docker環境でDBに接続する手順(MySQL) MySQLのイメージファイルをpullするには、MySQLのDocker Hubで使用したいバージョンのTagを指定します。 M1 Macを使っているので CPU アーキテクチャは ARM ですが、公式リファレンスにも、「Intel イメージの実行には、エミュレーションのもとで--platform linux/amd64をつけて実行することが必要です。 特に mysql イメージは ARM64 向けには利用できません。 これに対する当面の対処としては mariadb イメージを利用してください。」という記述があります。色々と調べたら、この記事により、platform を linux/x86_64 に指定することでミュレーションとして動作することが解りましたので、この方式で進めます。 $ docker pull --platform linux/x86_64 mysql:8 8: Pulling from library/mysql 15115158dd02: Pull complete d733f6778b18: Pull complete 1cc7a6c74a04: Pull complete c4364028a805: Pull complete 82887163f0f6: Pull complete 097bfae26e7a: Pull complete e1b044d6a24f: Pull complete cd2978bd4d12: Pull complete 28bce5cc1677: Pull complete 907b6d695760: Pull complete c5049403458b: Pull complete f360718d6f4e: Pull complete Digest: sha256:0eb33f0094ef5351639d9d9847c963ee9f22f5631cde046babd4ec239aaeaf06 Status: Downloaded newer image for mysql:8 docker.io/library/mysql:8 イメージがうまくpullされたか確認します。 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 8 c1558761f285 3 days ago 519MB 作業用ディレクタリを作成します。 $ mkdir docker_mysql $ cd docker_mysql 先ほどpullしたMySQLイメージでコンテナを回すため、作業用ディレクタリに以下のYAMLファイル(docker-compose.yml)を作成ます。 # docker-compose.ymlのバージョン version: "3.8" # services以下にmysql8コンテナの設定を書く # services.mysql8.image: 使用するイメージ名称。 # services.mysql8.container_name: コンテナ名称。 # services.mysql8.platform: M1 Macで起動できるように linux/x86_64 を指定する。 # services.mysql8.volumes: マウント・パス # services.mysql8.environment: 環境変数 # services.mysql8.ports: 公開用のポート services: mysql8: image: mysql:8 container_name: mysql8 platform: linux/x86_64 volumes: - ~/mysql-docker-data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: 12345 MYSQL_DATABASE: mydb ports: - "3306:3306" services.environment.MYSQL_ROOT_PASSWORDは接続際に使用するパスワードです。 YAMLファイルを作成したら、docker-composeでコンテナーをYAMLファイルに書いてあった設定の通りに起動します。 $ docker-compose up -d Creating network "docker_mysql_default" with the default driver Creating mysql8 ... done コンテナーがうまく起動されたか確認します。以下の結果が表⽰されたらDocker環境のDBにの接続する準備は完了です。 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8583e916916e mysql:8 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql8 以下のコマンドでdocker-compose.ymlで設定したパスワードで接続し、MySQLモニターに⼊ります。 $ docker exec -it mysql8 mysql -u root -p Enter password: 12345 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 Server version: 8.0.28 MySQL Community Server - GPL Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> これでDBへの接続が完了です。 MySQL workbenchの使用 コンテナーが起動されたら、MySQL Workbenchを起動し、ポート3306(YAMLファイルに設定したポート)に接続してください。MySQL Workbenchの起動画面が表示されます。 DB接続にはYAMLファイルに設定したパスワードを入力します。 OKをクリックしたら、MySQL Workbenchが使えます。 コンテナの停止、削除 コンテナを停止するときには以下のコマンドを入力します。 $ docker stop mysql8 コンテナを削除するには以下のコマンドを入力します。 $ docker rm mysql8 参考サイト一覧 https://phoenixnap.com/kb/mysql-docker-container https://matthung0807.blogspot.com/2020/08/docker-mysql.html
- 投稿日:2022-03-23T08:20:14+09:00
Dockerイメージとコンテナの削除方法
コンテナの削除 docker rm [コンテナID] 例:docker rm a403ffe73d31 イメージ削除 docker rmi [image id]
- 投稿日:2022-03-23T04:26:30+09:00
【Docker】コンテナに一般ユーザーを追加する方法
はじめに 本記事は、プログラミング初学者、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。 コンテナに一般ユーザーを追加する方法 Dockerfile FROM ruby:3.1.1 ARG APP_NAME=myapp ARG USERNAME=user ARG GROUPNAME=user ARG UID=1000 ARG GID=1000 RUN groupadd -g ${GID} ${GROUPNAME} && \ useradd -m -s /bin/bash -u ${UID} -g ${GID} ${USERNAME} WORKDIR /${APP_NAME} COPY Gemfile /${APP_NAME}/Gemfile COPY Gemfile.lock /${APP_NAME}/Gemfile.lock RUN bundle install COPY docker/api/entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] USER ${USERNAME} EXPOSE 3000 ENV TZ=Asia/Tokyo CMD ["rails", "server", "-b", "0.0.0.0"]