20201014のdockerに関する記事は12件です。

DockerでWordPressの開発環境をサクッと構築する

TL;DR

https://github.com/qpSHiNqp/docker-wordpress-dev

これcloneして docker-compose up すると、一瞬でWordPress環境立ち上がるよ

目次

  1. dockerでWordPress環境を構築するまで
  2. テーマ作るときに、コンテンツ部分に適用されるスタイルをよしなにいい感じにする(ついでに書いてるだけ)

dockerでWordPress環境を構築するまで

経緯

たまたまちょいとWordPressいじる必要が生じた。開発環境を整えるために今までは、ローカルにMySQLサーバ立てて、DB作って、ユーザーと権限周り作って整えて、PHP環境作って、Webサーバ環境作って、繋いで、動作確認して... っていういわゆるMAMP的なのを頑張ってやってたんですが、今どきそんなこと普通しないだろ、ということでdockerで環境構築すべく、ちょっと調べた。

構築方法

調べたところ、wordpress っていうdocker imageもあるし、当然のことながら mysql もdocker imageあるので、 docker-compose.yml いい感じに作ればいじゃんという話になり、作った。

作り方についても、 wordpress のDocker HubのDescriptionに丁寧に書いてあったので、参考情報として記載しておく。
ページ中頃の、「... via docker stack deploy or docker-compose」というセクションほぼそのまんま。

今回はテーマとかプラグインを作りたかったので、wp-content/themeswp-content/pluginsをマウントするようにdocker-compose.ymlを作成。
※最新のものはGitHubを参照してください。

version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - wordpress:/var/www/html
      - ./wp-content/themes:/var/www/html/wp-content/themes
      - ./wp-content/plugins:/var/www/html/wp-content/plugins

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql

volumes:
  wordpress:
  db:

これで、 docker-compose up して http://localhost:8080 開くともうすぐに WordPressのセットアップ画面が開くので、そのまま進めば管理画面にいける。

テーマ作るときに、コンテンツ部分に適用されるスタイルをよしなにいい感じにする(ついでに書いてるだけ)

ここから先、本当についでに書いただけなので、自分の備忘録程度にしか使えないと思います。

自作テーマ作るときに、レイアウトとか、見た目とかをstyle.cssで制御すると思うんだけど、WordPressってWYSIWYGエディタを備えたCMSなので、コンテンツ部分のレイアウトはWordPress備え付けのものを生かしてあげる必要がある。

備え付けのstyleは、CSS « WordPress Codexの「WordPress Generated Classes」セクションに書いてあるもの。これを自作テーマの最下部にコピペしてあげることで、WYSIWYGで編集時に指定したレイアウトを実際の表示に反映することができた。

当初、自作style.cssで定義したスタイルがコンテンツ部分の要素にまで適用されていたことでWYSIWYGと見た目がずれてしまうという問題が発生してしまっていたが、おそらく下記のようにマークアップの責任分界をするとだいたい上手くいくような気がする。

  • テンプレ/テーマ側では、コンテンツをwrapするブロック要素のレイアウトだけHTML+CSSで制御してあげて、 <?php the_content(); ?> とかで埋め込むコンテンツ本体のレイアウトに影響しないようなstyle.cssにしてあげる
  • <h1>(か、若しくは<h2>)が投稿タイトルの表示を担当するなら、これはテンプレ側で表示を制御してあげたほうがいい
  • 文字色とかフォントとか、レイアウト以外の見た目に関するスタイルは style.css で定義して、コンテンツにも適用させるようにつくる(厳密に言うとフォントが違うとレイアウトも違ってくるとも言えるけど)

要は、WordPressのWYSIWYGが吐くHTMLなんて予想不可能なので、コンテンツ本文のブロックレイアウティングを自作cssで制御するのはたぶん無理。むしろテーマ作る側は、コンテンツ本文のブロックレイアウティングを制御せず放任してあげるようなクラス/セレクタ設計が必要な気がします。

カラーパレット機能とかサポートするように作っても良かったが、今回はそんなにWordPressの機能をフルサポートするような汎用的なテーマを作る必要がなかったので、最小限の機能サポートだけで実装した。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【0からDockerに挑戦】④Dockerを使ってnginx・puma・rails6.0・mysqlの開発環境を構築する

背景

未経験から自社開発系企業の就職を目指します。
良質なポートフォリオ作成のためDockerを勉強することにしました。

知識レベルとしては、Ruby on railsを使って簡単なアプリケーション開発、gitを使ったバージョン管理、herokuを使ってデプロイできるレベルです。またDockerを学ぶ上で必要とされるlinuxやネットワーク関連の勉強はほぼしていないです。
自分の忘備録かつ、同じくらいのレベルでこれからDockerに挑戦してみようと思っている方に向けて少しでも役に立てればと思います。


最終目標

・Dockerを使って0からRuby on Rails環境(nginx・puma)が構築できるようになること。
以前①〜③でrails6.0とmysqlを使ってDockerの環境を構築したのですが、今後のAWSEC2でデプロイする予定なので、webサーバーとアプリケーション・サーバーを別々にしたほうが良いと考えました。以前までのファイル構成や知識をベースとしています。

【前回までの記事】
【0からDockerに挑戦】①Dockerの概要と用語
【0からDockerに挑戦】②DockerとDocker-composeを使ってRuby on Rails・MYSQLの開発環境をつくる (part1)
【0からDockerに挑戦】③DockerとDocker-composeを使ってRuby on Rails・MYSQLの開発環境をつくる (part2)

前回までで基本的なDockerの知識を抑えていたので、スムーズにいくかなと思ったら、大量のエラーに出会い死にかけました。(結局1日半費やしました笑)

Dockerを使ってnginx・puma・rails6.0・mysqlの開発環境を構築する

今回の環境と条件

・Docker・Docker-composeを使って環境構築をする。
・railsのバージョンは6
・rubyのバージョンは2.6
・データベースはmysql
・webサーバーにnginxを使用。
・アプリケーション・サーバーはpumaを使用。

手順

今回は下記手順で実施したいと思います。
 ①ローカルPC上に必要なディレクトリ・ファイルをつくる
 ②ファイルに必要な記述を書く
 ③docker-composeをビルド・実行させる && rails newをする
 ④必要なファイルの編集・エラーの修正
 ⑤データベース作成・サーバー起動

途中で遭遇したエラーについても説明します。また今回、自分が作りたい環境と同じ構成だったこともあり下記記事を参照しました。とてもわかりやすかったです。ファイルの中身は違いますが、構成とかは真似させて頂いています。

【参照記事】
@eightyさんの記事です。
[Docker + Rails + Puma + Nginx + MySQL]

①ローカルPC上に必要なディレクトリ・ファイルをつくる

今回はデスクトップ上にディレクトリをつくりました。構成は下記になります。

Desktop/
├ webapp/
    ├ containers
      └ nginx
        └ Dockerfile
        └ nginx.conf
    ├ enviroment
      └ db.env
    ├ Dockerfile
    ├ docker-compose.yml
    ├ Gemfile
    ├ Gemfile.lock

今回はコンテナを3つ作ります。1つがDB用、2つ目がwebサーバー用、3つ目がappサーバー用(rails)です。なのでDockerfileを2つ用意する必要があります(前回はrailsとdbでDockerfileが1つでした)。またpumaはrails標準装備ですが、nginxはrails標準装備ではないので別途設定が必要です。

そして補足ですが、railsで使うアプリケーションサーバはpumaかuniconが使われることが多いです。この2つの違いはマルチプロセスとマルチスレッドという通信処理の仕方です。(※詳しくはPumaの本当の力を引き出すの記事をみてください)。処理速度に関してはpumaのほうが優れていることが多く、rails5以降標準搭載されているpumaを使うのが良いかと思います。

②ファイルに必要な記述を書く

1つ1つファイルの説明をします。ただGemfileの記述は前回同様なので省きます。Gemfile.lockも空でよいので説明省きます。

Dockerfile(ruby用)

Dockerfile
FROM ruby:2.6.6
RUN apt-get update && apt-get install -y lsb-release \
      build-essential \
      libpq-dev \
      nodejs &&\
      curl -o- -L https://yarnpkg.com/install.sh | bash \
      && apt remove -y libmariadb-dev-compat libmariadb-dev

RUN wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-common_8.0.18-1debian10_amd64.deb \
    https://dev.mysql.com/get/Downloads/MySQL-8.0/libmysqlclient21_8.0.18-1debian10_amd64.deb \
    https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-community-client-core_8.0.18-1debian10_amd64.deb \
    https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-community-client_8.0.18-1debian10_amd64.deb \
    https://dev.mysql.com/get/Downloads/MySQL-8.0/libmysqlclient-dev_8.0.18-1debian10_amd64.deb

RUN dpkg -i mysql-common_8.0.18-1debian10_amd64.deb \
    libmysqlclient21_8.0.18-1debian10_amd64.deb \
    mysql-community-client-core_8.0.18-1debian10_amd64.deb \
    mysql-community-client_8.0.18-1debian10_amd64.deb \
    libmysqlclient-dev_8.0.18-1debian10_amd64.deb

RUN mkdir /webapp
WORKDIR /webapp

ADD Gemfile /webapp/Gemfile
ADD Gemfile.lock /webapp/Gemfile.lock

RUN bundle install

RUN mkdir -p tmp/sockets

特に前回と比べて変更があった2点を説明します。
1つ目は「apt-get install -y lsb-release \・・・」「apt remove -y libmariadb-dev-compat libmariadb-dev」「RUN wget」「RUN dpkg」のところは、mysqlのエラー対策です。ここで結構苦戦したのですが、mysqlはバージョンによって認証に使われるプラグインが異なるそうです。そのバージョンによる認証エラーを回避するために上記の記述が必要です。(※参考:LinuxベースのDockerからMySQL 8.0に接続するための記述
もちろんdocker-compose.ymlでmysqlのバージョン変更したり、その他設定で変更できるかもしれませんが、自分の場合うまくいかず、この方法で解決しました。こちらもし他に良い設定があったら変更するかもしれないです。

2つ目は、最後の「RUN mkdir -p tmp/sockets」の箇所です。これはソケット通信に必要なファイルです。ソケット通信とは複数のプロセスをネットワークでつなぐときに使う通信です。今回はnginxとpumaをつなぐためにソケット通信を使います。

Dockerfile(nginx用)・nginx.conf

container/nginx/Dockerfile
FROM nginx

RUN rm -f /etc/nginx/conf.d/*
ADD nginx.conf /etc/nginx/conf.d/webapp.conf
CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
container/nginx/nginx.conf
upstream webapp {
  server unix:///webapp/tmp/sockets/puma.sock;
}

server {
  listen 80;
  server_name example.com localhost;

  access_log /var/log/nginx/access.log;
  error_log  /var/log/nginx/error.log;

  root /webapp/public;

  client_max_body_size 100m;
  error_page 404             /404.html;
  error_page 505 502 503 504 /500.html;
  try_files  $uri/index.html $uri @webapp;
  keepalive_timeout 5;

  location @webapp {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_pass http://webapp;
  }
}

上記2つは、@eightyさんの[Docker + Rails + Puma + Nginx + MySQL]の記事をコピペさせていただきました。。。。
ただ内容は、自分のために解説したいです。

1つ目はnginxのDockerfileです。FROMでnginxのイメージを呼びます。nginxのイメージで自動的にnginxの設定ファイルができるのですが、今回は自分でファイルを作り、それを反映させたいので、RUN以下で一回ファイルを消し、ADDで自分の作ったファイルをコンテナ内に反映させます。CMDでビルドが完了したらnginxを起動するように指示しています。

2つ目がeginxの設定ファイルです。upstream以下でnginxからpumaにソケット通信を送ることを指定しています。server以下でポート、IPを指定(今回はlocalhost)、ログをどこに残すか、ドキュメントルート(公開するHTMLや画像の設置場所)の指定、エラーページの際の対応が記してあります。「location @webapp」でリバースプロキシの設定をしています。リバースプロキシとは、webサーバーとインターネットの中間に立ち、webサーバーのアクセスをコントロールするものです


docker-compose.yml

version: '3'
services:
  app:
    build:
      context: .
    env_file:
      - ./environments/db.env
    command: bundle exec puma -C config/puma.rb
    volumes:
      - .:/webapp
      - public-data:/webapp/public
      - tmp-data:/webapp/tmp
      - log-data:/webapp/log
    depends_on:
      - db
  db:
    image: mysql:8.0
    env_file:
      - ./environments/db.env
    volumes:
      - db-data:/var/lib/mysql
  web:
    build:
      context: containers/nginx
    volumes:
      - public-data:/webapp/public
      - tmp-data:/webapp/tmp
    ports:
      - 80:80
    depends_on:
      - app
volumes:
  public-data:
  tmp-data:
  log-data:
  db-data:

こちらも前回との変更点を説明します。serviceが3つに分岐しました(前回は2つ)。dbとweb(webサーバー用)とapp(アプリケーション用)の3つです。dbに関しては前回と変更ほぼないので説明省略します。appとwebに関しては前回1つにまとめていたのを、今回2つに分けた感じです。以下説明です。

・appとweb: env_fileでuserとpasswordが書いてあるファイルの場所を指定しています。webサーバーと同じ環境変数を使うので、ファイルを別途作りそこを指定しました。
・web: buildするのはeginx用のDockerfileなので指定の仕方注意です。
・web: depend_onもwebサーバーはアプリケーションサーバと関係を構築するので、指定の仕方注意です。
・app: commandでpumaを実行させています
volumes関連に関しては「ホストファイル:コンテナファイル」という順序で関連付けられています。


③docker-composeを実行 && rails newをする

ファイルがそろったら「docker-compose」と「rails new」をしましょう。
コマンド指定で一気にやってもいいですし、コンテナを起動して中に入り込んでからrails newをしても大丈夫です。
ただ1点注意が必要です。コンテナの指定はwebではなく、appです。(※railsがあるのがアプリケーションサーバなので当たり前といえば当たり前なのですが、rails+dbだけのコンテナ構築に慣れていると、webコンテナに入ってしまう恐れがあります。私だけかもですが、、、)。

ターミナル
$ docker-compose up -d
$ docker-compose exec app bash
root@35356af5# rails new

④必要なファイルの編集

database.ymlとpuma.rbの編集、そしてmysqlの設定をしておきましょう。

database.yml


(省略)
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <%= ENV.fetch('MYSQL_USER') { 'root' } %>
  password: <%= ENV.fetch('MYSQL_PASSWORD') { 'password' } %>
  host: db

development:
  <<: *default
  database: webapp_development

test:
  <<: *default
  database: webapp_test


ここは前回とほぼ同じなので問題ないと思います。

puma.rb
hreads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i
threads threads_count, threads_count
environment ENV.fetch("RAILS_ENV") { "development" }
plugin :tmp_restart

app_root = File.expand_path("../..", __FILE__)
bind "unix://#{app_root}/tmp/sockets/puma.sock"

stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true

ここは基本どのサイトみてもコピペで問題ないとのことです。
ただ1点注意が必要です。上記の記述では削除していますが、「por ENV.fetch("PORT") { 3000 }」と記載してあることが多いのです。間違っていないのですが、rails sした際にalready existエラーが出る場合はここの記述消しましょう。rails sのデフォルトが3000ポートで、ここで指定したpuma起動のポートと同じになります。そのためrails sするとすでに起動しているpumaが邪魔をして、エラーがでる恐れがあります。

※自分はここで悩みました。他の設定が悪いのか、rails sの起動の仕方が悪いなど、もしかすると他の原因も考えられます。今回は上記の記述削除で対応できました。またrails sの起動時に別ポートで指定するやり方でも対応できました。

ターミナル
docker-compose exec db mysql -u root -p -e"cat grant_user.sql"
db/grant_user.sql
GRANT ALL PRIVILEGES ON *.* TO 'user_name'@'%';
FLUSH PRIVILEGES;

上記をターミナルで入力し、mysqlに権限を付与しましょう。意味はgrant_user.sqlに設定したファイルを開き、そのファイルに書かれている内容をroot権限(コンテナ内はデフォルトでルート権限)で許可するといった意味です。入力するとパスワードを求められますがmysqlのrootuserのパスワードを入力すると認証されます。(※ここもコピペです。)

⑤データベース作成・サーバー起動

ここまでくればあとは「rails db:create」「rails s」をコンテナで実行すれば終了です。
※railsのサーバーを起動すると、「puma.sockets already exist」といったエラーが出る可能性がありますが、その場合はtmp/sockets/にあるpuma.socketを削除すれば問題ないです。

感想・まとめ

ここまで淡々と書いてきましたが、やっているときはたくさんのエラーに出会いました。エラーについて調べてるうちにネットワークやサーバーの知識も増えていき結果的に良かったです。そして最終的にみるとほとんどコピペですね笑。ただ大まかな流れと書いてあるコードの8割は理解できたので少し、進歩したかなと思います。

最初は自分の力だけでなんとかしようとしていましたが、未経験で知識のない自分がゼロからやるっていうのも少し無駄なことの気がしたので、初挑戦のことはコピペでもいいのでまず動かしてみるというところを意識したいです。

参考になった教材

「米国AI開発者がゼロから教えるDocker講座」 
https://www.udemy.com/course/aidocker/
→初心者がDockerを学ぶならこれ!!!めちゃくちゃわかりやすい!!!linuxの基礎からDockerでの環境構築を網羅しています。今回の環境構築もこの教材をベースにしています(もちろんrailsのバージョンとかdbなど自分なりに変えているので同じではないです)もしDocker全然わかないという人はこの講座をぜひ買ってみてください。

「いまさらだけどDockerに入門したので分かりやすくまとめてみた」 
https://qiita.com/gold-kou/items/44860fbda1a34a001fc1
→すごく細かく網羅しています。リファラル的によくみさせていただいてます。

「Docker/Kubernetes 実践コンテナ開発入門 --著 山田 明憲」 
→実践的な書籍、あまりにも初学者だと少しむずかしいかも。→ 基礎覚え得たあとに見返したら非常に良かったです!

「たった1日で基本が身に付く! Docker/Kubernetes超入門 --著」
→初学者が書籍で学びたい場合はこれがとっかかりやすい。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【入門】Vagrant+VirtualBoxをWindow10で構築する

初めてWindow10でVagrantの環境構築を行いました。
色々な入門記事を参考にCentOS7をVagrantとVirtualBoxを使って、構築します。

初めての経験だったので、予期しないエラーが多く発生して大変でした…。

後学の方が簡単にできるようになると幸いです。

環境

Window10
Vagrant2.2.10
VirtualBox5.2.44

Vagrant の練習ファイル作成手順

Hyper-V を無効にする

Docker を使ったことがある Window10 のユーザーは、まず Hyper-V をオフにします。

絶対にOFFにしてください!!!!!

bcdedit /set hypervisorlaunchtype off
この操作を正しく終了しました。

VirtualBox インストール

最新版をインストールしょう。インストーラはこちらから入手し、実行します。

vagrant インストール

最新バージョン(64bi)をインストール。インストーラはこちらから入手し、実行します。
インストール後、OS の再起動が必要です。

再起動後、コマンドプロンプトを起動し、バージョンを確認します。

vagrant -v
Vagrant 2.2.7

コマンドプロンプトで plugin をインストールしておきます。
必要に応じて Chef をインストールしてくれるオムニバスプラグインと、ホスト・ゲスト間の共有フォルダ構成のため VirtualboxGuestAddition ツールを導入します。(ないとエラーが出る)
複製用に vagrant-hostmanager もインストールします。

vagrant plugin install vagrant-omnibus
vagrant plugin install vagrant-vbguest
vagrant plugin install vagrant-hostmanager

アンインストールしたいときは、

vagrant plugin uninstall vagrant-omnibus
vagrant plugin uninstall vagrant-vbguest
vagrant plugin uninstall vagrant-hostmanager

インストールされている pluigin の表示

vagrant plugin list

CentOS7 box の追加

vagrant は box と呼ばれるイメージファイルと構成ファイルを使って管理します。CentOS 7.7 の box を vagrantcloud.comからダウンロードし、virtualbox 用として追加します。

これはコマンドプロンプトでいけます。

不安なぐらい処理時間が長いので早くも休憩です。

> vagrant box add bento/centos-7.7 --provider virtualbox
==> box: Loading metadata for box 'bento/centos-7.7'
    box: URL: https://vagrantcloud.com/bento/centos-7.7
==> box: Adding box 'bento/centos-7.7' (v202002.04.0) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/bento/boxes/centos-7.7/versions/202002.04.0/providers/virtualbox.box
    box: Download redirected to host: vagrantcloud-files-production.s3.amazonaws.com
    box: Progress: 100% (Rate: 457k/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'bento/centos-7.7' (v202002.04.0) for 'virtualbox'!

vagrant 管理用フォルダの作成と初期化

vagrant を管理したい場所のファイルを作成して、プロジェクトの初期化を行う

vagrant init bento/centos-7.7

10MB 程度の Vagrantfile が作成される。

仮想マシンが起動するとログファイルや管理情報が保存される。

仮想マシンを起動

vagrant up コマンドで仮想マシンを起動します。

vagrant up

仮想マシンに接続

vagrant ssh

これで、練習のファイルに接続することが出来ます!!

再度 Docker を使いたいとき

設定を Auto に戻す

bcdedit /set hypervisorlaunchtype auto

作成日 2020/10/14

参考文献

  1. vagrant + VirtualBox + CentOS 7.7 環境構築 (Windows 10)
  2. Windows で Vagrant を起動しようとすると Raw-mode is unavailable courtesy of Hyper-V と言われる
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【入門】Vagrant+VirtualBoxの仮想環境をWindow10上に構築する【環境構築】

初めてWindow10でVagrantの環境構築を行いました。
色々な入門記事を参考にCentOS7をVagrantとVirtualBoxを使って、構築します。

初めての経験だったので、予期しないエラーが多く発生して大変でした…。

後学の方が簡単に環境構築できるように、役に立つと幸いです。

環境

Window10
Vagrant2.2.10
VirtualBox5.2.44

Vagrant の練習ファイル作成手順

Hyper-V を無効にする

Docker を使ったことがある Window10 のユーザーは、まず Hyper-V をオフにします。

絶対にOFFにしてください!!!!!

bcdedit /set hypervisorlaunchtype off
この操作を正しく終了しました。

VirtualBox インストール

僕は、5系の最新版をインストールしました。インストーラはこちらから入手し、実行します。

vagrant インストール

執筆時点の最新バージョン2.2.10をダウンロードしました。基本は最新バージョン(64bit)をインストールしましょう。インストーラはこちらから入手し、実行します。
インストール後、OS の再起動が必要です。

再起動後、コマンドプロンプトを起動し、バージョンを確認します。

vagrant -v
Vagrant 2.2.7

コマンドプロンプトで plugin をインストールしておきます。
必要に応じて Chef をインストールしてくれるオムニバスプラグインと、ホスト・ゲスト間の共有フォルダ構成のため VirtualboxGuestAddition ツールを導入します。(ないとエラーが出る)
複製用に vagrant-hostmanager もインストールします。

vagrant plugin install vagrant-omnibus
vagrant plugin install vagrant-vbguest
vagrant plugin install vagrant-hostmanager

アンインストールしたいときは、

vagrant plugin uninstall vagrant-omnibus
vagrant plugin uninstall vagrant-vbguest
vagrant plugin uninstall vagrant-hostmanager

インストールされている pluigin の表示

vagrant plugin list

CentOS7 box の追加

vagrant は box と呼ばれるイメージファイルと構成ファイルを使って管理します。CentOS 7.7 の box を vagrantcloud.comからダウンロードし、virtualbox 用として追加します。

これはコマンドプロンプトでいけます。

不安なぐらい処理時間が長いので早くも休憩です。

> vagrant box add bento/centos-7.7 --provider virtualbox
==> box: Loading metadata for box 'bento/centos-7.7'
    box: URL: https://vagrantcloud.com/bento/centos-7.7
==> box: Adding box 'bento/centos-7.7' (v202002.04.0) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/bento/boxes/centos-7.7/versions/202002.04.0/providers/virtualbox.box
    box: Download redirected to host: vagrantcloud-files-production.s3.amazonaws.com
    box: Progress: 100% (Rate: 457k/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'bento/centos-7.7' (v202002.04.0) for 'virtualbox'!

vagrant 管理用フォルダの作成と初期化

vagrant を管理したい場所のファイルを作成して、プロジェクトの初期化を行います。

vagrant init bento/centos-7.7

10MB 程度の Vagrantfile が作成される。

仮想マシンが起動するとログファイルや管理情報が保存される。

仮想マシンを起動

vagrant up コマンドで仮想マシンを起動します。

vagrant up

仮想マシンに接続

vagrant ssh

これで、練習用に作成した仮想マシンに接続することが出来ます!!

再度 Docker を使いたいとき

設定を Auto に戻す

bcdedit /set hypervisorlaunchtype auto

作成日 2020/10/14

参考文献

  1. vagrant + VirtualBox + CentOS 7.7 環境構築 (Windows 10)
  2. Windows で Vagrant を起動しようとすると Raw-mode is unavailable courtesy of Hyper-V と言われる
  3. Window10でVirtualBoxが使えない。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerを使ってpytorchでcuda11.0を使用する

2020年10月14日現在では、pytorch公式にはcuda11.0向けのインストール方法が掲載されていません。
そこで、Dockerを使用したcuda11.0向けのpytorchの環境構築の手順を説明します。

前提条件

前提としてDockerとnvidiaドライバーがインストールされているものとします。
これらのインストールは他の記事などを参照してください。

$ nvidia-smi

上記のコマンドで、cudaのバージョンが11.0になっていることも合わせて確認してください。

Pytorchのコンテナをダウンロードする

nvidiaのサイトにアクセスしてユーザー情報を登録後、Pytorchの画面を開いてください。

$ sudo docker pull nvcr.io/nvidia/pytorch:20.09-py3

pull commandに上記のコマンドがあるのでこれをコピーしてターミナルで実行します。

$ sudo docker images

このコマンドでインストールできたかを確認してください。
nvcr.io/nvidia/pytorch 20.09-py3
というimageがあれば成功です。

Pytorchがcudaを使えるか確認する

先ほどのimageを一覧表示するコマンドを実行して、pytorchのIMAGE IDを確認してコピーして下記コマンドを実行します。

$ sudo docker run -it --gpus all [IMAGE ID] bash

その後、bashで

$ python
>> import torch
>> print(torch.cuda.is_available())

これでtrueが返ってきたら成功です。
bashはcontrol + dで抜けれます。(Linux)

コンテナを作成してファイルをマウントする

一度、bashから抜けてください。

$ sudo docker ps -a

上記のコマンドで先ほどbashを実行した際に作成されたcontainerが確認できます。これのCONTAINER IDを使用します。

$ sudo docker inspect [CONTAINER ID]

control + fでWorkingDirを探します。
さらに、自分が作業を行いたいPC上のフォルダのパスをコマンドで確認します。

$ pwd

その後、先ほどのnvidiaのサイトにoverviewで説明されているようにコンテナを作成します。

$ sudo docker run --gpus all -it --rm -v [作業を行いたいフォルダのパス]:[workingDir] nvcr.io/nvidia/pytorch:20.09-py3

私のケースだと

$ sudo docker run --gpus all -it --rm -v /home/myname/Desktop/hoge:/workspace nvcr.io/nvidia/pytorch:20.09-py3

その後、containerが立ち上がることが確認できるはずです。

最後に

タイポなどがある可能性があるので気をつけてください。
公式がインストール方法を掲載してくれるまでの繋ぎになれば幸いです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

docke チュートリアル(メモ)

docker hub からdocker imageをpullしてきましょう

取得コマンド
docker image pull

削除
docker image rm
*hello文などの場合削除はできないのでその時は強制削除コマンド -f で実行してくだい

生成・移動
docker container run

生成のみ
docker container create

起動のみ

docker container start

停止
docker container stop

削除
docker container rm

ここで第一につまずくポイントはimageが削除できなかったりcontainerが削除できなかった場合は
-fで強制的に削除を行っていくかimage container のOSなどのバージョン(名前:xx.x)
などの入力漏れがないのか確認を行ってください。

コンテナとしてOSを起動する(←めんどくさいんで今後主流になってくんじゃね?)
docker run -it os名(タグ)

docker 基本コマンド集

コマンド 説明
docker run コンテナを起動・作成
docker start 存在するコンテナを起動
docker stop コンテナを停止
docker kill コンテナを強制終了
docker ps コンテナを一覧表示
docker rm コンテナを削除
docker attach コンテナの標準入出力に接続
docker exec 起動中のコンテナでコマンドを実行
docker pull docker hub からイメージをダウンロード
docker push docker hub にアップロード
docker image イメージを一覧表示
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker 操作メモ

使用環境

VirtulBox : 6.1
ホスト OS :Ubuntu 18.04
Docer : docker-ce 19.03.13
※ docker のホスト OS は VirtualBox 上で動かしている仮想環境

イメージの実行

CentOS を特権を付けて起動する場合。

$ sudo docker run -itd --privileged --name PROCESS_NAME IMAGE_NAME /sbin/init
$ sudo docker run -itd --privileged -p 8080:80 --name PROCESS_NAME IMAGE_NAME /sbin/init
                                       ↑ポートを指定する場合はこんな感じ

※docker グループに実行するユーザを入れていれば sudo は必要ない。

コンテナのステータス確認

ストリームさせる

$ sudo docker stats centos8

ストリームさせない

$ sudo docker stats centos8 --no-stream

起動した後でメモリリミットを設定する

いろいろ躓いたが以下を実行することで成功。

$ sudo docker update -m 1G --memory-swap -1 CONTAINER_ID

以下躓いたことなど

初めは以下のコマンドを実行したがエラーとなってしまった。

$ sudo docker update -m 1G CONTAINER_ID
Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.

grub の swap 設定を変更することで解決。

$ sudo vi /etc/default/grub
$ sudo update-grub
grub.cfg をアップデートしてホスト OS を再起動。

再起動後に再度実行したところ以下のエラーとなった。

$ docker update -m 1G 917f3986a06b
Error response from daemon: Cannot update container 917f3986a06bb9f99b095af4f3e5334ce125f596f9926db2733bdb4d20868b47: Memory limit should be smaller than already set memoryswap limit, update the memoryswap at the same time

そこで、「--memory-swap -1」オプションを設定し実行したところ成功。

以下のようにメモリに負荷をかけたところ 1G の制限が掛かっていることが確認できる。

$ docker exec -it centos8 /bin/bash
# /dev/null < `yes`
$ docker stats centos8 --no-stream
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
917f3986a06b        centos8             106.50%             1GiB / 1GiB         100.00%             15.4kB / 10.4kB     52.3MB / 4.1kB      229
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker, java, vscodeの開発環境を構築

前回の記事

初心者がdocker for macをインストールしてphp7.0の動作環境を用意する

この記事

前回はphp7.0の動作環境を用意しました。
今回はjavaを用意してみます。
目標はdocker + java + vscode。

参考記事

Visual Studio CodeのRemote DevelopmentとDockerで快適な開発環境をゲット

Remote Development

Remote Developmentの拡張機能をインストール

Microsoftが公開してるテストプロジェクトのクローンを用意

git
git clone https://github.com/Microsoft/vscode-remote-try-java

テストプロジェクトを開く

Visual Studio Codeの左下の緑のボタンをクリック>Remote-Containers: Open Folder in Container>gitのクローンフォルダを選択

dockerでコンテナが起動しているか確認

スクリーンショット 2020-10-14 8.17.54.png

ビルドしてプロジェクトが動作するか確認

スクリーンショット 2020-10-14 8.20.36.png

まとめ

前回の記事の方法よりRemote Developmentを使用するのが簡単ですね。
javaのバージョンも選択できるみたい。
ありがとう、Microsoft!!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

*小技* Dockerコンテナに簡単に入っちゃう?

以下はLaravelプロジェクトをDockerを使ってnginx, Laravel, mysqlの3つコンテナで立ち上げたときの様子。

92d7dbcf85dd        sample_web                                                                                    "nginx -g 'daemon of…"   5 seconds ago       Up 3 seconds        0.0.0.0:8000->80/tcp                             nginx
389ce68b90fb        sample_laravel                                                                                "docker-php-entrypoi…"   6 seconds ago       Up 4 seconds        9000/tcp                                         laravel
4c920ce5990f        mysql:5.7                                                                                     "docker-entrypoint.s…"   7 seconds ago       Up 5 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp                mysql

ここからsample_laravelに入りたいときどう言うコマンドを叩きますか?

(1) $ docker exec -it laravel sh

とか

(2) $ docker exec -it 389ce68b90fb sh

を叩いている人も割と多いと思います。

(1)ではコンテナ名がlaravelみたいな短い場合はまだ良いですがコンテナ構成が複雑になるとそれに従ってコンテナ名も複雑になってしまう。

(2)では長い上に法則性もなくもはやタイポしろと言っているようなものですね(笑) 

コピペするにしてもキーボードから手を離すのが煩わしい?

そんな皆さまは以下のコマンドでコンテナに入っちゃいましょう!

(3) $ docker exec -it 3 sh

たったこれだけです!遥かに楽!
これはが何をしているかと言うと

(2) $ docker exec -it 3(89ce68b90fb) sh

(89ce68b90fb)を省略。

つまり、コンテナIDを指定してdocker execを行う際にはコンテナを識別できれば
全桁入力する必要がないのです。
まあ上記は極端な例ですが(笑)

今回は3から始まるコンテナIDが割り振られたコンテナが他にないため
(3)でも問題ありませんでしたが実際はもっと多くのコンテナが立ち上がるかもしれないので
上位3桁くらいを入力したほうがスムーズに入れるのではないでしょうか!

以上知ってたら便利なDockerコンテナに入る小技でした!?

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Goで簡単Webアプリ

Goの目覚め

低レイヤーの知識を身につけて、さいつよ自給自足エンジニアになるぞ!
...と意気込みC言語を学んでみたものの面白さが見出せなかった自身へ送る。

ペルソナ

Webアプリを作りたいなら、現状NodeやRailsで十分と思ってる。
デスクトップアプリなら、Electronで。
ターミナルアプリとか、OSの機能を使うぜ系でGoとか使ってみたいなぁと思ってる方 (最近流行りのDockerやGitHub CLIもGo製だし、使えれば遊べそう)。

本記事の目的

Goを学ぼうかどうか判断するために、簡単なWebアプリを作ってみます (アクセスしたら、Hello Worldと表示するだけ)。

開発環境

Goを信用して良いのか分からなかったので、環境を汚さないために、Dockerでやります。
面白かったら、デバッカーとかで内部まで見たいので、ローカルで環境構築します。

ディレクトリ構成は以下のようにしました。
compileFileディレクトリ内にgoファイルを置いて、ビルドしていきます。

compileFile (ディレクトリ)
Dockerfile
docker-compose.yml
# Dockerfile
FROM golang:latest
RUN mkdir -p /go/src
docker-compose.yml
version: '3'
services:
  go:
    build: .
    ports:
      - "8080:8080"
    volumes:
      - ./compileFile:/go/src
    working_dir: /go/src

コンテナ内に入って、goのコマンドを確かめてみます。
--service-portsを指定しないと、8080ポート同士を繋げることはできないので、注意です。
docker psでちゃんとポートフォワードできていることを確認しておきます。

$ docker-compose run --service-ports go /bin/bash
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
af4f9c066ecd        golean_go           "/bin/bash"         7 seconds ago       Up 2 seconds        0.0.0.0:8080->8080/tcp   golean_go_run_a79a836040ab

ひとまず、go と打ってみて、使えるコマンドを確認します。

Go is a tool for managing Go source code.

Usage:

    go <command> [arguments]

The commands are:

    bug         start a bug report
    build       compile packages and dependencies
    clean       remove object files and cached files
    doc         show documentation for package or symbol
    env         print Go environment information
    fix         update packages to use new APIs
    fmt         gofmt (reformat) package sources
    generate    generate Go files by processing source
    get         add dependencies to current module and install them
    install     compile and install packages and dependencies
    list        list packages or modules
    mod         module maintenance
    run         compile and run Go program
    test        test packages
    tool        run specified go tool
    version     print Go version
    vet         report likely mistakes in packages

Use "go help <command>" for more information about a command.

Additional help topics:

    buildconstraint build constraints
    buildmode       build modes
    c               calling between Go and C
    cache           build and test caching
    environment     environment variables
    filetype        file types
    go.mod          the go.mod file
    gopath          GOPATH environment variable
    gopath-get      legacy GOPATH go get
    goproxy         module proxy protocol
    importpath      import path syntax
    modules         modules, module versions, and more
    module-get      module-aware go get
    module-auth     module authentication using go.sum
    module-private  module configuration for non-public modules
    packages        package lists and patterns
    testflag        testing flags
    testfunc        testing functions

Use "go help <topic>" for more information about that topic.

go build go run go fmtは近いうちに使いそうです。

プロジェクト作成

馴染みが深いWebアプリからGoを理解していこうと思いました。
サンプルコードとか見ながら、Hello Worldをブラウザ上に表示するプログラムを書きます。

server/main.go
package main

import "io"
import "net/http"

func mainHandler(w http.ResponseWriter, req *http.Request) {
    io.WriteString(w, `Hello World!!!`)
}

func main(){
    http.HandleFunc("/main", mainHandler)
    http.ListenAndServe(":8080", nil)
}

1コマンドで整形できるので、整形後ビルドします!
ちなみに、ビルド時にリンターも働いているのか、改行の位置や使ってないパッケージがあると怒られます。

ビルドすると、goファイルのあるディレクトリ名の実行ファイルが作られました。

$ go fmt
$ go build
$ ls
server main.go
$ ./server

http://localhost:8080/main にアクセスすると、Hello Worldを確認できました!

スクリーンショット 2020-10-13 1.23.10.png

ちなみに、Macで動かしたい場合は、以下でMac用にコンパイルできます。

$ GOOS=darwin GOARCH=amd64 go build

net/httpパッケージ

わかりやすいところから見ていきます。
これでサーバーを立てられるようです。
第一引数がポートの指定、第二引数でHandlerを選択できるようで、nilの場合デフォルトのDefaultServeMuxが使われるようです。

http.ListenAndServe(":8080", nil)

DefaultServeMuxって何?

ドキュメントを読み進めると、以下の記述にあたります。

HandleFunc registers the handler function for the given pattern in the DefaultServeMux.
The documentation for ServeMux explains how patterns are matched.

HandleFuncでURLのパターンに対応するハンドラーをDefaultServerMuxに登録できる...みたいなことが書いてあります。ルーティング的な何かと思っておきましょうか。

なので、以下は/mainにアクセスしたら、mainHandlerの処理を実行と読めます。

http.HandleFunc("/main", mainHandler)

ioパッケージの方は何してるか分かるので、置いておきます。

document Package http

総括

GoをWeb開発で使いたい!という気持ちにはなりませんが、少なくともCよりは楽しいと感じました!
ターミナルアプリとか何か作りたいですね。
当面はGoの使い方を学ぶために、フレームワークとか使って、簡単なWebアプリから作ってみようかなと思いました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Goのnet/httpパッケージでHello WorldするだけのWebアプリ

Goの目覚め

低レイヤーの知識を身につけて、さいつよ自給自足エンジニアになるぞ!
...と意気込みC言語を学んでみたものの面白さが見出せなかった自身へ送る。

ペルソナ

Webアプリを作りたいなら、現状NodeやRailsで十分と思ってる。
デスクトップアプリなら、Electronで。
ターミナルアプリとか、OSの機能を使うぜ系でGoとか使ってみたいなぁと思ってる方 (最近流行りのDockerやGitHub CLIもGo製だし、使えれば遊べそう)。

本記事の目的

Goを学ぼうかどうか判断するために、簡単なWebアプリを作ってみます (アクセスしたら、Hello Worldと表示するだけ)。

開発環境

Goを信用して良いのか分からなかったので、環境を汚さないために、Dockerでやります。
面白かったら、デバッカーとかで内部まで見たいので、ローカルで環境構築します。

ディレクトリ構成は以下のようにしました。
compileFileディレクトリ内にgoファイルを置いて、ビルドしていきます。

compileFile (ディレクトリ)
Dockerfile
docker-compose.yml
# Dockerfile
FROM golang:latest
RUN mkdir -p /go/src
docker-compose.yml
version: '3'
services:
  go:
    build: .
    ports:
      - "8080:8080"
    volumes:
      - ./compileFile:/go/src
    working_dir: /go/src

コンテナ内に入って、goのコマンドを確かめてみます。
--service-portsを指定しないと、8080ポート同士を繋げることはできないので、注意です。
docker psでちゃんとポートフォワードできていることを確認しておきます。

$ docker-compose run --service-ports go /bin/bash
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
af4f9c066ecd        golean_go           "/bin/bash"         7 seconds ago       Up 2 seconds        0.0.0.0:8080->8080/tcp   golean_go_run_a79a836040ab

ひとまず、go と打ってみて、使えるコマンドを確認します。

Go is a tool for managing Go source code.

Usage:

    go <command> [arguments]

The commands are:

    bug         start a bug report
    build       compile packages and dependencies
    clean       remove object files and cached files
    doc         show documentation for package or symbol
    env         print Go environment information
    fix         update packages to use new APIs
    fmt         gofmt (reformat) package sources
    generate    generate Go files by processing source
    get         add dependencies to current module and install them
    install     compile and install packages and dependencies
    list        list packages or modules
    mod         module maintenance
    run         compile and run Go program
    test        test packages
    tool        run specified go tool
    version     print Go version
    vet         report likely mistakes in packages

Use "go help <command>" for more information about a command.

Additional help topics:

    buildconstraint build constraints
    buildmode       build modes
    c               calling between Go and C
    cache           build and test caching
    environment     environment variables
    filetype        file types
    go.mod          the go.mod file
    gopath          GOPATH environment variable
    gopath-get      legacy GOPATH go get
    goproxy         module proxy protocol
    importpath      import path syntax
    modules         modules, module versions, and more
    module-get      module-aware go get
    module-auth     module authentication using go.sum
    module-private  module configuration for non-public modules
    packages        package lists and patterns
    testflag        testing flags
    testfunc        testing functions

Use "go help <topic>" for more information about that topic.

go build go run go fmtは近いうちに使いそうです。

プロジェクト作成

馴染みが深いWebアプリからGoを理解していこうと思いました。
サンプルコードとか見ながら、Hello Worldをブラウザ上に表示するプログラムを書きます。

server/main.go
package main

import "io"
import "net/http"

func mainHandler(w http.ResponseWriter, req *http.Request) {
    io.WriteString(w, `Hello World!!!`)
}

func main(){
    http.HandleFunc("/main", mainHandler)
    http.ListenAndServe(":8080", nil)
}

1コマンドで整形できるので、整形後ビルドします!
ちなみに、ビルド時にリンターも働いているのか、改行の位置や使ってないパッケージがあると怒られます。

ビルドすると、goファイルのあるディレクトリ名の実行ファイルが作られました。

$ go fmt
$ go build
$ ls
server main.go
$ ./server

http://localhost:8080/main にアクセスすると、Hello Worldを確認できました!

スクリーンショット 2020-10-13 1.23.10.png

ちなみに、Macで動かしたい場合は、以下でMac用にコンパイルできます。

$ GOOS=darwin GOARCH=amd64 go build

net/httpパッケージ

わかりやすいところから見ていきます。
これでサーバーを立てられるようです。
第一引数がポートの指定、第二引数でHandlerを選択できるようで、nilの場合デフォルトのDefaultServeMuxが使われるようです。

http.ListenAndServe(":8080", nil)

DefaultServeMuxって何?

ドキュメントを読み進めると、以下の記述にあたります。

HandleFunc registers the handler function for the given pattern in the DefaultServeMux.
The documentation for ServeMux explains how patterns are matched.

HandleFuncでURLのパターンに対応するハンドラーをDefaultServerMuxに登録できる...みたいなことが書いてあります。ルーティング的な何かと思っておきましょうか。

なので、以下は/mainにアクセスしたら、mainHandlerの処理を実行と読めます。

http.HandleFunc("/main", mainHandler)

ioパッケージの方は何してるか分かるので、置いておきます。

document Package http

総括

GoをWeb開発で使いたい!という気持ちにはなりませんが、少なくともCよりは楽しいと感じました!
ターミナルアプリとか何か作りたいですね。
当面はGoの使い方を学ぶために、フレームワークとか使って、簡単なWebアプリから作ってみようかなと思いました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unity開発環境をdocker上に構築する

概要

  • ホスト側のGUIでdocker上のUnityEditorを起動する方法を紹介します
  • UbuntuのUnity導入手順が面倒だったのでdockerfileにまとめました
  • ほとんど前回の投稿と同じ内容です
  • 簡単に使える dockerfile がなかったので作って公開しました → chikuta-dockerfiles

検証環境

今回検証した環境は以下になります。

Hardware
cpu - AMD Ryzen 9 3900X
gpu - Geforce RTX 2060 super
ram - 32G

Software
os - ubuntu 20.04.1
kernel - Linux define 5.4.0-48-generic
docker - 19.03.13
nvidia-driver - 450.66
cuda version - 11.0

nvidia-smi の出力を添付しておきます。

$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.66       Driver Version: 450.66       CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce RTX 206...  Off  | 00000000:0E:00.0  On |                  N/A |
| 38%   40C    P8    11W / 175W |    916MiB /  7979MiB |      1%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

環境整備

最初にnvidia-container-runtimeをインストールします。

# apt 関連設定
$ curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | sudo apt-key add -
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list

# nvidia-container-runtimeインストール
$ sudo apt update
$ sudo apt install nvidia-container-runtime

# docker service の再起動
$ sudo systemctl restart docker.service

次に docker group に自身の UID を登録します。docker を使っている人はやっていると思いますが念の為。

$ sudo usermod -a -G docker `id -un`
$ sudo systemctl restart docker.service

実行方法

次にdockerイメージのビルドを行います。

$ git clone https://github.com/chikuta/chikuta-dockerfiles.git
$ cd chikuta-dockerfiles
$ ./docker/ros-bionic-melodic-unity/build-docker-image.bash

次に以下のコマンドを実行することでビルドしたイメージのコンテナを起動できます。スクリプトの中身はxhost周りの処理とdockerの引数をラッピングしたものです。必要に応じて編集をすれば自分の環境を作れるで積極的にカスタマイズしましょう。

$ cd chikuta-dockerfiles
$ ./docker/ros-bionic-melodic-unity/run-docker-container.bash

スクリプトを実行すると青色のterminatorが立ち上がります。これは dockerコンテナ上で動いているターミナルアプリケーションになるため、ここで実行したコマンドは全てdockerコンテナ上で処理されます。
次にUnityHubを立ち上げてみます。

cd /opt/unity
./UnityHub.AppImage

unityhub.png

必要な環境をインストールした後にUnityEditorを立ち上げてみましょう。
画像は適当な Free Island Collection をAsset Storeから取得して表示したものになります。

unityeditor.png

次はROS連携あたりを書いていきます。

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む