- 投稿日:2020-09-15T21:27:48+09:00
Dockerとは
概要
Dockerについて独学で学んだ内容をまとめます。
Dcokerとは何か?
Linux上で動作するツールです。
- インフラ部分(サーバ設定)
- Webサービス(アプリケーション)
をひとまとめにしてコンテナとして保存、配布を行うことができます。特徴
メンバー誰もが同じ環境を手軽に再現できる
ため、ローカル環境の構築手段として開発フローに用いられます。
サーバ構成、インストールするライブラリやツールをDockdrfile
等にコードベースで定義します。デプロイ
インフラ部分と一体化している為、コンテナごとデプロイして運用することも可能であり、環境差異を最小限にしてデプロイすることが可能です。
備考
本来であればMacやWindowsではDockerを使用することはできないが、Docker for Macを導入することで使用可能になります。
- 投稿日:2020-09-15T20:50:19+09:00
DockerComposeでWordpressをローカルに再現する
すでに走ってるWordpress、ローカルに再現したくない??
※dockerインストールについては割愛させていただきます。
ディレクトリ構造
コンテナ作成前
├── db-data │ └── wordpress.sql.zip ├── docker-compose.yml └── .envデータの準備
wp-contentの取得
テーマファイルなどが入ったwp-contentフォルダをftpサーバなどを介して取得しておく。
sqlダンプファイルの取得
サーバーから直接エクスポートもしくは、BackWPupとういプラグインで簡単にデータをバックアップし取得することができる。
zip形式で取得し、そのままdb-dataディレクトリ下に設置する。BackWPupの使い方について参考サイト:
BackWPUpで確実にWordPressのバックアップを取る方法docker-compose.ymlを作成
docker-compose.ymlversion: '3.3' services: mysql: build: context: ./docker/mysql/ restart: always environment: - MYSQL_DATABASE - MYSQL_USER - MYSQL_PASSWORD - MYSQL_ROOT_PASSWORD ports: - 3306:3306 volumes: - mysql_data:/var/lib/mysql - ./docker/mysql/init:/docker-entrypoint-initdb.d wordpress: build: context: . dockerfile: ./docker/wordpress/Dockerfile depends_on: - mysql ports: - 8080:80 restart: always environment: - WORDPRESS_DB_HOST - WORDPRESS_DB_USER - WORDPRESS_DB_PASSWORD - WORDPRESS_DB_NAME volumes: - ./:/var/www/html phpmyadmin: image: phpmyadmin/phpmyadmin:latest restart: always environment: - PMA_ARBITRARY - PMA_HOSTS - PMA_USER - PMA_PASSWORD depends_on: - mysql ports: - 8888:80 volumes: mysql_data:補足
OS起動時に自動的にこのコンテナを起動させたくない場合は
restart: alwaysの記述を
restart: noに変更すると良いと思います。
envファイルを作成
ルートディレクトリ直下に.envファイルを設置します
.envMYSQL_DATABASE=wordpress MYSQL_USER=root MYSQL_PASSWORD=root MYSQL_ROOT_PASSWORD=root WORDPRESS_DB_HOST=mysql:3306 WORDPRESS_DB_USER=root WORDPRESS_DB_PASSWORD=root WORDPRESS_DB_NAME=wordpress PMA_ARBITRARY=1 PMA_HOSTS=mysql PMA_USER=root PMA_PASSWORD=rootdockerコンテナ起動
現在起動中のコンテナを確認
docker-compose ps
ymlで設定したポートと同じものがあればバッティングしてしまうので
起動中のコンテナは一度停止してください。そしていよいよコンテナ起動。
docker-compose up -d
wp-contentの入れ替え
起動するとwordpress関連のファイルが自動的に作成されるので、
ルートディレクトリ直下のwp-content/の中身を手元に準備しておいたバックアップファイルでまるごと置換する。データベースのドメイン置換
localhost:8888にアクセスし、phpmyadminでドメインを置換していく。
現在使用しているWordpressサイトのURLを http://localhost:8080/ で置換することで、
ローカル環境でWPを使用することができるようになる。詳しい手順については、先人のありがたいサイトを参考にしていただくと大変わかりやすいかと思います。
(人のふんどしでなんとやら...)phpMyAdminを使ってWordPressを別のドメインで使えるようにする方法
Wordpress起動
http://localhost:8080/ にアクセス。
補足
コンテナ停止
docker-compose stop
まとめ
以上で、現在走っているWordpressサイトをローカルに再現することができました。
Dockerfileよりdocker-compose.ymlだと記述が完結でわかりやすくていいですね。
選ばれたのはdocker-composeでした。おわり。
- 投稿日:2020-09-15T20:34:19+09:00
docker-compose作成方法
docker-composeの書き方
docker-compose.ymlversion: '3' services: web: ## dockerimageファイルを指定するか、自分で作成したDockerfileを指定する。 ## Dockerfileが同一ディレクトリに存在する場合は image: {imageName} build: {imageFileName} ports: - '3000:3000' volumes: - '.:/product-file' tty: true stdin_open: truetty:true → -t
stdin_open: true → -i
両方指定することで -itと同じ状態になる
volumes
コンテナに共有するディレクトリを指定する。
コンテナ内に/product-fileを作成し、docker-compose.ymlより下の階層のファイルをそのままコンテナに反映する。
ファイル内容を変更しても、リアルタイムで反映される
実行するコマンドdocker-compose build docker-compose up docker-compose ps docker-compose exec {docker-compose.ymlで指定したservice名(今回はweb)} ## volumeするディレクトリを間違えたなど、一度作ったコンテナを全削除したい場合 docker-compose down (stopしてrmする)ここまでくれば対象のコンテナに指定したファイルがマウントされている状態になる。
docker-compose exec {アプリ名} bash で中身を確認すると、そのファイルが存在している.ファイルはvolumeされているので同期されるが、一度サーバーを立ち上げるなどをすると、htmlなどが動的に生成されるようには行かないので、改めて立ち上げ直す必要がある。
CICD環境を構築することで、gitにpushした時に改めて更新してくれるようにできるハズ。
- 投稿日:2020-09-15T19:29:06+09:00
Docker・Rails開発でlocalhost3000が立ち上がらない。
- 投稿日:2020-09-15T12:42:35+09:00
【Folio LSP】Dockerをざっくり(初心者向け)
この記事は、Folioチュートリアルの簡単な補足記事という位置づけです。
Folioチュートリアル https://qiita.com/ayungn/items/17ece4e7e06c58194691Dockerとは
コンテナ型仮想化を利用するためのツール・環境です。
Dockerを使うと何が嬉しいのか
- ポータブル:コンテナ内で動作するシステムはコンテナ内で完結している。そのため、コンテナを別のサーバに持ち出しても動かせる。
- 軽い:アプリケーションごとのOSが必要がない。(cf. Hypervisor型仮想化)
- セキュア:コンテナは独立していて安全。
例えば、本番環境と同じ環境の検証環境がすぐに立ち上げられます。破棄して作り直すことも容易です。ローカルの開発環境を揃えるのにも役立ちます。
Dockerコンテナを使うには
- LinuxにDocker Engineをインストールする。
- (WindowsやMacの場合)Docker Desktopをインストールする。Virtual BoxなどでLinux環境を用意してDocker Engineをインストールする。
Docker EngineはLinux上で動きます。Folio LSPチュートリアルの場合、①Virtual Box ②EC2(Ubuntu)のどちらかで動かしています。
Dockerイメージとは
- DockerコンテナはDockerイメージから作ります。
- Docker HubなどのDockerレジストリからダウンロードできます。
- Dockerイメージには、OSだけのものやアプリケーションが入っているものがあります。
- Dockerfileを使うと、元となるDockerイメージを指定して、独自のイメージを作成することができます。
Folio LSPでは、アプリケーションが入ったDockerが配布されています。https://hub.docker.com/search?q=folioorg&type=image
参考
Docker公式ページ https://www.docker.com/
- 投稿日:2020-09-15T11:23:14+09:00
Docker on wsl2がうんともすんとも言わなくなった
Dockerがwslから使えない
きっかけは忘れましたが、突然dockerのコマンドが動かなくなりました。
もちろん、docker-composeも同様です。エラーメッセージERROR: dial unix /mnt/wsl/docker-desktop/shared-sockets/guest-services/docker.sock: connect: no such file or directory人によってパスの部分は違いがあると思いますが、こんなエラーが出ました。
wsl上に/var/run/docker.sock
っていうシンボリックリンクがあって、これはdocker-desktopっていうwslディストリビューション内のソケットを指しているんですが、これがどういうわけか消えてしまっています。
Dockerを再起動してもwslを再起動しても治りませんでした。ちなみに、Power Shellからならdockerコマンドが使えました。
wslからdocker daemonへの接続が切れているだけのよう。直し方
参考:ubuntu running under WSL2 not seeing Docker daemon at unix:///var/run/docker.sock #5096
wsl integrationを有効にしてDocker Desktopを起動すると、wsl内にさっきのsocketなどいろんな関連ファイルのシンボリックリンクを作成するのですが、それらが中途半端に残っているせいで再起動しても治らなかったということらしい。
ので、docker関連のファイルを全て削除します。sudo find /usr -name "*docker*" -type l -exec rm {} + sudo find /usr -name "*Docker*" -type l -exec rm {} + sudo find /usr -name "*kube*" -type l -exec rm {} + sudo rm /usr/share/doc/docker-ce-cli/changelog.Debian.gz sudo rm /var/run/docker*上記コマンドをwslで実行後、dockerを再起動すると治りました。
よかったよかった。
- 投稿日:2020-09-15T11:00:54+09:00
dockerコマンドをsudo無しで実行する簡単設定(Linux)
Linux上でdockerコマンドをsudo無しで実行すると、以下の権限エラーが発生します。
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/json: dial unix /var/run/docker.sock: connect: permission deniedデフォルトではrootの実行権限が必要なのですが、以下の手順を使うことでsudo無しでdockerコマンドが叩けるようになります。
# dockerユーザーグループを作成 sudo groupadd docker # 現在のユーザーをdockerグループに追加 sudo usermod -aG docker $USER # 変更を即反映する newgrp docker注釈
- ユーザーグループはインストール時に作成されているはずで本来不要なはずなのですが、公式ドキュメントに記載があったので、一応こちらにも記載しています。
参考
- 投稿日:2020-09-15T08:55:46+09:00
�Docker For Mac遅い:対策II
概要
以前、以下の記事で「Docker for Mac」が遅い問題を書いて見ましたが、「Docker for Mac」次第の改善は期待できず「edge」も続けて使用して見ると使えるものでもなかった認証でした。
[Docker For Macが遅い]:https://qiita.com/FattyRabbit/items/b81575ed9d2f463fa619
[Docker For Macが遅い:対策の実験]:https://qiita.com/FattyRabbit/items/bfb5a9a321718b7f2756docker-sync
docker-syncを試して見ました。速度はすごく効果が出ていましたが、自分が構成している複数のプロジェクトを一個のローカル開発環境で動かすものでしたら、監視するべきファイル・ディレクトリが多くなりすぎてその分プロセサやメモリが利用されることで上場に使用する分重くなりました。
Macのスペックが高くてリソースに余裕があった場合は良いかと思います。docker-syncの起動する時監視ファイル数が多いと時間が掛かったりします。
最終的な選択
以前、おもちゃとして買った「Raspberry Pi Model 3B+」に「https://bitbucket.org/FattyRabbit/docker-local-server/src/87383983182699cc83049cec7685b0d083512dfc/?at=releases%2Fphp-form_out_centos_for_raspi」をインストールして利用しました。
Raspbianで動かすために使用しているイメージの変更とかがありますが、までREADMEの更新はしてない状態ですが、「改善された開発環境を作成」をご参考にしたら。
- 投稿日:2020-09-15T08:55:46+09:00
Docker For Mac遅い:対策II
概要
以前、以下の記事で「Docker for Mac」が遅い問題を書いて見ましたが、「Docker for Mac」次第の改善は期待できず「edge」も続けて使用して見ると使えるものでもなかった認証でした。
[Docker For Macが遅い]:https://qiita.com/FattyRabbit/items/b81575ed9d2f463fa619
[Docker For Macが遅い:対策の実験]:https://qiita.com/FattyRabbit/items/bfb5a9a321718b7f2756docker-sync
docker-syncを試して見ました。速度はすごく効果が出ていましたが、自分が構成している複数のプロジェクトを一個のローカル開発環境で動かすものでしたら、監視するべきファイル・ディレクトリが多くなりすぎてその分プロセサやメモリが利用されることで上場に使用する分重くなりました。
Macのスペックが高くてリソースに余裕があった場合は良いかと思います。docker-syncの起動する時監視ファイル数が多いと時間が掛かったりします。
最終的な選択
以前、おもちゃとして買った「Raspberry Pi Model 3B+」に「https://bitbucket.org/FattyRabbit/docker-local-server/src/87383983182699cc83049cec7685b0d083512dfc/?at=releases%2Fphp-form_out_centos_for_raspi」をインストールして利用しました。
Raspbianで動かすために使用しているイメージの変更とかがありますが、までREADMEの更新はしてない状態ですが、「改善された開発環境を作成」をご参考にしたら。
- 投稿日:2020-09-15T06:40:30+09:00
AWSでのDocker から AKS までの学び方を並べる
Dockerはなんとなくわかるが、KubenetesをAWSでマネージドで?というと、すごく先が遠いイメージがするが、自分はどのくらい理解しているか、どのへんの技術があればよいかわかるようにする。徐々に更新します。
- Docker on localhost
- Docker で 1-tier の Web環境を構築する ことができる。
- Docker Compose で 2-tier の 簡単な Web/DB構成を構築する ことができる。
- Kubernetes で 冗長化された 2-tier の 簡単な Web*N/DB構成を構築する ことができる。
- Docker on EC2
- EC2 に Docker で 1-tier の Web環境を構築する ことができる。
- Beanstalk で冗長化された 2-tier の簡単な Web*N/DB構成を構築する ことができる。
- Container on AWS
- ECS で 1-tier の Web環境を構築する ことができる。
- Fagete on ECS で 1-tier の Web環境を構築する ことができる。
- AKS で 冗長化された 2-tier の 簡単な Web*N/DB構成を構築する ことができる。
以上