0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

docker(VS Code Remote Containers)の環境構築のコマンドについての個人メモ

Last updated at Posted at 2022-02-18

dockerの基礎知識

Docker Image

  • 必要なファイルを全て固めたアーカイブパッケージ
  • コンテナの元となるファイル

Docker File

  • ベースとなるイメージとそのイメージに対してどのような操作をするのかを記したファイル
  • Docker FileをbuildするとDocker Imageができる

docker compose

  • 予めコンテナの起動方法やボリューム、ネットワーク構成などを書いた定義ファイル(docker-compose.yml)「Composeファイル」を用意する
  • docker-composeというツールでComposeファイルを読み込ませて実行すると、ボリュームやネットワークが構築され、まとめてコンテナが起動する
  • docker-compose ツールでまとめて停止や削除もできる

dockerの起動の主なオプション

-dit

  • -dit
    • コンテナをバックグラウンドで実行させる(デタッチモード)。デタッチ中のログはdocker
  • -it
    • 標準入出力をコンテナに結びつける(キー入力する場合)。
  • -t
    • 標準入出力をコンテナに結びつける(キー入力しない場合)。

--mount

bindの場合

docker run -dit --name <コンテナ名> -p <ローカル側ポート:コンテナ側ポート> --mount type=bind,source=<ローカル側マウント元のパス>, target=<コンテナ側パス>
## 下記のようにtargetという名前をつけてファイル管理することが多いらしい
source="$(pwd)"/target
## pwdはPrint Working Directorの略。
## 現在の作業ディレクトリを表示するコマンドLinuxのコマンドで、相対パス指定したいときに使う
## MacOSXやUbuntuなどでは、環境変数$PWDで置き換え可能
## $()は中身を実行するshellのコマンド

volumeの場合

docker run -dit --name <コンテナ名> -p <ローカル側ポート:コンテナ側ポート> --mount type=volume,source=<volume名>,dst=<コンテナ側パス>

bindとvolume の使い分け

  • 汎用性で言えばボリュームマウントが推奨
    • また、ブラックボックス化しても問題なく永続化したい、データベースを構成するコンテナ等におすすめ
  • バインドマウントの方がいい場面
    • 設定ファイルの受け渡し(ホスト上に設定ファイルを用意したい)が必要な場合
    • 作業ディレクトリの変更を即座にDockerコンテナから参照したい時
      • ローカルのファイルの変更により即座に更新されるため、個人開発とかでお試ししたい場合などはこっちがお勧め

--net

  • コンテナ間でコンテナ名で通信したい場合に利用する
    • 利用しない場合は、'docker network inspect' や 'docer container inspect'でIPアドレスを確認して、指定する必要がある
    • これは起動時に設定される値であり可変なので、コンテナ間で通信する場合は必ずネットワークを作る必要があるっぽい
  • 何も指定しない場合はデフォルトで存在する'bridge ネットワーク'に属することになる。前述の通りここではコンテナ名での通信が行えないので、コンテナ間の通信は考慮されていない

docker composeの基礎知識

  • docker-compose.ymlの記載について
    • version, service, network, volumesの3つの枠組みに分かれている
    • version:Compose ファイルの書式のバージョン
    • service:1つ一つのコンテナを定義する
    • network:ネットワーク定義
    • volumes:ボリュームの定義
version:3

services:
  image: xxxxxx
  networks:
    - hogehoge
  volumes:
    - volume_name:マウント先
  restert: always
  
  ...

  depends_on 
  image: xxxxx2
  networks:
    - hogehoge
  ports:
    - xxxx:xxxx
  restart: always

  ...
  
  app:
    build:
      context: .                    # 相対パスがややこしいのでcontextには自ファイルを指定
      dockerfile: ./app/DockerFile  # 自ファイルを指定したのち、dockerfileの場所を明示的に設定する
    tty: true # 起動したままにする

  ・・・

networks:
  hogehoge:

volumes:
  volume_name:
  • docker-composeではComposeファイルに記述したservice名を指定して個別にコンテナを操作可能

docker compose使う時のフォルダ構成

├── README.md
├── docker-compose.yml
├── app
│   ├── Dockerfile
│   └── dist
├── api
│   ├── Dockerfile         # <- API 実行環境
│   └── source             # <- API のソースコード
├── proxy
│   └── Dockerfile         # <- Web サーバ
└── mysql/
    ├── Dockerfile         # <- MySQL (公式の MySQL イメージでいいかも)
    └── data              # MySQL のデータディレクトリ

VS Code Remote Containers の環境構築

  • 参考:VSCode Remote Containers 事始め
    • Cmd+Shift+x で拡張機能の検索画面を開き remote containers で検索
    • Remote Containers (拡張機能の id は ms-vscode-remote.remote-containers)をインストール
    • Dockerfile が置かれたディレクトリを VS Code で開き左下の緑のボタンをクリック
    • Reopen in Container をクリック
  • 参考:VSCode Remote Containerが良い
    • 個人的には応用編な内容なのでまだサラッと読んだだけ
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?