コンテナアーキテクチャ下では
6.ドッカーファイル
6.1 Docker 自動 DIY ミラーリング用の Dockerfile
- 前回の場合(手動でミラーを作成する)は非常に面倒だったので、dockerfileを使用して自動的にミラーを作成しました
- ここでは、Dockerfile ファイル メソッドを使用してミラーリングのプロセスを定義し、Dockerfile の指示に従って指定し、最後に必要なカスタム イメージを生成できます。鏡像。
- 目標:
- 1️⃣ Dockerfileを使用します
- 2️⃣Dockerfileの書き方をマスターする
- タスク要件: Dockerfile を使用してワンクリックで Bird Feifei のミラー イメージを作成します。
1) 環境の準備
- ディレクトリを作成します。
mkdir -p /server/dockerfiles/01-bird
- ファイルのアップロード:
bird.zip
Linux にアップロードします (/root/ で十分です) - 解凍:
unzip bird.zip
- ファイルをディレクトリにコピーします。
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 11月 16 2021 bird #Dockerfile需要的bird目录 -rw-r--r-- 1 root root 239 8月 14 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) コンテナを実行する
- 新しいイメージに従ってコンテナを起動します。
docker run -d -p 12306:80 --name bird_diy_v2 oldboydir:lidao996_bird_diy_v2
- コンテナが実行中であることを確認します。
docker ps |grep bird_diy_v2
- ブラウザチェック:ログイン
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/ に接続します。
- ホストのデータ ディレクトリを準備します。
mkdir -p /server/data/mysql/
- -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
- 確認結果:
/server/data/mysql/
多数のファイルが追加されました - ライブラリを作成するコンテナを入力します:
docker exec -it mysql_8.0_v3 mysql -uroot -p1
#これはデータベースに直接入力できます - ライブラリを作成します。
create database lidao996;
- コンテナを終了して削除します。
docer rm -f mysql_8.0_v3
- コンテナを再作成し、ライブラリがまだ存在するかどうかを確認します。
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) レジストリ イメージを取得し、構成ファイルを変更します。
- 画像をプルします:
docker pull registry
- すべての 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 を通じてダウンロードされます。
-