Dockerを動かすときはxamppのApacheとMysqlは止めたほうが無難

xamppのデフォルト設定は、Apacheはポート80番、MySQLはポート3306番を用いる。 Dockerも80ポートや3306ポートを使って開発環境を構築するケースがある。 同じポートを使うと競合してどちらかが使えなくなるので注意する。 どうしても共存させる場合は、xamppかDockerのどちらかでポート番号を変える必要がある。

xamppのMySQLが起動中だと、下記のようなエラーが発生する。
ERROR: for mysql  Cannot start service mysql
ERROR: for mysql  Cannot start service mysql: Ports are not available: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
Encountered errors while bringing up the project.
		

Dockerとは


Dockerネットワークとは

ローカル環境において、コンテナはホストのローカルIPアドレス、Dockerネットワーク名の組み合わせでできている。

Dockerネットワークはローカル環境においてはローカルIPアドレスとコンテナの紐づける存在。
各コンテナは仮想IPアドレス仮(想NIC)を保持してるが、その仮想IPアドレスのパターンはDockerネットワークの設定によって決まる。

Dockerネットワークにはbridge, none, hostの3種類があるが、bridgeが使われることが多い。
デフォルトではbridgeが使われる。

docker network lsコマンドでDockerネットワークの一覧を確認可能。
$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
a24920520378        bridge              bridge              local
8fb76d054ec2        frontend_default    bridge              local
8967df4354b4        host                host                local
d6ffaa0b27d7        none                null                local
		

Docker CE for Windowsをインストール

Docker CE for Windows → Docker Desktop for Windows

2019年11月の時点で「Docker Desktop for Windows」に変更されている。
ダウンロードする際、アカウント作成が求められるようになった。
インストールは道なりにボタンを押すだけ。
Hyper-Vに関する設定が面倒であったが自動でやってくれるようになったようだ。(PCの再起動が求められるなった?)


旧インストール手順

PC環境はWindows10,64bit。

Docker CE for Windowsのインストール手順

  1. DockerのWindows用インストーラを入手するため、 公式サイト にアクセスする。
  2. インストーラは2種類あるが、「Stable channel(安定板)」側からインストーラ「Docker for Windows Installer.exe」をダウンロードする。

  3. Docker for Windows Installer.exeを実行する。オプションの指定などはない。

  4. Hyper-V機能が無効になっている場合、Hyper-V機能を有効にするようエラーメッセージが表示される。OKボタンを押してPCを再起動する。

    エラーメッセージの和訳


    補足:下図の方法で、Hyper-V機能を有効化することもできる。


  5. PCを再起動直後にDockerからBIOS設定が必要とのエラーメッセージが表示されることがある。この場合、BIOSで仮想化を有効にする作業が必要になる。

    エラーメッセージの和訳


    仮想の有効化する手順は、BIOSの種類によって異なるが概ね下記の通りである。
    1. PC起動直後にF2を連打しBIOSを起動
    2. CPU関係の設定を開く
    3. 「Intel VT~」もしくは「Intel(R) Virtualization Technology」などと表記されている項目を有効に切り替える。

    補足1:ASUSである場合、下記のサイトが参考になる。
    https://amaotolog.com/amalog/38

    補足2:BIOSの仮想化が有効/無効になっているかはタスクマネージャーで確認できる。

  6. 再起動で、Dockerのエラーが表示されなければ、インストール成功である。
  7. Docker for Windowsアイコンをクリックして実行する。

    何も起こらないが、しばらく待つと右下にDockerが使えるようになった旨のメッセージが表示される。
  8. コマンドプロンプトを開き「docker info」とコマンドを入力する。エラーがでなければ成功である。PowerShell や Git Bash でもdockerを動かすことができる。

    「プログラム 'docker' はまだインストールされていません。」と出たら失敗。

    補足:環境パスにdockerパスが記述されている。


イメージについて

イメージはコンテナを生成する元である。
オブジェクト指向であれば、イメージはクラス、コンテナはインスタンスという感じの関係かと思われる。

イメージの置き場所

複数のイメージをDockerに保持することができる。
docker images」コマンドでDockerで保持しているイメージを確認できる。
$ docker images


どこからイメージを取ってくるか?

Docker Hub という他の人が作成したイメージをまとめたWebサイトが存在する。 Docker Hubから「docker search」コマンドを使い、イメージを検索することができる。
例「php」を検索する
$ docker search php



イメージをどうやって取ってくるか?

「docker pull」コマンドでDocker Hub からイメージを引っ張ってきて取得できる。

例:phpmyadminのイメージを取得する
$docker pull phpmyadmin/phpmyadmin


例2:centosのイメージを取得する


取得したイメージを一覧表示してみる。
$docker image list



Dockerの基本 | イメージからコンテナを生成および実行状態する

docker run」コマンドでイメージからコンテナを生成および実行状態にすることができる。
$ docker run -t -i phpmyadmin/phpmyadmin


docker runのオプション説明
-t疑似TTY※1を割り当てる。
-i起動時に STDOUT を開きっぱなしにする。
STDOUTとは標準出力のこと。(コマンドプロントでは指定しなくても変化がみられず)

「docker run」コマンドを実行するとコンテナが起動し、実行直後はログイン状態になる。この状態でexitコマンドで抜けようとすると、コンテナも停止する。 コンテナを停止せずにログイン状態から抜ける、つまり通常のLinuxコマンド入力の状態に戻るには、デタッチ(dettach)という操作を行う必要がある。
デタッチ操作はCtrlキーを押しながらPキー、Qキーを順番に押すだけである。この操作でコンテナを停止せずにログイン状態から抜けることができる。

再びログイン状態にするにはアタッチを行う。
アタッチは「docker attach コンテナID(またはNAME)」コマンドを実行する。
$ docker attach 8881e83a6e66


稼働中のコンテナ一覧を確認する方法

docker ps」コマンドで稼働中のコンテナを確認できる。

※停止中のコンテナは一覧に表示されない。

コンテナを停止する

「docker stop コンテナID」コマンドで稼働中のコンテナを停止することができる。 なお、コンテナを停止しても削除されているわけではない。あくまで停止中であり、再スタートすることができる。(後述)
$ docker stop 8881e83a6e66


停止中のコンテナを一覧表示する。

「docker ps -a」コマンドで停止中のコンテナを一覧表示させることができる。
$ docker ps -a


停止中のコンテナを動かす

「docker start コンテナID」コマンドで停止中のコンテナを再稼働させることができる。
$ docker start 8881e83a6e66



Dockerのにおける統合開発環境、Eclipse Cheのインストール

「Eclipse Che」はChromeなどのブラウザで動作するEclipseである。
従来のEclipseとは異なる点も多い。
Dockerを通してインストールすることができる。以下にその手順を示す。

DockerでEclipse Cheインストールする手順

  1. Docker CE for Windowsをインストール しておくこと。
  2. PC起動直後である場合は「Docker for Windows」アイコンをクリックして実行してDockerを使えるようにしておくこと。
  3. Windowsの「隠れているインジケーター」からDockerアイコンを右クリックし、ポップメニューから「Setting」を選択してDocker for Windowsの設定画面を開く。

  4. 左メニューの「Shared Drives」からShared Drives画面を開き、 Cドライブ(または別ドライブ)にチェックを入れ、Appylyボタンを押す。
    「docker run --rm -v c:/Users:/data alpine ls /data」となっている箇所の -vから続く部分である「c:/Users」がマウント先のディレクトリパスとなっているので、コピーして書き留めておく。

  5. コマンドプロント(またはPower Shell)を立ち上げる。
  6. 「docker run -it eclipse/che start」コマンドを実行する。 特にエラーがでなければ、この手順は成功

  7. 次に下記のコマンドを実行するが、その前に<path>となっている箇所をマウント先のディレクトリパスに書き換え、コマンド実行する。
    docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock -v <path>:/data eclipse/che start

    docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock -v c:/Users:/data eclipse/che start


    しばらくダウンロードが続く。「http://localhost:8080」が表示されれば成功である。
  8. URL「http://localhost:8080」をChromeなどのブラウザへ入力し、 統合開発環境「Eclipse Che」が立ち上がれば成功である。


Eclipse Che公式ページ:インストール手順


コンテナの作成 | docker run

	docker run -it --name test_name -p 8080:80 -v c:/Users/user_xxx/git:/var/www/html test_image:5.6
引数説明
--name test_name コンテナ名を指定する。コンテナ名は任意で名前をつけることができる。 省略可能だが名前を付けたほうがコンテナ操作するときに便利。 省略した場合はコンテナIDを指定してコンテナ操作をしなければならない。
「-p 8080:80」 Docker環境にアクセスするときに指定するポート番号である。
ブラウザに「http://localhost:8080」を入力することによりローカルのDocker環境にアクセスすることができる。
v c:/Users/k-uehara/git:/var/www/html Windowsのディレクトリ(c:/Users/user_xxx/git)と Docker上のディレクトリ(/var/www/html)を関連づける。 Windowsのディレクトリは、Windows for Dockerでマウントしている「c:/Users」から下のディレクトリのみ指定可である。
test_image:5.6イメージ名:バージョン。イメージIDを指定することもできる。