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

仮想サーバー(EC2)とコンテナ(Docker)の違い

業務でEC2やDockerを使用している際に「なんか似てるな...?」と感じたので、 両者の違いを調べてざっくりまとめました。 仮想サーバー(EC2) EC2は サーバー仮想化 技術です。 ハイパーバイザーによって立ち上げられるハードウェア環境で 仮想環境にゲストOSやアプリケーションのインストールを行い、 ホストOSとは独立した実行環境を構築します。 ハイパーバイザーとは ホストOSが不要なタイプの、仮想マシンを作って動かすためのソフトのことです。 コンテナ(Docker) Dockerとは、コンテナ型仮想化 技術です。 ホストOSのマシンリソースをコンテナ専用に隔離・制限したプロセスであり、 コンテナ上でアプリケーションを実行する際に、物理マシンから確保したリソースのプロセスの属性を変更させることで 独立した実行環境を構築します。 どちらも共通点としてハードウェアからリソースを確保するということがありますが、 プロセスの共有と管理 の面で仮想化とコンテナには違いがあります。 プロセス管理の違い 仮想サーバー(EC2) 仮想サーバーの場合は、仮想化されたハードウェアごとにリソースの隔離が行われています。 仮想環境上で起動されたアプリケーションは、 ホストOSや他の仮想マシンのプロセスとは独立しているということになり、 プロセス管理は仮想環境上のゲストOSによって行われます。 コンテナ(Docker) コンテナの場合、ホストOSのプロセスの一部として管理されるため ホストOSとプロセスが共有されています。 そのためホストOSにてローカル環境のポートを割り当てることで 別プロセスからアクセスすることが可能になってます。 それぞれの利用が推奨されるケース 仮想サーバー(EC2) 独立したシステム運用 ホストOSと強い依存関係を持つコンテナと違い、セキュリティ面などでホストOSとは完全に切り離して運用したい場合 GUIアプリケーションの実行 GUI操作が伴うアプリケーションを長時間稼働させる際、デスクトップ画面を仮想環境で準備することはコンテナでは難しいため仮想化で立ち上げたゲストOS内でデスクトップ環境を構築 コンテナ(Docker) チーム共通の開発環境の整備 仮想化での数GBに及ぶイメージサイズに比べコンテナのyaml形式のファイルが小さく、再配布が容易 アプリケーションの継続的デプロイ イメージファイルの容量が小さいことで再配布や起動が容易になり、デプロイ回数が増えても対応が可能 単一から複数個に限られたアプリケーションの利用 イメージの最小単位がOSである仮想化と比べ、コンテナではOSから単一のソフトウェアまで様々である中 スピード重視で開発する際にスムーズに進めることが可能 仮想化が抱えていたデプロイの効率化という問題をコンテナが解決する形になっています。 引用元→コンテナと仮想化の違いとは? 補足 コンテナは ホストOSのカーネル(Linuxカーネル)を利用して動作している らしいです。 ホストOSのカーネルを各コンテナが共有することで ホストマシンのリソースを節約しながら動作しているようです。 この軽量化によってDockerコンテナの起動の速さにつながっているということですね。 また、Linuxカーネルを持たないWindowsやMac上でもコンテナの起動ができるのは Dockerを利用する際に裏でLinux仮想マシンが起動する仕組みになっているためで、 各コンテナもこの仮想マシン上で起動するようになっているということです。 引用元→https://kitsune.blog/docker-summary 終わりに ここら辺の知識がぼんやりとしていたので 備忘録としてまとめられてよかったです。 間違ったことやおかしな部分がありましたら教えていただけると幸いです。m(__)m 最後まで読んでいただきありがとうございました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

備忘録:laravel学習①

学習目的 LaravelでのSNS実装(ログイン、タイムライン、タグ、フォローなど)イメージの構築 Dockerで開発環境立てる練習 LaravelでのCRUD理解強化 Vue.jsの導入の糸口を掴む dockerの利点 Webサーバーや、データベース本体やその設定内容をファイル化できる。 仮想マシンと比べて、カーネルを仮想化しないので、軽量である。 簡単にWebサーバーや、データベースの環境を作れるLaradockというアプリケーションを使用 .envファイルとはなんぞや UNIX系のOSで使える「env」の本体ファイルでシェル起動時に読み込み リポジトリにコミットされず、環境ごとに変更したい情報をまとめられる。(開発環境、本番環境の切り替え、DBの接続情報の変更) .envファイルについて 例に沿って、.envファイルの編集 APP_CODE_PATH_HOST=../laravel DATA_PATH_HOST=../data COMPOSE_PROJECT_NAME=laravel-sns NGINX_PORT=80 POSTGRES_DB=default POSTGRES_USER=default POSTGRES_PASSWORD=secret POSTGRES_PORT=5432 POSTGRES_VERSION=11.6 dockerイメージダウンロード workspace php-fpm nginx postgres $ docker-compose up -d workspace php-fpm nginx postgres docker-composeコマンドで4つのイメージをダウンロードして、up(起動)し、-d(ターミナルの操作へ) コンテナの停止 $ docker-compose stop Laravelインストール $ docker-compose exec workspace composer create-project --prefer-dist laravel/laravel . "6.20.0" workspaceコンテナにLaravelインストール $ docker-compose exec #{container} ${command} 対象のコンテナで対象のコマンドを実行 ポートはdocker-compose.ymlで確認可能 アプリケーション作成基本の流れ (モデル、テーブル作成) 1. ルート記入 2. コントローラー作成 3. view作成 PHPの型キャストって? 前提としてPHPは変数定義時に型宣言を必要としない。代入するものの型に合わせられる。 C言語などでは、変数の型を宣言する。その役割を担う。 <?php $foo = 10; // $foo は整数です $bar = (boolean) $foo; // $bar はbooleanです ?> VIewへの変数の引き渡し方 withメソッド compact関数 MDBootstrapとは CSSフレームワークBootstrap4のマテリアルデザイン版(スマホで見ても画面が崩れないシンプルなデザイン) CDN(Contents Delivery Network)とは ホームページの表示をいい感じにするために用意されたネットワーク ユーザーはCDNに上げられている近くのWebサーバーのファイルを受け取ることができるので、高速に表示できたりする。 感想 やっぱbootstrap使うと、それなりのデザインになリますね。 次から本格的に理解しながらアプリ作成します。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

備忘録:laravel学習①

学習目的 LaravelでのSNS実装(ログイン、タイムライン、タグ、フォローなど)イメージの構築 Dockerで開発環境立てる練習 LaravelでのCRUD理解強化 Vue.jsの導入の糸口を掴む dockerの利点 Webサーバーや、データベース本体やその設定内容をファイル化できる。 仮想マシンと比べて、カーネルを仮想化しないので、軽量である。 簡単にWebサーバーや、データベースの環境を作れるLaradockというアプリケーションを使用 .envファイルとはなんぞや UNIX系のOSで使える「env」の本体ファイルでシェル起動時に読み込み リポジトリにコミットされず、環境ごとに変更したい情報をまとめられる。(開発環境、本番環境の切り替え、DBの接続情報の変更) .envファイルについて 例に沿って、.envファイルの編集 APP_CODE_PATH_HOST=../laravel DATA_PATH_HOST=../data COMPOSE_PROJECT_NAME=laravel-sns NGINX_PORT=80 POSTGRES_DB=default POSTGRES_USER=default POSTGRES_PASSWORD=secret POSTGRES_PORT=5432 POSTGRES_VERSION=11.6 dockerイメージダウンロード workspace php-fpm nginx postgres $ docker-compose up -d workspace php-fpm nginx postgres docker-composeコマンドで4つのイメージをダウンロードして、up(起動)し、-d(ターミナルの操作へ) コンテナの停止 $ docker-compose stop Laravelインストール $ docker-compose exec workspace composer create-project --prefer-dist laravel/laravel . "6.20.0" workspaceコンテナにLaravelインストール $ docker-compose exec #{container} ${command} 対象のコンテナで対象のコマンドを実行 ポートはdocker-compose.ymlで確認可能 アプリケーション作成基本の流れ (モデル、テーブル作成) 1. ルート記入 2. コントローラー作成 3. view作成 PHPの型キャストって? 前提としてPHPは変数定義時に型宣言を必要としない。代入するものの型に合わせられる。 C言語などでは、変数の型を宣言する。その役割を担う。 <?php $foo = 10; // $foo は整数です $bar = (boolean) $foo; // $bar はbooleanです ?> VIewへの変数の引き渡し方 withメソッド compact関数 MDBootstrapとは CSSフレームワークBootstrap4のマテリアルデザイン版(スマホで見ても画面が崩れないシンプルなデザイン) CDN(Contents Delivery Network)とは ホームページの表示をいい感じにするために用意されたネットワーク ユーザーはCDNに上げられている近くのWebサーバーのファイルを受け取ることができるので、高速に表示できたりする。 感想 やっぱbootstrap使うと、それなりのデザインになリますね。 次から本格的に理解しながらアプリ作成します。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AzureVMで外部からwebサーバーに接続できない場合の対処方法

この記事ではAzureVMでWindowsDockerを使用して建てたwebサーバーに外部から接続できない場合の問題の切り分けを行いながら対処する方法を載せています。 環境 Azure VirtualMachines使用(WindowsServer 2019) セキュリティグループを使用 Docker内でつながるか docker ps コンテナ名を確認します。 docker exec -it <コンテナ名> bash コンテナに接続します。 curl http://localhost:8080/ エラーが帰ってきたり何もかえって気なかった場合はwebサーバーが起動していない 可能性があります。 VM上でつながるか VM上の適当なwebブラウザを開いてURLに http://localhost:8080/を入力し接続します。 curl http://localhost:8080/ D でも大丈夫です つながらない場合、dockerのポート設定ができてない可能性があります。 dockerコマンドの場合 -p 80:80等の-pオプションが入っているか確認します。 例 docker run -d -p 8080:80 <コンテナ名> docker-composeの場合はportsの記入漏れが無いか確認します。 例 version: '3' services: nginx: image: nginx:1.15 ports: - "127.0.0.1:8080:80" 外部PCからつながるか ・セキュリティグループの設定 AzurePortal上からセキュリティグループを開きます。 セキュリティグループ設定で対象のポートが解放されているか確認します。 ・WindowsDefenderの設定 WindowsDefenderで新規の受信の規則の設定を行います。 受信の規則から新しい規則を選択します。 以上です。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerを使ってNext.jsを立ち上げる

はじめに 最近Dockerとかフロント以外の勉強も時々してます。 この記事ではDockerのコンテナを作成し、 Next.jsをdocker-composeで立ち上げるところまでを自分用の備忘録として残しておきます Dockerの特徴 コンテナやDockerイメージという概念がある。 Dockerイメージとはコンテナを立ち上げるために必要なミドルウェアなどの設定やコマンドが、ひとまとめになったテンプレート。 通常はソフトウェアをインストールして、その後初期設定を行い、さらには細かな設定をカスタマイズする必要があるが、このDockerイメージを使えばそれらの作業を省略することができる。 コンテナとはDockerイメージをもとに作られたWebサーバやDBサーバなどが動く仮想環境のこと コンテナは再利用が可能 OSに依存するバグを最初から防ぐことができる 引用元 ワークスペースの作成 srcというディレクトリを作成し、その配下にNext.jsアプリケーションの雛形を作成します プロジェクト名は適当な名前にしておきます npx create-next-app next 逐一画面のスクショを貼っていきます next配下のpackage.jsonのscriptsにポート指定をします devの部分のみ変更してください package.json "scripts": { "dev": "next dev", "build": "next build", "start": "next start" } これを package.json "scripts": { "dev": "next dev -p 80", "build": "next build", "start": "next start" } こうします 現状こんな感じになっているはず Dockerの環境構築 ルートディレクトリの一番上にdocker-compose.ymlを作成し、参照する情報を記載していきます docker-compose.yml version: '3' services: app: build: context: . dockerfile: ./docker/app/Dockerfile ports: - "80:80" environment: - NODE_ENV=development volumes: - ./src/next:/code web: image: nginx:1.17.3-alpine ports: - "8081:8081" depends_on: - php volumes: - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf - ./src/web:/var/www/html php: image: php:7.1.9-fpm-alpine volumes: - ./src/web:/var/www/html 今こんな感じです Dockerディレクトリとファイルの作成 ルートディレクトリの一番上にdockerディレクトリを作成し、 さらにその中にwebとappというディレクトリを作成します web配下にはdefault.conf app配下にはDockerFileを作成してください /web - default.conf /app - DockerFile Dockerfileには以下を DockerFile FROM node:10 WORKDIR /code EXPOSE 80 CMD npm run dev default.confには以下を記述 default.conf server { listen 8081; server_name _; root /var/www/html; index index.php; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(\.+)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } } これで一通りの準備が完了! docker-composeで立ち上げる ここまで完成したら以下のコマンドでDockerを立ち上げましょう http://localhost にアクセスし、以下の画面が出てくれば成功? docker-compose up 参考 全体的にこちらで書かれているコードを参照させていただきました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

dockerがすぐ落ちる docker-compose up

docker-compose upしても1分と持たずlocalhostが見れない、リロードするたびに落ちる。 解決策 dockerのMemory上げる。 docker desktop => 右上の歯車アイコン => Resources => Memoryを4GBに(既に4GBであれば5GBに上げる) => apply and restart できた! 原因は不確かですが、 npm installで重たいものを入れたせいかもしれない・・・
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

リモートアクセス用にGuacamoleを用意してみた

はじめに サーバ台数が増えてきて毎回ログインするのがめんどくさくなってきたので、 Guacamoleを使ってサーバへログインすることにシフトしようと思ったのがきっかけ Guacamole(ガカモレ)とは 正式にはApache Guacamoleといいます。 OSSで提供されておりWEBブラウザを用いて、遠隔にあるコンピュータへ接続できます。 コロナ発生するまではVersionUpがあまりなされなかったのですが、 コロナ渦の影響なのか需要が増えたようで急にバージョンアップが定期的に行われている印象があります。 機能としてはざっとですが以下が提供されています。 ・接続方法はSSHだけにとどまらず、RDPやTELNET、VNCなどにも対応しております。 ・操作ログを残せたりすることができるので、証跡をとることもできます。 ・ユーザー毎にアクセス可能なホストを制限することができます。 めっちゃ余談になりますが、 読み方を調べていたらGUACAMOLE(ガカモレ)とは、メキシコ料理で使われる代表的なサルサソースのひとつ。 らしいです。 Guacamoleのインストール コンテナで利用したいので、UbuntuにDockerとDockerComposeをインストールします。 ※インストールするコマンドだけ載せて略します。 # apt install apt-transport-https ca-certificates curl software-properties-common # curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" # apt update # apt install docker-ce # systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2021-04-27 13:30:29 UTC; 21s ago # curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # chmod 755 /usr/local/bin/docker-compose # docker-compose --version docker-compose version 1.29.1, build c34c88b2 DockerCompose用のGuacamoleが提供されているので、Gitからクローンして実行します。 # git clone "https://github.com/boschkundendienst/guacamole-docker-compose.git" # cd guacamole-docker-compose # ./prepare.sh # docker-compose up -d # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 629624519e9b nginx "/docker-entrypoint.…" 9 days ago Up 3 hours 80/tcp, 0.0.0.0:8443->443/tcp, :::8443->443/tcp nginx_guacamole_compose 2700864131d5 guacamole/guacamole "/opt/guacamole/bin/…" 9 days ago Up 3 hours 0.0.0.0:49153->8080/tcp, :::49153->8080/tcp guacamole_compose 6a96606f379e postgres "docker-entrypoint.s…" 9 days ago Up 3 hours 5432/tcp postgres_guacamole_compose bfa0169dc988 guacamole/guacd "/bin/sh -c '/usr/lo…" 9 days ago Up 3 hours (healthy) 4822/tcp guacd_compose https://IPアドレス:8443 でアクセスし、以下TOP画面が表示されたら、 ID:guacadmin / PASS:guacadminでログインし、ログインが成功したら ユーザー作成やホスト登録を行ってください。 最後に GucamoleはVer1.3からSAML認証にも対応しているようなのでOpenAMと組み合わせて、 シングルサインオンもできるのではないかと思っているので、認証方法については勉強も兼ねてやってみたいと思います。 ※できたら更新します。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Raspberry Pi 4上のDockerコンテナでtensorflowを走らせるのに少しハマったので書く

タイトルの通り 前提 docker-composeを使ってpythonコンテナを走らせようと思いました. 何の変哲もないpythonコンテナで,x86_64のDocker環境だと普通に動いていました. docker-compose.yml version: '3' services: hogehoge-backend: restart: always build: context: ./hogehoge-backend dockerfile: ./Dockerfile container_name: hogehoge-backend working_dir: '/root/' tty: true volumes: - ./opt:/root/opt Dockerfile FROM python:3.6 USER root RUN apt-get update RUN apt-get -y install locales && \ localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 ENV LANG ja_JP.UTF-8 ENV LANGUAGE ja_JP:ja ENV LC_ALL ja_JP.UTF-8 ENV TZ JST-9 ENV TERM xterm RUN apt-get install -y vim less RUN pip install --upgrade pip RUN pip install --upgrade setuptoolslibxkbcommon0 xdg-utils libgtk-3-0 RUN apt-get update RUN apt-get -y install python3-pip 加えて,コンテナ内でアプリケーションを利用するためにpip用のrequirements.txtを用意していました. 下記の通り. requirements.txt pandas tensorflow requests keras urllib3 sklearn 初回起動時に pip3 install -r requirements.txt でインストールするのを想定してました(ビルド時に自動化はしてない) 前述の通り,x86_64環境でアプリケーション作ってから,「RPi4で動かせば電気代安いんじゃね・・・?」と素朴に欲を出して試してみたところ次節に述べる通りハマりました ハマったところ tensorflowがpipで入らない 状況 pipでrequirements.txtを用いてtensorflowをインストールしようと試みると下記のようなエラーが出る $ pip3 install -r requirements.txt ERROR: Could not find a version that satisfies the requirement tensorflow ERROR: No matching distribution found for tensorflow $ uname -a Linux 24aa5e15abb5 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux 解決策 pipをupgradeしてもダメだったので,結局wheelをダウンロードしてきた. $ wget https://github.com/lhelontra/tensorflow-on-arm/releases/download/v2.0.0/tensorflow-2.0.0-cp37-none-linux_armv7l.whl $ python3 -m pip uninstall tensorflow $ python3 -m pip install tensorflow-2.0.0-cp37-none-linux_armv7l.whl バージョン選びたい方はこちらから選択して所望のバージョンのwhlを落としてくると良いと思います ※なお,tensorflow-on-armは cp35 か cp37 しか用意されていない様子だったので(どうやらcpの後の数字はpythonのバージョンらしい),あらかじめコンテナ上ではpython3.7を利用するようにDockerfileを書き換えてビルドしておいた Dockerfile - FROM python:3.6 + FROM python:3.7 h5pyが入らない 状況 前述の通りtensorflowをインストールしたところ,h5pyのインストール時にエラーが出る $ python3 -m pip install tensorflow-2.0.0-cp37-none-linux_armv7l.whl Building wheels for collected packages: numpy, termcolor, wrapt, h5py Building wheel for numpy (PEP 517) ... done Created wheel for numpy: filename=numpy-1.20.2-cp37-cp37m-linux_armv7l.whl size=15411079 sha256=1934c0d7b18fcc872ff7b95a361b9580d7586aabab8bada8991e6df443ed047f Stored in directory: /root/.cache/pip/wheels/dc/89/4e/d661a082dcb028182ea7b4561c34dbcf717169c443ea0087a2 Building wheel for termcolor (setup.py) ... done Created wheel for termcolor: filename=termcolor-1.1.0-py3-none-any.whl size=4830 sha256=0844dee89ff65f17c6d1d00bd40ef6ac414156937121fa8e51773d7658511f64 Stored in directory: /root/.cache/pip/wheels/3f/e3/ec/8a8336ff196023622fbcb36de0c5a5c218cbb24111d1d4c7f2 Building wheel for wrapt (setup.py) ... done Created wheel for wrapt: filename=wrapt-1.12.1-cp37-cp37m-linux_armv7l.whl size=72200 sha256=e7331863b9a094e6ab7520c5157b321fc81739732dfc835b241a0f916a07c9ce Stored in directory: /root/.cache/pip/wheels/62/76/4c/aa25851149f3f6d9785f6c869387ad82b3fd37582fa8147ac6 Building wheel for h5py (PEP 517) ... error Loading library to get build settings and version: libhdf5.so (中略) running build_ext Loading library to get build settings and version: libhdf5.so error: Unable to load dependency HDF5, make sure HDF5 is installed properly error: libhdf5.so: cannot open shared object file: No such file or directory ---------------------------------------- ERROR: Failed building wheel for h5py 解決策 libhdf5-devをインストールする(※) $ apt-get install libhdf5-dev この後再度tensorflowのインストールを実行すると進む. $ python3 -m pip install tensorflow-2.0.0-cp37-none-linux_armv7l.whl ※はじめからDockerfileに記述しておいたほうが良いかも
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

docker入門

前提 dockerの名前ぐらいは聞いたけど、よくわからんという方向けです。 環境 Windows 10 Pro 動画 qiitaがYoutube埋め込み対応したらしいので貼ってみました。 動画で見たい方はこちら。 ここからは文章で確認した人向け 動画の前半の部分だけ文章で書いておきました。 実際に動かしている部分は動画を参照してください。 仮想環境とは 実際に存在する物理的なコンピューターに仮想的なコンピューターやOSの環境を作ることです。 たとえば、 Windowsのパソコンに別のOSの「Linux」とか「Mac」を入れるようなことですね。 仮想技術の種類 そんな仮想環境ですが、実現するための仮想化技術にはいくつか種類があって今回は「ホスト仮想化」というのと「コンテナ仮想化」について確認してみます。 【ホスト仮想化】 コンピューターの中にコンピューターを仮想的に作ったようなものです。 仮想的なハードウェアもあって、ネットワークの設定やメモリの設定・ストレージのサイズなども設定できます。 有名な製品には「VM Ware」とか「Virtual Box」がありますね。 特にVM Wareは本番のサーバ環境を構成する際にも利用されますね。 コンピューターの中にコンピューターを構成するだけあって、 起動に時間がかかるし本体のコンピューターのマシンパワーも多く使います。 【コンテナ仮想化】 こちらはコンピューターの中にコンテナという箱を作ってOSの一部を入れたようなものです。 仮想的なハードウェアがあるわけではなく、仮想的なネットワーク設定ぐらいが存在します。 ハードウェアはホストのハードウェアをそのまま使います。 コンテナがプロセスのひとつとして動作します。 ホスト仮想化と比較して、CPU/メモリなどのマシンパワーの使用量が少なくて起動が早いという特徴があります。 有名な製品は「docker」ですが、他にもいくつかコンテナ技術の製品はあります。 AWSのFargateもコンテナ技術ですね。 【ホスト】とは 仮想化技術では仮想環境をもつ本体のコンピューターのことを「ホスト」呼びます。 Infrastructure as Code コンテナ仮想化ではAnsibleとかChefのようにインフラのコード化をすることもできます。 「Infrastructure as Code」と言って、コードにしておくことで再現性のあるインフラ環境を用意することができます。いつでも簡単に同じインフラ環境を作り直すことができるんです。 なにがうれしいの? パソコンに簡単にサーバ環境を作れる。 データベースなどをすぐに初期状態にできる。 サーバにコンテナごとリリース(同じ環境) 環境をすぐに復旧できる。 同じ環境をすぐに複数作れる。 システム開発ではローカル環境にデータベースを用意することも多いですね。 その環境を作るのにいちいち手順書をもとに準備したりテーブル定義やマスタデータが変わる度に各自が反映するのは大変ですね。 コンテナを使うことで、データベースの最新の情報をコードで共有すると各自はコンテナを再作成するだけでいいというわけですね。 新しく参画したメンバーにもコマンド一つで環境が出来上がるって最高ですよね。 Docker Install Linux, Windows, Macにインストール可能 ここからインストール Windows 10 homeにはDocker Toolboxしか対応してなくて大変だったが、最近はWindows 10 homeでも「Docker Desktop for Windows」が使えます。 Hello world インストールできたらHello worldやってみましょう。 Windowsならコマンドプロンプトやpower shellを開いてdocker run hello-worldを実行してみてください。 > docker run hello-world Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/ ※このときdocker hubというところから「hello-world」のdockerイメージがダウンロードされています。 Docker Hub Docker Hub公式サイト Docker Hubは色んな人がコンテナのイメージをアップロードして公開している場所です。GitHubをご存知の方はGitHubのdocker版と思ってもらったらいいと思います。コンテナイメージというのはコンテナの種になるイメージファイルです。 よく使うコンテナイメージの例はこんなものがあります。 centos ubuntu python java php redmine jenkins nginx httpd mysql postgres 自分でもアップロードして配布できます。 チャレンジ dockerインストールした人はwordpressぐらいなら数分ぐらいで作れるのでやってみてください。 dockerでwordpress P.S. 動画内のコードは今度貼ります。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

M1 mac上のDockerでWordpressの環境構築

概要 M1Mac上でDockerを動かすのに少し躓いたので備忘録として残しておきます。 今回はDockerをM1 Macで動かすことを簡単にテストしたいだけですのでwordperssで試してみることにします。 準備 デフォルトのままだと ERROR: no matching manifest for linux/arm64/v8 in the manifest list entries と怒られてしまうのでdocker imageをamd64に対応させます。 docker pull --platform linux/amd64 mysql:5.7 実際のコード docker-compose.yml version: "3" services: mysql000ex11: image: mysql:5.7 networks: - wordpress000net1 volumes: - mysql000vol11:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: myrootpass MYSQL_DATABASE: wordpress000db MYSQL_USER: wordpress000kun MYSQL_PASSWORD: wkunpass wordpress000ex12: depends_on: - mysql000ex11 image: wordpress networks: - wordpress000net1 volumes: - wordpress000vol12:/var/www/html ports: - 8085:80 restart: always environment: WORDPRESS_DB_HOST: mysql000ex11 WORDPRESS_DB_NAME: wordpress000db WORDPRESS_DB_USER: wordpress000kun WORDPRESS_DB_PASSWORD: wkunpass networks: wordpress000net1: volumes: mysql000vol11: wordpress000vol12: まとめ wordpressをDockerで環境構築する人はあまりいない(普通契約したサーバーで全部やってくれる)のであまり参考にはならないと思いますが、少しでも誰かのお役に立てれば幸いです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker + Rails6 + React + TypeScript の環境構築

streampack の endo です。 ローカルで、Docker + Rails6 + React(react-rails) + TypeScript の環境を作る機会があり、ちょっと苦労したので備忘録になります。 Docker 上に Rails プロジェクトを作成する まずは Docker 上に Rails プロジェクトを作成。DB は MySQL5.7。 適当なディレクトリを作り、 Gemfile Gemfile.lock Dockerfile docker-compose.yml の 4 ファイルを作成する。 Gemfile source "https://rubygems.org" git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } gem "rails" Gemfile.lock(空ファイル) Dockerfile FROM ruby:2.7.2 RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ && apt-get update \ && 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 mkdir /myapp ENV APP_ROOT /myapp WORKDIR $APP_ROOT ADD ./Gemfile $APP_ROOT/Gemfile ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock RUN bundle install ADD . $APP_ROOT docker-compose.yml version: "3" services: db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: demo-db ports: - "3306:3306" volumes: - demo-db:/var/lib/mysql web: build: . command: rails s -p 3000 -b '0.0.0.0' volumes: - .:/myapp ports: - "3000:3000" links: - db volumes: demo-db: docker-compose run コマンドで Rails プロジェクトの作成。 shell $ docker-compose run web rails new . --force --no-deps --database=mysql Rails プロジェクトを作成できたら、build する。 shell $ docker-compose build データベースの作成 config/database.yml を編集する。 config/database.yml ## 編集した箇所のみ抜粋 default: &default password: password # docker-compose.yml の MYSQL_ROOT_PASSWORD: で設定したパスワード host: db # localhost → db に変更 データベースを作成する。 shell $ docker-compose run web rake db:create Docker の起動 Docker を起動する。 shell $ docker-compose up http://0.0.0.0:3000 にアクセスすると、Rails の初期画面が表示される。 この時 shell に以下のようなエラーが出るときは、 shell Cannot render console from 172.20.0.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1 config/environments/development.rb に config/environments/development.rb Rails.application.configure do config.web_console.permissions = '0.0.0.0/0' end を追加すればエラーログが消える。 React の導入 react-rail を使って react を rails プロジェクトに導入する。 Gemfile gem 'react-rails' 再度 build を実行する。 shell $ docker-compose build 下記コマンドを実行する。 shell $ docker-compose run web rails webpacker:install # OR (on rails version < 5.0) rake webpacker:install $ docker-compose run web rails webpacker:install:react # OR (on rails version < 5.0) rake webpacker:install:react $ docker-compose run web rails generate react:install 実際に React が導入されているか確認する。 controller の作成。 shell $ docker-compose run web rails g controller sample index 以下のファイルが作成されていれば OK。 app/controllers/sample_controller.rb class SampleController < ApplicationController def index end end react コンポーネントファイルの作成。 shell $ docker-compose run web rails g react:component Sample app/javascript/components/Sample.tsx が作成されるので、以下のように修正する。 app/javascript/components/Sample.jsx import React from "react"; const Sample = () => { return <>this is react sample.</>; }; export default Sample; view の作成。 app/views/sample/index.html.erb を作成し react コンポーネントを読み込む。 app/views/sample/index.html.erb <%= react_component 'Sample' %> ルーティングを追加する。 config/routes.rb Rails.application.routes.draw do get "sample", to: "sample#index" end Docker を起動し、http://0.0.0.0:3000/sample にアクセスする。「this is react sample.」の文字が表示されていれば OK。 TypeScript の導入 React が導入できたので、以下コマンドで TypeScript 導入する。 shell $ docker-compose run web bundle exec rails webpacker:install:typescript $ docker-compose run web yarn add @types/react @types/react-dom 無事インスールが追えたら sample.jsx の拡張子を sample.tsx に修正する。 app/javascript/components/Sample.tsx import React from "react"; const Sample: React.FC = () => { return <>this is typescript sample.</>; }; export default Sample; ここまで修正したら再度 http://0.0.0.0:3000/sample にアクセスし、「this is typescript sample.」の文字が表示されていることを確認する。 JS の修正時にホットリロードさせる Docker の場合は $ bin/webpack-dev-server のコマンドを直接叩くとエラーがでるっぽいので docker-compose.yml を修正した。 version: "3" services: db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: rails-front-demo-db ports: - "3306:3306" volumes: - rails-db:/var/lib/mysql web: &web build: . command: rails s -p 3000 -b '0.0.0.0' environment: WEBPACKER_DEV_SERVER_HOST: webpacker volumes: - .:/app_name ports: - "3000:3000" links: - db webpacker: <<: *web command: bundle exec bin/webpack-dev-server depends_on: [] environment: WEBPACKER_DEV_SERVER_HMR: "true" WEBPACKER_DEV_SERVER_HOST: 0.0.0.0 ports: - "3035:3035" volumes: rails-db: webpacker の service を追加。それに伴い web の service も修正。 $ docker-compose up で Docker を起動し、http://0.0.0.0:3000/sample にアクセスする。app/javascript/components/Sample.tsx のファイルを適当に書き換えて保存するとホットリロードすることがわかる。 まとめ 以上で Docker + Rails6 + React(react-rails) + TypeScript の環境構築ができました。Docker は初心者なので(間違っていたらご指摘ください)、諸々調べながら記述しております。react-railsとRails6、TypeScript を使ってる情報は(特に最近では)意外と少なく感じたので、やはり Rails は API モードで使うのが主流なのだと思いました。react-rails を使用している方の参考になれば幸いです。 参考 Docker を使って Rails6 環境の構築をしてみる - Qiita 【Rails, React】Webpacker と TypeScript のセットアップ - Qiita docker で webpacker が遅い問題を改善する - Qiita GitHub - reactjs/react-rails: Integrate React.js with Rails views and controllers, the asset pipeline, or webpacker. GitHub - rails/webpacker: Use Webpack to manage app-like JavaScript modules in Rails
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む