LoginSignup
0
0

【備忘録】Dockerで使う基本的なコマンドなど

Posted at

コンテナの作成・起動

docker container run --name コンテナ名 -p ホスト側ポート番号:コンテナ側ポート番号 -d イメージ

docker container run --name test_apache -p 8080:80 -d httpd

上記で作成・起動すると、ブラウザでlocalhost:8080にアクセスすると起動しているのがわかる。

起動中のコンテナに入る

docker container exec -it コンテナ名 /bin/bash

docker container exec -it test_apache /bin/bash

コンテナを削除

docker container rm コンテナ名

コンテナ一覧を取得

起動中のコンテナ一覧取得

docker container ls

停止中も含めて全てのコンテナを取得

docker container ls -a

コマンド一覧を見る

ヘルプを参照すれば、だいたいやりたいことはできそう

docker container --help

Docker Compose

複数のコンテナを作成・起動できる機能。
docker container runで作成・起動するのは、コマンドが長くなったり、複数起動する際、必要回数分実行しないといけないので、Docker Composeを使うのが良い。

実行は簡単で、以下のコマンドを実行するだけ。
-dはバックグラウンドで実行するという意味で、こちらを指定しないと同じターミナルのWindowで他のコマンドを実行できなくなる。新しくWindowを開けば問題ないが、基本つけておくのが良さそう。

docker compose up -d

停止は下記。

docker compose stop

停止・削除は下記

docker compose down

Docker Composeファイル

docker compose up -dのコマンドは、コマンドを実行したディレクトリにあるDocker Composeファイルからコンテナを作成・起動する。
Docker Composeファイルの命名は以下が有効らしい。

  • compose.yaml
  • compose.yml
  • docker-compose.yaml
  • docker-compose.yml

以前はdocker-composeという名称だったみたいだが、composeという名称が推奨されるようになったらしい。

書き方は下記。

services:
  # サービス名
  web:
    # イメージ
    image: httpd
    # コンテナ名
    container_name: test_apache
    # ポート番号
    ports:
     - "8080:80"

コピー

ホストのPCからコンテナにファイルをコピーする
containerとcomposeで少し違いがある。

docker container cp コンテナ名:/usr/local/apache2/htdocs/index.html ./index.html
docker compose cp サービス名:/usr/local/apache2/htdocs/index.html ./index.html

docker compose cp web:/usr/local/apache2/htdocs/index.html ./index.html
docker container cp test_apache:/usr/local/apache2/htdocs/index.html ./index.html

データの永続化

Container内のデータはContainerを削除すると消える。
永続化したい場合は三つの手段がある

  • 消す前に、Container内からホストにコピーしておく
  • ボリュームを使う
  • バインドマウントを使用する

この中でよく使われている(個人的によく見かける)のはボリュームを使う方法。

ボリュームについて

Dockerが管理する記憶領域にデータを永続化する

ボリュームの定義は以下のように二箇所で行う。

services:
  db:
    image: postgres
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: password
    ports:
      - 5432:5432
    volumes:
      - db_volumes:/var/lib/postgresql/data
volumes:
  db_volumes:

servicesと同じ階層のvolumesには作成するボリューム名を記載する。
個別のservise(上記で言うとdb)のvolumesには、上記で定義したボリューム名とcontainer内のパスを指定する。

Container内のパス指定について

なぜ、Container内のパスを指定するのか最初わからなかったが、
ボリュームの実態(ホストPC上の保存領域)と、Container内のフォルダを結びつけるようなイメージみたい
つまり、Container内で指定したパスを参照すると、ホストPC上の保存領域を参照できる
また、パスの指定はイメージごとに決まっているみたい(変えることは可能みたいですが、デフォルト値ではなくなるため、設定変更が必要みたいです)
DockerHubでイメージの公式ページを調べる必要がある

ボリュームの実態の場所

以下が参考になりました。

バインドマウント

ホストOSのフォルダやファイルをマウントする
ホストOS上で、マウントしたファイルを直接変更すると、コンテナ内でも変更が反映される
service内のvolumesにホストOSのパス:コンテナ内のパスで指定する

ホストPC上のフォルダ構成を下記とする。

dir ─ compose.yaml
    └ htdocs
        └ index.html

下記のように、ホストのPCのhtdocsに、Container内の/usr/local/apache2/htdocsを定義する。

compose.yaml
services:
  web:
    image: httpd
    container_name: test_apache
    ports:
     - "8080:80"
    volumes:
     - ./htdocs:/usr/local/apache2/htdocs

すると、ホストPC上のhtdocs/index.htmlを編集すると、Container内でも変更が反映され、Apacheの表示が変わる。

エラー確認

Containerの作成が完了したが、ブラウザなどでアクセスしても表示されない場合は内部でエラーになっている可能性がある。
その場合、docker compose logs コンテナ名でログが確認可能

docker compose logs web

ビルド

docker compose upでは、イメージがすでにある場合、既存のイメージを使用する。
したがって、再度イメージをビルドしたい場合は下記のコマンドを使う

docker compose build

再ビルドと実行を行う場合は下記

docker compose up -d --build

反映されない時は以下を試す。

docker compose build --no-cache
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