ネットワーク セキュリティ Day31 - 運用および保守セキュリティ プロジェクト - コンテナ アーキテクチャ

6.ドッカーファイル

6.1 Docker 自動 DIY ミラーリング用の Dockerfile

  • 前回の場合(手動でミラーを作成する)は非常に面倒だったので、dockerfileを使用して自動的にミラーを作成しました
  • ここでは、Dockerfile ファイル メソッドを使用してミラーリングのプロセスを定義し、Dockerfile の指示に従って指定し、最後に必要なカスタム イメージを生成できます。鏡像
  • 目標:
    • 1️⃣ Dockerfileを使用します
    • 2️⃣Dockerfileの書き方をマスターする
  • タスク要件: Dockerfile を使用してワンクリックで Bird Feifei のミラー イメージを作成します。

1) 環境の準備

  1. ディレクトリを作成します。mkdir -p /server/dockerfiles/01-bird
  2. ファイルのアップロード: bird.zipLinux にアップロードします (/root/ で十分です)
  3. 解凍:unzip bird.zip
  4. ファイルをディレクトリにコピーします。cp -a bird /server/dockerfiles/01-bird

2) Dockerfile コンテンツを書き込む

  • 鳥の画像をカスタマイズする手順(画像に対する操作)を整理する
カスタムミラーリングプロセス ステップ Dockerfile の命令
1️⃣ ベースミラーの選択nginx:1.24 nginxから:1.24
2️⃣ Bird コードを
/usr/share/nginx/html/ ディレクトリに転送します。
Dockerfile によって処理される
ファイルまたはディレクトリは、 Dockerfile が配置されているディレクトリに配置されます。
Bird/ /usr/share/nginx/html/ を
追加 ホスト ディレクトリまたはファイル ミラー ディレクトリを追加
3️⃣ 仕上げる CMDコマンド
  • Dockerfile
    #1. Dockerfile所在目录结构
    
    drwxr-xr-x 3 root root  98 1116 2021 bird        #Dockerfile需要的bird目录
    -rw-r--r-- 1 root root 239 814 09:31 Dockerfile #Dockerfile文件
    
    #2. 编辑Dockerfile
    vim Dockerfile 
    #指定基础镜像
    FROM nginx:1.24 
    
    #镜像的说明信息
    LABEL author=lidao996 url=www.oldboyedu.com
    
    #传输内容
    ADD bird/   /usr/share/nginx/html/
    
    #指定容器入口指令
    #用于启动ngx服务
    CMD ["nginx","-g","daemon off;"]
    

3) Dockerfile を実行してイメージを生成する

  • Dockerfile が存在するディレクトリを入力します。cd /server/dockerfiles/01-bird/
  • イメージを生成するコマンド:docker build -t oldboydir:lidao996_bird_diy_v2 .
    • -t タグ ラベル。新しいイメージの分類を指定するために使用されます: name_version
    • .Dockerfile が現在のディレクトリにあることを指定します

4) コンテナを実行する

  1. 新しいイメージに従ってコンテナを起動します。docker run -d -p 12306:80 --name bird_diy_v2 oldboydir:lidao996_bird_diy_v2
  2. コンテナが実行中であることを確認します。docker ps |grep bird_diy_v2
  3. ブラウザチェック:ログイン10.0.0.62:12306

5) まとめ

  • Dockerfile の関数と手順。
  • 通常、手動の手順に従って、手順は Dockerfile に変換されます。
  • 始まり
    • から
    • ラベル
  • プロセス
    • 追加/コピー
  • 端部
    • CMD

6.2 ケース 14: Dockerfile-RUN 命令

  • ミラーホームページファイルの内容がoldboyedu.comの場合は、nginxカスタムミラーを作成します。
  • echo コマンドはファイルの内容を変更します。echo oldboyedu.com >/usr/share/nginx/html/index.html
  • カスタム イメージを作成するときに Linux コマンドを実行します。

1) Dockerfile を書く

mkdir -p /server/dockerfiles/02-ngx
cd /server/dockerfiles/02-ngx

vim Dockerfile 
FROM nginx:1.24
LABEL author=lidao996  url=www.oldboyedu.com 

RUN echo oldboyedu.com >/usr/share/nginx/html/index.html

CMD ["nginx","-g","daemon off;"]

2) 鏡像を構築する

docker build -t oldboydiy:test_v2  .

3) コンテナを起動します

docker run -d -p  10086:80 oldboydiy:test_v2

4) 試験結果

ここに画像の説明を挿入

6.3 Dockerfile の命令

Dockerfile の命令 意味 応用 提案
Dockerfileの始まり
から ベース ミラーの指定はdocker pullダウンロード ミラーと似ています。 無料から:20.04 ubuntu または ubuntu:latest をできるだけ少なく記述し、特定のバージョンを指定するようにしてください。
ラベル コンテナの属性情報、作成者、個人の連絡先情報(メールアドレス)などを指定するために使用されます。 LABEL メンテナ = “lidao996 [email protected] LABELは推奨、以下のMAINTAINERは非推奨
環境 Dockerfileで使用される変数を作成するために使用されます ENV Tengine_Version スペース 2.3.3 ソフトウェアのバージョンは変数を使用して作成できます。
Dockerfile中間処理部
走る イメージの作成プロセス (通常はシステム構成、サービス構成、およびデプロイメント) で必要な実行コマンド。
ただし、現在のターミナルをブロックするコマンドは使用できません。
RUN システムコマンドで十分です。 複数の連続する RUN を使用したり、複数の連続した RUN をマージしたりすることはお勧めできません。
追加 指定したファイルやディレクトリをコンテナ(指定したディレクトリ)にコピーすることができ、圧縮されたパッケージを解凍します
.現在のディレクトリを基準とした相対値。
restart.tar.gz スペース /app/code/restart/ を追加します 圧縮パッケージをコピーして使用します。
コピー 指定したファイルやディレクトリをコンテナ(指定したディレクトリ)にコピーすることができ、自動解凍はサポートされていません。
現在のディレクトリからの相対パス。
nginx.conf スペース /etc/nginx/nginx.conf をコピーします ファイルまたはディレクトリをコピーします。
Dockerfileの最後に書かれていること
CMD コンテナを指定するため入力コマンド.エントリ コマンドは docker run 中に置き換えることができます。==イメージを実行してコンテナーを起動するときに、コンテナーがデフォルトで実行するコマンドは何ですか。 CMD ["コマンド", "パラメータ 01", "パラメータ 02"]
CMD ["nginx", "-g", "デーモンオフ;"]
ほとんどは CMD を使用します。

7. コンテナデータの永続化

1) デモ:

a) データベースコンテナを起動します

docker run  -d -p 13306:3306   --name mysql_8.0_v3   -e  MYSQL_ROOT_PASSWORD=1    mysql:8.0-debian 

b) コンテナ作成ライブラリを接続する

  • データベースに移動 データベースを作成

c) コンテナを削除し、コンテナを再作成して、データがまだ存在するかどうかを確認します。

  • データが失われた

2) データの永続性

  • コンテナ内のファイルまたはディレクトリをホスト マシンに接続します。
  • ホストの /server/data/mysql/ ディレクトリをコンテナ /var/lib/mysql/ に接続します。
  1. ホストのデータ ディレクトリを準備します。mkdir -p /server/data/mysql/
  2. -v パラメーターを使用してホストとコンテナーを接続します ( -v 宿主机的目录或文件:容器中的目录或文件、ホスト内のディレクトリまたはファイルをコンテナーにマウント (接続) します)。
    docker run  -d -p 13306:3306   --name mysql_8.0_v3   -e  MYSQL_ROOT_PASSWORD=1  \
    -v  /server/data/mysql/:/var/lib/mysql/  mysql:8.0-debian 
    
  3. 確認結果:/server/data/mysql/多数のファイルが追加されました
  4. ライブラリを作成するコンテナを入力します: docker exec -it mysql_8.0_v3 mysql -uroot -p1#これはデータベースに直接入力できます
  5. ライブラリを作成します。create database lidao996;
  6. コンテナを終了して削除します。docer rm -f mysql_8.0_v3
  7. コンテナを再作成し、ライブラリがまだ存在するかどうかを確認します。
docker run  -d -p 13306:3306   --name mysql_8.0_v3   -e  MYSQL_ROOT_PASSWORD=1  \
-v  /server/data/mysql/:/var/lib/mysql/  mysql:8.0-debian 

docker exec -it  mysql_8.0_v3  mysql -uroot -p1  #这样可以直接进入数据库
show databases;  #数据库还在

3) 概要:

  • コンテナーのデータ永続性とは何かを理解するだけで十分です。なぜ固執したいのですか。
  • -v オプションを使用して docker を実行する
  • アプリケーション データベースのデータ ディレクトリは永続化のために使用されます。
  • コードをテストする場合: nginx /usr/share/nginx/html/ はホストのコード ディレクトリに接続されます。
  • テスト構成の場合: nginx.conf、my.cnf 構成ファイル。

8. コンテナイメージのプライベートリポジトリ

  • レジストリ ウェアハウス (シンプル、コマンド ライン)、ハーバー ウェアハウス (複雑、Web インターフェイス)。

1) レジストリ イメージを取得し、構成ファイルを変更します。

  1. 画像をプルします:docker pull registry
  2. すべての Docker 構成ファイルを変更する
    cat >  /etc/docker/daemon.json<<'EOF'
    {
      "registry-mirrors": ["https://bjjtv7cs.mirror.aliyuncs.com"],
      "insecure-registries": ["10.0.0.62:5000"]
    }
    EOF
    systemctl restart docker
    

2) ミラーウェアハウスを開始する

mkdir -p /server/data/images/
docker run -d  --name "oldboy_registry"   -p 5000:5000 \
-v /server/data/images/:/var/lib/registry  \
--restart=always registry

3) 画像をプライベートミラーウェアハウスにアップロードします

docker tag  oldboydir:lidao996_bird_diy_v2     10.0.0.62:5000/oldboyedu/ngx:bird_diy_v2
#docker login -u用户名 -p密码
docker push 10.0.0.62:5000/oldboyedu/ngx:bird_diy_v2 

4) ローカルミラーを削除します

docker rmi 镜像名字
如果镜像使用中则需要删除镜像对应的容器,然后删除镜像。

5) 再フェッチ

docker pull 10.0.0.62:5000/oldboyedu/ngx:bird_diy_v2

6) まとめ

  • 将来的には、内部のプライベート ミラー リポジトリが使用される予定です。

    • dockerタグ+dockerpush経由でアップロードされます。

    • docker pull を通じてダウンロードされます。

おすすめ

転載: blog.csdn.net/m0_73293867/article/details/132275783