【ページ更新日:2020年10月12日】
DockerHubで開発環境を揃えるための基本的なコマンドを紹介します。
この記事で紹介しているコマンドの内容は、次のとおりです。
- DockerHubにログインする
- imageをpullする
- image からコンテナ作成
- コンテナに入る
- コンテナから出る
- コンテナを一覧表示する
- Docker imageを一覧表示する
- コンテナをRunの状態にする
- コンテナのプログラムを実行する
- コンテナからimageを作成する
- imageの名前を変更する
- imageをpush する
- image を削除する
※「ホスト」とは、ローカル環境のことです。「自分のパソコン」と訳してOKです。
DockerHubとは
DockerHubについて説明します。
>>> DockerHubの公式ページ
Dockerの何が良いのか
DockerHubの利便性を知るためには、Dockerの利便性を知る必要があります。
【環境構築の手間をカットできる】
各開発者のパソコンの開発環境、テスト環境、本番環境で同じ環境を構築するには、多くの時間コストを要する。
Dockerのコンテナを使用すれば「環境を持ち運べる」ため、従来の環境構築の手間をゴッソリなくすことが出来る。
DockerHubの何が良いのか
「持ち運べる開発環境」であるDockerのコンテナをネット上にやりとりすることができるのがDockerHubです。
「持ち運べる開発環境」であるDockerのコンテナを、ネット上でやりとりすることができる。
つまり、異なるPC上でも同じような開発環境を一瞬で構築することができる。
imageのpullからコンテナ作成まで
DockerHubにログインし、Docker imageをpullし、imageからコンテナを作成するまでのコマンドを紹介します。
Docker Hubにログインする
$ docker login
このコマンドをターミナル上で実行すると、
ターミナル上のコマンドでDockerHubを使用することが出来るようになります。
DockerHubの「アカウント名」と「パスワード」の入力を要求される場合があります。その場合は入力してください。
このような表示がされたら成功です。
DockerHubからimageをpullする
$ docker pull <image名>
このコマンドをターミナル上で実行すると、
DockerHub上にあるDocker imageをホストにpullする(=持ってくる)ことが出来ます。
持ち運べる開発環境が「コンテナ」でした。
「Docker image」は、「コンテナ」を作成するためのものです。
つまり、『持ち運べる開発環境を「コンテナ」』と言いましたが、厳密に言うと「持ち運べるもの」はDocker imageになります。
コンテナAという開発環境を別の開発者のPC上にも構築したい場合は、「コンテナAを作るDocker imageA」をその開発者のPC上に持っていき、そのパソコン上でコンテナAを作ることになります。
つまり、開発者全員でこのコマンドを実行し、同じDocker imageを自身のPC上にpullする(=持ってくる)ことで、それぞれのPC上に同じコンテナを作成することができ、開発者全員で開発環境を統一することができます。
Docker imageからコンテナを作成するコマンドを次に紹介します。
Docker image からコンテナを作成・起動する
$ docker run -it <image名> bash
このコマンドをターミナル上で実行すると、
Docker imageからコンテナを作成し起動することができます。
この「 -it 」と「 bash 」については、現段階では、bashを起動させる「おまじない」だと思ってください。
厳密に言うと違いますが、普段使っているターミナルだと思ってください。
コンテナを起動した状態でとどめておくためのオプションコマンド。
コンテナはrunコマンドやstartコマンドでは、コンテナ内のデフォルトコマンドを実行したらすぐに終了(Exited)状態になる。
もうちょっと詳しく・・・
「-it」は、「-i」と「-t」の合わせ技である。
「-i」は、ホストからの入力をコンテナ内のプログラムに届くようにするオプションである。
詳しく言うと、ホストからコンテナ内のプログラムへのSTDINというチャネルを開くオプションである。
「-t」は、表示をキレイにするためのコマンドです。これがないと入力の補完などができなくなったり、表示が汚くなったりする。
コンテナを作成した場合、同時にbashを起動させることが多いため、このコマンドを「imageからコンテナを作成するコマンド」としてもOKです。
また、このコマンドを実行すると「コンテナ」にログインした状態になります。
ログアウトする方法は次に説明します。
runコマンド = createコマンド + startコマンド
コンテナを作成して、そのコマンドを起動している。
コンテナから出る
$ exit
このコマンドをターミナル上で実行すると、
ログイン(Run)状態のコンテナからログアウト(Exited)状態することができます。
業務では、Exited状態になったコンテナを再度使用することは多くはない。
コンテナが次々と増えてしまうため、使わないコンテナは削除する。
ホスト上の状態確認
ホスト上(ローカル環境、自分のパソコン)のimage、コンテナの状態を確認する方法を紹介します。
ホスト上のコンテナを一覧表示する
$ docker ps -a
このコマンドをターミナル上で実行すると、
ホストが持つコンテナを一覧表示することができます。
「 -a 」について
→「 -a 」をつけて実行:すべてのコンテナを表示する。
→「 -a 」をつけないで実行:起動中のコンテナのみ表示する。
ホスト上のimageを一覧表示する
$ docker images
このコマンドをターミナル上で実行すると、
ホストが持つDocker imageを一覧表示することができます。
コンテナをExitedの状態からRunの状態にする
$ docker restart <container名>
このコマンドをターミナル上で実行すると、
ホスト上のExited状態であるコンテナを起動(Run)させることができます。
コンテナのプログラム(bash)を実行する
$ docker exec -it <container名> bash
このコマンドをターミナル上で実行すると、
ホスト上のRun状態であるコンテナのプログラム(bash)を実行することができます。
Run状態ではないコンテナに対して実行するとエラーが出るため、1つ前に紹介した「コンテナをExitedの状態からRunの状態にする」コマンドを実行しておく必要があります。
bashではないプログラムを実行する場合は、コマンドの「bash」部分をプログラム名に変更すればOKです。
開発環境を揃える
開発環境を揃える手順を紹介します。
コンテナから新しいimageを作成する
$ docker commit <container名> <image名>
このコマンドをターミナル上で実行すると、
ホスト上のコンテナからimageを作成することができます。
Dockerの醍醐味の「開発環境を揃える」ための手順は、大きく分けて2種類ある。
- Docker fileからDocker imageを作成し、そのimageを共有する。
そのimageから、各自のPC上にコンテナを作成する。 - DockerHubから既存のDocker imageをpullして、コンテナを作成する。
そのコンテナ内で開発に必要なものをインストールし、現場の開発用のコンテナ(開発環境)を作成する。
そのコンテナから、Docker imageを作り直し、そのimageを他の開発者と共有することで同じ開発環境を構築することができる
image名を変更する
$ docker tag <名前を変えたいimage名> <変更後のimage名>
このコマンドをターミナル上で実行すると、
ホスト上のDocker imageの名前を変更することができます。
次に紹介する「ホスト上のimageをDockerHubにpushする」ためには、DockerHubのリポジトリ名とimage名を同じにする必要があるため、このコマンドを実行する必要があります。
ホスト上のimageをDockerHubにpushする
$ docker push <image>
このコマンドをターミナル上で実行すると、
ホストが持つDocker imageをDockerHubにpushする(送信する)ことができます。
自分が持つDocker imageを他の開発者と共有したい場合は、このコマンドを実行してDockerHub上にimageをあげることになります。
また、DockerHubにpushするためには、DockerHubのリポジトリ名とimage名を同じにする必要があります。
ホスト上のimageを削除する
$ docker rmi <image名>
このコマンドをターミナル上で実行すると、
ホストが持つDocker imageを削除することができます。