環境は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の操作がなんとなくわかったということで、本日は以上になります。
この記事の動画(Youtube)版はこちら!