環境はDocker Desktop Mac版でお送りします。
インストールがまだならば下記からダウンロードしてインストールを完了してください。

Get Started with Docker | Docker

ターミナルで下記を実行してバージョンが表示されることを確認してください。

$ docker version

こんな感じに表示されます。

Client: Docker Engine - Community
Cloud integration: 1.0.9
Version:           20.10.5

コンテナの作成

最初にApacheのコンテナを作成しましょう。
下記を実行してください。

$ docker container run --name test1 -d httpd

コンテナを起動するにはrunコマンドを実行します。

runの後に続くのはオプションです。

–name test1 コンテナの名前を指定しています。test1の部分は好きな名前を入力してください。
-d バックグランドで実行
httpd イメージ名です。
httpdはApacheがインストールされます。
イメージの説明は後述します。

コンテナのコマンドはcontainerを省略して書くこともできます。

$ docker run --name test1 -d httpd

あるバージョンからコマンドの再編成を行ったようでcontainerを省略した書き方は再編成前の記述方法なようです。

実行中のコンテナ確認

コンテナが動いているか確認してみましょう。

$ docker container ps

下記のような感じに表示されます。

CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS     NAMES
15fa5~711edb0   httpd     "httpd-foreground"   8 minutes ago   Up 8 minutes   80/tcp    test1

コンテナの停止

stopコマンドの後にコンテナ名を入力します。

$ docker container stop test1

実行するとコンテナ名が表示されます。

test1

もう一度psコマンドを実行すると。

$ docker container ps

カラム名だけ表示されます。

CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS     NAMES

停止しているコンテナを確認する方法もあります。
psコマンドに-aオプションを付与します。

$ docker container ps -a

先ほど停止したコンテナが表示されました。

CONTAINER ID   IMAGE                COMMAND                  CREATED          STATUS                     PORTS     NAMES
15fa5711edb0   httpd                "httpd-foreground"       15 minutes ago   Exited (0) 3 minutes ago             test1

停止コンテナの起動

停止したコンテナはstartコマンドで起動することができます。

$ docker container start test1

コンテナの削除

Dockerはコンテナを作ったり消したりが簡単にできるのが売りらしいです。
消し方も覚えておきましょう。

コンテナが停止した状態でrmコマンドに続きコンテナ名を入力します。

$ docker container rm test1

実行するとコンテナ名が表示されます。

test1

先ほどの停止しているコンテナを表示するコマンドを実行してみましょう。

$ docker container ps -a

test1コンテナがなくなっていますね。

イメージについて

さらっとイメージをというワードが出てきていますが、イメージはコンテナの設計図のようなものです。
なのでrunコマンドでコンテナを作成した際、イメージも自動的に作られます。

コンテナの操作はcontainerコマンドを使いましたが、イメージはimageコマンドで操作します。

ダウンロードしたイメージを確認してみましょう。

$ docker image ls

runコマンドを実行したとき指定したhttpdが残っていますね。
コンテナを削除してもイメージは消えません。
なので2回目移行コンテナを作成する場合は初回より速くなります。

REPOSITORY           TAG       IMAGE ID       CREATED         SIZE
httpd                latest    ae15ff2bdcb4   11 days ago     138MB

イメージを消してみましょう。

$ docker image rm httpd

再度一覧を実行するとhttpdが消えていますね。

$ docker image ls

ダウンロードするにはpullコマンドを使用します。

$ docker image pull httpd

イメージの検索

イメージの検索はコマンドラインから実行したり、Docker Hubから探せたりします。

$ docker search httpd

ブラウザでApacheにアクセス

先ほどはApacheのコンテナを作成しただけでしたが、それだけだと意味ないですよね。
ApacheはWebサーバープログラムなのでブラウザから見れるようにしたいです。
それにはコンテナ作成時にアクセスする為のポートを設定する必要があります。

$ docker container run --name test2 -d -p 8080:80 httpd

最初に実行したrunコマンドに-pオプションを追加します。
ホストのポート:コンテナのポートと指定するので、8080を他で使用している場合は変更してください。

ちなみにホストとは操作しているマシーンのことです。

ブラウザで下記にアクセスすると、「It works!」と表示されます。

http://localhost:8080

コンテナにアクセス

ブラウザからApacheにあるhtmlファイルを見ることができましたが、このhtmlファイルどこにあるのってなりますよね。
コンテナの中に入って見てみましょう。

コンテナが起動している状態で下記を実行します。

$ docker container exec -it test2 /bin/bash

成功するとコマンドラインの最初の部分が変わります。

root@02c5d3f3428e:/usr/local/apache2#

cdでhtdocsに移動して、lsを実行すると。

# cd /usr/local/apache2/htdocs
# ls

「index.html」がありましたね。
catで見てみると。

# cat index.html

ブラウザで表示したファイルっぽいです。

<html><body><h1>It works!</h1></body></html>

コンテナから抜け出すにはexitを実行します。

# exit

コンテナへファイルをコピーする

ファイルのありかがわかったので編集したいところではありますが、Dockerはコンテナを作ったり消したりする性質上、直接ファイルを編集することはあまりよろしくなかったりします。

そこでホストからコンテナにファイルを転送してみましょう。

最初にコンテナにあったindex.htmlをホストにコピーしてみます。
先ほどのファイル(/usr/local/apache2/htdocs/index.html)をカレントディレクトリ(./)にコピーするには下記を実行します。

$ docker container cp test2:/usr/local/apache2/htdocs/index.html ./

ディレクトリに「index.html」が作成されたと思いますので、開いて編集してみましょう。

index.html

<html><body><h1>Update</h1></body></html>

今度は編集した「index.html」をコンテナにコピーしてみましょう。
パスの順番を逆にするだけですね。

$ docker container cp ./index.html test2:/usr/local/apache2/htdocs/

ブラウザでアクセスして変わっていることを確認してみてください。

バインドマウントの設定

ホストで編集して、コンテナにコピーして確認できることはわかったのですが、実際の制作でブラウザで確認するのに毎回コピーするのはしんどいですよね。
バインドマウントを設定することで、ホストとコンテナのディレクトリを同期させることができます。

コンテナを新しく作りますので、コンテナが起動している状態の場合は停止させておきましょう。 ホストの/Users/ユーザー名/htdocsと、コンテナの/usr/local/apache2/htdocsディレクトリと同期するには、-vオプションにパスを指定します。

$ docker container run --name test3 -d -p 8080:80 -v /Users/ユーザー名/htdocs:/usr/local/apache2/htdocs httpd

ホストのhtdocsにファイルを作成するだけでブラウザで表示できるようになっていると思います。

Dockerの操作がなんとなくわかったということで、本日は以上になります。

次の記事
さらっとDocker入門(PHP開発環境構築編)


仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん

たった1日で基本が身に付く! Docker/Kubernetes超入門

この記事の動画(Youtube)版はこちら!