LoginSignup
0
0

Dockerにおけるコンテナ

Last updated at Posted at 2023-06-28

はじめに

こちらはDockerコンテナについてまとめた記事になります。情報が陳腐化している箇所があるかもですがご了承いただければ幸いです。:bow:

以下は、私がDocker関連についてまとめている記事になります。もし興味がありましたらご覧になってください。

Dockerコンテナとは

Dockerコンテナは実行に必要なすべての依存関係(ライブラリ、実行環境、設定ファイルなど)をカプセル化し、実行するための環境を提供します。

Dockerコンテナに関連するコマンドを説明していきます。

最初にコンテナを作成、起動するために一番使われるdocker runコマンドについて確認したいと思います。

コンテナを作成、起動するdocker runコマンド

terminal
$ docker run hello-world

スクリーンショット (246).png

docker run コマンドの流れ

  1. DockerクライアントからDockerデーモンに対してhello-worldのimageファイルを探しに行く。もしimageファイルがあればDocker Hubに対してimageファイルを探しに行かない。
  2. DockerデーモンがDocker Hubに対してimageファイルを探しにいく。
  3. imageが見つかったらダウンロードしてPC上に保存する。
  4. Dockerデーモンは保存したimageを元にコンテナを立ち上げて、コンテナで定義されたコマンドを実行する。

実はdocker runは、イメージを取得するコマンドdocker pull、コンテナを作成するdocker create、コンテナを起動するdocker startをひとまとめにしたコマンドです。

スクリーンショット (247).png

docker runに引数を渡して実行

以下のように、docker run dokcer/whalesayの後に、cowsay Hello!と記述することでコンテナが立ち上がった後にコマンドを実行することができます。

terminal
$ docker run docker/whalesay cowsay Hello!

docker runにオプションを渡して実行

$ docker run --name <コンテナ名> -d -p <ホスト側のポート番号>:<コンテナ側のポート番号> <イメージ名>コマンドで、オプションを渡してコンテナを立ち上げることも可能です。

terminal
$ docker run --name some-nginx -d -p 8080:80 some-content-nginx

--rmオプションはコンテナを停止した際に、コンテナそのものも破棄するオプションです。

termina
$ docker run --name tmp-nginx --rm -d nginx

docker run --name <コンテナ名> -d -v <ホスト側のディレクトリ>:<コンテナ側のマウントポイント>:<オプション> コマンドの-vオプションは、dockerホストのファイルやディレクトリをコンテナに紐づけるバインドマウントが設定できるオプションです。

-vオプションで指定するディレクトリは絶対パスで書く必要があります。

terminal
$ docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx

また、Dockerコンテナと対話式にやり取りする場合には-itオプションを使います。

terminal
$ docker create --name status-test -it alpine /bin/sh

コンテナのライフサイクル

以下は、コンテナの状態遷移図です。コンテナの状態はdocker ps -adocker inspect コンテナ名orIDコマンドで確認することができます。

スクリーンショット (250).png

どのDockerコマンドを実行したら、どう状態が遷移するかを箇条書きでまとめました。

コンテナのライフサイクル

  • Created状態はdocker createコマンドでコンテナを作成した時の状態です。
  • Running状態はdocker startコマンドでコンテナを起動したときの状態です。
  • docker runコマンドはイメージの取得⇒コンテナの作成⇒コンテナの起動を行うので、CreatedからRunningと1つのコマンドで状態が遷移します。
  • Pauseddocker pauseコマンドでRunningからPaused状態へ遷移します。そして、docker unpauseコマンドでPausedからRunning状態へ戻ります。
  • Exiteddocker stopコマンドでコンテナを停止した時の状態です。
  • Restartdocker restartコマンドでコンテナを再起動したときに一瞬遷移します。ただRestartからRunningに遷移するのではなく一度Exitedに遷移してからRunning状態に戻ります。
  • Dead状態はコンテナ内でエラーが発生した時などに遷移することがあります。
  • Removingdocker rmコマンドでコンテナを破棄するときの状態です。

コンテナへの接続

コンテナには、docker execコマンドを使って接続することができます。

terminal
$ docker run -d --name connect-test ubuntu tail -f /dev/null

$ docker exec -it connect-test /bin/bash
  • Ubuntuイメージを基にしたconnect-testという名前のコンテナがバックグラウンドで作成・実行されます。
  • tail -f /dev/nullは、無限に継続するプロセスであり、コンテナが実行中のままになります。
  • 外部からDockerコンテナ内に対話的なセッションを開き、コンテナ内部でBashシェルを利用できます。

終わりに

最後まで記事をご覧いただきありがとうございました。

間違い等ありましたらご指摘いただけると幸いです:bow:

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0