LINEで現役エンジニアに直接質問してみよう!登録無料

Dockerコマンドの基礎 使い方13手順を一覧で解説!PHPコンテナ作成からイメージ削除まで

この記事では、Dockerコマンドを実際に使って、Dockerイメージからコンテナを起動し、変更を加えたコンテナイメージを作成するところまでを解説します。

ザクザク行けば、10分ぐらいでコンテナイメージの作成まで出来ると思います。

対象者は

  • Dockerを使いたいけど、何からしたらいいのか分からない!😭
  • Docker操作を黒い画面から扱うの怖い!👻

という方の初心者向けの内容です。

Dockerでコマンド操作をする流れ

  1. Dockerイメージの確認
  2. Dockerイメージの検索
  3. Docker HubからDockerイメージをダウンロード
  4. Dockerコンテナの一覧を確認
  5. Dockerコンテナを起動
  6. Dockerコンテナのログを確認
  7. Dockerコンテナに接続
  8. Dockerコンテナの内部を変更
  9. Dockerコンテナを停止
  10. Dockerコンテナからカスタムイメージ作成
  11. Dockerのカスタムイメージから起動
  12. Dockerのカスタムコンテナを停止&削除
  13. Dockerのカスタムイメージを削除

このような流れで解説していきます。

まだ、Dockerをインストールしていない人は、「DockerのMacOSXへのインストール方法と基本的な使い方」を参考に「Docker for Mac」をインストールしてください。

Dockerイメージの確認

初めに、今Dockerでダウンロードしてあるイメージを確認しましょう。確認するコマンドはdocker imagesです。

$ docker images
REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
nginx                                 latest              2073e0bcb60e        3 weeks ago         127MB

前回、「DockerのMacOSXへのインストール方法と基本的な使い方」で解説した時にNginxを使ったで、その時のイメージが表示されています。

本来、「Docker for Mac」をインストールした直後なら、ここには何も表示されません。

Dockerイメージの検索

Docker Hubには無数のdockerイメージがあります。それらを毎回ブラウザを開いて検索するのは面倒です。コマンドラインからも確認できる機能「docker search」があるので紹介します。

例えば、nginxを検索したいときには、下記のようなコマンドになります。

$ docker search nginx
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                              Official build of Nginx.                        12695               [OK
]                
jwilder/nginx-proxy                Automated Nginx reverse proxy for docker con…   1745                                    [OK
]
richarvey/nginx-php-fpm            Container running Nginx + PHP-FPM capable of…   757                                     [OK
]
linuxserver/nginx                  An Nginx container, brought to you by LinuxS…   92                                      
.
.
centos/nginx-110-centos7           Platform for running nginx 1.10 or building …   0                                       

Docker HubからDockerイメージをダウンロード

Docker Hubからイメージをダウンロードするにはdocker pullを使います。

今回は、php7の環境をダウンロードしてみます。

$ docker pull php: 7-apache
7-apache: Pulling from library/php
bc51dd8edc1b: Already exists 
a3224e2c3a89: Pull complete 
be7a066df88f: Pull complete 
bfdf741d72a9: Pull complete 
a9e612a5f04c: Pull complete 
c026d8d0e8cb: Pull complete 
d94096c4941c: Pull complete 
bcd58f07153b: Pull complete 
96c63de37dd4: Pull complete 
09759644ef6a: Pull complete 
73fa00a2e45b: Pull complete 
1c9483a8f9b3: Pull complete 
0c8e8708ca3f: Pull complete 
Digest: sha256:acecea045b84f54434f0a38273791c978b655a07402003418a499bc4f6910164
Status: Downloaded newer image for php: 7-apache
docker.io/library/php: 7-apache

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

$ docker images
REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
php                                   7-apache            b68dc3a232b4        3 days ago          414MB
nginx                                 latest              2073e0bcb60e        3 weeks ago         127MB

イメージのダウンロードが確認できました。

また、docker pull php: 7-apache: 7-apacheという部分は「タグ」を表しています。:はイメージ名とタグ名を分けるための記号で、その後の7-apacheがタグ名です。

7-apacheの他にも、コマンドラインに特化した7-cli、Nginxとの連携を考慮した7-fpm、phpバージョンの細かい7.4.3みたいなものがあります。開発環境に合わせて、使い分けると良いでしょう。

Dockerコンテナの一覧確認

今起動中のコンテナと停止中のコンテナを確認する方法をおさらいします。

起動中のコンテナのみを確認するにはdocker ps、起動中・停止中問わず確認するにはdocker ps -aを使います。

# 起動中のコンテナ一覧
$ docker ps        
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

# 起動・停止中のコンテナ一覧
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
034a9b5174c8        nginx               "nginx -g 'daemon of…"   51 seconds ago      Exited (0) 14 seconds ago                       nginx

Dockerコンテナを起動

先程ダウンロードしたphp: 7-apacheを起動してコンテナ化してみましょう。

使うコマンドはdocker run -d -p 8081: 80 --name php7 php: 7-apacheです。

docker runはdockerコマンドの中で最も使う頻度が多く、使うオプションはある程度決まっているので覚えておきましょう!

  • -d – バックグラウンドでDockerコンテナを起動する
  • -p – ホスト型とDocker型のポートをつなげる。(ホスト側: 8081 => Docker側: 80)
  • --name コンテナの名前を決める(コンテナ名:php7)

コンテナが起動できたら、ブラウザからアクセスしてみましょう。phpが起動しているアドレスは「http: //localhost:8081/」です。

Dockerコンテナのログを確認

phpにアクセスした時のアクセスログは、dockerコマンドを通して確認できます。

$ docker logs php7
AH00558: apache2: Could not reliably ....

これで、全ての内容を取り出すことができます。オプションとして-fをつけると、ログを常に監視して追記された時に自動的にターミナルを更新してくれます。

$ docker logs php7 -f
AH00558: apache2: Could not reliably ....
.
.
.

Dockerコンテナに接続

phpのコンテナ内部にアクセスして、内容を変更してみたと思います。

内部にアクセスする方法は2種類あります。docker execdocker attachです。

docker execは、「docker exec -it <コンテナ名> /bin/bash」のように使い、コンテナ内で新しく「/bin/bash」のプロセスを立ち上げてそこに接続します。

一方、docker attachは、「docker attach <コンテナ名>」のように使い、今Dockerで立ち上がっているプロセスに接続します。そのため、ターミナルを抜けようとして「Ctrl + C」や「exit」を使うと、Dockerコンテナ自体が終了します。

そのため、通常はdocker execを使うようにします。

$ docker exec -it php7 /bin/bash
[email protected]:/var/www/html#

ここで新しくできて-itオプションは、ホストとコンテナ間の標準出力と標準入力をつなぐ役割があります。設定しない場合、ホスト側でただ/bin/bashが起動するだけです。

Dockerコンテナの内部を変更

phpファイルを用意して、ブラウザで何かコンテンツを表示してみましょう。

ファイルを編集するために、vimをインストールします。

# aptをリポジトリをアップデート
$ apt update
Get: 1 http: //deb.debian....

# aptからvimをインストール
$ apt install -y vim
Reading package lists... Done
...

vimを使って、簡単なphpファイルを作成します。

$ vim index.php
<?php echo "Hello, World!"; ?>

編集し終わったら、「Ctrl + C」でコンテナから抜けます。

ブラウザで確認すると、このようにphpが処理されて表示されているのがわかります。

Dockerコンテナを停止

起動したコンテナを停止します。停止するにはdocker stopを使います。

$ docker stop php7
php7

docker psで確認すると、たしかに停止していることがわかります。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Dockerコンテナからカスタムイメージ作成

停止したコンテナを元に、Dockerイメージを作成作成。イメージを作成するには「docker commit」を使います。

コンテナ名やイメージ名などはdocker commit <停止中のコンテナ> <作成するイメージ名>のように使います。

下記の例出、停止したphp7からphp7-helloというイメージを作成します。

# イメージの作成
$ docker commit php7 php7-hello
sha256: 1ab7fe011170bf8b344d21c187b61ae20cc445c96949b974228d502d3291847d

# 作成したイメージの確認
docker images
REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
php7-hello                            latest              1ab7fe011170        34 seconds ago      465MB
php                                   7-apache            b68dc3a232b4        3 days ago          414MB
nginx                                 latest              2073e0bcb60e        3 weeks ago         127MB

カスタムイメージを作ったら、停止しているコンテナはもう使わないので削除しておきます。

$ docker rm php7
php7

Dockerのカスタムイメージから起動

作成したイメージからコンテナを起動してみましょう。

$ docker run -d -p 8082: 80 --name php7-hello php7-hello
0214992d33978bd15cd9c891c0f327ea2d682837c3363d347fcda5ff588b38fd

今回はポートを「8082」に設定しているので、作成したコンテナへのURLは「http: //localhost:8082/」です。

アクセスすると、先程と同じ「Hello, World!」が表示されます。

Dockerのカスタムコンテナを停止&削除

起動したphp7-helloコンテナを停止して、削除しましょう。

# コンテナの停止
$ docker stop php7-hello
php7-hello

# コンテナの削除
$ docker rm php7-hello
php7-hello

この2ステップが面倒だという人は、強制的にコンテナ削除する方法もあります。

$ docker rm -f php7-hello
php7-hello

Dockerのカスタムイメージを削除

最後に、php7-helloのイメージ自体を削除しましょう。イメージを削除するにはdocker rmiを使います。

$ docker rmi php7-hello
Untagged: php7-hello:latest
Deleted: sha256: 1ab7fe011170bf8b344d21c187b61ae20cc445c96949b974228d502d3291847d
Deleted: sha256: 71564e1e80e914caeea857a0101fa950ab53e778010cb4ba271e94ed37b2e762

まとめ

dockerを使った一通りの流れを紹介しました。これで、dockerを使った操作はなんとなく理解できたのではないでしょうか?

この記事を書いた人

自身がプログラミングを独学で勉強し始めて躓いた経験を元に、これから勉強をする人に向けに「イラスト多めでわかりやすい記事」にこだわって情報を発信しています。

現在はフルスタックエンジニアとしてサービス開発などのお仕事をしています。