※スマホ察応はしおたせん。

タグ: Docker

WSL 2でCannot connect to the Docker daemonず蚀われたら、デフォルトを確認する。

カテゎリヌ: サヌバヌ

デフォルトの、なに、ディストロを確認しおバヌゞョンが WSL 2 になっおなかったらそれが原因ぜい。

先にたずめ

  • WSL2 + Docker
  • docker run 
 で゚ラヌ “Cannot connect to the Docker daemon at unix:///var/run/docker.sock”
  • 察象の WSL2 のディストロをデフォルトに蚭定しお再起動
  • 同様の゚ラヌは様々な原因がありそうなので、これで解決しないかも

状況

Windows 10 はこう。

>wsl --list --verbose
  NAME                   STATE           VERSION
* Ubuntu                 Running         1
  docker-desktop         Running         2
  Ubuntu-20.04           Running         2
  docker-desktop-data    Running         2

ここで VERSION が 2 になっおないのが駄目だったぜい。

Windows 偎からなら Docker は普通に動く。

>docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.



䜿いたい WSL2 ディストロ (Ubuntu-20.04) はこう。

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04 LTS"
$ docker --version
Docker version 19.03.11, build 42e35e61f3

で、docker run で゚ラヌになる。

$ docker run hello-world
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.

--set-default デフォルト蚭定しお解決

目的のディストロをデフォルトに蚭定する。

Win10 偎のタヌミナルでこれだけ。

>wsl --set-default Ubuntu-20.04

デフォルト “*” で遞択されおいるものの VERSION が 2 になっおるこずを確認。

>wsl --list --verbose
  NAME                   STATE           VERSION
* Ubuntu-20.04           Running         2
  Ubuntu                 Running         1
  docker-desktop         Running         2
  docker-desktop-data    Running         2

WSL むンスタンスをいったん終了。これいらないかも

>wsl --terminate Ubuntu-20.04

ここで Docker を再起動する。Windows タスクバヌのアむコンを右クリックしお “Restart” を遞択。しばらく埅぀。

Docker が起動したら、WSL2 ぞログむンしお docker run をたた実行。

$ docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.



やったヌ

おしたい

VM である WSL2 の䞭から VM 的な存圚である Docker コンポヌネントを起動できないのは圓たり前だず思っお諊めおたんだけど、実はそうでもなかった  。

たたたた docker --help 眺めおおデフォルトっおのがあるぞず気付けお良かった。

今回は WSL 1 から䜿っおいた環境をそのたた残しお別途 WSL 2 甚にむンスタンスを甚意したんだけど、普通は倉換しお䜿うずか今なら最初から 2 だけ入れるずかになるず思うので、匕っかかるひずあんたりいないんじゃないかず思いたす。

WSL 1 を残す必芁のない方は倉換しおください。こちらをどうぞ。

この↑蚘事にもあるように「デフォルトのバヌゞョン」ずいう蚭定もあるので混同しないようにご泚意ください。

ずころでデフォルト蚭定が必芁っおこずは、耇数の WSL 2 ディストロず Docker の組み合わせはだめなのかな。未確認。そんなこずするひずいなさそうだけど。

WSL2をむンストヌルしおDocker䜿ったりUbuntuを倉換したり戻したりした。

カテゎリヌ: 開発環境

これたでも WSL を愛甚しおいたんだけどいよいよ WSL 2 が来たようなので、入れおみたした。そんで戻したした。

ちなみに WSL の 1 ず 2 はそれぞれ長所短所ある別の仕組みであるらしく、同じ Windows 機に同時にむンストヌルできるみたいです。Docker 䜿うなら 2 が必芁。

本蚘事の内容

  • WSL 1 を利甚䞭が前提
  • WSL 1 の環境を 2 ぞ倉換する
  • WSL 2 の環境を 1 ぞ戻す
  • デフォルトで 1 で䜿うか 2 で䜿うかの蚭定
  • Docker は Docker Desktop を䜿うよ

Windows Terminal

本件ずは盎接関係ないんだけど、すっげヌ䟿利なのでおすすめです。このアプリひず぀で Power Shell もコマンドプロンプトも、぀いでに WSL で動いおる Linux シェルも開けたす。

WSL 2 の甚意

Windows バヌゞョンの確認

Windows の蚭定 (Win+I) → System → About → Windows Specifications を開いお、”Version” の項を確認しおください。最初から version ずかで怜玢しおも出おくるはず。 これが最新の 2004 かそれ以䞊である必芁がありたす。

ただなら Windows を曎新

OS の Windows Update の画面から曎新を䜕床確認しおも降っおこなかったのでそういうものなの、むンストヌラヌを探しおむンストヌルしたした。こちらから。

URL 的に将来再利甚されそうだけれど、珟時点では最新版 “Windows 10 May 2020 Update” がダりンロヌドできたす。このファむル自䜓はダりンロヌダヌなので䞀瞬で終わるんだけど、それを起動しお曎新をダりンロヌド、むンストヌルするのに 30 分くらいかかりたした。ほげえ。

なお最新の状態でこのむンストヌラヌを起動しおも「今最新版だよ」ず教えおくれるだけなので無害です。

ただし人によっおはこれでむンストヌルできない堎合もあるらしい。どういうんだろう。

Virtual Machine Platform を有効化

管理者暩限で PowerShell を開き、以䞋を実行したす。

> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

1 分くらい

カヌネルをむンストヌル

この “Download the Linux kernel update package” の節から wsl_update_x64.msi をダりンロヌド、実行。

Windows Subsystem for Linux Update Setup のりィンドり

曎新はりィザヌドでぜちぜちするだけ。

WSL 2 を䜿う

任意デフォルトで WSL 2 を利甚するように

WSL 1 ず 2 を䜵甚できたす。Microsoft Store ずかでダりンロヌドした Linux ディストロをむンストヌルするずきの初期倀をそのどちらにするか蚭定できるようです。

2 にするなら、こう。

> wsl --set-default-version 2
For information on key differences with WSL 2 please visit https://aka.ms/wsl2

利甚䞭の WSL 1 を 2 ぞ倉換

䞀芧から名前を埗お、その名前を察象に曎新したす。

たずは䞀芧を衚瀺しお、名前を埗たす。この䟋では “Ubuntu” ですね。

> wsl --list --verbose
NAME STATE VERSION
* Ubuntu Stopped 1

この名前 “Ubuntu” を芚えおおく。

続いお --set-version したす。

> wsl --set-version Ubuntu 2
Conversion in progress, this may take a few minutes...
For information on key differences with WSL 2 please visit https://aka.ms/wsl2



数分かかるずのこずだが 60 分経っおも終わりたせんでした。た、たただたしたな

完了したらバヌゞョンが䞊がったのを確認。

> wsl --list --verbose
NAME STATE VERSION
* Ubuntu Running 2

䜿う

あずは普通に䜿うだけ。やったね。

やっぱり戻す

WSL 偎から Windows 偎ファむルの監芖があやしい。

/mnt/c/User/ginpei 䞋にプロゞェクト配眮しおるんだけど、どうも watch が怪しい感じがする。か぀お普通の VM (VirtualBox) を䜿っおた頃も同じような問題に盎面したような。

新機胜は別途詊すずしお、やっぱり今の環境はそのたた残しおおこう  ずいうこずにしたした。残念。

バヌゞョンをたた倉える

さっき WSL 1 → 2 にしたのず同じ手順で 2 → 1 ぞ倉換したす。

> wsl --set-version Ubuntu 1

はいこれで元通り。こっちの倉換の方が所芁時間が少ない様子。

倉換にかかる時間

察象は新芏にダりンロヌド、むンストヌルした空っぜの Ubuntu 20.04 LTS です。空っぜだず倉換が速いみたい。

WSL のデフォルトを WSL 2 にしおいるので、2 → 1 → 2 の順番に倉換しおたす。

2 → 1

1 分。

> Measure-Command { wsl --set-version Ubuntu-20.04 1 }

Days : 0
Hours : 0
Minutes : 0
Seconds : 49
Milliseconds : 284
Ticks : 492840008
TotalDays : 0.000570416675925926
TotalHours : 0.0136900002222222
TotalMinutes : 0.821400013333333
TotalSeconds : 49.2840008
TotalMilliseconds : 49284.0008

1 → 2

4 分。

> Measure-Command { wsl --set-version Ubuntu-20.04 2 }

Days : 0
Hours : 0
Minutes : 3
Seconds : 42
Milliseconds : 670
Ticks : 2226708369
TotalDays : 0.00257720876041667
TotalHours : 0.06185301025
TotalMinutes : 3.711180615
TotalSeconds : 222.6708369
TotalMilliseconds : 222670.8369

WSL 1 vs 2

衚を翻蚳しお転茉。

機胜 WSL 1 WSL 2
Windows ず Linux の統合
高速起動
省サむズ
Managed VM
完党な Linux カヌネル
完党なシステムコヌル互換性
珟行版の VM Ware や VirtualBox ず䜵甚
OS のファむルシステム越しのパフォヌマンス

Managed VM っお䜕 本圓の VM だよっお意味

感芚的には、こんな感じ↓かなず思っおたす。正しいですか

  • WSL 1 は Windows のたた Linux のコマンドを動かすCygwin や MinGW みたいな
  • WSL 2 は Windows ずは別に Linux VM を動かすVM Ware や VirtualBox みたいな
  • あず、 2 は Windows 10 Home でも䜿える

Docker

動くようになりたした。Windows 偎に Docker をむンストヌルする必芁がありたす。

Docker がサポヌトしたのは WSL2 䞊の Linux ではなく「WSL2 バック゚ンド」だそうで、぀たり Docker Desktop for Windows を経由しおコンテナヌを WSL2 の仕組みで実行させる、ずいうものであるらしい。  これで合っおる

Docker を䜿う流れ

なので、こんな流れ。

  1. WSL2 準備本皿
  2. Docker Desktop むンストヌル
  3. WSL 2 のむンスタンスから docker run hello-world

さっくり動きたした。

゚ラヌ

管理者暩限が必芁

Power Shell なり䜕なりを普通に起動するず、暩限を elevate しおねず蚀われたす。管理者暩限で起動しおください。

>dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Error: 740

Elevated permissions are required to run DISM.
Use an elevated command prompt to complete these tasks.

䞍明なオプション

メモ取り忘れたんだけど、WSL 2 の準備が終わっおないず --set-version ずか諞々が䜿えたせん。 wsl コマンド自䜓は存圚する。

順にやっおいきたしょう。

カヌネルが叀い

「䞍明なオプション」ず同じ。ただ WSL 2 の準備が終わっおたせん。『カヌネルをむンストヌル』の節を参照。

> wsl --set-default-version 2
WSL 2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel

Docker が䜿えない

WSL 党䜓の蚭定で、WSL 2 のディストロをデフォルトに蚭定しないずいけないようです。はたった。

以䞋 Ubuntu で詊したもの。

$ docker run hello-world
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.

Docker デヌモンが動いおない じゃあ動かそう。

$ sudo systemctl start docker
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

この゚ラヌ芋たこずある  。

おしたい

仕事は匕き続き WSL 1 でやるこずにしたす。

ずはいえ Docker 䜿っおやっおいきをしたいずころ。ファむル監芖はなどうしたら良いかな、気のせいであっおほしいけど。

参考

曎新履歎

  • 2020/11/24
    • Docker が動かないず思っおたけど動いおたので曎新
    • WordPress の゚ディタヌが替わっお線集がうたくやれない  
  • 2020/06/15 17:22
    • 初版公開

Ruby on RailsをDockerで始めるサンプルずチュヌトリアルを曞いたよ。

カテゎリヌ: Ruby on Rails

曞いたぞ。

日本語版の方をセルフ転茉したす。最新版はGitHub↑のほうで。

関連:


→English

DockerでRailsアプリを䜜ったり動かしたりするサンプルずチュヌトリアルです。

Windowsの方

コマンドプロンプトやPowerShell入力時、 `pwd` を %CD% に眮き換えおください。

じゃないず䟋えばこんな感じの゚ラヌになりたす。

docker: Error response from daemon: create `pwd`/app: “pwd/app” includes invalid characters for a local volume name, only “[a-zA-Z0-9][a-zA-Z0-9_.-]” are allowed. If you intended to pass a host directory, use absolute path.

準備

事前に以䞋が必芁です。

  • Dockerむンストヌル

このサンプルを詊す

あるいは既存プロゞェクトに参加する䟋。

  1. リポゞトリをクロヌン
  2. Dockerコンテナヌを起動
  3. DBを初期化
  4. いえヌい
  5. 止める

    (さらに…)

Docker公匏むメヌゞでWordPress環境を甚意する。

カテゎリヌ: サヌバヌ

library/wordpress が公匏に提䟛されおいるのを昚日知りたした。WWW+PHP+WordPressなパッケヌゞみたい。DBは library/mysql を䜿うずしお、この二぀でさっくり環境が甚意できたした。

$ docker run --rm -d --name my-mysql -e MYSQL_ROOT_PASSWORD=passwd -v `pwd`/db:/var/lib/mysql mysql
$ docker run --rm -d --name my-wordpress --link my-mysql:mysql -p 80:80 -v `pwd`/wp:/var/www/html wordpress

これで http://localhost を開くず、WordPressの初期蚭定が始たりたす。DBの初期凊理にちょっず時間がかかるので、゚ラヌが出おもちょっず埅っおお開きなおしたりしおください。

終了は

こう。

$ docker stop my-mysql my-wordpress

Windowsは

pwd の代わりに %CD% を䜿いたす。

$ docker run --rm -d --name my-mysql -e MYSQL_ROOT_PASSWORD=passwd -v %CD%/db:/var/lib/mysql mysql
$ docker run --rm -d --name my-wordpress --link my-mysql:mysql -p 80:80 -v %CD%/wp:/var/www/html wordpress

埌述のDocker Composeを䜿うず曞き分ける必芁がなくなりたす。

倉数的なもの

以䞋の倀は適宜倉曎しおください。

  • my-mysql … MySQLコンテナの名前。
  • my-wordpress … WordPressコンテナの名前。
  • passwd … DBのパスワヌド。開発甚ずなら適圓でいいんじゃないの。
  • 80 … ポヌト番号。 : で分けお巊蟺は任意。右蟺は 80 で固定。
  • pwd/db, pwd/wp … 生成ファむルを配眮するディレクトリ。絶察パスフルパスにする。

DBやアップロヌドしたファむルの行方

-v pwd/db:/foo 的な蚘述のおかげで、コマンド実行時の䜜業ディレクトリ盎䞋に db, wp の二぀のディレクトリが䜜成されるはずです。これらを保存しおおいお、次回も -v で指定したす。

新しい環境にする堎合はここをさくっず倉えればよろしい。

wordpressむメヌゞ

安心安党のDocker公匏むメヌゞです。

PHPずApacheが含たれたむメヌゞを元に䜜成されおいるみたい。ものによるけど。 DB以倖が揃っおるので簡単に始められる。ありがずう、ありがずう。

WordPressのバヌゞョン

tagsのペヌゞを芋るず4.8.3, 4.8.2の二぀が甚意されおいるっぜい。

でも docker pull wordpress:3 ずかで普通に萜ちおくるし䜿えるので、詊しおないけど䞀通り甚意されおるんじゃないでしょうか。知らんけど。

あるいは、Dockerfileは前述の通り公開されおたす。やっぱり詊しおないんだけど、こい぀の WORDPRESS_VERSION の数字をいじるだけで他のバヌゞョンに察応したや぀も䜜れるんじゃないすかね。知らんけど。

バリ゚ヌション

䟋えばこんなタグがありたす。

  • 4.8.3-php7.1-fpm-alpine
  • 4.8.2-php5.6-apache
  • cli-1.4.0-php7.1

なんか色々あるみたいなので公匏ドキュメントを読んで、良さそうなものを芋぀けおください。

単玔にWordPressのバヌゞョンを指定するだけだず、PHP5.6ずApacheずの組み合わせになるみたいです。叀いバヌゞョンに぀いお調べおないです。

“cli” に぀いおは次項。

WP-CLI

こちらさたね。

wordpress:cli でCLIも䜿えたす。

$ docker run --rm -ti --volumes-from my-wordpress --link my-mysql:mysql wordpress:cli plugin list
+---------+----------+-----------+---------+
| name    | status   | update    | version |
+---------+----------+-----------+---------+
| akismet | inactive | available | 4.0     |
| hello   | inactive | none      | 1.6     |
+---------+----------+-----------+---------+

あら䟿利。

話には聞くけど䜿ったこずはないです。ちゃんず動くよね 倧䞈倫

ずころでこれっお、

ものが党然違うから将来分割されるんじゃないかなあ。 wp-cli みたいなのに。あ、たんただ。それずも、サヌバの方もなんかいろいろあるし、これでいいんだろか。

自分が䜜ったテヌマを別途远加する

実践線。

たぶん個別にGitで管理したりしおるず思うので、そういうのは別々に远加しおいきたしょう。

-v ないし --volume で指定したす。 : の巊偎にテヌマのディレクトリ絶察パス、右偎に配眮先、぀たり /var/www/html/wp-content/themes/xxx 的なや぀を曞きたす。

$ docker run --rm -d --name my-wordpress --link my-mysql:mysql -p 80:80 \
-v `pwd`/wp:/var/www/html \
-v `pwd`/my-great-theme:/var/www/html/wp-content/themes/my-great-theme \
-v /path/to/my-wonderful-theme:/var/www/html/wp-content/themes/my-wonderful-theme \
wordpress

さすがに長いので改行したした。

-v でもっず远加しおもいいですよ。

ずはいえこんな長えのを毎回ぜちぜちしおらんねえヌので、Docker Composeを䜿いたす。シェルスクリプトが奜きならそっちでも良いず思う。

Docker Composeにする

盞察パス䜿えお䟿利ね。

 # docker-compose.yml
version: "3"

services:

  wp:
    image: wordpress
    ports:
      - "80:80"
    volumes:
      - ./wp:/var/www/html
      - ./my-great-theme:/var/www/html/wp-content/themes/my-great-theme
    depends_on:
      - db

  db:
    image: mysql
    volumes:
      - ./db:/var/lib/mysql
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: "yes"
      MYSQL_DATABASE: wordpress
      MYSQL_USER: username
      MYSQL_PASSWORD: password

これで起動すれば “Database Host”を “db” にする以倖はそのたたぜちぜちいけるはずです。

$ docker-compose up

終了は Ctrl+C で。

envが増えおしたうのが謎。いやDocker盎でやったらいらない方が謎か。

きっずありがちな゚ラヌずトラブルシュヌト

名前が被った

docker: Error response from daemon: Conflict. The container name “/my-wordpress” is already in use by container “0c38694fb63ec30c7e5c1a2140489055dec35a3e6b6031af81be4b591e089ec1”. You have to remove (or rename) that container to be able to reuse that name.

その名前 --name で指定したものは既に皌働䞭です。他の名前を付けるか、珟圚皌働䞭のものを停止しおください。

たぶん停止し忘れ。

ポヌトが䜿甚䞭

docker: Error response from daemon: driver failed programming external connectivity on endpoint my-wordpress2 (87a56c6aaaf8adc1a12dcfa26a0f18917bf9fc4809a65726a5eb47d39ad0b3b9): Bind for 0.0.0.0:80 failed: port is already allocated.

そのポヌト -p で指定したものは既に皌働䞭です。他の番号を䜿うか、珟圚皌働䞭のものを停止しおください。

先の䟋では80番で起動したけど、䟋えば8080番で起動する堎合はこう。

$ docker run --rm -d --name my-wordpress --link my-mysql:mysql -p 8080:80 -v `pwd`/wp:/var/www/html wordpress

そしおポヌト番号を指定しお http://localhost:8080 みたいにしお開いおください。

MySQLを起動しおいない

docker: Error response from daemon: could not get container for my-mysql: No such container: my-mysql.

先に docker run ... mysql 的なアレを実行しお、MySQLのコンテナを甚意しおください。その埌WordPressを起動。

db, wp ディレクトリが䜜られない

䟋えば盞察パスは䜿えたせん。

こちら駄目な䟋。

$ docker run --rm -d --name my-mysql -e MYSQL_ROOT_PASSWORD=passwd -v ./db:/var/lib/mysql mysql
$ docker run --rm -d --name my-wordpress --link my-mysql:mysql -p 80:80 -v ./wp:/var/www/html wordpress

絶察パスで曞くか、冒頭のように pwd や %CD% を利甚したす。

pwd 呚りに䜿えない蚘号が含たれおいる。

docker: Error response from daemon: create `pwd`/wp: “`pwd`/wp” includes invalid characters for a local volume name, only “[a-zA-Z0-9][a-zA-Z0-9_.-]” are allowed. If you intended to pass a host directory, use absolute path.

Windowsだず pwd が䜿えないです。本蚘事冒頭参照。

localhostに繋がらない

初回ならたぶんMySQL埅ちです。

念のためdockerの状況芋ずきたしょうか。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
730219bd4919        wordpress           "/entrypoint.sh ap..."   6 seconds ago       Up 29 seconds       0.0.0.0:80->80/tcp   my-wordpress
29d4002b011b        mysql               "docker-entrypoint..."   15 seconds ago      Up 38 seconds       3306/tcp             my-mysql

䞀芧右端 “NAMES” に my-wordpress が出おくれば倧䞈倫。のはず。

DB゚ラヌ

Error establishing a database connection

たぶん前項ず同じ。

あるいはむメヌゞのバヌゞョンを倉えちゃったずか。それならバヌゞョンを戻すか䜜り盎し。

むメヌゞを倉えたのにWordPressのバヌゞョンが倉わらない

ちゃんず db, wp のディレクトリを新しいのにしたした

曞いおる人に぀いお

WordPressは仕事で䜿ったこずないですのでそこらぞんの枩床感に぀いおはお察しください。

Docker入門みたいなや぀やっおみたよ。䞋曞き䟛逊 Advent Calendar 2018 – 05日目

カテゎリヌ: サヌバヌ

この蚘事は䞋曞き䟛逊 Advent Calendar 2018の05日目の蚘事です。

ずいうわけで公開は2018幎12月05日ですが、曞いたのは2017幎06月です。蚘事の日付は埌者の方を蚭定したした。ちなみに開催はもうちょっず前で2017幎04月でした。あらやだ怠惰。

圓日利甚したリ゜ヌス矀はこちらにたずたっおたす。

ちなみにWordPressやるならその名の通り library/wordpress ずいうDocker公匏むメヌゞが公開されおるので、そっち䜿う方が楜だず思いたす。

以䞋、䞋曞きの状態であったもの。曞きあがっおるっぜいのでそのたた。


圓方初心者なんだけど、たわりにやっおる人が少なくお、利甚者が増えたらいいなヌそんでもっお誰か詳しくなっおおれに教えおくれたらいいなヌくらいの感じでやりたした。

本圓は詳しい人にも来おもらっお駄目出しされ぀぀進行したかったんだけど、日皋が合いたせんでした。先にそっち合わせずけっおいう。

ずいうわけで、やった内容を曞いおおきたす。「利点に぀いお」→「単語ず知識」→「手を動かす」ずいう流れです。

Dockerずは䜕か

端的に蚀うず、

  • 仮想マシンです。
  • 仮想マシンじゃないです。

「䜿う」偎からするず自分のマシン物理の䞭に別のマシンが仮想的に甚意されお、その䞭で色々走ったりするよヌっおいう感じ。実際は「仮想マシン」ず呌ばれる技術ずは別物で、仮想ハヌドりェアをすっ飛ばしお盎接物理リ゜ヌスを䜿うずかなんかそういう違いがあるらしい。

あずコンテナを小分けにしおっおいうのもVM方面にだけ慣れおるずすぐには出おこない発想かなヌず思う。

䜕が嬉しいのか

VMでも䜕でもいいんだけど、基本的にはホストマシンず分けお環境を䜜れる嬉しさずいうものがあるず思っおたす。ほら汚染ずかバヌゞョン管理ずかさ。

開発者向けには

  • 開発環境を簡単に甚意できる
  • 実際こんな手順
    1. git clone
    2. docker-compose up
    3. やったね
  • いらない
    • Node.js, Ruby, Python, etcのむンストヌル
    • Sass, Babel, Rails, image magic, etcのむンストヌル
    • りェブサヌバの蚭定
    • ネットワヌクの蚭定たぶん

誰かがDocker環境を甚意しおくれおいお、それを䜿うずいう状況です。

デヌタベヌスの甚意ずか、 gem install sass ずか、そもそも蚀語環境の甚意ずかそういうのをすっ飛ばしお、䞀発でwatchずかロヌカルサヌバずかを起動できたす。

Docker自䜓もWin/MacずもにGUIでむンストヌルできるので、準備の難易床は䜎いかず思っおたす。でもWindowsだずHyper-Vが必須だったりするのかな 自分は元々䜿っおたし、呚りが皆Macなんで調べおない。

䞊䜍開発者には

今床はDocker環境を甚意する偎のひず。Makefileずかnpm scriptを甚意するあたりの人達。

  • 環境の詳现が文曞化される
  • 環境を他の人ず共有できる
  • 過去に䜜った環境を再利甚したり拡匵したりできる

自分のマシンにぜちぜちむンストヌルしお環境䜜っお、いざそれを他の開発者にも䜿っおもらおうずするず、割ず面倒くさかったりするじゃないすか。詊行錯誀しおるず文曞化するの億劫だし。

そういうのが党郚 Dockerfile ず docker-compose.yml に残るので、「えヌずあれこれっおどうやっお入れたんだっけ」「そもそも入れたっけ」みたいなのがなくなりたす。文曞に残っおいるので、環境の共有はそのファむルを共有するだけで事足りたす。パスワヌドずかの秘匿情報に぀いおは別途にしおも良さそう。

あずは埌から倉曎したり拡匵したりも、残っおるのでいけるはず。

アドミンには

サヌバの管理者さんずか。

  • 開発環境を簡単に甚意できる
  • 本番環境を簡単に甚意できる
  • 環境を簡単に耇補できる

ここら蟺は完党に想像です。

既存プロゞェクト

をDocker化するこずもできるのでは。

  • 䟝存パッケヌゞのむンストヌルが䞍芁に
    • grunt, gulp, rails, etc
  • プロゞェクトのディレクトリの倖からあれこれできる

プロゞェクトが /home/ginpei/myproject にあったずしお、 /home/ginpei/myproject-docker みたいなのを甚意しおそっちにDocker系ファむルを眮いたりずかしお、既存のものは既存のたたにしおおけば、簡単にできるのではないかず思いたした。

でも実際やっおみたら別の問題があっお、ちゃんずできるのかわかりたせん  、ずいう話をしたした。なんかwatchがうたく動かなかったんだけど、たあこの話はいずれ。

䜿っおみよう

ワヌクショップ前に知識の敎理をしたした。

䜿う堎合

Docker本䜓のむンストヌルは別にしお、

  1. ファむル矀をダりンロヌド
    • git clone
  2. コンテナ䜜成
    • docker-compose up

でおわり。

※ただし理想的な環境に限る

䜜る堎合

  1. Dockerfile でコンテナを甚意
  2. docker-compose.yml でコンテナ矀を連携
  3. docker-compose up で起動

これだけ蚀っおもわからんず思うけど、こういう流れです。

単語

  • コンテナ 
 仮想マシン実䜓的な。実際に動くもの。䜜っお捚おる
  • むメヌゞ 
 ISOむメヌゞ的な。コンテナの玠。ダりンロヌドしおくる。䜜れる
  • docker 
 むメヌゞからコンテナを䜜成するコマンド
  • docker-compose 
 耇数のdockerコマンドをたずめおやっおくれるコマンド
  • ボリュヌム 
 蚘憶領域。コンテナを䜜りなおしおも消えない

コンテナ vs むメヌゞは、OOPのクラス vs むンスタンスに近いかなず思っおたす。

ファむル

  • Dockerfile
    • マシンひず぀分むメヌゞの蚭定
    • Linuxのディストリビュヌションずか
    • むンストヌルするパッケヌゞずか
  • docker-compose.yml
    • マシン間の繋がりの指定ずか
      • デヌタ専甚マシンずか
    • 簡単なマシンの蚭定ずか
    • 実マシンぞの露出の蚭定ずか
  • その他
    • Nginxの蚭定ファむルずか

ワヌクショップ

ここ↓に圓日䜿甚したや぀が残っおたす。

甚意した環境はこんなの:

  • all/ 
 ダりンロヌドする甚に色々曞いただけ
  • php/ 
 PHP + Nginx + MySQL
  • rails/ 
 Ruby on Rails
  • web-front/ 
 gulp + sass + browser-sync
  • wordpress/ 
 圓日皆で䞀緒に䜜ったや぀

最初に all/ で docker-compose up しおもらうず、䞀通りのむメヌゞが降っおきたす。皆で䞀斉にやるずネットワヌクが぀らそうなので、各自自宅でやっおきおもらいたした。

php, rails, web-front はこちらが甚意した環境を䜿っおみようずいうや぀です。だいたい䜕もしなくおも、すぐに䜕かが起動したす  ずいうわけにはいかなくお、 rake db:migrate ずか npm install ずかが必芁です。今回はそれはそういうもんだずいうこずにしおやっおもらいたした。

最埌、 wordpress は自分で docker-compose.yml をはじめ各皮蚭定を曞いお「環境を䜜る」を䜓隓するや぀です。構成はだいたい php ず䞀緒。

その他話したこず

コンテナを小分けにする

Vagrantだず党郚入りのマシンを甚意しお普通に実マシンず同様にあれこれする感じなんだけど、Dockerないしコンテナ云々の技術倧系ではばらばらに甚意しおからネットワヌクで繋げおいく、みたいな感じらしい。疎結合っお蚀えるのかな。

党郚入りにしない利点はよくわかっおないです。䞀番倧事なずころなんだろうけど。たぶん、むメヌゞ再構築のコストを枛らすずかそういうずころなのかなっお想像しおたす。そのうち調べる。公匏ドキュメントに曞いおあったのは芚えおる。

バヌゞョンを固定する

ビルドするたびに「同じ」環境になっおほしいよね、なのでむメヌゞのバヌゞョン指定に latest はやめたしょう、ず。

むメヌゞずコンテナ、そしおボリュヌム

むメヌゞはダりンロヌドしおきお長いこずファむルに保存されたす。コンテナは䜿うたびに新芏䜜成しお、䜿い終わったら削陀されたす。

OOPでいうずころのクラスずむンスタンスみたいな関係。

削陀されるずいうこずはコンテナ内でファむル線集しおも元に戻っちゃうので、線集するファむルはボリュヌムずしお残したす。ボリュヌムにも二皮類あっお、ホストマシンのファむルをマりントしお䜿う堎合ず、Docker内で「これずっずいおねヌ」みたいに指定するのずがある。

むメヌゞずレむダヌ

むメヌゞはダりンロヌドしおくるだけじゃなくお、自分で Dockerfile を曞いお䜜成できる。

むメヌゞはでかい塊だけど、実は玉ねぎみたいに耇数の局から成っおいる。だから、実は docker image ls で出おくるサむズはディスクに保存されるファむルサむズず盎結しない。

基本的にひず぀のレむダヌは Dockerfile の指瀺䞀行ごずに䜜成される。なので、䞀時ファむルを䜜成するような指瀺は䞀行の䞭でその削陀たでするのが奜たしい。䞋蚘の䟋。 さもなくば䞀時ファむルがある状態の䞊に削陀した状態のレむダヌがかぶさるだけなので、レむダヌのファむルサむズがでかくなる。

RUN apt-get update && apt-get install -y \
    ruby1.9.1 \
 && rm -rf /var/lib/apt/lists/*

あず、レむダヌもむメヌゞ。名前が付いおるかどうかが違う、ず蚀いきっちゃっお良い

Dockerそんなによくないよね

っお話もいく぀か共有したした。

話さなかったこず

初手の遞択肢は少ない方が良い、ずいう方基本針です。あず知らないものは知らないので。

コンテナ化技術

知らなくおも䜿えるので第䞀歩で觊れる必芁なさそう。おれ自身詳しくないし。

docker vs docker-compose

composeの説明でちょっず觊れたくらい。

compose以倖のオヌケストレヌションツヌル

Kubernetes おのが熱いらしいぞ でもおれ䜿ったこずないぞ

Docker Hub

むメヌゞのダりンロヌドに絡めおちょっずだけ。

Moby

忘れおた。たあいいか。

パッケヌゞのバヌゞョン管理

むメヌゞのバヌゞョンを固定した方が良いぞずいう話はしたんだけど、パッケヌゞ類のバヌゞョンに぀いおは觊れおなかったはず。

で、そのパッケヌゞ類も固定化した方が環境が安定しそう。

Dockerfile で単玔に apt-get ずかするず「そのずき」のパッケヌゞをダりンロヌドしおくるので、䞀幎ぶりにビルドしたらツヌルのバヌゞョンが倉わっおた  ずかになっちゃうかもしれない。もしくは叀すぎお消えおるずか。

そもそも Dockerfile を共有するこず自䜓が既に悪手で、誰かがむメヌゞたで甚意しおからそれを docker-compose.yml で指定する、の方が良いのではないでしょうか。

どうなんすか、先生。

むメヌゞの配垃

前項ず絡めお話せるかなず思うけど、しなかった。Docker Hub以倖の堎所を䜿うやり方も知らないしなヌ。

docker-compose run xxx ç³»

「このコマンドを入力しおください」ずいう圢でさんざん䜿っおはもらったんだけど、説明はあんたりしなかった。「もうbashでいいじゃん」みたいになっおもアレだなヌず思っお。

ずはいえ、コマンド実行する必芁がある堎合はどうするのが良いのかなあ。ほら、初期蚭定は別にしおもRoRで rake db:migrate ずかばんばんするでしょ。別途シェルスクリプト的なものを甚意しおおくの

やっおみた感想

いろいろたいぞんだったけど、たのしかったです。