目次
こんにちは!ともです(@_tomo_engineer)!
この記事ではDockerでイメージのダウンロードからコンテナへの接続までを行います。
Dockerの基本的なコマンドを見ながらイメージやコンテナに触れたいと思います。
参考にした書籍は「プログラマのためのDocker教科書」です。
目次
- イメージ・コンテナとは
- イメージのダウンロード
- コンテナの生成と接続
イメージ・コンテナとは
Dockerではイメージとコンテナという概念が存在します。以下の記述はテキストやドキュメントに書いていた訳ではありませんが、僕が理解できた言葉です。
- イメージ:アプリケーションの実行環境の雛形
- コンテナ:イメージ(雛形)を元に生成されたアプリケーションの実行環境(実体)
例えば、centos7のイメージがあった場合、イメージ(雛形)をダウンロードしただけではcentos7はまだホストOS上で利用できません。イメージからコンテナ(実体)を生成して初めてcentos7を利用する事ができます。
何にせよ使って見ないと理解できないので以降でイメージのダウンロードからコンテナの起動・接続までを行います。
以降でDockerを利用して見ますが、MacOSでDockerを利用するにはDocker For Macをインストールする必要があります。dockerが利用できる前提で話を進めます。
イメージのダウンロード
今回はcentos7のイメージをダウンロードします。
イメージの確認
docker imagesコマンドで現在ダウンロードしたイメージの一覧を確認します。
docker images

まだ何もダウンロードしていないため何も存在しません。各項目の説明は以下です。
- Repository:イメージの名前
- tag: イメージに付けられたタグの名前
- image id: イメージに割り振られたID
- created: イメージの作成日
- virtual size: サイズ
イメージのダウンロード(Pull)
Docker Hubからイメージをダウンロードします。
pullコマンドでイメージをダウンロードする事ができます。
Docker Hub上で利用できるイメージを見つける事ができます。

docker pull centos
によりcentosのイメージをダウンロードできる事が分かります。
Docker Hubで検索するのが面倒な場合は
docker search centos
searchコマンドによりcentos関連のイメージの一覧を確認する事ができます。

- OFFICIAL:公式が提供するイメージ
- AUTOMATED:DockerFileを元に自動生成されたイメージ

imagesコマンドにより確認すると一覧にcentosイメージがダウンロードされている事が分かります。
コンテナの生成と接続
pullコマンドによりイメージをダウンロードする事ができました。
次にこのイメージを元にコンテナを生成します。
psコマンドで現在起動しているコンテナを確認します。
docker ps

psコマンドで確認した所、まだイメージをダウンロードしただけですので、起動しているコンテナは存在していな事が分かります。
コンテナの起動にはrunコマンドを実行します。
docker run centos

runコマンド後にpsコマンドで起動しているコンテナを確認しましたが一覧に表示されません。
psコマンドは起動中のコンテナのみ表示するようですので、-a オプションにより停止中のコンテナも含めて確認します。
docker ps -a

STATUSがExited(停止中)となっています。runで起動しただけではすぐに停止中になってしまうようです。
docker run -it centos
-itオプションを指定して起動しました。そうするとコンテナの起動と同時にcentosにログインする事ができました。

-itオプションの理解にはteratail docker runのオプションについてがオススメです。
- -i ホスト側からコンテナ側への入力を認める
- -t コンテナ側からホスト側への入力を認める
という事で、入出力を繋げbash上で対話できるようにするオプションのようです。
次にログアウト(detach)するには
Ctrl + P -> Q
コントロールを押した状態でPQを連続で押します。これにより起動したコンテナからログアウトする事ができました。
もう一度psコマンドを押して見ます。

起動(UP)状態のcentosを確認する事ができました。
再びコンテナにログインするには、attachまたはexecコマンドを利用します。
docker attach 94b9e29221aa(コンテナID)
または
docker exec -it 94b9e29221aa(コンテナID) bash(実行するコマンド)
attachは起動しているコンテナのプロセスでログインします。一方でexecは新たなプロセスを作成しコマンドを実行します。
attachでログインし、execで別プロセスでログインしプロセスを確認してみました。
ps aux

execで実行した分のプロセスが増えている事を確認しました。
以上がイメージのダウンロードからコンテナを生成、接続までです。
まとめ
今回はDockerでイメージのダウンロードからコンテナの生成・接続までを行いました。手軽にイメージをダウンロードし、コンテナを立ち上げれる位にはなれたかと思います。
次回以降は、コンテナからイメージの作成を行ってみたいと思います。