Dockerメモ

Docker系が増えたから、情報を分割することにした。
ちょっと使わなかったら、すーぐ忘れちゃうんだもの

WindowsでDocker使う準備

Dockerは使える前提なので、インストールは別記事で。
windows10 homeだけどDockerを使う(VBox)
windows 10 homeにWSL2を入れてDockerを使う

Dockerの最低限コマンド

下記覚えておけば大体まぁ、何とかなる。
よく使うものはbatファイル等にしておくと楽。
なので、作り方今度書いておきたい…@todo

基本

docker cd 【移動先】     ... ディレクトリ移動
docker images          ... イメージ一覧を見る
docker ps              ... 起動中コンテナ一覧を見る。Docker Desctopからの方がわかりやすい。
docker stop 【コンテナ名】     ... 起動しているコンテナを指定して止める
docker version     ... バージョン確認:詳細型
docker --version     ... バージョン確認:省略型
docker system prune -a ... 現在起動していないコンテナ・ネットワーク・イメージ・ボリュームを一括削除

Compose系

docker-compose up -d 【※対象】   ... コンポーネント起動。『※対象』はdocker-compose.yml内容によっては無指定でOK。
  -dはバックグラウンドで動かして!てやつで、その画面で他に作業するときには付けること。
docker-compose stop     ... 起動コンテナを全て止める。作業終了はこれだけでいい。
docker-compose down     ... 全コンテナを停止。これで作業終了、UPしてたら、どんどんVolume増えるから止めときなさい。
docker-compose exec 【サービス名】 bash ... 入る。SSHで入ったような感じ。
docker-compose version     ... docker-compose自体のバージョン確認

最低限コレでいけると思っている。
参考:docker-compose コマンドまとめ - Qiita

Volume系

docker volume ls     ... ボリュームを確認。downとup繰り返した結果のゴミがわかる。
docker volume rm 【ボリューム名】 ... Volume削除する。使ってるものは失敗するから大丈夫
docker volume rm $(docker volume ls -qf dangling=true) ... 現在使われていないVolumeだけを削除する。

Volumeが一番ゴミが生成されやすく、残りやすいと思ってるから、名前付けて使いまわしたいと思って『volumes:』と戦ったりしたのだけども、これが結構めんどくさくて諦めた。
他にもゴミは出来るから定期的に掃除したらいいよ。

つまりあれだ、使うときは『docker-compose up -d』、終了時『docker-compose stop』
もう今後使わないなって思ったら『docker-compose down』
たまに『docker system prune -a』でお掃除
というノリでいいかと思う。

『docker-compose up』が実行できない!

基本的にどの環境でも動くハズなんだけど、環境の設定か状態か何かなんやかんやで上手く動かないこともある。

何かよくわからんが、失敗した状態のとき

落とし直すかとりあえずgitをpullして更新してみたら解決することがある。
『.env』の設定する内容が増えていたり、変わっていることがあるので要見直し。
その後『docker-compose up』で巧く行く可能性がある。
無理なら『docker-compose rm』して作り直す。

マウント状態がおかしい

cdしても、意図した先に移動しない!
lsしたとき、あるはずのディレクトリやファイルがない!
そんなとき、PowerShellで下記コマンドを実行する。

wslconfig /t 【インストールしたOS】

今回は『Ubuntu-20.04』なので

wslconfig /t Ubuntu-20.04

Dockerコマンドが使えない

The command 'docker-compose' could not be found in this WSL 2 distro.
We recommend to activate the WSL integration in Docker Desktop settings.

See https://docs.docker.com/docker-for-windows/wsl/ for details.

内容的にはWSLを使えるように設定しろとか『https://docs.docker.com/docker-for-windows/wsl/』見ろ的なメッセージ。
dockerのアップデートの後とかに起こりがち。

OSが認識されていない

WSLのデフォルトOSが設定されていない可能性がある。
解決するには、PowerShellで下記コマンドを実行する。

wsl --set-default 【インストールしたOS】

今回は『Ubuntu-20.04』なので

wsl --set-default Ubuntu-20.04
DockerとWSL2が上手く連携して動いていない

上記でも直らない場合、DockerとWSL2の連携が問題の可能性がある。
解決するには、Dockerを一度アイコンから右クリックメニュー『Quit(終了)』して、起動し直すと治る。
『Restart(再起動)』だとWSL2は起動はしているせいか、Re…なんだっけ?と『Quit(終了)』選択アラートが出て『Quit』選ぶまで延々と続く。

何度も続く場合はアップデートとかで設定が、しっかりどっか変わってしまっているかも知れない。
自分の場合は、Windows PowerShellで、Windowsの仮想化機能を有効化するコマンド

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

を実行後再起動したら治った。

Dockerのbuild時に『Release file for ~ is not valid yet』エラー

『docker-compose up』で『apt』とか走った場合、出る問題。

E: Release file for http://なんたらかんたら is not valid yet (invalid for another 2h 45min 28s). Updates for this repository will not be applied.

これはWindows側と仮想環境側で、時間が違うから起きる現象。
そう、Dockerそのものには関係ない話。
つまり解決するには、一緒にすればいいという話。
一度かきあげた文章消して全俺が泣いた…

WSL(Windows Home)の時間を設定する方法は解らない。
Hyper-V(Windows Professional)なら検索すれば出てくるのだが…。

Docker Desktop for Windowsで何度Restartしても、問題は解消されなかった。
つまり、Windows直下では、解決する方法が見つかっていない
もし見つけたら教えて下さい。
なので、WSL側で解決する。

コマンドプロンプト

コマンドプロンプトを管理者権限で開いて下記コマンドを実行するか、

net stop LxssManager
net start LxssManager
PowerShell

PowerShellで下記コマンドを実行する。

wslconfig /t Ubuntu-20.04

後半は自分のOS名。今回は『Ubuntu-20.04』の例

仮想環境側(Ubuntu)

Windows下『検索(虫眼鏡マーク)』を押して『Ubuntu』(他のOSの人はそのOS)をだし、右側『管理者として実行』をクリックし、作業画面を起動する。

sudo hwclock -s

参考:WSL2のapt updateでエラーが出る - レガシー環境から脱却したい
WSL2統合されたDocker for WindowsでaptがRelease file for xxx is not valid yetなエラーになった場合の対処 - Qiita

現在起動中のコンテナ情報を取得

起動したときは『done』てちゃんと出てたくせに、すぐ終了しちゃってるヤツを確認するのに使う。
出てなければ起動してない。失敗だ!

docker ps

と打ち込むと下記のような感じで出る。

CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                        NAMES
6fb2c7674d3c        laradock_nginx       "/bin/bash /opt/star…"   18 hours ago        Up 23 minutes       0.0.0.0:443->443/tcp, 0.0.0.0:800->80/tcp   laradock_nginx_1
...(以下略)

因みにDocker-Desktopを使えば、そこで確認出来る
即分かる。GUIの使い手の味方。

『.env』の反映されてない気がする

基本的にupすればOKだが、それでもダメであれば

docker-compose build
docker-compose up --build

してみる。
それでもダメなら

docker-compose rm

してからupし直す。

イメージを再構築(build)中、エラーになる

docker-compose build
docker-compose up --build

を求められることがあるが、このように無指定だと更新途中で失敗し、起動しなくなったりする。

docker-compose up --build mysql
docker-compose build --no-cache mysql

のように『何を』を対象にするのかを指定すること。
しっかりビルドし直したいのであれば『--no-cache』は必須。

それでもダメなら、下記で消しちゃってからupし直し。

docker-compose rm

それでもダメなら初期に戻す。

『docker-compose up』しないとき、まずやってみること

Docker Desctopを使っている場合に限るのだが、Docker Desctopを『restart』をすると解決することがある。
単純に、Docker Desctopが上手く起動していなかったりする場合があるせいなのだが、どうして起動失敗しているのかはわからない。
何度docker内部を掃除しようが、作り直そうが、Docker Desctop起動失敗が原因のときは、何をしても起動しない

やり方は、タスクバー右下、くじらアイコンがあるので、右クリック。
出てきたメニューから『Restart...』をクリックする。
するとで出てくるポップアップで『Restart』をクリックで完了。

お掃除・初期化

色々使ってて何が要るんだか要らないんだか…という状況のとき
もう巧く行かなすぎてツライ…やり直したい…てとき
そんなときにはお掃除したい!
初期に戻してやるぜ!という気持ち

通常は『docker-compose stop』して『docker-compose rm』『docker rmi』『docker volume rm』をせっせとするのだけど、面倒なんですよ

開発環境を一旦クリーンにして、ゼロから作り直したい

docker-compose down

対象指定して関連は全て消してくれる!

対象の場所に移動して、関連物は全てお掃除。
もうこのサーバは終了だ!てときに使うといいよね。

docker-compose down --rmi all --volumes

参考:《滅びの呪文》Docker Composeで作ったコンテナ、イメージ、ボリューム、ネットワークを一括完全消去する便利コマンド - Qiita

起動していないモノは、全て駆逐してくれる!

使っている内にいつの間にか容量を食われております。
いつの間にか何かゴミを沢山持っているのです…。

「ゴミを1個1個消していられるか!!」そんなときはコレ

docker system prune -a

現在起動していないコンテナ・ネットワーク・イメージ・ボリュームを一括削除してくれる。
ちゃんと外に情報を保存していないと、涙の海に沈むことになるので注意。

docker-compose.ymlでvolumes:が外部に設定してあるなら、定期的にかけておくとよろしい。

初期化してやる!

docker-compose stop
docker-compose down
docker system prune -a
docker volume rm $(docker volume ls -qf dangling=true)

MySQL起動しない!

何故か『起動しない!』『起動しても即終了する!』というと、大概MySQL…

エラー内容が『State = Exit0, Exit 1, Exit 3』

基本的には下記の情報で何とかなる。
Laradockのmysqlが起動できない時の対応(State = Exit0, Exit 1, Exit 3) - Qiita

docker images

で『mysql』を含む名前を覚えて

docker-compose down

または

docker-compose down 【取得した名】

してから

docker-compose rm mysql
docker volume rm 取得した名前
docker rmi 取得した名前

~/.laradock/data/の『mysql』ディレクトリを消した後

docker-compose up mysql

これで完全作り直ししてくれる。

それでも動かなければ

docker-compose stop
docker system prune -a
docker volume rm $(docker volume ls -qf dangling=true)

にて全て削除してきれいにした上で
~/.laradock/data/の『mysql』ディレクトリを消した後

docker-compose up -d nginx workspace
docker-compose up mysql

MySQLは先にnginx workspace作っちゃってから作る方が安全。

開発環境的に、そもそも該当MySQL使えてない可能性

開発環境次第では、立ち上げられないimageがある。

元が下記だとする

image: mysql:latest

『latest』がバージョン高すぎて非対応の場合がある。
 ↓失態時は下記

image: mysql:5.7

そもそも『MySQL』が使えない場合がある。そんなときは『mariadb』に変更。
 ↓失態時は下記

image: mariadb

MariaDBはほぼMySQLと一緒だから、基本的に気にしなくてOK。

変える度にイチイチ消すのもあれなので、下記で立て直せばいい。

docker-compose build --no-cache mysql

コメント

タイトルとURLをコピーしました