20200915のdockerに関する記事は10件です。

Dockerとは

概要

Dockerについて独学で学んだ内容をまとめます。

Dcokerとは何か?

Linux上で動作するツールです。
- インフラ部分(サーバ設定)
- Webサービス(アプリケーション)
をひとまとめにしてコンテナとして保存、配布を行うことができます。

特徴

メンバー誰もが同じ環境を手軽に再現できるため、ローカル環境の構築手段として開発フローに用いられます。
サーバ構成、インストールするライブラリやツールをDockdrfile等にコードベースで定義します。

デプロイ

インフラ部分と一体化している為、コンテナごとデプロイして運用することも可能であり、環境差異を最小限にしてデプロイすることが可能です。

備考

本来であればMacやWindowsではDockerを使用することはできないが、Docker for Macを導入することで使用可能になります。

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

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.yml
version: '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ファイルを設置します

.env
MYSQL_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=root

dockerコンテナ起動

現在起動中のコンテナを確認

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でした。おわり。

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

docker-compose作成方法

docker-composeの書き方

docker-compose.yml
version: '3'

services: 
    web:
        ## dockerimageファイルを指定するか、自分で作成したDockerfileを指定する。
        ## Dockerfileが同一ディレクトリに存在する場合は image: {imageName}
        build: {imageFileName}
        ports: 
            - '3000:3000'
        volumes:
            - '.:/product-file'
        tty: true
        stdin_open: true

tty: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した時に改めて更新してくれるようにできるハズ。

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

Docker・Rails開発でlocalhost3000が立ち上がらない。

自分への備忘録です。

手順

  1. RailsApp/tmp/pids/server.pidを削除する。
  2. ブラウザのリロード。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Folio LSP】Dockerをざっくり(初心者向け)

この記事は、Folioチュートリアルの簡単な補足記事という位置づけです。
Folioチュートリアル https://qiita.com/ayungn/items/17ece4e7e06c58194691

Dockerとは

コンテナ型仮想化を利用するためのツール・環境です。

image.png

Dockerを使うと何が嬉しいのか

  • ポータブル:コンテナ内で動作するシステムはコンテナ内で完結している。そのため、コンテナを別のサーバに持ち出しても動かせる。
  • 軽い:アプリケーションごとのOSが必要がない。(cf. Hypervisor型仮想化)
  • セキュア:コンテナは独立していて安全。

:bulb: 例えば、本番環境と同じ環境の検証環境がすぐに立ち上げられます。破棄して作り直すことも容易です。ローカルの開発環境を揃えるのにも役立ちます。

Dockerコンテナを使うには

  • LinuxにDocker Engineをインストールする。
  • (WindowsやMacの場合)Docker Desktopをインストールする。Virtual BoxなどでLinux環境を用意してDocker Engineをインストールする。

:bulb: Docker EngineはLinux上で動きます。Folio LSPチュートリアルの場合、①Virtual Box ②EC2(Ubuntu)のどちらかで動かしています。

Dockerイメージとは

  • DockerコンテナはDockerイメージから作ります。
  • Docker HubなどのDockerレジストリからダウンロードできます。
  • Dockerイメージには、OSだけのものやアプリケーションが入っているものがあります。
  • Dockerfileを使うと、元となるDockerイメージを指定して、独自のイメージを作成することができます。

:bulb: Folio LSPでは、アプリケーションが入ったDockerが配布されています。https://hub.docker.com/search?q=folioorg&type=image

参考

Docker公式ページ https://www.docker.com/

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

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を再起動すると治りました。
よかったよかった。

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

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

注釈

  • ユーザーグループはインストール時に作成されているはずで本来不要なはずなのですが、公式ドキュメントに記載があったので、一応こちらにも記載しています。

参考

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

�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/bfb5a9a321718b7f2756

docker-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」をインストールして利用しました。
raspberry-pi-model-3b+.jpg
Raspbianで動かすために使用しているイメージの変更とかがありますが、までREADMEの更新はしてない状態ですが、「改善された開発環境を作成」をご参考にしたら。

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

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/bfb5a9a321718b7f2756

docker-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」をインストールして利用しました。
raspberry-pi-model-3b+.jpg
Raspbianで動かすために使用しているイメージの変更とかがありますが、までREADMEの更新はしてない状態ですが、「改善された開発環境を作成」をご参考にしたら。

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

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構成を構築する ことができる。

以上

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