rubytomato's “Getting Started”

Webアプリケーション開発の入門的な記事を投稿していきます。

WindowsにDocker Desktopをインストールする

インストール

WindowsにDocker Desktopをインストールするには下記のオフィシャルサイトからインストーラーをダウンロードして実行します。

www.docker.com

オフィシャルサイトのトップページのGet Startedボタンをクリックして下図のページにアクセスします。このページのDownload for Windowsというボタンをクリックするとインストーラーファイル(Docker Desktop Installer.exe)のダウンロードが始まります。

f:id:rubytomato:20210107184134p:plain

インストーラーファイルのダウンロードが終わったらクリックしてインストールを実行します。インストールは特にデフォルトのまま進めて問題ありません。

f:id:rubytomato:20210107184156p:plain

f:id:rubytomato:20210107184208p:plain

この画面が表示されたらClose and log outボタンをクリックしてインストーラーを終了します。

f:id:rubytomato:20210107184215p:plain

ここでいったん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というリンクをクリックして終了します。

f:id:rubytomato:20210107190325p:plain

以降はチュートリアルの説明になりますので興味のある方は読んでみてください。

チュートリアルclonebuildrunshareの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.

f:id:rubytomato:20210107190354p:plain

上図の赤線で囲った部分をクリックすると下記の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というディレクトリが作成されており、下記のディレクトリ/ファイルがコピーされていることがわかります。

f:id:rubytomato:20210107233853p:plain

下図は上記のdockerコマンドの実行後の状態です。右側にdockerコマンドの実行結果が出力されています。

Next Stepボタンをクリックして次へ進みます。

f:id:rubytomato:20210107190619p:plain

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.

f:id:rubytomato:20210107190835p:plain

図の赤線で囲った部分をクリックすると下記の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ボタンをクリックして次へ進みます。

f:id:rubytomato:20210107190938p:plain

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.

f:id:rubytomato:20210107191110p:plain

図の赤線で囲った部分をクリックすると下記の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ボタンをクリックして次へ進みます。

f:id:rubytomato:20210107191352p:plain

Share

Shareステップは、ビルドしたイメージをDocker Hubで共有するチュートリアルですが、Docker Hubにアカウントを作成する必要があるのでこの記事では割愛します。

Doneボタンをクリックして次へ進みます。

You must be signed in to Docker Hub to share your image.

f:id:rubytomato:20210107191412p:plain

アプリケーションにアクセス

下図の赤い線で囲ったボタンをクリックするとブラウザが立ち上がり、docker-tutorialコンテナで実行されているアプリケーションにアクセスします。

f:id:rubytomato:20210107191522p:plain

ブラウザのアドレスバーにはhttp://localhost/が表示されていると思います。Windows(localhost)のポート80は、コンテナのポート80にバインドされているので、このアドレスにアクセスするとコンテナで実行されているWebアプリケーションにアクセスすることになります。

f:id:rubytomato:20210107191731p:plain

ダッシュボード

Docker Desktopを見ると下図の画面が表示されていると思いますが、これがDocker Desktopのダッシュボード画面です。ダッシュボードでイメージやコンテナの一覧表示やその他のいろいろな操作が行えます。

Containers/Apps

下図の赤い下線が引いてあるContainers/Appsをクリックするとコンテナが一覧表示されます。

赤い枠線で囲ったコンテナ(docker-tutorial)が、現在実行しているアプリケーションです。

f:id:rubytomato:20210107191848p:plain

コンテナ名をクリックすると、そのコンテナの詳細を確認することができます。下図の赤い下線が引いてあるLogsではWebアプリケーションのログを確認することができます。

f:id:rubytomato:20210107192835p:plain

同様にInspectでは、コンテナの環境変数や公開しているポートを確認することができます。

f:id:rubytomato:20210107193005p:plain

同様にStatsではコンテナのステータスを確認することができます。

f:id:rubytomato:20210107193018p:plain

Images

下図の赤い下線が引いてあるImagesをクリックするとイメージが一覧表示されます。

赤い枠線で囲ったイメージ(docker101tutorial)が、現在実行しているコンテナ(docker-tutorial)のイメージです。

f:id:rubytomato:20210107193045p:plain

コンテナの操作

コンテナの一覧でコンテナにマウスカーソルを合わせると、右側にその時点でコンテナに対して操作できるボタンが表示されます。

コンテナが起動しているとき

チュートリアルdocker-tutorialコンテナでは下図のボタンが表示されます。

このコンテナではWebアプリケーションが実行されているので、OPEN IN BROWSERというボタンが表示されています。そうでなければこのボタンは表示されません。

f:id:rubytomato:20210107204156p:plain

ICON ICON TEXT DESCRIPTION
f:id:rubytomato:20210107204851p:plain OPEN IN BROWSER ブラウザを起動する
f:id:rubytomato:20210107204838p:plain CLI コンテナでシェルを実行する
f:id:rubytomato:20210107204829p:plain STOP コンテナを停止する
f:id:rubytomato:20210107204822p:plain RESTART コンテナを再起動する
f:id:rubytomato:20210107204813p:plain DELETE コンテナを削除する

コンテナが停止しているとき

コンテナが停止しているときは、コンテナの起動と削除しか操作できないことがわかります。

f:id:rubytomato:20210107223100p:plain

ICON ICON TEXT DESCRIPTION
f:id:rubytomato:20210107223322p:plain START コンテナを起動する
f:id:rubytomato:20210107204813p:plain 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ボタンをクリックします。

f:id:rubytomato:20201228044648p:plain

Titleに任意の文字列(わかりやすいタイトル)、keyに公開鍵の内容を貼り付け、Add SSH keyボタンをクリックします。

f:id:rubytomato:20201228044721p:plain

登録後

f:id:rubytomato:20201228044748p:plain

テスト

下記コマンドで正しく設定されていることを確認します。最後の行に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からリポジトリを操作できることを確認します。

リポジトリを作成

GitHubtest_repoというリポジトリを作成します。

f:id:rubytomato:20201228045809p:plain

リポジトリ作成後のページに、この後に実行するコマンドが記載されているので基本的にこの通りに実行します。

f:id:rubytomato:20201228045823p:plain

ローカル

任意のディレクトリを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に記述した内容が反映されていることを確認します。

f:id:rubytomato:20201228045832p:plain

WSL2をインストールする方法

docs.microsoft.com

基本的な操作はMicrosoft公式のドキュメントの通りに進めるだけです。

LinuxWindows サブシステムを有効にする

管理者権限で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 カーネル更新プログラム パッケージをダウンロードするにある、リンクテキストをクリックしてパッケージをダウンロードします。

f:id:rubytomato:20201123005618p:plain

インストールはダウンロードしたインストーラーを実行するだけで終わります。

f:id:rubytomato:20201121051354p:plain

f:id:rubytomato:20201121051408p:plain

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)します。

f:id:rubytomato:20201123004442p:plain

右上のインストールボタンをクリックするとインストールが始まります。

f:id:rubytomato:20201121051502p:plain

インストールが完了すると、右上のボタンが起動ボタンに変わるのでクリックして起動します。

f:id:rubytomato:20201121051514p:plain

Ubuntuの起動

起動ボタンを押して最初の起動時にセットアップが行われます。

Enter new UNIX username:とプロンプトが表示されるので、新しく作成するUNIXのユーザー名を入力します。このユーザーは管理者権限を持つユーザーになります。

この例ではusernameにrubytomatoと入力しました。

f:id:rubytomato:20201121051525p:plain

ユーザー名に続いてパスワードを設定し、セットアップが完了すると緑色のプロンプトが表示されUbuntuが利用できるようになります。

f:id:rubytomato:20201121051536p:plain

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のインストール

github.com

リリースページからWindows用のインストーラーをダウンロードします。

f:id:rubytomato:20201121085343p:plain

現時点での最新版は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