Dockerのお勉強

koromaru
·

2023/12/28開始

自プロジェクトをWeb公開するのに、Dockerを使ったほうが楽そうだったので、いよいよお勉強開始

今の所なんとなくしか知らないので、結構茨の道になりそうな予感...

CLI Command

Dockerに関するcommandを随時記載。

こういうのが増えていくと、勉強してる感が出てくるからとても好き

  • `docker --version`

    dockerのversionを表示

  • `docker pull <image名>`

    Docker Hubから、任意のcontainer imageをローカルにpull

  • `docker images`

    ローカルにあるcontainer imageの一覧を取得(?)

  • `docker run --name <コンテナの識別子> -p <ローカルのポート>:<dockerのポート> -d -e key=value <image名>:<バージョン> `

    container imageからcontainerを作成し、実行

run optionの説明

--name -> buildするコンテナの識別子を設定

-t -> buildするコンテナのタグ名とバージョンを設定

-p -> ポートフォワーディングを設定

※ポートフォワーディングとは、ローカルPCの特定のポートへの通信を、コンテナ側の特定のポートへ転送するためのもの

-d -> デタッチドモード コンテナをバックグラウンドで起動

-e -> コンテナ側の環境変数を設定

  • `docker ps`

    起動しているコンテナの情報を表示

    ( -a で、停止しているコンテナも表示可能)

  • `docker exec -it <コンテナ名> bash`

    コンテナの中に入る(?)

    exec optionの説明

    -it -> コンテナ側でのコマンド操作を、今使っているコンソールから操作ができる

    bash -> コンテナ内で使用するshell script

  • `docker start <コンテナ名>` 構築して停止したコンテナを起動

    runとstartの違い

    runは、container imageからコンテナを作成して起動

    startは、作成されたコンテナを起動

  • `docker stop <コンテナ名>` コンテナを停止

  • `docker rm <コンテナ名>` コンテナ自体を削除

  • `docker rmi <イメージ名>:<バージョン>` container imageを削除

Dockerfile

Dockerのコンテナイメージを作成するために必要なテキストファイル

SQLのように、構文は大文字で記述する

  • `FROM <イメージ名>:<バージョン>`

    ベースのコンテナイメージを設定

  • `USER <user名>`

    コンテナ側のユーザーを変更 (rootとか)

  • `RUN <実行したいシェルコマンド>`

    コンテナイメージのbuild時に実行されるshell commandを設定

    (コマンドを&&で繋げてワンライナーで書いて、最後にキャッシュを削除するコマンドを書くと、イメージサイズが小さくなるらしい。(意味不))

  • `COPY <ローカルファイルのパス> <コンテナ側のパス>`

    ローカルのファイルをコンテナ側にコピー

    fileとdirectory、どちらも可

  • `ADD <追加元のファイルパス> <追加先のファイルパス>`

    コンテナ側にファイルを追加

    COPYとADDの違い

    COPY:

    • リモート上のファイルを扱えない

    • 圧縮ファイルがそのままコピー

    ADD:

    • リモート上のファイルも扱える

    • 圧縮ファイルが自動で解凍される

    つまり...

    Webからデータを引っ張ってきたい、圧縮ファイルを解凍したい時はADD

    それ以外は基本COPYで良い...と思う

  • `ENV <key>=<value>`

    コンテナ側の環境変数を設定

  • `WORKDIR <パス>`

    作業ディレクトリを変更

    相対パス / 絶対パスどちらでも可

  • `ENTRYPOINT ["実行ファイル", "パラメータ1", "パラメータ2"]`

    コンテナ実行(runとかstart)の時に動かしたいshell commandを指定「docker run」で、ある処理を実行させるためのコンテナとして作成したい時とかに使う。

    例) `ENTRYPOINT ["python3.9", "sample1.py"]`

    ↑ この場合、sample.pyが終了したら、コンテナも停止される

ここまでの参考

docker-compose

docker-compose.yamlが結局最強。

毎回コマンド打ってたのが馬鹿らしく感じてきた今日この頃