TECH-MEMO.CLUBhttps://tech-memo.club技術的内容のメモThu, 14 Sep 2023 14:24:48 +0000jahourly1docker-compose.yml ファイルhttps://tech-memo.club/docker/docker-compose-yml-%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab/Thu, 14 Sep 2023 14:24:47 +0000https://tech-memo.club/?p=1044

]]>

概要

・”docker-compose.yml” ファイルにはコンテナの構成内容を記載する

・複数のコンテナを連携させて構成・管理するためのファイル

・yaml ファイルのネストのスペース数は統一されていれば何個でも良い

“docker-compose.yml” ファイルを準備
  1. docker-compose は必ず最初に “version” と “services” 項目を記載する
  • “version”:2023年9月時点の最新は “3”(参考)
  • “services”:稼働するコンテナを記載
    service名は任意でOK(コンテナ名でなくて良い)
    ※ここでは、”db” と “wordpress” の 2つを定義
  • “image”:DockerHubからのイメージ指定(イメージ名を指定)
    ※”image” の代わりに “build” が記載できる
    ※”build”:Dockerfileからイメージ指定(Dockerfileがあるフォルダのパスを指定)
  • “container_name”:任意のコンテナ名を記載
    ※docker run の “–name” と同じ
    ※ダブルクォーテーションで囲う
    ※管理面として全てのサービスに付けていた方が良い
  • “volume”:コンテナとホストでディレクトリを共有するための情報を記載
    ※docker run の “-v” と同じ
    ※「{ ホスト側のフォルダパス }:{ コンテナ側のフォルダパス }」形式で記載
    ※ソースコードや設定ファイルを共有することに使う
    ※ホストの環境に影響されないように相対パスでの記載が良い
    ※相対パス:docker-compose.yml ファイルから見たパス
  • “environment”:環境変数を記載
    ※”Key=Value” の形式で記載
    ※Value には “services” のサービス名で指定できる
    ※service名が “wordpress” の黄色枠の「db」は、もう 1つの service名 “db” を記載している
    ※docker-compose で定義する複数のコンテナ(”services:”の定義)間でやりとり(通信)ができるように、内部IPが割り当てられる(docker-compose のコンテナ間通信)
    ※黄色枠の「db」は内部IPに変換されて処理される
    → “docker-compose.yml” 記載時に内部IPを気にすることなくservice名で記載することができるので便利
  • “ports”:コンテナのポート開放とポートフォワーディングの内容を記載
    ※docker run の “-p” と同じ
    ※「{ ホスト側の外部公開ポート }:{ コンテナ側の内部ポート }」形式で記載
    ※”ports:” の後に改行して、1つネストして記載するルールになっている
    ※ホスト側の外部公開ポートが被らないようにWebサーバを複数構築できたりする

]]>
Dockerfile 内のコマンド:(応用)カスタムした MariaDB イメージの作成https://tech-memo.club/docker/dockerfile-%e5%86%85%e3%81%ae%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%ef%bc%9a%ef%bc%88%e5%bf%9c%e7%94%a8%ef%bc%89%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%81%97%e3%81%9f-mariadb-%e3%82%a4%e3%83%a1%e3%83%bc/Sat, 02 Sep 2023 07:46:19 +0000https://tech-memo.club/?p=1027

]]>

MariaDB の設定ファイル “my.cnf” を準備
  1. vi エディタ等で “my.cnf” を準備
    ※ここでは、内容を下記としています
# db/my.cnf
[mysqld]
character-set-server=utf8
datadir = /var/lib/mysql
テーブルを作成するための “create-table.sql” を準備
  1. vi エディタ等で “create-table.sql” を準備
    ※ここでは、内容を下記としています
CREATE TABLE products ( id int, name varchar(255), price int
);
Dockerfile を準備
  1. vi エディタ等で “create-table.sql” を準備
    ※ここでは、内容を下記としています
FROM mariadb:10.4
RUN apt-get update -y
COPY my.cnf /etc/mysql/conf.d
COPY create-table.sql /docker-entrypoint-initdb.d
ENV MYSQL_USER=root
ENV MYSQL_DATABASE=techmemo_db
ENV MYSQL_ROOT_PASSWORD=root
  • FROM に MariaDB 公式のイメージを指定
    公式のイメージには必要なコマンドも含まれているため CMD が不要となる
  • “create-table.sql” を “/docker-entrypoint-initdb.d” ディレクトリ配下に置くとコンテナ起動時に自動的に実行されて、テーブルが作成される
  • ENV で “MYSQL_DATABASE” を定義することでコンテナ起動時に自動的にデータベースが作成される
Dockerfile からイメージを生成
  1. ターミナルで下記コマンドを実行
    docker build -t img-techmemo-mariadb ./
    ※ここでは、イメージ名を “img-techmemo-mariadb” としています
“docker images” で生成したイメージの確認
  1. ターミナルで下記コマンドを実行
    docker images
  • “img-techmemo-mariadb” が生成されていることが確認できます
コンテナ起動
  1. ターミナルで下記コマンドを実行
    docker run -d –name techmemo-mariadb img-techmemo-mariadb
コンテナ起動を確認
  1. ターミナルで下記コマンドを実行
    docker ps
  • img-techmemo-mariadb イメージからコンテナが起動できていることを確認できます
コンテナ内に入る
  1. ターミナルで下記コマンドを実行
    docker exec -it techmemo-mariadb /bin/bash
MariaDB にログイン
  1. ターミナルで下記コマンドを実行
    mysql -u root -p
  2. “Enter password:” で「root」と入力(入力内容は表示されません)
    → Dockerfile に記載した「ENV MYSQL_ROOT_PASSWORD=root」がパスワードになっています
データベースの確認
  1. ターミナルで下記コマンドを実行
    show databases;
  • “techmemo_db” が作成されていることが確認できます
    → Dockerfile に記載した「ENV MYSQL_DATABASE=techmemo_db」がデータベース名になります
テーブルの確認
  1. ターミナルで下記コマンドを実行
    use techmemo_db
  2. ターミナルで下記コマンドを実行
    show tables;
  • “products” テーブルが作成されていることを確認できます
    → 準備していた “create-table.sql” が実行されたことが分かります

]]>
Dockerfile 内のコマンド:ENVhttps://tech-memo.club/docker/dockerfile-%e5%86%85%e3%81%ae%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%ef%bc%9aenv/Fri, 01 Sep 2023 09:58:03 +0000https://tech-memo.club/?p=1019

]]>

概要

Dockerfile → イメージ生成の build時に環境変数を設定するコマンド

※環境変数の例(DB接続情報など)

※ENVでの設定は固定値になってしまう(環境毎に変えられない)

Dockerfile を準備
  1. Dockerfile を作成
  • ここでは、内容を下記としています
    FROM ubuntu:20.04
    RUN apt-get update -y && \
    apt-get install -y nginx
    ENV TEST_ENV=”techmemo”
    ENV APP_ENV=”production”
    CMD [“nginx”, “-g”, “daemon off;”]
  • “Key=Value” の形式で、”Key” も任意に設定
Dockerファイルからイメージを生成
  1. ターミナルで下記コマンドを実行
    docker build -t img-env-nginx ./
    ※ここでは、イメージ名を “img-env-nginx” としています
コンテナ起動
  1. ターミナルで下記コマンドを実行
    docker run -d -p 8083:80 –name test-env-nginx img-env-nginx
コンテナ起動を確認
  1. ターミナルで下記コマンドを実行
    docker ps
環境変数の確認
  1. ターミナルで下記コマンドを実行
    docker inspect test-env-nginx
  • “Config” > “Env” の項目に Dockerfile で記載した ENV の内容が定義されていることが確認できます

]]>
Dockerfile 内のコマンド:COPYhttps://tech-memo.club/docker/dockerfile-%e5%86%85%e3%81%ae%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%ef%bc%9acopy/Thu, 31 Aug 2023 10:48:56 +0000https://tech-memo.club/?p=1007

]]>

概要

Dockerfile → イメージ生成の build時にイメージに任意のファイルをコピーするコマンド

※ADD コマンドも同様にファイルをコピーできる

※ADD はネット経由からのファイル追加や tarアーカイブ展開も可能と COPYより高機能

※Docker公式は ADD より COPY を推奨している

 → COPYは機能(ローカルファイルをコンテナの中にコピーする)が明確であるため

 (参考)https://docs.docker.jp/engine/userguide/eng-image/dockerfile_best-practice.html

用途

・ソースコードを入れた状態のイメージを作る

・準備した設定ファイルを反映した状態のイメージを作る

など

コピー対象のファイル “index.html” を準備
  1. vi エディタ等で index.html を作成
  • ここでは、index.html の内容を下記としています
    <h1>Docker COPY Test</h1>
Dockerfile を準備
  1. vi エディタ等で index.html を作成
  • ここでは、Dockerfile の内容を下記としています
    FROM ubuntu:20.04
    RUN apt-get update -y && \
    apt-get install -y nginx
    COPY index.html /var/www/html
    CMD [“nginx”, “-g”, “daemon off;”]
  • COPY コマンドで “index.html” をコンテナ内の “/var/www/html” ディレクトリ配下へコピーする内容です
  • RUNコマンドでインストールされる nginx のバージョンでは “/var/www/html” がドキュメントルート
Dockerfile からイメージを生成
  1. ターミナルで下記コマンドを実行
    docker build -t img-copy-nginx ./
  • ここでは、イメージ名を “img-copy-nginx” としています
  • “index.html” が “/var/www/html” へ COPY されていることも確認できます
コンテナ起動
  1. ターミナルで下記コマンドを実行
    docker run -d -p 8082:80 –name test-copy-nginx img-copy-nginx
コンテナ起動を確認
  1. ターミナルで下記コマンドを実行
    docker ps
実際にブラウザで確認
  1. URLに下記を入力して表示
    http://localhost:8082/
  • “index.html” の内容が表示されます

]]>
Dockerfile 内のコマンド:RUN と CMDhttps://tech-memo.club/docker/dockerfile-%e5%86%85%e3%81%ae%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%ef%bc%9arun-%e3%81%a8-cmd/Wed, 30 Aug 2023 14:34:07 +0000https://tech-memo.club/?p=994

]]>

概要

RUN:Dockerfile → イメージを作成する際に実行されるコマンド

CMD:イメージ → コンテナを作成する際に実行されるコマンド

Dockerfile を準備
  1. 内容は下記
    FROM ubuntu:20.04
    RUN apt-get update -y && \
    apt-get install -y nginx
    CMD [“nginx”, “-g”, “daemon off;”]
  • “&&”:1つのレイヤ(ここでは “RUN”)に複数命令を記載するときに記述
    → レイヤを少なくすることでイメージサイズを縮小できる
  • “¥”(バックスラッシュ):改行表示するときに記述
  • Docker ではコマンドを foreground で動かさないとコンテナが停止してしまうため nginx を foreground で動かすために “daemon off;” を指定しています
Dockerファイルからイメージを生成
  1. ターミナルで下記コマンドを実行
    docker build -t img-run-nginx ./
    ※ここでは、イメージ名を “img-run-nginx” としています
“docker images” で生成したイメージの確認
  1. ターミナルで下記コマンドを実行
    docker images
  • “img-run-nginx” が生成されていることが確認できます
コンテナ起動
  1. ターミナルで下記コマンドを実行
    docker run -d -p 8081:80 –name test-run-nginx img-run-nginx
コンテナ起動を確認
  1. ターミナルで下記コマンドを実行
    docker ps
実際にブラウザで確認
  1. URLに下記を入力して表示
    http://localhost:8081/
  • 「Welcome to nginx!」の画面が表示されることを確認

]]>
Docker コンテナのストレージ共有https://tech-memo.club/docker/docker-%e3%82%b3%e3%83%b3%e3%83%86%e3%83%8a%e3%81%ae%e3%82%b9%e3%83%88%e3%83%ac%e3%83%bc%e3%82%b8%e5%85%b1%e6%9c%89/Tue, 29 Aug 2023 16:29:14 +0000https://tech-memo.club/?p=986

]]>

概要

docker run -v { ホスト側のフォルダパス }:{ コンテナ側のフォルダパス }

※指定したホスト側・コンテナ側のフォルダが共有フォルダになります

※一方で変更した内容がもう一方に自動的に反映されます

コマンド実行
  1. ターミナルで下記コマンドを実行
    docker run -v /Users/xxx/docker/source:/usr/share/nginx/html –name test_nginx -p 8080:80 nginx:1.16
  • docker run -v { ホスト側のフォルダパス }:{ コンテナ側のフォルダパス }
  • 指定したホスト側・コンテナ側のフォルダが共有フォルダになります
  • 一方で変更した内容がもう一方に自動的に反映されます
  • -p:ポートフォワーディング({ 外側からアクセスするときのポート番号 }:{ コンテナ内のポート番号 })
ホスト側フォルダに index.html を作成
  1. vi コマンド等で index.html ファイルを作成
    ※ここでは、index.html の内容を下記としています
    <h1>Docker Test</h1>
確認
  1. ブラウザのURL欄に下記を入力して確認
    http://localhost:8080/
  • ホスト側で作成した index.html の内容が表示されます
    ※ホスト側の index.html がコンテナ側のフォルダ( nginx のドキュメントルート )に共有されていることが分かります

]]>
docker historyhttps://tech-memo.club/docker/docker-history/Tue, 29 Aug 2023 16:15:08 +0000https://tech-memo.club/?p=983

Dockerイメージが作成されてからの更新履歴を確認するコマンド ※DockerHub から公開されているイメージを pull した場合など、そのイメージがどのように作成されたか確認するためのコマンド]]>

Dockerイメージが作成されてからの更新履歴を確認するコマンド

※DockerHub から公開されているイメージを pull した場合など、そのイメージがどのように作成されたか確認するためのコマンド

コマンド実行
  1. ターミナルで下記コマンドを実行
    docker history centos:8
    ※ここでは、イメージ名に “centos”、タグ名に “8” 指定で実行しています
  • docker history { イメージ名 }:{ タグ名 }
  • イメージID指定(下記コマンド)でも同様に確認できます
    docker history { イメージID }

]]>
docker pushhttps://tech-memo.club/docker/docker-push/Tue, 29 Aug 2023 16:10:45 +0000https://tech-memo.club/?p=975

DockerイメージをDockerHub へアップロードするコマンド Docker Hub へアップロードしたリポジトリを削除する方法]]>

DockerイメージをDockerHub へアップロードするコマンド

DockerHubへアップロード

コマンド実行
  1. ターミナルで下記コマンドを実行
    docker commit { コンテナID or 名前 } { DockerHubID/イメージ名 }:{ タグ名 }
DockerHub で確認
  1. Docker Hubにログイン
  2. 左上の検索欄にキーワードを入力→ [ Enter ]キー押下で検索実行
  • 検索結果にアップロードしたコンテナが表示される

Docker Hub のリポジトリ削除

Docker Hub へアップロードしたリポジトリを削除する方法

削除するイメージを選択
  1. 検索結果のイメージをクリック
リポジトリの管理画面を表示
  1. 「Manage Repository」ボタン押下
リポジトリの削除操作
  1. 「Settings」タブをクリック
  2. 「Delete repository」ボタン押下
リポジトリの削除実行
  1. リポジトリ名を入力(ここでは “techmemo-centos” を入力)
  2. 「Delete」ボタン押下

]]>
docker commithttps://tech-memo.club/docker/docker-commit/Tue, 29 Aug 2023 15:50:24 +0000https://tech-memo.club/?p=965

コンテナ→Dockerイメージを生成するコマンド ※通常は Dockerイメージを元にコンテナを生成するが、その逆を行うコマンド※コンテナに操作を加えたうえでイメージ化したい場合に使う]]>

コンテナ→Dockerイメージを生成するコマンド

※通常は Dockerイメージを元にコンテナを生成するが、その逆を行うコマンド
※コンテナに操作を加えたうえでイメージ化したい場合に使う

コマンド実行
  1. ターミナルで下記コマンドを実行
    docker commit my_centos techmemo/techmemo-centos:ver.1
  • docker commit { コンテナID or 名前 } { イメージ名 }:{ タグ名 }
  • イメージ名:任意のイメージ名(ここでは “techmemo/techmemo-centos” としています)
  • タグ名:任意のタグ名(ここでは “ver.1” としています)

“docker push” でDockerHubへアップロードするためには、イメージ名の先頭に DockerHubID を入れる必要があリます
{ DockerHubID/イメージ名 }で指定

生成したイメージの確認
  1. ターミナルで下記コマンドを実行
    docker images
  • 生成したDockerイメージを確認できます

]]>
docker pullhttps://tech-memo.club/docker/docker-pull/Tue, 29 Aug 2023 15:44:26 +0000https://tech-memo.club/?p=962

Dockerイメージをダウンロードするコマンド ※”docker run” でもDockerイメージをダウンロードできますが、”docker pull” の使いどころとして下記があります  ・プライベートレジストリ(Do ... ]]>

Dockerイメージをダウンロードするコマンド

※”docker run” でもDockerイメージをダウンロードできますが、”docker pull” の使いどころとして下記があります

 ・プライベートレジストリ(Docker Hub以外)からのダウンロードができる

コマンド実行
  1. ターミナルで下記コマンドを実行
    docker pull centos:6
    ※ここでは、イメージ名に “centos”、タグ名に “6” 指定で実行しています
    ※[レジストリURL] は省略しています

docker pull { イメージ名 }:{ タグ名 } [ レジストリURL ]

]]>