WindowsにDocker Desktopをインストールする
インストール
WindowsにDocker Desktopをインストールするには下記のオフィシャルサイトからインストーラーをダウンロードして実行します。
オフィシャルサイトのトップページのGet Started
ボタンをクリックして下図のページにアクセスします。このページのDownload for Windows
というボタンをクリックするとインストーラーファイル(Docker Desktop Installer.exe
)のダウンロードが始まります。
インストーラーファイルのダウンロードが終わったらクリックしてインストールを実行します。インストールは特にデフォルトのまま進めて問題ありません。
この画面が表示されたらClose and log out
ボタンをクリックしてインストーラーを終了します。
ここでいったんPCを再起動します。
再起動したらコマンドプロンプトを開き、下記のコマンドを実行してバージョンを確認します。
> docker --version Docker version 20.10.0, build 7287ab3 > docker-compose --version docker-compose version 1.27.4, build 40524192
チュートリアル
PC再起動後に、Dockerが自動的に起動され下図の画面が表示されます。
この画面からGet Started
というチュートリアルを始めることができます。チュートリアルを始めたい場合はStart
ボタンをクリック、その必要がなければSkip tutorial
というリンクをクリックして終了します。
以降はチュートリアルの説明になりますので興味のある方は読んでみてください。
チュートリアルはclone
→ build
→ run
→ share
の4つのステップに分かれています。
clone
チュートリアルを始めると下図の画面が表示されます。画面の右側にはPowerShellのコンソールが表示されています。
clone
ステップでは、コンテナとコンテナ上で実行するアプリケーションに必要なファイルをGitHubリポジトリからクローンします。
The Getting started project is a simple GitHub repository which contains everything you need to build an image and run it as a container.
上図の赤線で囲った部分をクリックすると下記のdockerコマンドが右側のコンソールで実行され、その結果が表示されます。
実行されるdockerコマンドは下記の通りです。
docker run --name repo alpine/git clone https://github.com/docker/getting-started.git
docker cp repo:/git/getting-started/ .
実行するコマンドの意味は
1つ目のrun
コマンドでイメージからコンテナを作成し、指定されたコマンドを実行します。
--name
でコンテナに名前を付けています。この場合repo
がコンテナ名になります。alpine/git
はコンテナの生成に使用するイメージの名前です。clone https://github.com/docker/getting-started.git
はコンテナで実行するコマンドのオプションです。
実行するコマンドはgit
で、コンテナ内でgit clone https://github.com/docker/getting-started.git
が実行され、Githubからgetting-started.git
リポジトリがクローンされます。
2つ目のcp
コマンドでコンテナ内のファイルをホスト、つまりWindowsへコピーします。
repo:/git/getting-started/
は、コロンの左側のrepo
がコンテナ名を指し、右側の/git/getting-started/
がコピー元のディレクトリ or ファイルを指します。.
はコピー先を指していて、ピリオドとしているのでWindowsのカレントディレクトリがコピー先になります。
つまりrepo
コンテナ内にクローンした/git/getting-started/
ディレクトリをWindowsのカレントディレクトリへコピーします。
ユーザーのホームディレクトリ(カレントディレクトリ)を確認するとgetting-started
というディレクトリが作成されており、下記のディレクトリ/ファイルがコピーされていることがわかります。
下図は上記のdockerコマンドの実行後の状態です。右側にdockerコマンドの実行結果が出力されています。
Next Step
ボタンをクリックして次へ進みます。
build
次はイメージのビルドを行います。先ほどの作業でWindows上にgetting-started
をコピーしましたが、このディレクトリ内にビルドに必要なDockerfileや、実行するアプリケーションのソースコードが含まれています。
build
ステップでは、クローンしたリポジトリに含まれるDockerfileを使ってイメージをビルドします。
A Docker image is a private file system just for your container. It provides all the files and code your container needs.
図の赤線で囲った部分をクリックすると下記のdockerコマンドが右側のコンソールで実行され、その結果が表示されます。
実行されるコマンドは下記の通りです。
cd getting-started
docker build -t docker101tutorial .
実行するコマンドの意味は
1つ目のcd
は、Windowsのcdコマンドでカレントディレクトリをgetting-started
に移します。
2つ目のbuild
はdockerコマンドで、Dockerfileからイメージをビルドします。
-t
でイメージにタグを付けています。この場合docker101tutorial
がタグ名です。.
でカレントディレクトリを指しているので、カレントディレクトリにあるDockerfileを使ってイメージをビルドします。
下図は上記のdockerコマンドの実行後の状態です。右側にdockerコマンドの実行結果が出力されています。
Next Step
ボタンをクリックして次へ進みます。
run
run
ステップではビルドしたイメージからコンテナを作成し実行します。
Start a container based on the image you built in the previous step. Running a container launches your application with private resources, securely isolated from the rest of your machine.
図の赤線で囲った部分をクリックすると下記のdockerコマンドが右側のコンソールで実行され、その結果が表示されます。
クリックすると下記のコマンドが実行されます。
docker run -d -p 80:80 --name docker-tutorial docker101tutorial
実行するコマンドの意味は下記の通りで
-d
でコンテナをバックグラウンドで実行します。-p 80:80
でコンテナのポート80
を、ホスト(Windows)のポート80
にバインドします。--name
でコンテナに名前を付けます。この場合コンテナにはdocker-tutorial
という名前が付けられます。docker101tutorial
はコンテナの生成に使用するイメージの名前です。
下図は上記のdockerコマンドの実行後の状態です。右側にdockerコマンドの実行結果が出力されています。
Next Step
ボタンをクリックして次へ進みます。
Share
Share
ステップは、ビルドしたイメージをDocker Hubで共有するチュートリアルですが、Docker Hubにアカウントを作成する必要があるのでこの記事では割愛します。
Done
ボタンをクリックして次へ進みます。
You must be signed in to Docker Hub to share your image.
アプリケーションにアクセス
下図の赤い線で囲ったボタンをクリックするとブラウザが立ち上がり、docker-tutorial
コンテナで実行されているアプリケーションにアクセスします。
ブラウザのアドレスバーにはhttp://localhost/
が表示されていると思います。Windows(localhost)のポート80
は、コンテナのポート80
にバインドされているので、このアドレスにアクセスするとコンテナで実行されているWebアプリケーションにアクセスすることになります。
ダッシュボード
Docker Desktopを見ると下図の画面が表示されていると思いますが、これがDocker Desktopのダッシュボード画面です。ダッシュボードでイメージやコンテナの一覧表示やその他のいろいろな操作が行えます。
Containers/Apps
下図の赤い下線が引いてあるContainers/Apps
をクリックするとコンテナが一覧表示されます。
赤い枠線で囲ったコンテナ(docker-tutorial
)が、現在実行しているアプリケーションです。
コンテナ名をクリックすると、そのコンテナの詳細を確認することができます。下図の赤い下線が引いてあるLogs
ではWebアプリケーションのログを確認することができます。
同様にInspect
では、コンテナの環境変数や公開しているポートを確認することができます。
同様にStats
ではコンテナのステータスを確認することができます。
Images
下図の赤い下線が引いてあるImages
をクリックするとイメージが一覧表示されます。
赤い枠線で囲ったイメージ(docker101tutorial
)が、現在実行しているコンテナ(docker-tutorial
)のイメージです。
コンテナの操作
コンテナの一覧でコンテナにマウスカーソルを合わせると、右側にその時点でコンテナに対して操作できるボタンが表示されます。
コンテナが起動しているとき
チュートリアルのdocker-tutorial
コンテナでは下図のボタンが表示されます。
このコンテナではWebアプリケーションが実行されているので、OPEN IN BROWSER
というボタンが表示されています。そうでなければこのボタンは表示されません。
ICON | ICON TEXT | DESCRIPTION |
---|---|---|
OPEN IN BROWSER |
ブラウザを起動する | |
CLI |
コンテナでシェルを実行する | |
STOP |
コンテナを停止する | |
RESTART |
コンテナを再起動する | |
DELETE |
コンテナを削除する |
コンテナが停止しているとき
コンテナが停止しているときは、コンテナの起動と削除しか操作できないことがわかります。
ICON | ICON TEXT | DESCRIPTION |
---|---|---|
START |
コンテナを起動する | |
DELETE |
コンテナを削除する |
コマンドラインで操作
イメージを取得してコンテナを生成する
コマンドプロンプト(このプロンプトをAと呼ぶ)を開き、pull
コマンドでubuntuイメージを取得します。
> docker pull ubuntu Using default tag: latest latest: Pulling from library/ubuntu da7391352a9b: Pull complete 14428a6d4bcd: Pull complete 2c2d948710f2: Pull complete Digest: sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c Status: Downloaded newer image for ubuntu:latest docker.io/library/ubuntu:latest
コマンドプロンプトAで、run
コマンドを実行し、ubuntuイメージからmyubuntuという名前のコンテナを生成してbashコマンドを実行します。
> docker run -it --name myubuntu ubuntu /bin/bash root@7bb7c2d04158:/#
別のコマンドプロンプト(このプロンプトをBと呼ぶ)を開きps
コマンドを実行すると、そのときに実行されているコンテナの一覧を確認できます。
> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7bb7c2d04158 ubuntu "/bin/bash" 6 seconds ago Up 5 seconds myubuntu
コマンドプロンプトAに戻り、bashのプロンプトからexitを実行してbashを終了すると、コマンドプロンプトに制御が戻ります。
root@7bb7c2d04158:/# exit exit
コマンドプロンプトBで、もう一度ps
コマンドを実行すると、コンテナが終了していることが確認できます。
> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
停止しているコンテナを起動する
start
コマンドでコンテナを起動します。
> docker start myubuntu myubuntu
> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7bb7c2d04158 ubuntu "/bin/bash" 14 minutes ago Up 13 seconds myubuntu
コンテナにアクセスする
アクセスするにはexec
コマンドかattach
コマンドを使用します。
execコマンド
> docker exec -it myubuntu /bin/bash root@7bb7c2d04158:/#
root@7bb7c2d04158:/# exit exit
exit後もコンテナは実行されています。
> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7bb7c2d04158 ubuntu "/bin/bash" 21 minutes ago Up 6 minutes myubuntu
attach コマンド
> docker attach myubuntu root@7bb7c2d04158:/#
root@7bb7c2d04158:/# exit exit
exitするとコンテナも停止します。
> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Git for WindowsでGitHubのリポジトリを操作する
Git for Windows
インストール方法はGit for Windowsからインストーラーをダウンロードして実行するだけなので割愛します。
インストールが終了したらメニューからGit CMD
をクリックします。
> git --version git version 2.29.2.windows.2
初期設定
続けてユーザ名とメールアドレスを設定します。
> git config --global user.name "your_name" > git config --global user.email "your_email@example.com"
以下の設定はオプションです。私の環境では下記の設定を行いました。
> git config --global color.ui auto > git config --global core.preloadindex true > git config --global core.autocrlf false > git config --global core.fscache true > git config --global core.quotepath false > git config --global core.ignorecase false > git config --global core.safecrlf true
設定は下記のコマンドで確認できます。
> git config --global --list
SSHの設定
SSHの設定を行い、Git for WindowsからGitHubのリモートリポジトリを操作できるようにします。
SSH Keyの作成
下記のようにssh-keygen
コマンドでSSH Keyを作成します。
#(1) ~ #(3)で入力を求められます。
- #(1) : 鍵ファイルの作成先とファイル名を入力します。デフォルトでよければエンターキーを押します。
- #(2) : パスフレーズを入力します。必要がなければエンターキーを押します。
- #(3) : パスフレーズを入力した場合、同じパスフレーズを入力します。入力していなければエンターキーを押します。
> ssh-keygen -t ed25519 -C "your_email@example.com" Generating public/private ed25519 key pair. Enter file in which to save the key (C:\Users\rubytomato/.ssh/id_ed25519): #(1) Created directory 'C:\Users\rubytomato/.ssh'. #(2) Enter passphrase (empty for no passphrase): #(3) Enter same passphrase again: Your identification has been saved in C:\Users\rubytomato/.ssh/id_ed25519. Your public key has been saved in C:\Users\rubytomato/.ssh/id_ed25519.pub. The key fingerprint is: SHA256:MQwyTDgzA9NRPT2a1EjkJe8ZdAP/mWPwkOAuFhz31go your_email@example.com The key's randomart image is: +--[ED25519 256]--+ |oo.*=+*+*.o | | .B .==@+= + | | = .++E.B . | | o+ B * o | | o S . B | | . . . . | | | | | | | +----[SHA256]-----+
公開鍵
作成された公開鍵をGitHubに登録します。
GitHubにアクセスし、Settingsページを開きます。
メニューのSSH and GPG keys
をクリック → New SSH key
ボタンをクリックします。
Title
に任意の文字列(わかりやすいタイトル)、key
に公開鍵の内容を貼り付け、Add SSH key
ボタンをクリックします。
登録後
テスト
下記コマンドで正しく設定されていることを確認します。最後の行にYou've successfully authenticated
と表示されていれば設定は正常です。
> ssh -T git@github.com The authenticity of host 'github.com (xxx.xxx.xxx.xxx)' can't be established. RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'github.com,xxx.xxx.xxx.xxx' (RSA) to the list of known hosts. Hi rubytomato! You've successfully authenticated, but GitHub does not provide shell access.
リポジトリを作成する
GitHubにリポジトリを作成し、Git for Windowsからリポジトリを操作できることを確認します。
リポジトリを作成
GitHubにtest_repo
というリポジトリを作成します。
リポジトリ作成後のページに、この後に実行するコマンドが記載されているので基本的にこの通りに実行します。
ローカル
任意のディレクトリをGit Bashで開きます。この例ではC:\Users\rubytomato\git
で開きました。
# ディレクトリ名はリポジトリ名と同じにします。 $ mkdir test_repo $ cd test_repo # test_repoディレクトリをリポジトリ化します。 $ git init Initialized empty Git repository in C:/Users/rubytomato/git/test_repo/.git/ # コミットするファイルを作成します。ファイルの内容は後述します。 $ vi README.MD # Gitで管理するようにします。 $ git add . # リポジトリにコミットします。 $ git commit -m "first commit" [master (root-commit) 5c2bee2] first commit 1 file changed, 2 insertions(+) create mode 100644 README.MD # masterブランチの名前をmainに変えます。 $ git branch -M main # リモートブランチのURLをoriginに設定します。 $ git remote add origin git@github.com:rubytomato/test_repo.git # リモートブランチへプッシュします。 $ git push -u origin main Enumerating objects: 3, done. Counting objects: 100% (3/3), done. Writing objects: 100% (3/3), 233 bytes | 233.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 To github.com:rubytomato/test_repo.git * [new branch] main -> main Branch 'main' set up to track remote branch 'main' from 'origin'.
README.MDの内容
# test_repo
pushが成功したらGitHubページをリロードします。README.MDに記述した内容が反映されていることを確認します。
WSL2をインストールする方法
基本的な操作はMicrosoft公式のドキュメントの通りに進めるだけです。
Linux 用 Windows サブシステムを有効にする
管理者権限でPowerShellを起動して以下のコマンドを実行します。
PS C:\Windows\System32> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 展開イメージのサービスと管理ツール バージョン: 10.0.19041.572 イメージのバージョン: 10.0.19042.630 機能を有効にしています [==========================100.0%==========================] 操作は正常に完了しました。
仮想マシンの機能を有効にする
PS C:\Windows\System32> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 展開イメージのサービスと管理ツール バージョン: 10.0.19041.572 イメージのバージョン: 10.0.19042.630 機能を有効にしています [==========================100.0%==========================] 操作は正常に完了しました。
ここで一旦PCを再起動します。
Linux カーネル更新プログラム パッケージをインストールする
Microsoft公式ドキュメントの手順 4 - Linux カーネル更新プログラム パッケージをダウンロードする
にある、リンクテキストをクリックしてパッケージをダウンロードします。
インストールはダウンロードしたインストーラーを実行するだけで終わります。
WSL 2 を既定のバージョンとして設定する
PowerShellを起動して以下のコマンドを実行します。
PS C:\Users\rubytomato> wsl --set-default-version 2 WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
Microsoft Storeからディストリビューションをインストール
LinuxディストリビューションにUbuntuをインストールします。
インストールはMicrosoft Storeから行います。Microsoft Storeにアクセスし、検索ウィンドウに”Ubuntu"と入力して検索し、表示されたUbuntuをクリック(図では左端の赤い枠線で囲まれたUbuntu)します。
右上のインストールボタンをクリックするとインストールが始まります。
インストールが完了すると、右上のボタンが起動ボタンに変わるのでクリックして起動します。
Ubuntuの起動
起動ボタンを押して最初の起動時にセットアップが行われます。
Enter new UNIX username:
とプロンプトが表示されるので、新しく作成するUNIXのユーザー名を入力します。このユーザーは管理者権限を持つユーザーになります。
この例ではusernameにrubytomato
と入力しました。
ユーザー名に続いてパスワードを設定し、セットアップが完了すると緑色のプロンプトが表示されUbuntuが利用できるようになります。
Ubuntuのバージョン確認
下記コマンドでUbuntuのバージョンを確認できます。出力結果の通り20.04.1 LTSがインストールされたことがわかります。
rubytomato@DESKTOP-HH2F0RB:~$ cat /etc/os-release NAME="Ubuntu" VERSION="20.04.1 LTS (Focal Fossa)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 20.04.1 LTS" VERSION_ID="20.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=focal UBUNTU_CODENAME=focal
Ubuntuの起動
Unbuntuをインストールするとスタートメニューにアイコンが登録されるので、そこから起動する方法と、PowerShellまたはコマンドプロンプトからwsl
コマンドで起動する方法があります。
PowerShellから起動するには、PowerShellを起動しコマンドプロンプトからwsl
と入力して実行するだけです。
PS C:\Users\rubytomato> wsl To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 4.19.128-microsoft-standard x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Mon Nov 23 00:52:16 JST 2020 System load: 0.0 Processes: 8 Usage of /: 0.4% of 250.98GB Users logged in: 0 Memory usage: 0% IPv4 address for eth0: 172.24.19.154 Swap usage: 0% 1 update can be installed immediately. 0 of these updates are security updates. To see these additional updates run: apt list --upgradable The list of available updates is more than a week old. To check for new updates run: sudo apt update This message is shown once once a day. To disable it please create the /home/rubytomato/.hushlogin file. rubytomato@DESKTOP-HH2F0RB:/mnt/c/Users/rubytomato$
nodistをインストールする方法
nodist
nodistはWindows環境用のNode.jsのバージョン管理ツールです。複数バージョンのNode.jsをインストールすることができ、簡単にどのバージョンを使うか切り替えることができます。
nodistのインストール
リリースページからWindows用のインストーラーをダウンロードします。
現時点での最新版はv 0.9.1です。ダウンロードしたインストーラーを実行してインストールを行います。インストールが完了したらコマンドプロンプトを開き、下記コマンドでnodistのバージョンを確認します。
> nodist -v 0.9.1
Node.jsのインストール
次にnodistでNode.jsをインストールします。dist
コマンドでインストール可能なNode.jsのバージョンが確認できます。
> nodist dist 0.1.14 0.1.15 0.1.16 ~省略~ 14.14.0 14.15.0 14.15.1 15.0.0 15.0.1 15.1.0 15.2.0 15.2.1
現時点でのNode.jsのLTSは14.15.1
なので、これをインストールします。インストールするには下記のように+
とインストールしたいバージョンを指定します。
> nodist + 14.15.1 14.15.1 [===============] 55119/55119 KiB 100% 0.0s 14.15.1
インストールしたらどのバージョンを使用するか明示する必要があり、今回はインストールしたv14.15.1を使用するように、下記コマンドでバージョンを決定します。
> nodist 14.15.1 14.15.1 14.15.1 (global)
Node.jsのバージョンを確認します。
> node -v v14.15.1
npmのインストール
npmも同時にインストールされています。下記コマンドでnpmのバージョンを確認すると6.9.0
がインストールされていることがわかりました。このバージョンでもいいのですが、インストールしたNode.jsのバージョンと合わせておいた方がいいのでnpm match
コマンドで別のバージョンをインストールします。
> npm -v 6.9.0
npm match
コマンドを実行すると、インストールしたNode.jsに最適なバージョンのnpmをインストールしてくれます。
> nodist npm match npm match https://codeload.github.com/npm/cli/tar.gz/v6.14.8 [============== ] 5177/5507 KiB 94% 0.1s
npmのバージョンをもう一度確認すると6.14.8
がインストールされたことがわかります。
> npm -v 6.14.8
Javaで正規表現 <前方不一致、後方一致>の例
Javaで正規表現
ある文字列の前方不一致且つ、ある文字列の後方一致という条件でマッチングさせるサンプルコードです。
例題
以下のようなメールアドレスのリストがあり、この中からAUとドコモのメールアドレスで(後方一致)且つ、アドレスが"bbb"で始まらない(前方不一致)メールアドレスを正規表現で抽出する例です。
String array[] = { "aaa.bbb@au.com", "bbb.ccc@au.com", "ccc.ddd@au.com", "aaa.bbb@docomo.ne.jp", "bbb.ccc@docomo.ne.jp", "ccc.ddd@docomo.ne.jp", "aaa.bbb@softbank.ne.jp", "bbb.ccc@softbank.ne.jp", "ccc.ddd@softbank.ne.jp", "dummy string", "ノイズ", "aaa.bbb.ccc-docomo.ne.jp" };
正規表現
String regex = "^((?!bbb).+)@(au.com|docomo.ne.jp)$";
Pattern p = Pattern.compile(regex);
マッチングは
for (String email : array) { System.out.print("email [" + email + "] ---> "); Matcher m = p.matcher(email); if (m.find()) { String g1 = m.group(1); String g2 = m.group(2); System.out.println("match: " + g1 + "@" + g2); } else { System.out.println("not match"); } }
実行結果は
email [aaa.bbb@au.com] ---> match: aaa.bbb@au.com email [bbb.ccc@au.com] ---> not match email [ccc.ddd@au.com] ---> match: ccc.ddd@au.com email [aaa.bbb@docomo.ne.jp] ---> match: aaa.bbb@docomo.ne.jp email [bbb.ccc@docomo.ne.jp] ---> not match email [ccc.ddd@docomo.ne.jp] ---> match: ccc.ddd@docomo.ne.jp email [aaa.bbb@softbank.ne.jp] ---> not match email [bbb.ccc@softbank.ne.jp] ---> not match email [ccc.ddd@softbank.ne.jp] ---> not match email [dummy string] ---> not match email [ノイズ] ---> not match email [aaa.bbb.ccc-docomo.ne.jp] ---> not match