20210514のdockerに関する記事は11件です。

dockerfileにてbuild時刻を利用する方法(メモ)

背景 AWS ECSでdocker imageを動かしていた際に、 いつbuildしたイメージが動いているかを知りたかったが、 うまくbuild時間をdocker内に渡す方法が見つからなかったので力技をした際のやり方メモ 一般的なやり方 docker build時にargを渡すことができるので、 その際に入れ込むやり方が一般的な模様 docker build . --build-arg FOLDER=$(date -u +"%Y%m%d") ただECSを使う場合はECRダッシュボード上の「プッシュコマンドの表示」にある方法から変えたくなかったので、 なるべくdockerfileの中だけで完結する方法を検討していました。 今回のやり方 結果dockerfile内で値を取得することはできなかったため、 以下のコマンドを実行してbuild時間をファイルで残すことにしました。 RUN echodate '+%Y/%m/%d %H:%M:%S'> build_timestamp.txt このファイルをプログラムから読むことで、 buildコマンドに依存せずbuild日時を取得できます 参考リンク https://github.com/docker/docker.github.io/issues/11289
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

system_specでjqueryをテストする

導入 前回の記事で、:rack_test → :seluniumの以降が成功し、無事jqueryなどのDOM操作をrspecでテストできるようになった、わけではありませんでした。 今回はこちらの記事を参考に、正式にDOM操作をrspecでテストできるようになりました。(ありがとうございました!) 結論 結論としましては、前回の記事の設定でDOM操作をテストする為には、以下の3操作が必要でした。 chromedriverのDockerイメージを導入する Dockerfile テスト実行環境をchromedriverに設定 ← 前回の記事の内容 system_spec.rbでjs: trueにする 補足:自分の場合はポート番号が重複するエラーが発生したので(多分そう)、テスト環境のポート番号を変更しました。 rails_helper.rb Dockerfile RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ && curl -sL https://deb.nodesource.com/setup_10.x | bash - \ && apt-get install -y nodejs \ && mkdir /myapp +RUN apt-get update && apt-get install -y unzip && \ + CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \ + wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ && \ + unzip ~/chromedriver_linux64.zip -d ~/ && \ + rm ~/chromedriver_linux64.zip && \ + chown root:root ~/chromedriver && \ + chmod 755 ~/chromedriver && \ + mv ~/chromedriver /usr/bin/chromedriver && \ + sh -c 'wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' && \ + sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \ + apt-get update && apt-get install -y google-chrome-stable WORKDIR /myapp COPY Gemfile /myapp/Gemfile COPY Gemfile.lock /myapp/Gemfile.lock rails_helper.rb RSpec.configure do |config| config.before(:each, type: :system, js: true) do driven_by :remote_chrome Capybara.server_host = IPSocket.getaddress(Socket.gethostname) - Capybara.server_port = 3000 + Capybara.server_port = 3010 Capybara.app_host = "http://#{Capybara.server_host}:#{Capybara.server_port}" end config.include FactoryBot::Syntax::Methods spec/system/site_layouts_spec.rb require 'rails_helper' -RSpec.describe 'Layouts', type: :system do +RSpec.describe 'Layouts', js: true, type: :system do let(:user) { create(:user) } context "user signed in" do : expect(page).to have_link href: notifications_path expect(page).to have_selector "i.fa-bell" expect(page).to have_link href: search_works_path, class: "fa-search" + within("li.dropdown") do + expect(page).to have_link class: "dropdown-toggle" + click_on "#{user.username}" + end expect(page).to have_link "ログアウト", href: destroy_user_session_path expect(page).to have_link "プロフィール", href: user_path(user) expect(page).to have_link "アカウント編集", href: edit_user_registration_path おわりに 最後まで目を通して頂きありがとうございました! ただ、正直まだ全然理解が追いついていなくて恥ずかしいくらいです。将来的には、もっと根本的な理解ができているようなエンジニアになりたい。(本当に
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【環境構築】Docker×Laravel×MySql

docker×laravel×mysqlを使った環境構築を行ったのでその手順をご紹介します。 初めてdockerで環境構築を行ったので、少しでも参考になればと思います。 環境 環境     バージョン PHP 7.0.27 FW CakePHP3.2.13 Apache 2.2.15 OS CentOS6.9 DB MySQL5.6.39 手順 DockerフォルダDL Git Clone Docker コンテナに入る Apache起動 ドキュメントルート設定 Composer install mysql起動 データベース作製 app.phpの設定 データベース接続 環境構築してみよう DockerフォルダDL 今回は元々用意していたDockerFile,ymlファイルなどをまとめてダウンロードしてます。 下記、フォルダ構造になります。 -/ |- docker-compose.yml |- docker |- db | |- Dockerfile | |- files | |- entry.sh | |- my.cnf | | |- web |- Dockerfile |- files |- composer.phar |- dev.conf |- php.ini |- ssl.conf Git Clone githubにてプロジェクトの取得。 フォルダ構造は下記のようになりました。 -/ |- project |- docker-compose.yml |- docker Dockerコンテナに入る コンテナに入る前にイメージの作製、コンテナを起動します。 コマンドラインで下記を実行する。 ビルド docker build // ビルドすることでdocker fileからイメージが得られます。 コンテナの起動 $ docker-compose up -d // コンテナを起動します。  下記のコマンドで、ビルドとコンテナの起動を一度に行えます。 ビルドとコンテナの起動 $ docker-compose up -d --build // イメージのビルドから始めてコンテナを起動します。 $ docker ps //起動中のコンテナの確認  オプション-dについて $ docker-compose up // ターミナルでコンテナを起動しているため、同じターミナルでは作業できない。 $ docker-compose up -d // コンテナをバックグラウンドで起動するため、同じターミナルで作業ができる。 下記のコマンドでコンテナに入ります。 $ docker exec -it CONTAINER ID /bin/bash //CONTAINER IDは docker psをした際に確認できます。 Apache起動 webコンテナ内で、下記コマンドでApache起動する。 service httpd start Apache起動 service httpd stop Apache停止 service httpd restart Apache再起動 /etc/init.d/httpd status Apache状態確認 ドキュメントルート設定 web内のhttpd.confのドキュメントルートの設定を確認します。 今回のディレクトリ構造だとvar/www/htmlで問題なさそうです。 composer install composer installができませんでした。 アクセス権限の問題だと思い、アクセス権限777に変更しました。 アクセス権限に関しては下記の記事を参考にしました。 https://qiita.com/t-a-run/items/239ed690ece7a011804a 下記、実行できました。 因みに、composer installはprojectフォルダで行いました。 compser install この状態でアクセスするとデータベースエラーとブラウザに表示されます。 エラーの内容は、そのような(接続した)ファイルは見つからない。 database error(SQLSTATE[HY000] [2002] No such file or directory mysql起動 mysqlを動作させます。 webコンテナに入った時、同様にdbコンテナに入ります。 service mysqld status //mysqlの起動状態の確認 service mysqld start //mysqlの起動 ログイン前に初期のユーザー名とパスワードを確認します。 DBコンテナ内でmysqld.logを確認します。 cat mysqld.log A temporary password is〜に書いてあるユーザー名パスワードを取得。 ユーザー名:root データベースにログインします。 docker exec -it コンテナID mysql -u root -p パスワード再設定->データベース作製->テーブル作成をおこないます。 app.phpの設定 git clone時には、app.phpは含まれていません。作成しましょう。 -/ |- project |- config |-app.php app.phpの書き方はネットで検索すると出てきます。今回は他で使っていたファイルをそのままコピーして中身を編集しました。主にデータベースのしか触っていないです。 'Datasources' => [ 'default' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\Database\Driver\Mysql', 'persistent' => false, 'host' => 'localhost', /** * CakePHP will use the default DB port based on the driver selected * MySQL on MAMP uses port 8889, MAMP users will want to uncomment * the following line and set the port accordingly */ //'port' => 'non_standard_port_number', 'username' => 'root', 'password' => 'データベース作成時に設定したパスワード', 'database' => 'データベース作成時に設定したパスワード', 'port' => ポート番号, 'encoding' => 'utf8', 'timezone' => 'UTC', 'flags' => [], 'cacheMetadata' => true, 'log' => false, cat mysqld.log A temporary password isに書いてあるパスワードを取得 ->dbコンテナでmysqlをrestartし、ログイン->パスワード再設定->データベース作製->テーブル作成-> データベース接続 sequel proを使い、クイック接続にて接続テストを実行しました。 無事に接続完了しました。 ブラウザでlocalhostと検索すると無事開けました。 参考資料 docker-compose.yml の内容を理解しよう https://futureys.tokyo/lets-understand-contents-of-docker-compose-yml/ Docker compose ことはじめハンズオン https://qiita.com/TsutomuNakamura/items/7e90e5efb36601c5bc8a Dockerfileの書き方と使い方 https://blog.codecamp.jp/docker-file-how-to 起動中の docker コンテナのシェルに入る https://qiita.com/sekizo/items/27cc9b406332afc674f6 データベース作製 https://noumenon-th.net/programming/2019/04/01/docker-entrypoint-initdb01/ chmodで設定する権限の書き方 https://qiita.com/irasally/items/6ebc3c68e22905fb7330
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Rails】実務未経験の僕が共同開発に参加して学んだこと

0. はじめに はじめまして! この記事では、「実務未経験の私が Rails 共同開発に挑戦し、そこで学んだことや躓いたこと、反省した点」などについてまとめています。 チームでの開発現場経験を積むことで、「コミュニケーションの適切な取り方」や「わからない部分の質問の仕方」、「コンフリクトの解消の仕方」など、一人での学習では決して学ぶことのできない貴重な経験を積ませていただくことができました。 今回はそのような共同開発の現場で実際に学んだことをまとめて、今後の自分の成長につなげることができたらなと考えております! 自己紹介                                           まずは簡単な自己紹介からさせて頂きます! スペック 24歳 エンジニアを目指している駆け出しエンジニア 学習中の言語:Ruby, Ruby on Rails 今後学習予定の言語や知識:Javascrict, AWS HTML・CSS・Sass・も出来ます。 趣味 勉強 : 好きでやっているので、もう趣味ですw 読書 : 一番好きな本は、SF小説、「千九八四年」です。 TVゲーム : 最近は勉強のため封印中。スマブラしたい。 もうちょっとコロナが落ち着いたら、旅行を趣味に加えたいです。 性格 割と慎重派だと思います。前職で絶対にダブルチェックを欠かさなかったです。 温厚だと思ってます。怒った記憶がない。怒りは無駄だと考えてます。 2. 今回の共同開発に参加しようと思った動機 まず、「なぜ今回の共同開発に参加しようと思ったのか?」の根本的な動機の部分を述べさせて頂きます。端的に言うと、以下のものを「得たい!」と思ったので、共同開発に参加させて頂きました。 コミュニケーションスキルの向上 チームでの開発経験 問題にぶち当たった時に自分で原因を特定し、解決を図るための「自走力」 試行錯誤した上でどうしてもわからない場合、素直に質問できる柔軟性 これらのものを「共同開発」に参加することを通して獲得したいなと思いました。 結果的に、特に「コミュニケーション」の部分に関してはスキルの向上ができたのと、以前よりもより自信を持つことができた気がします。 ここについての具体的なやり取りに関しては後述させて頂きます! 3. Rails 共同開発で取り組んだ内容 共同開発で取り組んだ内容を簡単にご説明していきます! 成果物 今回の共同開発では「ECサイト」の購入者視点の画面の実装に取り組みました。 概要 開発期間:5/1 ~ 6/ 30(2ヶ月間) 週1回のチームミーティングを行い、進捗状況の確認を行う 週2~3回の作業会を行い、それぞれわからないところを質問し合う 構成メンバー 講師・TA:現役エンジニア2名 共同開発メンバー:未経験2名, 現役インターン生1名 使用した言語・技術 バックエンド Ruby(バージョン:2.7.1) Ruby on Rails(バージョン:6.0.3.5) フロントエンド HTML5 CSS3 Bootstrap(5.0.0.beta2) インフラ Docker docker-compose データベース MySQL2(0.5.3) 使用したツール・環境 Slack:レビュー依頼、進捗状況の確認、日報の共有などをしました。 GitHub:タスク管理・確認、プルリクエストを出す、コードレビューを受ける、受けた指摘に対応し、コミットを出すなどをしました。 Googleドライブ:モックアップ、基本設計(ER図/画面遷移図)、画面定義書などのファイルを管理・共有のために使用しました。 Git / Sourcetree:コミットやプッシュなどの git 操作をするために利用しました。 DeepL:英語対策のための翻訳アプリ 使用したエディター:Visual Studio Code 使用したPC:Mac ER図 実装した(する予定)機能 新規ユーザ登録機能 ログイン / ログアウト処理 商品検索 商品詳細へ カートへ カートを開く 購入確定 Top画面に戻る 履歴を開く 注文検索 注文キャンセル ユーザ情報を開く ユーザ情報修正 / 退会処理 修正確定 4. Rails 共同開発で僕が担当した箇所 ①products 関連の DB構築 ER図を見て、必要なカラムや属性を考え、migrationファイルを作成しました。 ↓こういった感じのmigrateファイルを作成 class CreateUsers < ActiveRecord::Migration[6.0] def change create_table :users do |t| t.string :password, limit: 64 t.string :last_name, limit: 16 t.string :first_name, limit: 16 t.string :zipcode, limit: 16 t.string :prefecture, limit: 16 t.string :municipality, limit: 16 t.string :address, limit: 16 t.string :apartments, limit: 32 t.string :email, limit: 128 t.string :phone_number, limit: 16 t.references :user_classification, null: false, foreign_key: true t.string :company_name, limit: 128 t.boolean :delete_flag t.timestamps end end end ②products 関連の seedファイル作成 seeds.rb を記述。 別Qiitaにメモしました。 ③users 関連の validate作成 models/users.rb にvalidateをかけました 別Qiitaにメモしました。 ④商品詳細画面 を作成 商品名・カテゴリ・商品説明・値段 をDBから引っ張ってきて表示するように実装しました。 ⑤商品詳細画面(存在しないID) を作成 存在しない商品が指定された際には、この画面が出てくるように、 if分岐させました。 ⑥ユーザー情報更新画面 を作成 ユーザー情報の更新を行う画面の見た目とroutes を作成しました。 <%= form_with %>, <form.label>, <form.text_fiels> を使用して作成しています。 ⑦ユーザー情報更新機能 を実装 ⑥で見た目を実装し、ここで実際の動作を実装しました。 flashを利用したアラートを採用し、更新成功時には、user詳細画面にとび、「更新に成功しました」というメッセージを、失敗時には、user情報更新画面にrenderして、「更新に失敗しました」というメッセージを表示するように実装しています。 ※今後も実装完了次第、追加していきます! 5. 【必ず身に付けておきたい】 講師に学んだプルリクエストの出し方 共同開発では、開発業務以外にも Git や GitHub の操作方法がとても学びになりましたが、その中でも特に「 Pull Request(プルリクエスト )の出し方」が個人的には参考になりました! 今後の開発を進めていく上での基礎として、必ず身に付けておきたいと思いました。 ▼ プルリクエストを出す際の雛形となるテンプレート 以下は講師が提供してくださったテンプレートを元に僕が作成したプルリクエストの一例です。 プルリクエスト出す際は、以下のようなフォーマットをもとに作成しています。 プルリクエストの最終的な確認項目 このプルリクエストで実行したこと(概要) 対象 issue 重点的に見て欲しいところ(不安なところ) 実装できなくて後回しにしたところ チェックリスト(動作確認・ rubocop の実行など) その他の参考情報(参考にした記事のリンクなど) このようなフォーマットを元に書くことによって、レビュアーの方にとってわかりやすいプルリクエストの作成に繋がると感じました。 特に「重点的に見て欲しいところ(不安なところ)」の項目では、「問題に躓いた時にうまく人に頼れるスキル」も大事になって来ると思うので、不安だったことについては小さなことであっても、必ず書くようにしました。 ▼ 1指摘1コミット また、コードレビューを受ける際は「1指摘1コミット」でやり取りをするようにしました。つまり、複数の指摘を同時に受けたとしても、対応する際は一つずつコミットを出して個別に対応していくということ。 これは講師の方から「意外と知らない人が多いけど、大事なこと」として教わりました。 以下のような感じです↓ 基本的なことかもしれませんが、だからこそ、この機会で知ることができた意義は大きい!と考えています。 6. Rails 共同開発で躓いた点・大変だったこと 共同開発において躓いたことや大変だったこと、またそれに対する僕の対応です! 主に、以下の2点でつまずきました。 ① コンフリクトの発生 ※ 追加あるかもです。(無いことを願うw) ① コンフリクトの発生 コンフリクト発生に関しては、共同開発が始まった初っ端から躓いてしまい、かなり焦りました? しかし、練習段階で失敗することに意味があるんだろう。 と考え、自分を奮い立たせて対処しました。 何度か、コンフリクトを発生させているうちに、 「あぁ、多分、ここが原因だろ、一回、developをmergeして…。よし!」 ぐらいの気軽さで対処できるようになりました。 Gitの基礎は抑えられたのでは? と考えています。 7. Rails 共同開発に参加する経緯&身についたこと 2021年2月頃までは僕は主に一人でプログラミング学習に取り組んでいました。 しかし、エンジニアなるためには、実務に近い、チーム単位での経験が必要なのではないか、お互いの進捗状況を確認しあったり、わからないことを相談しあったりするなどと言った「協調性」が必ず必要になってくるのではないかと考えていました。 今回の共同開発で、早めにそのスキルを身につけておくことによって、技術的なサポートをして頂く際の「質問力」であったり、スムーズやりとりを行うための「コミュニケーション能力」の面においては、他の未経験者よりも前に立てたのではないか、と考えています。 この経験は、これからエンジニアになっていく上で、この上なく大事な経験だと思っていますし、この経験があれば、きっとエンジニアになれる!という自信にも繋がりました。 技術的にまだまだ未熟な自覚はあります。 しかし、それ以外の、エンジニアにとって大切な、「協調性」を身につけられたという点において、この共同開発への参加はとても有意義だったなぁ。と感じています。 8. さいごに【まとめ】 ここは、共同開発終了後に書こうと思います。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerコンテナからホストへのファイルコピーを自動化するためのスクリプト

背景 業務でコンテナ内のログファイルをホストにコピーする必要があったので、複数コンテナでそれを自動化してみた際のログ。 docker cp camera_01:/var/log/ffmpeg.log camera_01_ffmpeg.log のコマンドをシェルスクリプトで自動化する dockercp.sh for i in $(seq -f "%02g" 1 10) do docker cp camera_${i}:/var/log/ffserver.log camera_${i}_ffserver.log docker cp camera_${i}:/var/log/ffmpeg.log camera_${i}_ffmpeg.log done
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerを導入後に、テストコードが完全に使い物にならなくなった件について

はじめに 先日、dockerとdocker-composeを開発環境に導入しました。起動はでき、問題なくアプリケーションは立ち上げることはできたのですが、テストでエラーが発生しまくりました。 現在、本件は未解決ですが、一旦状況を整理するためにもこちらでまとめます 前提 テストの失敗は、結合テスト(SystemSpec)のみであり、その中で失敗は一部のものに限る。 Capybara を使用 起きたエラーについて 失敗したテストは30件に上りますので、ここでは一部抜粋してご紹介します 1) Likes いいね機能 いいねできるとき ユーザは他ユーザの投稿にトップページからいいねできる Got 1 failure and 1 other error: 1.1) Failure/Error: expect do #find('.practice_like').click find(".practice_like", match: :first) .click sleep 1 end.to change { Like.count }.by(1) expected `Like.count` to have changed by 1, but was changed by 0 [Screenshot]: /soccer_app/tmp/screenshots/failures_r_spec_example_groups_likes_nested_nested_ユーザは他ユーザの投稿にトップページからいいねできる_595.png # ./spec/system/likes_spec.rb:13:in `block (4 levels) in <top (required)>' 1.2) Failure/Error: raise ActionController::RoutingError, "No route matches [#{env['REQUEST_METHOD']}] #{env['PATH_INFO'].inspect}" ActionController::RoutingError: No route matches [GET] "/practices/367/likes" [Screenshot]: /soccer_app/tmp/screenshots/failures_r_spec_example_groups_likes_nested_nested_ユーザは他ユーザの投稿にトップページからいいねできる_595.png いろいろ書いてあるのですが、30件のエラー内容をよく分析すると以下のことがわかってきました。 失敗したテストのほとんどがJavascript(Ajax)が関わっていること テスト失敗時のスクリーンショットを見るとCSSが適用されてないこと 試したこと おそらく、Javascriptを使用するためには何かしらの設定が必要なのだろうと仮説を立てて情報収集。 すると、こちらの記事を発見!!! 記事を参考に、以下のようにコードを書いてみる capybara.rb Capybara.register_driver :remote_chrome do |app| url = ENV['SELENIUM_DRIVER_URL'] caps = ::Selenium::WebDriver::Remote::Capabilities.chrome( 'goog:chromeOptions' => { 'args' => [ 'no-sandbox', 'headless', 'disable-gpu', 'window-size=1680,1050' ] } ) Capybara::Selenium::Driver.new(app, browser: :remote, url: url, desired_capabilities: caps) end RSpec.configure do |config| config.before(:each, type: :system) do driven_by :rack_test end config.before(:each, type: :system, js: true ) do #driven_by :selenium_chrome_headless Capybara.server_host = IPSocket.getaddress(Socket.gethostname) Capybara.app_host = "http://#{Capybara.server_host}" driven_by :remote_chrome end end Gemfile group :test do # Adds support for Capybara system testing and selenium driver gem 'capybara', '>= 2.15' gem 'selenium-webdriver' # Easy installation and use of web drivers to run system tests with browsers gem 'webdrivers', require: !ENV['SELENIUM_DRIVER_URL'] end Dockerfile FROM 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 RUN apt-get install -y nodejs npm && npm install n -g && n 14.17.0 WORKDIR /soccer_app COPY Gemfile /soccer_app/Gemfile COPY Gemfile.lock /soccer_app/Gemfile.lock RUN gem install bundler RUN bundle install COPY . /soccer_app RUN yarn install --check-files RUN bundle exec rails webpacker:compile docker-compose.yml version: "3" services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: "password" ports: - "4306:3306" web: &app_base build: . command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/soccer_app ports: - "3000:3000" depends_on: - db - chrome stdin_open: true tty: true environment: BASIC_AUTH_USER: ${BASIC_AUTH_USER:-default} BASIC_AUTH_PASSWORD: ${BASIC_AUTH_PASSWORD-default} WEBPACKER_DEV_SERVER_HOST: webpacker BUNDLE_APP_CONFIG: ./.bundle SELENIUM_DRIVER_URL: http://chrome:4444/wd/hub webpacker: <<: *app_base command: bash -c "bundle exec bin/webpack-dev-server" depends_on: - web ports: - "3035:3035" tty: false stdin_open: false environment: BUNDLE_APP_CONFIG: ./.bundle NODE_ENV: development RAILS_ENV: development WEBPACKER_DEV_SERVER_HOST: 0.0.0.0 chrome: #Chromeでのテスト実行用コンテナ image: selenium/standalone-chrome #Chromeがインストールされたイメージ ports: - "4444:4444" volumes: db_data: これで動くかな〜〜と淡い気持ちを抱きつつ、テストを動かすもやっぱりだめでした。 さて、他の記事もみてみようということでいろいろみていくと、、、 ここの神記事に全ての答えだ!と思われる記事が!! なるほど、jsを使うテストでは、spec.rbのほうにjs: true とすればいいのか!!!ということで早速記述 spec/system/likes_spec.rb require 'rails_helper' RSpec.describe 'Likes', type: :system ,js: true do before do @user = FactoryBot.create(:user) @another = FactoryBot.create(:user) @practice = FactoryBot.create(:practice) end describe 'いいね機能' do context 'いいねできるとき' do #以下省略 これでどうだ!!!とコマンドを叩くと、、びっしりと赤い文字が。 terminal % docker-compose run web bundle exec rspec #以下、何も変わらない風景がそこにはありました やはり、エラーをみてみると、例えばいいねボタンを押してもcreateアクションに飛んでいないような感じがあり、そのためModelの変化量とかが異なってきてエラーになっているとしか思えませんね、、、、、、 ん〜〜わからないな この仮説ネタが切れた時からが辛いですね笑 一旦起動したアプリケーションでいいねの動作を確認すると、、うん大丈夫。(それはそう) もう少し、ネット記事漁る必要がありそうです おわりに 未解決で申し訳ないです。 どなたかお分かりの方いればコメント等でおしえてください!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerを導入後に、テストコードが完全に使い物にならなくなった件について①

はじめに 先日、dockerとdocker-composeを開発環境に導入しました。起動はでき、問題なくアプリケーションは立ち上げることはできたのですが、テストでエラーが発生しまくりました。 現在、本件は未解決ですが、一旦状況を整理するためにもこちらでまとめます [追記]解決策はこちらでまとめました! 前提 テストの失敗は、結合テスト(SystemSpec)のみであり、その中で失敗は一部のものに限る。 Capybara を使用 起きたエラーについて 失敗したテストは30件に上りますので、ここでは一部抜粋してご紹介します 1) Likes いいね機能 いいねできるとき ユーザは他ユーザの投稿にトップページからいいねできる Got 1 failure and 1 other error: 1.1) Failure/Error: expect do #find('.practice_like').click find(".practice_like", match: :first) .click sleep 1 end.to change { Like.count }.by(1) expected `Like.count` to have changed by 1, but was changed by 0 [Screenshot]: /soccer_app/tmp/screenshots/failures_r_spec_example_groups_likes_nested_nested_ユーザは他ユーザの投稿にトップページからいいねできる_595.png # ./spec/system/likes_spec.rb:13:in `block (4 levels) in <top (required)>' 1.2) Failure/Error: raise ActionController::RoutingError, "No route matches [#{env['REQUEST_METHOD']}] #{env['PATH_INFO'].inspect}" ActionController::RoutingError: No route matches [GET] "/practices/367/likes" [Screenshot]: /soccer_app/tmp/screenshots/failures_r_spec_example_groups_likes_nested_nested_ユーザは他ユーザの投稿にトップページからいいねできる_595.png いろいろ書いてあるのですが、30件のエラー内容をよく分析すると以下のことがわかってきました。 失敗したテストのほとんどがJavascript(Ajax)が関わっていること テスト失敗時のスクリーンショットを見るとCSSが適用されてないこと 試したこと おそらく、Javascriptを使用するためには何かしらの設定が必要なのだろうと仮説を立てて情報収集。 すると、こちらの記事を発見!!! 記事を参考に、以下のようにコードを書いてみる capybara.rb Capybara.register_driver :remote_chrome do |app| url = ENV['SELENIUM_DRIVER_URL'] caps = ::Selenium::WebDriver::Remote::Capabilities.chrome( 'goog:chromeOptions' => { 'args' => [ 'no-sandbox', 'headless', 'disable-gpu', 'window-size=1680,1050' ] } ) Capybara::Selenium::Driver.new(app, browser: :remote, url: url, desired_capabilities: caps) end RSpec.configure do |config| config.before(:each, type: :system) do driven_by :rack_test end config.before(:each, type: :system, js: true ) do #driven_by :selenium_chrome_headless Capybara.server_host = IPSocket.getaddress(Socket.gethostname) Capybara.app_host = "http://#{Capybara.server_host}" driven_by :remote_chrome end end Gemfile group :test do # Adds support for Capybara system testing and selenium driver gem 'capybara', '>= 2.15' gem 'selenium-webdriver' # Easy installation and use of web drivers to run system tests with browsers gem 'webdrivers', require: !ENV['SELENIUM_DRIVER_URL'] end Dockerfile FROM 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 RUN apt-get install -y nodejs npm && npm install n -g && n 14.17.0 WORKDIR /soccer_app COPY Gemfile /soccer_app/Gemfile COPY Gemfile.lock /soccer_app/Gemfile.lock RUN gem install bundler RUN bundle install COPY . /soccer_app RUN yarn install --check-files RUN bundle exec rails webpacker:compile docker-compose.yml version: "3" services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: "password" ports: - "4306:3306" web: &app_base build: . command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/soccer_app ports: - "3000:3000" depends_on: - db - chrome stdin_open: true tty: true environment: BASIC_AUTH_USER: ${BASIC_AUTH_USER:-default} BASIC_AUTH_PASSWORD: ${BASIC_AUTH_PASSWORD-default} WEBPACKER_DEV_SERVER_HOST: webpacker BUNDLE_APP_CONFIG: ./.bundle SELENIUM_DRIVER_URL: http://chrome:4444/wd/hub webpacker: <<: *app_base command: bash -c "bundle exec bin/webpack-dev-server" depends_on: - web ports: - "3035:3035" tty: false stdin_open: false environment: BUNDLE_APP_CONFIG: ./.bundle NODE_ENV: development RAILS_ENV: development WEBPACKER_DEV_SERVER_HOST: 0.0.0.0 chrome: #Chromeでのテスト実行用コンテナ image: selenium/standalone-chrome #Chromeがインストールされたイメージ ports: - "4444:4444" volumes: db_data: これで動くかな〜〜と淡い気持ちを抱きつつ、テストを動かすもやっぱりだめでした。 さて、他の記事もみてみようということでいろいろみていくと、、、 ここの神記事に全ての答えだ!と思われる記事が!! なるほど、jsを使うテストでは、spec.rbのほうにjs: true とすればいいのか!!!ということで早速記述 spec/system/likes_spec.rb require 'rails_helper' RSpec.describe 'Likes', type: :system ,js: true do before do @user = FactoryBot.create(:user) @another = FactoryBot.create(:user) @practice = FactoryBot.create(:practice) end describe 'いいね機能' do context 'いいねできるとき' do #以下省略 これでどうだ!!!とコマンドを叩くと、、びっしりと赤い文字が。 terminal % docker-compose run web bundle exec rspec #以下、何も変わらない風景がそこにはありました やはり、エラーをみてみると、例えばいいねボタンを押してもcreateアクションに飛んでいないような感じがあり、そのためModelの変化量とかが異なってきてエラーになっているとしか思えませんね、、、、、、 ん〜〜わからないな この仮説ネタが切れた時からが辛いですね笑 一旦起動したアプリケーションでいいねの動作を確認すると、、うん大丈夫。(それはそう) もう少し、ネット記事漁る必要がありそうです おわりに 未解決で申し訳ないです。 どなたかお分かりの方いればコメント等でおしえてください!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

docker-composeでMongoDBのレプリカセットを作る

下準備 Dockerで動かすために、ディレクトリを作成します。 mkdir -p primary/data/db mkdir -p secondary/data/db 次に、初期化スクリプトを作成します。 mkdir init touch init/init.js init.js rs.initiate({ _id: 'rs0', members: [ { _id: 0, host: "mongodb-primary:27017", priority: 100 }, { _id: 1, host: "mongodb-secondary:27017", priority: 10 }, { _id: 2, host: "mongodb-arbiter:27017", arbiterOnly: true } ], }); priorityを設定することで、常に指定したコンテナをプライマリーに設定することができます。 docker-compose.yamlを書く services.[name].commandにmongodの引数を入れます。 ホストのmongodと衝突するのを防ぐために、ポートを27018にしています。適宜読み替えてください。 docker-compose.yaml version: '3' services: mongodb-primary: image: mongo:4.4 command: - --replSet - rs0 volumes: - ./primary/data/db:/data/db - ./init:/docker-entrypoint-initdb.d:ro expose: - 27017 ports: - 27018:27017 restart: always mongodb-secondary: image: mongo:4.4 command: - --replSet - rs0 volumes: - ./secondary/data/db:/data/db expose: - 27017 restart: always mongodb-arbiter: image: mongo:4.4 command: - --replSet - rs0 expose: - 27017 restart: always 起動 docker-compose up -d
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerでデータベースを変更した場合

理解しないといけないこと Dockerでは、volumeという仕組みがあります。 コンテナは起動し、停止すると毎回破棄してしまうため、コンテナ内にデータを保存しておくことはできません。 保存するなら、volumeにデータを保存する運用がいいと思います。 volumeについてはここで説明は省略しますが、下記記事はとてもわかりやすいです。 一度作成したMySQLデータベースから別の名前に変更する場合の注意 docker-compose.ymlを変更するだけではうまくいかない。 その理由はMySQLのデータベースをDockerのvolumeに保存しているから。 docker-compose.ymlのデータベース情報で下記の通り記載している。 volumes: - db-volume:/var/lib/mysql そのため、dockerのvolumeも削除しなければならないため、volume削除も手順として必要になる。 作業内容 docker-compose.ymlの修正 Laravelの.envの修正 docker volumeの削除 dockerの再ビルド MySQL認証方法の変更(MySQL8のみ) マイグレーション実行 データベース確認 docker-compose.ymlの修正 下記の通り記載しているファイルを変更 変更前 #データベースのコンテナ mysql: image: mysql:8.0 container_name: mysql ports: - '4306:3306' environment: MYSQL_DATABASE: test MYSQL_USER: docker MYSQL_PASSWORD: docker MYSQL_ROOT_PASSWORD: root TZ: 'Asia/Tokyo' volumes: - db-volume:/var/lib/mysql MYSQL_DATABASE、MYSQL_USER、MYSQL_PASSWORDを修正 変更後 #データベースのコンテナ mysql: image: mysql:8.0 container_name: mysql ports: - '4306:3306' environment: MYSQL_DATABASE: test-2 MYSQL_USER: docker-2 MYSQL_PASSWORD: docker-2 MYSQL_ROOT_PASSWORD: root TZ: 'Asia/Tokyo' volumes: - db-volume:/var/lib/mysql Laravelの.env修正 下記の通り記載しているファイルを変更 変更前 DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=test DB_USERNAME=docker DB_PASSWORD=docker MYSQL_DATABASE、MYSQL_USER、MYSQL_PASSWORDを修正 変更後 DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=test-2 DB_USERNAME=docker-2 DB_PASSWORD=docker-2 docker volume削除 volume確認 ホスト側のターミナル(or コマンドプロンプト)にて、下記コマンドを実行 docker volume ls 下記volumeがあることを確認 local ****_db-volume volume削除 ※dockerのコンテナが動いている時にやるとエラーを起こす。必ずコンテナを停止してからやること! Error response from daemon: remove ****_db-volume: volume is in use - [48abed9a0abfe9b06a5bba351f0ea862d16ead41d40e48a50981a0dec5c72a29] コンテナ停止を確認したら下記実行 $ docker volume rm ****_db-volume // 削除後volumeがないことを確認する $ docker volume ls dockerの再ビルド docker-compose.ymlが変更され、volumeも削除されているため、再度ビルドを実行。 下記コマンドでビルドとコンテナ起動を同時に可能。 docker-compose up -d -build MySQL認証方法の変更 MySQL8のみ実行 マイグレーション実行 Laravelでマイグレーションを実行するため、Laravelプロジェクトが入っているphpコンテナへログイン $ docker-compose exec php bash 以下、コンテナ内での作業となります /var/www/html# php artisan migrate データベース確認 マイグレーション実行後、テーブルができているかを確認。 MySQLコンテナに入り、rootユーザーでログイン。 その後、修正したデータベース(test-2)にテーブルがあるかを確認する。 matsunoMBP:crm-backend naoki$ docker-compose exec mysql bash root@0573a3c19569:/# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 Server version: 8.0.23 MySQL Community Server - GPL Copyright (c) 2000, 2021, 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> use test-2 Database changed mysql> mysql> show tables; +-----------------------+ | Tables_in_crm_test_db | +-----------------------+ | course | | migrations | | term | | user | +-----------------------+ 4 rows in set (0.01 sec) 為になる文献 【Docker】docker-compose.ymlの変更がDBに反映されなかった話 - Qiita Docker volumeの削除 - Qiita
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DockerでMailhogを使ってメールサーバを構築する

Dockerにメールサーバ導入 LaravelをnginxとMySQLで構築したDocker環境にメールサーバを追加で構築しました。 結構簡単に導入できるので、手順としてまとめています。 Mailhogとは? MailHogはGo言語で書かれているメールサーバで、letter_opener_webと同様にブラウザでメールの内容を確認することができるようになります。 また、MailHog単体でメールサーバーとして立ち上げることができるため、LaravelやRailsに限らずどんな環境でも利用することができます。 mailhog/MailHog ちなみに、Laravelの最新バージョン8のsailのパッケージで、使用されています。 その他サービスとしてMaildevやMailCatcherがあるが、それらはgemやnpmでインストールしてからじゃないと使えないのがとても面倒。。。 今回、言語によって使えるサービスが異なるよりも、どんな環境でも汎用的に利用できるMailhogを利用することとした。 環境構築手順 docker-compose.yml を編集 下記をdocker-compose.ymlに追記 #↓下記追記する↓ #メールサーバのコンテナ mail: image: mailhog/mailhog container_name: mailhog ports: - '8025:8025' environment: MH_STORAGE: maildir MH_MAILDIR_PATH: /tmp 実際のSMTPは、port:1025で受け付けている。 Volumeの設定 mailhogはメールをメモリ上に保存するため、Dockerのコンテナを停止するとメールが消えてしまう。 そのため、volumeの設定は必須のため、volumesにmaildir: {}、mailコンテナ記述部に volumes: - maildir:/tmpを記載 volumes: db-volume: maildir: {} #⇦追記する mail: image: mailhog/mailhog container_name: mailhog ports: - '8025:8025' environment: MH_STORAGE: maildir MH_MAILDIR_PATH: /tmp   #↓追記する volumes: - maildir:/tmp docker-compose.ymlの完成形はこちら #docker-composeバージョン version: "3.8" volumes: db-volume: maildir: {} #コンテナ詳細 services: #Webサーバーのコンテナ nginx_server: image: nginx:1.18 container_name: nginx-server ports: - '8000:80' #コンテナの依存関係を示す(PHP→Nginxの順) depends_on: - php volumes: - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf - ./:/var/www/html/ #phpアプリケーションのコンテナ php: build: context: ./docker/php dockerfile: Dockerfile container_name: php-app ports: - "9000:9000" volumes: - ./:/var/www/html/ #データベースのコンテナ mysql: image: mysql:8.0 container_name: mysql ports: - '4306:3306' environment: MYSQL_DATABASE: crm_test_db MYSQL_USER: admin MYSQL_PASSWORD: CrmTest2021 MYSQL_ROOT_PASSWORD: root TZ: 'Asia/Tokyo' volumes: - db-volume:/var/lib/mysql #メールサーバのコンテナ mail: image: mailhog/mailhog container_name: mailhog ports: - '8025:8025' environment: MH_STORAGE: maildir MH_MAILDIR_PATH: /tmp volumes: - maildir:/tmp Dockerの再ビルド mailhogのイメージを新たに使用するため、imageのビルドが必要。 下記コマンドを実行し、イメージのビルドとコンテナ起動をする # イメージのビルド $ docker-compose build # コンテナ起動 $ docker-compose up -d メールサーバ起動確認 コンテナ確認 下記コマンドにてメールサーバ(Mailhog)が起動していることを確認する。 $ docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------------- docker-laravel_app_1 docker-php-entrypoint php-fpm Up 9000/tcp docker-laravel_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp docker-laravel_mail_1 MailHog Up 1025/tcp, 0.0.0.0:8025->8025/tcp docker-laravel_web_1 nginx -g daemon off; Up 0.0.0.0:80->80/tcp 画面確認 http://localhost:8025 にアクセスし、Mailhog画面が見れることを確認する。 Laravel側の設定 ここからは、phpコンテナにインストールしているLaravelプロジェクトの設定になります。 Laravelの.envを修正 下記.envの通り修正。 MAIL_FROM_ADDRESSは好きなアドレスで構いません MAIL_HOST=mail MAIL_PORT=1025 MAIL_FROM_ADDRESS=info@example.com メール送信テスト(簡易テスト) tinkerでメールを送って送信テストを実施する。 responseがnullなら成功! // 下記コマンドでphpコンテナに入り、php atrtisan tinkerを実行できます $ docker-compose exec php php artisan tinker >>> Mail::raw('test mail',function($message){$message->to('test@example.com')->subject('test');}); => null >>> Mail::raw('test mail',function($message){$message->to('mattu.nao722@gmail.com')->subject('test');}); Mailhog確認 http://localhost:8025 にアクセスし、Mailhog画面でメールが受信されていることを確認する。 今回しっかり送信され、test mailというメッセが入っていることも確認した。 ルーティングを絡めた送信確認(Mailファサード使用) あくまでtinkerを使うと簡易的確認であるため、ここからはルーティングとコントローラーを絡めた送信テストを実施する。 コントローラー作成 メール送信テストのためのコントローラーを作成 $ php artisan make:controller MailSendController ルーティング設定 routes/web.phpにルーティング設定を実施し、CRUDを実装。 (今回はgetメソッドでメール送信を実行する) # 追記 use App\Http\Controllers\MailSendController; # 追記 Route::get('/mail', [MailSendController::class, 'index']); コントローラー編集 namespace App\Http\Controllers; use Illuminate\Http\Request; use Mail; class MailSendController extends Controller { public function index(){ $data = []; Mail::send('emails.test', $data, function($message){ $message->to('abc987@example.com', 'Test') ->subject('This is a test mail'); }); } } toには送信した宛先のメールを入力 subjectにはメールのタイトルを設定 メールの中身はemails.testに記述 test.blade.php(メール内容)編集 emails.testはブレードファイルを示している。 そのため、resourcesディレクトリの下にemailsディレクトリを作成し、test.blade.phpを作成します。 welcome.blade.phpの中身は下記を記述します。 (メール内容に関わるだけで適当でいいですが、今回メールリンクも入れてみました) <!DOCTYPE html> <html lang="ja"> <style> body { background-color: #fffacd; } h1 { font-size: 16px; color: #ff6666; } #button { width: 200px; text-align: center; } #button a { padding: 10px 20px; display: block; border: 1px solid #2a88bd; background-color: #FFFFFF; color: #2a88bd; text-decoration: none; box-shadow: 2px 2px 3px #f5deb3; } #button a:hover { background-color: #2a88bd; color: #FFFFFF; } </style> <body> <h1> Sample Notification! </h1> <p> A sample notification has been sent. </p> <p id="button"> <a href="https://www.google.co.jp">リンクのテスト</a> </p> </body> </html> メール送信テスト https://localhost/8000/mailへアクセス。 アクセス後、画面は表示しないが、Mailhogを見るとメール送信されているのが確認できる。 参考記事 LaravelでMailHogを導入して快適にメール開発をしよう!【Docker】 Docker × Laravel メールの送信処理をローカルで確認する 開発環境で役に立つメール送信テストツールたち
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Jetson Xavier NX上でOpenGLを呼び出せるDocker環境を構築する

概要 Dockerを標準オプションでrunするとGUIアプリケーションは使用できません.しかし,ROSでの開発の際にはrvizで各種データを可視化することが割と必須なのが現状です.ROSネットワークに接続された別マシンで受信したデータを表示しても良いのですが,やはりJetsonが自前で表示できた方が便利だろうと思います.そこでGUIアプリケーション,それもcudaにアクセスするOpenGLを利用するアプリを動かせる状態に設定していきます.rivzが内部でOpenGLを呼び出しているのでこれを使用する場合は対応がマストです. 手順 まずDockerfileとdocker-compose.ymlを下記のように記述します. ベースイメージはJetpack 4.4.1を想定しているので,他のバージョンを使用している場合には適宜変更してください. Dockerfile FROM nvcr.io/nvidia/l4t-base:r32.4.4 MAINTAINER B-SKY Lab # Set values ENV USER docker ENV PASSWORD docker ENV HOME /home/${USER} ENV SHELL /bin/bash ENV DEBIAN_FRONTEND=noninteractive # nvidia-container-runtime ENV NVIDIA_VISIBLE_DEVICES=all ENV NVIDIA_DRIVER_CAPABILITIES=all # Install basic tools RUN apt update && apt upgrade -y RUN apt install -y tzdata ENV TZ=Asia/Tokyo RUN apt install -y sudo RUN apt install -y vim-gtk \ git \ tmux \ gnupg2 \ glmark2 \ libgl1-mesa-glx \ libgl1-mesa-dri \ libglu1-mesa-dev \ libgles2-mesa-dev \ freeglut3-dev \ build-essential \ bash-completion \ command-not-found \ software-properties-common \ xdg-user-dirs \ xsel \ dirmngr \ gpg-agent \ mesa-utils \ RUN rm -rf /var/lib/apt/lists/* # Create user and add to video group and sudo group RUN useradd --user-group --create-home --shell /bin/false ${USER} RUN gpasswd -a ${USER} video RUN gpasswd -a ${USER} sudo RUN echo "${USER}:${PASSWORD}" | chpasswd RUN sed -i.bak "s#${HOME}:#${HOME}:${SHELL}#" /etc/passwd # Set defalut user USER ${USER} WORKDIR ${HOME} SHELL ["/bin/bash", "-c"] RUN echo "export PATH=/usr/local/cuda/bin:$PATH" >> ~/.bashrc && \ echo "export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH" >> ~/.bashrc && \ source ~/.bashrc # Change name color at terminal # Green (default) --> Light Cyan # RUN cd ~ # RUN sed s/32/36/ .bashrc > .bashrc_tmp # RUN mv .bashrc_tmp .bashrc docker-compose.yml version: '2.3' services: mymelodic: runtime: nvidia build: context: . container_name: mymelodic network_mode: host environment: - "DISPLAY=$DISPLAY" - "QT_X11_NO_MITSHM=1" - "TERM=xterm-256color" - "XAUTHORITY=/tmp/.docker.xauth" volumes: - "/home/$USER:/home/HOST" - "/etc/sudoers.d:/etc/sudoers.d:ro" - "/tmp/.X11-unix:/tmp/.X11-unix:rw" - "/tmp/.docker.xauth:/tmp/.docker.xauth:rw" #devices: #- "/dev/ttyUSB0:/dev/ttyUSB0" tty: true stdin_open: true また,このDockerfileでは基本的な開発ツールのインストールや一般ユーザの作成,パスワードの設定,sudoグループへの追加等も行っています.一番下のRUN3行(Change name color at terminalの部分)のコメントアウトを外すと,コンテナ内に入ったときにターミナルの名前表示がデフォルトの緑から青に変更されます.かなり雑なやり方なので事故防止のためにコメントアウトしています.自己責任でお使いください. 最後に,以下のコマンドで画面転送の設定を行います. XAUTH=/tmp/.docker.xauth touch $XAUTH xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge - これで設定系は完了です.コンテナのビルドおよび起動は以下のコマンドで行えます. docker-compose up -d docker attach mymelodic mymelodic の部分をDockerfileやdocker-compose.ymlの時点で別のコンテナ名にしている場合は,適宜変更してください. 上記の起動手順は以下のようにスクリプトファイルにまとめておくと便利です. launch_compose.sh #!/bin/sh echo "Setting xauth..." XAUTH=/tmp/.docker.xauth touch $XAUTH xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge - echo "Build and Start container" docker-compose up -d docker attach mymelodic このようにまとめておいた場合は,下記のコマンド一発でコンテナのビルド,起動を済ませてコンテナ内に入れます. ./launch_compose 動作確認 下記コマンドでOpenGLベンチマークを実行し,ポップアップが表示されれば成功です. glmark2 参考 GPUを利用するためのDocker プラグイン「NVIDIA Docker」とは?導入手順は?(前編) nvidia-dockerコンテナ内のrViz Using Hardware Acceleration with Docker
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む