SlideShare une entreprise Scribd logo
1  sur  90
Linuxのお話とdockerでの環境構築
Linuxの特徴
LinuxとはOSの一種
いいところ
- 物によっては無料で使えるのでライセンス料金を節約できる
- 起動が早い(余分なものが入っていないので)
- 機体の種類を問わない
- オープンソースなので誰でも開発できる
悪いところ
- エンジニアじゃないと難しい(エンジニアでも難しい)
- 日本語が充実しているとは言えない
つまり
- エンジニアにはデメリットなし!!!
Linuxの種類
RedHat系
CentOS
Fedora
Rocky Linux
Debian系
Debian
Ubuntu
Linux mint
Slackware系
Slackware
※ 赤字はメジャーなOS
現在の主流
ちょっと前まで
RedHat:CentOS
Debian:Ubuntu
これから先
RedHat:Rocky Linux
Debian:Ubuntu
実は。。。
RedHat系のCentOSが2024年6月30日でサポートが終了になります。
そのため今までCentOSを使っているシステムは同じ
RedHatベースのRocky LinuxかUbuntu等の別系統のOSに
載せ替える必要があります。
ここからハンズオン
アジェンダ
- サーバ構築体験 with docker (コマンド編)
- サーバ構築体験 with docker (コード編)
- サーバ構築体験 with docker (image編)
今回の構成
リバースプロキシ
- Nginx
アプリケーション(API)
- Ruby On Rails(6.1.5)
- ruby(3.0.5)
アプリケーション(Front)
- vue-cli
データベース
- MySql(8.0.23)
上記4つのコンテナを作成していきます。
事前準備
適当な場所に「docker-workshop」ディレクトリを作成してください
ホストのhostsファイルに設定を追加
・Macの場合
sudo vi /etc/hosts
127.0.0.1 workshop-local.jpを追加
・Windows
C:¥windows¥system32¥drivers¥etc¥hosts (管理者権限)
127.0.0.1 workshop-local.jpを追加
コマンド編
作成したdocker-workshopディレクトリに「command」というディレクトリを作
成してください。
commandディレクトリ直下「api」ディレクトリと「front」ディレクトリを作成
してください。
「api」ディレクトリと「front」ディレクトリの直下に「docker-compose.yml」
を作成
frontのdocker-compose.yml
スピーカーノートに書いてあるのでコピペしてください
※M1使ってる人は`tty:ture`の下の行に以下を追加
platform: linux/x86_64
frontのdockerディレクトリ
command/frontディレクトリに「docker」ディレクトリを作成
「docker」ディレクトリ直下に「vue」ディレクトリを作成
「vue」ディレクトリ直下にdockerfileを作成
dockerfileの中身はスピーカーノートに書いてあるのでコピペして使ってください
コンテナを立ち上げる
・docker-compose up -d
vueコンテナの初期設定
・docker-compose exec vue bash
・ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
・apt update
・apt install tzdata curl git vim build-essential libz-dev
vueコンテナにnode.jsとvue-cliをインストール
・curl -LO https://nodejs.org/dist/v18.13.0/node-v18.13.0-linux-x64.tar.xz
・tar xvf node-v18.13.0-linux-x64.tar.xz
・mv node-v18.13.0-linux-x64 /opt/node
・export PATH=$PATH:/opt/node/bin
・npm install -g yarn
・yarn global add @vue/cli
vueプロジェクトを作成
・cd /var/www/src
・vue create .
・選択内容はスピーカーノート参照
vueプロジェクトにproxyと通信する設定を追加
・vue.config.jsの内容をスピーカーノートの内容に変更
・yarn serve
APIと通信するコードを追加
・command/front/src/src/views/AboutView.vueを編集
・内容はスピーカーノートを参照
apiのdocker-compose.yml
スピーカーノートに書いてあるのでコピペしてください
※M1使ってる人は`tty:ture`の下の行に以下を追加
platform: linux/x86_64
apiのdockerディレクトリ
command/apiディレクトリに「docker」ディレクトリを作成
「docker」ディレクトリ直下に「rails」、「nginx」ディレクトリを作成
「rails」、「nginx」ディレクトリ直下にdockerfileを作成
dockerfileの中身はスピーカーノートに書いてあるのでコピペして使ってください
コンテナを立ち上げる
・docker-compose up -d
railsコンテナにRailsプロジェクトを作成 ①
・docker-compose exec rails bash
・ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
・apt update
・apt install tzdata curl git vim build-essential libz-dev
・curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-installer
| bash
・echo 'eval "$(~/.rbenv/bin/rbenv init - bash)"' >> ~/.bashrc
・source ~/.bashrc
・rbenv -v
railsコンテナにRailsプロジェクトを作成 ②
・rbenv install 3.0.5
TIPS:1 TTY
Dockerはプロセスを仮想化するため、プロセスが完了するとコンテナは終了して
しまいます。
今回もttyを設定しないと、プロセスを指定していないのでコンテナは立ち上がっ
てすぐに終了してしまいます。
ttyを設定すると仮想的な標準入出力を受け待ちするデバイスを追加します。
このデバイスを追加することでプロセスが完了することを防ぐので、コンテナを
継続させることができます。
TIPS:2 context
docker-compose.ymlには必ずcontextを設定しましょう。
contextはbuildを実行する際のカレントディレクトリを指定するために利用します。
設定しない場合は、各dockerfileのディレクトリがカレントディレクトリになりま
す。
複数のコンテナで同じファイルを共有する際に、contextを設定しておくことでア
クセスパスがシンプルになります。
TIPS:3 volumes
volumesは二つの使い方があります。
①ホストとコンテナでファイルを共有する。ホストでファイルを編集しても、コ
ンテナでファイルを編集しても相互に反映されます。ソースコードをコンテナに
配置するときになどに利用します。
②Dockreがもつローカルのストレージにデータを保存する。DBのデータ永続化
等で利用します。ファイル構成として保持する必要はないがローカルには保持し
ておかなくてはいけないデータを保持するときに利用します。
TIPS:4 ports
ホストとコンテナで通信をするポートを取り決める際に使用します。
今回の例ではホストの80番ポートにきた通信をコンテナの80番ポートに転送する
ために利用しています。
コンテナ間の通信のみの場合は指定しなくても大丈夫です。
railsコンテナにRailsプロジェクトを作成 ③
・rbenv global 3.0.5
・ruby -v
・gem install rails -v 6.1.5
・rails -v
railsコンテナにRailsプロジェクトを作成 ④
・cd /opt
・curl -LO https://nodejs.org/dist/v18.13.0/node-v18.13.0-linux-x64.tar.xz
・tar xvf node-v18.13.0-linux-x64.tar.xz
・mv node-v18.13.0-linux-x64 node
・export PATH=$PATH:/opt/node/bin
・node -v
railsコンテナにRailsプロジェクトを作成 ⑤
・npm install -g yarn
・yarn -v
・cd /var/www/src
・rails new . --api
コントローラーを作成
・bin/rails g controller api/v1/samples index
・内容はスピーカーノートを参照
RailsのConfigファイルを編集
・config/application.rbのApplicationクラス内に以下を追加
config.hosts << "workshop-local.jp"
・bin/rails s -b 0.0.0.0
NginxコンテナにNginxをインストール
・docker-compose exec nginx bash
・ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
・apt update
・apt install tzdata nginx vim
・nginx -v
・設定ファイルを作成(スピーカーノート参照)
・nginx -t
・nginx
・ps aux
・ブラウザでhttp://localhostを表示
アプリケーション用の設定ファイルを作成
・設定ファイルを作成(スピーカーノート参照)
・nginx -t
・nginx -s reload
コンテナが正しく作成できているか確認
・ブラウザでhttp://workshop-local.jpを表示
・ブラウザでhttp://workshop-local.jp/aboutを表示
後片付け
・exit
・docker-compose down --rmi all
コード編
・作成したdocker-workshopディレクトリに「code」というディレクトリを作成
してください。
・codeディレクトリ直下「api」ディレクトリと「front」ディレクトリを作成し
てください。
「api」ディレクトリと「front」ディレクトリの直下にcommandディレクトリで
作成した「docker-compose.yml」をコピー
frontのdockerディレクトリ
code/frontディレクトリに「docker」ディレクトリを作成
「docker」ディレクトリ直下に「vue」ディレクトリを作成
「vue」ディレクトリ直下にdockerfileを作成
dockerfileの中身はスピーカーノートに書いてあるのでコピペして使ってください
frontのコンテナを作成
・docker-compose build
・docker-compose up -d
vueプロジェクトを作成
・docker-compose ps
・docker-compose exec vue bash
・pwd
・vue create .
・選択内容はスピーカーノート参照
vueプロジェクトにproxyと通信する設定を追加
・vue.config.jsの内容をスピーカーノートの内容に変更
・yarn serve
APIと通信するコードを追加
・code/front/src/src/views/AboutView.vueを編集
・内容はスピーカーノートを参照
vueのDockerfileを編集
・dockerfileの末尾に以下を追加
CMD ["yarn", "serve"]
・docker-compose.ymlのtty:trueを削除
vueコンテナを再作成
・exit
・docker-compose build
・docker-compose up -d
apiのdockerディレクトリ
code/apiディレクトリに「docker」ディレクトリを作成
「docker」ディレクトリ直下に「rails」、「nginx」ディレクトリを作成
「rails」、「nginx」ディレクトリ直下にdockerfileを作成
Railsコンテナのdockerfileを作成
・api/docker/rails直下のdockerfileを編集
・スピーカーノートの内容をコピーしてください。
Nginxコンテナのdockerfileを作成
・api/docker/nginx直下のdockerfileを編集
・スピーカーノートの内容をコピーしてください。
・docker-compose.ymlのtty:trueを削除
Nginxの設定ファイルを作成(app.conf)
api/docker/nginx直下にapp.confというファイルを作成してください。
内容はスピーカーノートからコピーしてください。
Nginxの設定ファイルを作成(test.conf)
api/docker/nginx直下にtest.confというファイルを作成してください。
内容はスピーカーノートからコピーしてください。
apiのコンテナを作成
・docker-compose build
dockerfileの命令について
・RUN:コンテナ内で実行するコマンド
・COPY:ローカルのファイルをコンテナにコピーする
・ADD:COPYと同様だが、圧縮ファイルは展開される。COPYの方が望ましい。
・ENV:コンテナ内の環境変数を設定する
・ARG:dockerfile内で利用できる変数を定義できる
・ENTRYPOINT:コンテナ起動時に必ず実行されるコマンド
・CMD:ENTRYPOINTの引数
Nginxのdockerfileの解説
・ENTRYPOINTを設定することで、コンテナ起動時にNginxをフォアグランドで
実行するようにしている。
・ENTRYPOINTではただNginxを起動するコマンドになっている。
・CMDでNginxをフォアグランドで実行するオプションを追加している。
・フォアグランドでNginxのプロセスが動き続けるので、ttyがなくてもコンテナ
の起動が継続される。
apiのコンテナを作成
・docker-compose up -d
Railsのプロジェクトを作成
・docker-compose exec rails bash
・pwd
・ruby -v
・node -v
・yarn -v
・rails -v
・rails new . --api
コントローラーを作成
・bin/rails g controller api/v1/samples index
・内容はスピーカーノートを参照
RailsのConfigファイルを編集
・config/environments/development.rbのApplicationクラス内に以下を追加
config.hosts << "workshop-local.jp"
railsのDockerfileを編集
・dockerfileの末尾に以下を追加
COPY ./src/Gemfile /var/www/src
COPY ./src/Gemfile.lock /var/www/src
RUN bundle install
CMD rm -f tmp/pids/server.pid && bundle install && bin/rails s -b 0.0.0.0
・dockerfileの以下を削除
gem install rails -v 6.1.5
apiのdocker-compose.ymlを修正
・docker-compose.ymlのtty:trueを削除
apiのコンテナを再作成
・docker-compose build
・docker-compose up -d
コンテナが正しく作成できているか確認
・ブラウザでhttp://loclhostを表示
・ブラウザでhttp://workshop-local.jpを表示
・ブラウザでhttp://workshop-local.jp/aboutを表示
後片付け
・docker-compose down –rmi all
Railsのdockerfileの解説
・初回のコンテナ起動時はRailsのプロジェクトがなかったので、CMDを指定して
も対象がないので失敗してしまう。
・プロジェクトの雛形を作成したので、コンテナの中に入ってRails sとを実行す
るよりはコンテナ作成完了時に自動で実行した方が楽なので、CMDを追加
・server.pidを削除するのは、正常終了ができずゾンビプロセスになった場合を考
慮して起動する前にクリーンな状態にするため。
イメージ編
・作成したdocker-workshopディレクトリに「image」というディレクトリを作成
してください。
・imageディレクトリ直下「api」ディレクトリと「front」ディレクトリを作成し
てください。
「api」ディレクトリと「front」ディレクトリの直下にcommandディレクトリで
作成した「docker-compose.yml」をコピー
frontのdockerディレクトリ
image/frontディレクトリに「docker」ディレクトリを作成
「docker」ディレクトリ直下に「vue」ディレクトリを作成
「vue」ディレクトリ直下にdockerfileを作成
dockerfileの中身はスピーカーノートに書いてあるのでコピペして使ってください
frontのコンテナを作成
・docker-compose build
・docker-compose up -d
・docker-compose exec vue bash
vueプロジェクトを作成
・vue create .
・選択内容はスピーカーノート参照
vueプロジェクトにproxyと通信する設定を追加
・vue.config.jsの内容をスピーカーノートの内容に変更
APIと通信するコードを追加
・code/front/src/src/views/AboutView.vueを編集
・内容はスピーカーノートを参照
vueのdockerfileを編集
・コンテナを起動時にvueプロジェクトが起動するようにする
・dockerfileの末尾に以下を追加
CMD [“yarn”, “serve”]
・docker-compose.ymlからtty: trueを削除
apiのdockerディレクトリ
image/apiディレクトリに「docker」ディレクトリを作成
「docker」ディレクトリ直下に「rails」、「nginx」、「mysql」ディレクトリを
作成
「rails」、「nginx」、「mysql」ディレクトリ直下にdockerfileを作成
apiのdocker-compose.ymlを編集
・スピーカーノートの内容をコピーしてください。
Railsコンテナのdockerfileを作成
・api/docker/rails直下のdockerfileを編集
・スピーカーノートの内容をコピーしてください。
Nginxコンテナのdockerfileを作成
・api/docker/nginx直下のdockerfileを編集
・スピーカーノートの内容をコピーしてください。
Nginxの設定ファイルを作成(app.conf)
api/docker/nginx直下にapp.confというファイルを作成してください。
内容はスピーカーノートからコピーしてください。
Nginxの設定ファイルを作成(test.conf)
api/docker/nginx直下にtest.confというファイルを作成してください。
内容はスピーカーノートからコピーしてください。
Mysqlのdockerfileを作成
・api/docker/mysql直下のdockerfileを編集
・スピーカーノートの内容をコピーしてください。
Mysqlの設定ファイルを作成
api/docker/mysql直下にmy.cnfというファイルを作成してください。
内容はスピーカーノートからコピーしてください。
apiのコンテナを作成
・docker-compose build
・docker-compose up -d
Railsのプロジェクトを作成
・docker-compose exec rails bash
・pwd
・ruby -v
・node -v
・yarn -v
・rails -v
・rails new . --api
コントローラーを作成
・bin/rails g controller api/v1/samples index
・内容はスピーカーノートを参照
RailsのConfigファイルを編集
・config/environments/development.rbのApplicationクラス内に以下を追加
config.hosts << "workshop-local.jp"
RailsのGemファイルを編集
・image/api/src/Gemfileの末尾に以下を追加
gem "mysql2"
・bundle install
Railsにデータベースの設定を追加
・image/api/src/config/database.yml
・内容はスピーカーノートを参照してください
・bin/rails db:create
・bin/rails db:migrate:status
Dockerfileを編集
・dockerfileの末尾に以下を追加
COPY ./src/Gemfile /var/www/src
COPY ./src/Gemfile.lock /var/www/src
RUN bundle install
CMD rm -f tmp/pids/server.pid && bundle install && bin/rails s -b 0.0.0.0
・dockerfileの以下を削除
gem install rails -v 6.1.5
apiのdocker-compose.ymlを修正
・docker-compose.ymlのtty:trueを削除
apiのコンテナを作成
・docker-compose build
・docker-compose up -d
コンテナが正しく作成できているか確認
・ブラウザでhttp://loclhostを表示
・ブラウザでhttp://workshop-local.jpを表示
・ブラウザでhttp://workshop-local.jp/aboutを表示
ENTRYPOINTではなくCMDの理由
・イメージにすでにENTRYPOINTが指定されていて、そのENTRYPOINTの処理の
中でCMDとして送られたコマンドが実行されるようになっている。
上記の理由からENTRYPOINTは指定せずにCMDを利用する。
ただし、コンテナが初回起動か等の細かい制御をしたい場合は、ENTRYPOINTを
利用し、シェルファイルを起動の起点とする場合がある。
片付け
・docker-compose down –rmi all -v
・Macの場合
sudo vi /etc/hosts
127.0.0.1 workshop-local.jpを削除
・Windows
C:¥windows¥system32¥drivers¥etc¥hosts (管理者権限)
127.0.0.1 workshop-local.jpを削除
以上です。
ありがとうございました!

Contenu connexe

Similaire à 20230128.pptx

Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Yuichi Ito
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門hiro nemu
 
Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法Microsoft Corporation
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西Masahide Yamamoto
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようDockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようTakashi Makino
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
Osc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 jOsc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 jAkira Yoshiyama
 
ラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSnpsg
 
Docker handson
Docker handsonDocker handson
Docker handsonkoda3
 
Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料teruyaono1
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Masahito Zembutsu
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門sandai
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
DockerハンズオンKon Yuichi
 
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08Nobuto Murata
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもんMasahito Zembutsu
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例maebashi
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 

Similaire à 20230128.pptx (20)

Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門
 
Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しようDockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しよう
 
Dockerの導入
Dockerの導入Dockerの導入
Dockerの導入
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
Osc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 jOsc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 j
 
ラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaS
 
Docker v14
Docker v14Docker v14
Docker v14
 
Docker handson
Docker handsonDocker handson
Docker handson
 
Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
 
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 

Dernier

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Dernier (7)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

20230128.pptx

Notes de l'éditeur

  1. Linuxと一言で言っても色々な種類があります。 基本的には開発会社がリリースしているものをベースとしてそれぞれが加工しているので、開発元での系統分けがされます。 この系統の違いにより、インストールしたライブラリのディレクトリ構造が違ったり、使えるコマンドが違ったりなど様々な違いがあるので、自分が使っているOSは何なのかは確認するようにしましょう。
  2. まずはコマンド編で、実際にOSしか入っていないところから環境構築をすることでサーバ構築の擬似体験をしてもらうかと思います。 コード編ではIacを取り入れて構築をしてみましょう。 最後にDockerまじ便利って言われる理由を体験してもらいたいです。
  3. version: '3.8' services: vue: build: context: . dockerfile: ./docker/vue/dockerfile volumes: - ./src:/var/www/src tty: true logging: driver: json-file options: max-file: '1' max-size: 3m networks: default: name: workshop-local
  4. FROM ubuntu:20.04
  5. ・Generate project in current directory? => y ・Please pick a preset: => Manually select features ・Check the features needed for your project: => Babel, Router, Linter / Formatter ・Choose a version of Vue.js that you want to start the project with => 3.x ・Use history mode for router? => y ・Pick a linter / formatter config: => ESLint with error prevention only ・Pick additional lint features: => Lint on save ・Where do you prefer placing config for Babel, ESLint, etc.? => In dedicated config files ・Save this as a preset for future projects? => n ・Pick the package manager to use when installing dependencies: => Use Yarn
  6. const { defineConfig } = require('@vue/cli-service') module.exports = defineConfig({ transpileDependencies: true, devServer: { allowedHosts: 'all', webSocketServer: false }, })
  7. <template> <div class="about"> <h1>This is an about page</h1> <h2>{{ text }}</h2> </div> </template> <script> export default { name: 'AboutView', data() { return { text: '' } }, created() { console.log('create'); fetch('/api/v1/samples/index') .then((res) => { return res.json() }) .then((data) => { console.log(data); this.text = data.test }) } } </script>
  8. version: '3.8' services: nginx: build: context: . dockerfile: ./docker/nginx/dockerfile volumes: - ./src:/var/www/src ports: - 80:80 tty: true logging: driver: json-file options: max-file: '1' max-size: 3m networks: - workshop-local depends_on: - rails rails: build: context: . dockerfile: ./docker/rails/dockerfile volumes: - ./src:/var/www/src tty: true logging: driver: json-file options: max-file: '1' max-size: 3m networks: - workshop-local networks: workshop-local: external: true
  9. FROM ubuntu:20.04
  10. npm install --no-bin-links -g yarn
  11. class Api::V1::SamplesController < ApplicationController def index render json: {test: 'Railsから送信'} end end
  12. cd /etc/nginx/conf.d vi test.conf server { listen 80; listen [::]:80; server_name localhost; root /usr/share/nginx/html; }
  13. cd /etc/nginx/conf.d vi app.conf server { listen 80; listen [::]:80; server_name workshop-local.jp; location / { proxy_pass http://vue:8080; proxy_set_header Host workshop-local.jp; proxy_redirect off; } location /api/ { proxy_pass http://rails:3000; proxy_set_header Host workshop-local.jp; proxy_redirect off; } }
  14. FROM ubuntu:20.04 ENV TZ=Asia/Tokyo RUN apt update RUN apt install -y tzdata RUN apt install -y curl git build-essential libz-dev RUN curl -LO https://nodejs.org/dist/v18.13.0/node-v18.13.0-linux-x64.tar.xz RUN tar xvf node-v18.13.0-linux-x64.tar.xz RUN mv node-v18.13.0-linux-x64 /opt/node ENV PATH /opt/node/bin:$PATH RUN npm install -g yarn RUN yarn global add @vue/cli RUN mkdir -p /var/www/src ARG workPath=/var/www/src WORKDIR ${workPath}
  15. ・Generate project in current directory? => y ・Please pick a preset: => Manually select features ・Check the features needed for your project: => Babel, Router, Linter / Formatter ・Choose a version of Vue.js that you want to start the project with => 3.x ・Use history mode for router? => y ・Pick a linter / formatter config: => ESLint with error prevention only ・Pick additional lint features: => Lint on save ・Where do you prefer placing config for Babel, ESLint, etc.? => In dedicated config files ・Save this as a preset for future projects? => n ・Pick the package manager to use when installing dependencies: => Use Yarn
  16. const { defineConfig } = require('@vue/cli-service') module.exports = defineConfig({ transpileDependencies: true, devServer: { allowedHosts: 'all', webSocketServer: false }, })
  17. <template> <div class="about"> <h1>This is an about page</h1> <h2>{{ text }}</h2> </div> </template> <script> export default { name: 'AboutView', data() { return { text: '' } }, created() { console.log('create'); fetch('/api/v1/samples/index') .then((res) => { return res.json() }) .then((data) => { console.log(data); this.text = data.test }) } } </script>
  18. FROM ubuntu:20.04 ENV TZ=Asia/Tokyo RUN apt update RUN apt install -y tzdata RUN apt install -y curl git vim build-essential libz-dev RUN git clone https://github.com/sstephenson/rbenv.git ~/.rbenv ENV PATH /root/.rbenv/shims:/root/.rbenv/bin:/usr/local/sbin:$PATH RUN curl -LO https://nodejs.org/dist/v18.13.0/node-v18.13.0-linux-x64.tar.xz RUN tar xvf node-v18.13.0-linux-x64.tar.xz RUN mv node-v18.13.0-linux-x64 /root/node ENV PATH /root/node/bin:$PATH RUN curl -o- -L https://yarnpkg.com/install.sh | bash ENV PATH /root/.yarn/bin:/root/.config/yarn/global/node_modules/.bin:$PATH RUN git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build RUN rbenv install 3.0.5 RUN rbenv global 3.0.5 RUN gem install rails -v 6.1.5 RUN mkdir -p /var/www/src WORKDIR /var/www/src
  19. FROM ubuntu:20.04 ENV TZ=Asia/Tokyo RUN apt update RUN apt install -y tzdata RUN apt install -y nginx RUN apt install -y vim COPY docker/nginx/test.conf /etc/nginx/conf.d COPY docker/nginx/app.conf /etc/nginx/conf.d ENTRYPOINT /usr/sbin/nginx CMD "-g daemon off;"
  20. app.conf server { listen 80; listen [::]:80; server_name workshop-local.jp; location / { proxy_pass http://vue:8080; proxy_set_header Host workshop-local.jp; proxy_redirect off; } location /api/ { proxy_pass http://rails:3000; proxy_set_header Host workshop-local.jp; proxy_redirect off; } }
  21. server { listen 80; listen [::]:80; server_name localhost; root /usr/share/nginx/html; }
  22. class Api::V1::SamplesController < ApplicationController def index render json: {test: 'Railsから送信'} end end
  23. FROM node:18.13.0 ENV TZ=Asia/Tokyo RUN apt update RUN apt install -y tzdata RUN yarn global add @vue/cli ARG workPath=/var/www/src WORKDIR ${workPath}
  24. ・Generate project in current directory? => y ・Please pick a preset: => Manually select features ・Check the features needed for your project: => Babel, Router, Linter / Formatter ・Choose a version of Vue.js that you want to start the project with => 3.x ・Use history mode for router? => y ・Pick a linter / formatter config: => ESLint with error prevention only ・Pick additional lint features: => Lint on save ・Where do you prefer placing config for Babel, ESLint, etc.? => In dedicated config files ・Save this as a preset for future projects? => n ・Pick the package manager to use when installing dependencies: => Use Yarn
  25. const { defineConfig } = require('@vue/cli-service') module.exports = defineConfig({ transpileDependencies: true, devServer: { allowedHosts: 'all', webSocketServer: false }, })
  26. <template> <div class="about"> <h1>This is an about page</h1> <h2>{{ text }}</h2> </div> </template> <script> export default { name: 'AboutView', data() { return { text: '' } }, created() { console.log('create'); fetch('/api/v1/samples/index') .then((res) => { return res.json() }) .then((data) => { console.log(data); this.text = data.test }) } } </script>
  27. version: '3.8' services: nginx: build: context: . dockerfile: ./docker/nginx/dockerfile ports: - 80:80 networks: - workshop-local logging: driver: json-file options: max-file: '1' max-size: 3m rails: build: context: . dockerfile: ./docker/rails/dockerfile volumes: - ./src:/var/www/src tty: true networks: - workshop-local environment: MYSQL_USER: "root" MYSQL_PASSWORD: "password" logging: driver: json-file options: max-file: '1' max-size: 3m db: build: context: . dockerfile: ./docker/mysql/dockerfile ports: - 3306:3306 # platform: linux/x86_64 environment: MYSQL_ROOT_PASSWORD: "password" volumes: - workshop-db:/var/lib/mysql networks: - workshop-local logging: driver: json-file options: max-file: '1' max-size: 3m networks: workshop-local: external: true volumes: workshop-db:
  28. FROM ruby:3.0.5 ENV TZ=Asia/Tokyo RUN apt update RUN apt install -y tzdata curl RUN curl -LO https://nodejs.org/dist/v18.13.0/node-v18.13.0-linux-x64.tar.xz RUN tar xvf node-v18.13.0-linux-x64.tar.xz RUN mv node-v18.13.0-linux-x64 /opt/node ENV PATH /opt/node/bin:$PATH RUN npm install -g yarn RUN gem install rails -v 6.1.5 ARG workPath=/var/www/src WORKDIR ${workPath}
  29. FROM ubuntu:20.04 ENV TZ=Asia/Tokyo RUN apt update RUN apt install -y tzdata RUN apt install -y nginx RUN apt install -y vim COPY docker/nginx/test.conf /etc/nginx/conf.d COPY docker/nginx/app.conf /etc/nginx/conf.d ENTRYPOINT ["/usr/sbin/nginx"] CMD ["-g", "daemon off;"]
  30. app.conf server { listen 80; listen [::]:80; server_name workshop-local.jp; location / { proxy_pass http://vue:8080; proxy_set_header Host workshop-local.jp; proxy_redirect off; } location /api/ { proxy_pass http://rails:3000; proxy_set_header Host workshop-local.jp; proxy_redirect off; } }
  31. server { listen 80; listen [::]:80; server_name localhost; root /usr/share/nginx/html; }
  32. FROM mysql:8.0.32 ADD docker/mysql/my.cnf /etc/mysql/conf.d/my.cnf ENV TZ Asia/Tokyo CMD ["mysqld"]
  33. [mysqld] character-set-server=utf8mb4 collation-server = utf8mb4_bin # タイムゾーンの設定 default-time-zone = SYSTEM log_timestamps = SYSTEM # デフォルト認証プラグインの設定 default-authentication-plugin = mysql_native_password # エラーログの設定 log-error = /var/log/mysql/mysql-error.log # スロークエリログの設定 slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 5.0 log_queries_not_using_indexes = 0 # 実行ログの設定 general_log = 1 general_log_file = /var/log/mysql/mysql-query.log [mysql] default-character-set=utf8mb4 [client] default-character-set=utf8mb4
  34. class Api::V1::SamplesController < ApplicationController def index render json: {test: 'Railsから送信'} end end
  35. # SQLite. Versions 3.8.0 and up are supported. # gem install sqlite3 # # Ensure the SQLite 3 gem is defined in your Gemfile # gem 'sqlite3' # default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") {5} %> host: <%= ENV.fetch("DATABASE_HOSTNAME", "db") %> port: <%= ENV.fetch("DATABASE_PORT") {3306} %> development: <<: *default username: <%= ENV.fetch("MYSQL_USER", "root") %> password: <%= ENV.fetch("MYSQL_PASSWORD", "password") %> database: workshop_development # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: <<: *default username: <%= ENV.fetch("MYSQL_USER", "root") %> password: <%= ENV.fetch("MYSQL_PASSWORD", "password") %> database: workshop_test production: <<: *default database: db/production.sqlite3