前回、docker環境を構築しました。せっかくなので使い方を学んでいきます。
前回の記事はこちら
環境
環境は前回の記事で構築したWindows10Pro + Docker Desktopとなります。
基本操作
操作には「Windows PowerShell」を使用します。
コンテナを起動するには[イメージの取得]→[コンテナの生成]→[コンテナの起動]を行う必要があります。今回はコンテナを起動に続けて、後片付け([コンテナの停止]→[コンテナの削除]→[イメージの削除])までの流れに沿って基本操作を紹介します。
イメージの取得(docker pull)
Docker Hubのサイトからcentosのイメージを検索します。( https://hub.docker.com/ )
見つかったcentosのページに記載されているコマンドを実行してイメージを取得します。
> docker pull centos
Using default tag: latest
latest: Pulling from library/centos
8a29a15cefae: Pull complete Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
イメージの一覧表示(docker images)
取得したイメージを確認します。centosのイメージが取得されているのが確認できます。
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 470671670cac 4 months ago 237MB
コンテナの生成(docker create)
createコマンドでコンテナを生成すると、コンテナIDが表示されます。
> docker create -it centos
2914b09e32...
指定しているオプションについては次の通りです。
- -it:コンソールに結果を出力します。
コンテナを起動する(docker start)
コンテナを起動します。
> docker start 2914b09e32
2914b09e32
コンテナの指定には例えば以下の方法があります。今回は「コンテナID省略形」で指定しています。
- コンテナIDフル:コンテナを生成した際に表示されるコンテナID。
- コンテナID省略:コンテナIDの先頭数文字。コンテナIDが一意に特定できる必要があります。
- コンテナ名:コンテナを生成した際に割り当てられる名前。次のコンテナの一覧表示のNAMES列の値。
コンテナの一覧表示(docker container ls)
コンテナの一覧を表示します。
> docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2914b09e3227 centos "/bin/bash" About a minute ago Up 35 seconds quirky_hypatia
指定しているオプションについては次の通りです。
- -a, –all:全てのコンテナを表示 (デフォルトは実行中コンテナのみ表示)
コンテナの停止(docker stop)
コンテナを停止します。今回はコンテナ名を指定しています。
> docker stop quirky_hypatia
quirky_hypatia
コンテナの削除(docker rm)
コンテナを削除します。今回はコンテナ名を指定しています。
> docker rm quirky_hypatia
quirky_hypatia
イメージの削除(docker rmi)
イメージを削除します。
> container rmi centos
コンテナを起動する(docker run)
いままでは [イメージの取得]→[コンテナの生成]→[コンテナの起動]とやっていましたが、実はここまではコマンド一発でできます。 httpdのイメージを取得して起動するには次のようにします。
> docker run -d -p 80:80 --name myhttpd httpd:latest
Unable to find image 'httpd:latest' locally
latest: Pulling from library/httpd
(以下略)
指定しているオプションについては次の通りです。
- -d:デタッチモードで起動。コンテナはバックグラウンドで動く形になります。
- -p:ポートフォワーディングの設定です。[ローカルポート]:[コンテナポート]の形式で記述します。例ではlocalhost:80へのアクセスがコンテナの80ポートへのアクセスとして処理されます。
- –name:コンテナにつけたい名前を指定します。例ではmyhttpdという名前にします。
- httpd:latest:httpdはイメージ名です。:latestはタグと言ってイメージの特定のバージョンを取得したい時などに指定します。
コンテナ一覧を表示すると起動していることが確認できると思います。名前もmyhttpdとなっています。
> docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4c9b32f1a28c httpd "httpd-foreground" 10 minutes ago Up 8 minutes 0.0.0.0:80->80/tcp myhttpd
この状態で「http://localhost」へアクセスすると「It works!」と表示されると思います。
コンテナにアクセスする(docker exec)
正確に言うとdocker execは「実行中のコンテナ内で、新しいコマンドを実行する」となります。今回は起動中のコンテナの中に入って操作していますが、例えばコンテナ内でfindコマンドを実行した結果を表示したければ「docker exec -it myhttpd find」となります。
> docker exec -it myhttpd /bin/bash
root@4c9b32f1a28c:/usr/local/apache2#
指定しているオプションについては次の通りです。
- -it:コンソールに結果を出力します。
- myhttpd:コンテナを指定します。
- /bin/bash:実行したいコマンドを指定します。
コンテナにアクセス出来たら、次のコマンドでindex.htmlを書き換えてみましょう。先ほどアクセスしたサイトが書き換わるはずです。ちなみにechoで書き換えているのは、viが入っていなかったので…。
root@4c9b32f1a28c:/usr/local/apache2# echo '<html><body><h1>MyHttpd works!</h1></body></html>' > \
htdocs/index.html
まとめ:基本を習得できたら
今回はすでに提供されているイメージを元にコンテナの基本操作を紹介しました。
Dockerにはすでに提供されているイメージを自分好みにカスタマイズして起動できるDockerfileや、複数台のサーバーを同時に起動・停止できるDocker Composeなどの機能もあります。ぜひ次はそれらの機能の習得にチャレンジしてみてください。
コメント