Docker ファイルの保存パス、ポート マッピング操作モードの変更

Docker ファイルの保存パス、ポート マッピング操作モードの変更

コンテナの起動コマンドを取得する方法

コンテナはすでに作成されていますが、その起動パラメータ(データがマウントされる場所)を知る方法

#コンテナが次のコマンドで起動されるとします docker run -d --name mysql_cdh \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v mysql-データ:/var/lib/mysql \
--restart=常に\
mysql:5.5 --character-set-server=utf8
#コンテナ名 [root@jenkins ~] から起動パラメータを取得する方法# docker examine mysql_cdh
[
 {
  「ID」: 「3aad772538b5e86705d3358362517a08d53f951aa6522e2881321135f05c8872」、
  「作成日」: 「2019-09-25T01:43:37.720505875Z」、
  「パス」: 「docker-entrypoint.sh」、
  「引数」: [
   "--文字セットサーバー=utf8"
  ]、
  ...
  "名前": "/mysql_cdh",
  
	 	"ホスト構成": {
	   「バインド」: [
	    「mysql-データ:/var/lib/mysql」
	   ]、
	   ...
	   "ネットワークモード": "デフォルト",
	   「ポートバインディング」: {
	    "3306/tcp": [
	     {
	      "ホストIP": "",
	      "ホストポート": "3306"
	     }
	    ]
	   },
	   「再起動ポリシー」: {
	    「名前」: 「常に」
	    「最大再試行回数」: 0
	   },
	
 	「マウント」: [
	   {
	    「タイプ」:「ボリューム」、
	    "名前": "mysql-data",
	    「ソース」: 「/var/lib/docker/volumes/mysql-data/_data」、
	    「宛先」: 「/var/lib/mysql」、
	    "ドライバー": "ローカル",
	    "モード": "z",
	    「RW」:真、
	    「伝播」: 「」
	   }
	  ]、
	
		「設定」: {
	   "ホスト名": "3aad772538b5",
	    ...
	   「公開ポート」: {
	    "3306/tcp": {}
	   },
				...
	   「環境」: [
	    "MYSQL_ROOT_PASSWORD=123456",
	    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/mysql/bin:/usr/local/mysql/scripts",
	    "GOSU_VERSION=1.7",
	    "MYSQL_MAJOR=5.5",
	    "MYSQL_VERSION=5.5.62"
	   ]、
	   「コマンド」: [
	    "--文字セットサーバー=utf8"
	   ]、

1. コンテナ層: ファイル保存パス

#1、コンテナを起動します [root@master ~]# docker run -d --name nginx2 nginx
a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8
#2、コンテナIDを取得する
[root@master ~]# docker examine nginx2 | grep -i id 
[root@master ~]# docker examine nginx2 | grep -i id 
  「ID」: 「a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8」、
   「ピッド」: 2069,
  「ExecID」: null、
   "コンテナIDファイル": "",
			
#コンテナの一時ファイルを表示します - 作成されるたびにランダムに生成されるファイルです (コンテナ レイヤー)
# /var/lib/docker/containers/コンテナID
[root@master ~]# docker examine nginx2 | grep -i パス
 "パス": "nginx",
 "ResolveConfPath": "/var/lib/docker/containers/a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8/resolv.conf",
 "ホスト名パス": "/var/lib/docker/containers/a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8/ホスト名",
 "ホストパス": "/var/lib/docker/containers/a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8/hosts",
 "ログパス": "/var/lib/docker/containers/a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8/a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8-json.log",

明後日コンテナポートを変更する

a. まず古いコンテナを新しいイメージとして送信し、新しいコンテナを起動します。

次の点を確認する必要があります: データ ボリューム マッピングが完全に一貫していること (新しいコンテナーと古いコンテナーはデータ ボリューム上で一貫している必要があります)

[root1@c7-docker ~]# docker examine mysql_port |egrep -i 'volum|マウント' -A 2
   「ボリューム」: {
    "/var/lib/mysql": {}
   },
--
   「ボリューム」: {
    "/var/lib/mysql": {}
   },

コンテナをイメージとして保存し、新しいコンテナを起動してポートマッピングを追加します。

############### 1. コンテナを起動する############## 
[root1@c7-docker ~]# docker run --name t1 -d -e MYSQL_ROOT_PASSWORD=123456 -v mysql-test-dir:/var/lib/mysql/ -p 3308:3306 mysql:5.5
53f2a3c53d4c6769897ee484c3d2ff4e3f82ea1e390d4950b2162c08af05d7cc
[root1@c7-docker ~]# docker ps
コンテナID イメージ コマンド 作成ステータス ポート名
53f2a3c53d4c mysql:5.5 "docker-entrypoint.s..." 3 秒前 3 秒前にアップ 0.0.0.0:3308->3306/tcp t1
[root1@c7-docker ~]# mysql -uroot -p123456 -P3308 --protocol tcp
MariaDB モニターへようこそ。コマンドは ; または \g で終わります。
MySQL接続IDは1です
サーバーバージョン: 5.5.62 MySQL コミュニティサーバー (GPL)
MySQL [(なし)]> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
+--------------------+
セット内の 3 行 (0.00 秒)
MySQL [(なし)]> データベーステストを作成します。
クエリは正常、1 行が影響を受けました (0.00 秒)
MySQL [(なし)]> use test;
データベースが変更されました
MySQL [テスト]> テーブル t1(id int) を作成します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
MySQL [テスト]> t1 に値(1),(2),(3) を挿入します。
クエリは正常、3 行が影響を受けました (0.00 秒)
記録: 3 重複: 0 警告: 0
MySQL [テスト]> t1 から * を選択します。
+------+
|id|
+------+
| 1 |
| 2 |
| 3 |
+------+
セット内の 3 行 (0.00 秒)
 
############## 2. 現在のコンテナ環境を送信し、新しいイメージとして保存します。############## 
[root1@c7-docker ~]# docker commit -m mysql_test_chag-port_img t1 mysql_port
sha256:9f90be3c200c6a8b535478375c4caf86d589d231afae1293d28026f9248f8ae3
[root1@c7-docker ~]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
mysql_port 最新 9f90be3c200c 3秒前 205MB
mysql 5.5 d404d78aa797 18か月前 205MB
############## 3. 古いコンテナを停止し、新しいコンテナを起動します############### 
[root1@c7-docker ~]# docker stop t1
t1
[root1@c7-docker ~]# docker run --name t2 -d -v mysql-test-dir:/var/lib/mysql/ -p 3309:3306 mysql_port
fd7cefe55db8bb2687ab044ff1473f0c935ac5ce867df81b3b13f570e9026868
[root1@c7-docker ~]# docker ps
コンテナID イメージ コマンド 作成ステータス ポート名
fd7cefe55db8 mysql_port "docker-entrypoint.s..." 3 秒前 2 秒前にアップ 0.0.0.0:3309->3306/tcp t2
[root1@c7-docker ~]# mysql -uroot -p123456 -P3309 --protocol tcp
MariaDB モニターへようこそ。コマンドは ; または \g で終わります。
MySQL接続IDは2です
サーバーバージョン: 5.5.62 MySQL コミュニティサーバー (GPL)
MySQL [(なし)]> データベースを表示します。
MySQL [(なし)]> use test;
テーブル名と列名の補完のためのテーブル情報の読み取り
-Aでこの機能をオフにすると起動が速くなります。
データベースが変更されました
MySQL [テスト]> t1 から * を選択します。
+------+
|id|
+------+
| 1 |
| 2 |
| 3 |
+------+
セット内の 3 行 (0.00 秒)

b. コンテナ構成ファイルを変更する: hostconfig.json

最初にdockerサービスを停止する必要があります。そうしないと効果がありません。

コンテナレイヤーファイルから設定ファイルhostconfig.jsonを探し、コンテナによってマップされたポートを変更します。

[root@docker a9c9f31cd...ff24c8]# pwd
/var/lib/docker/コンテナ/d93185e3a0....2e544ccfa
[root@docker a9c9f31cd...ff24c8]# cat hostconfig.json 
{"Binds":["/dockersuperset:/home/superset"],"ContainerIDFile":"",
"LogConfig":{"Type":"json-file","Config":{}},"NetworkMode":"default",
"PortBindings":{"8088/tcp":[{"HostIp":"","HostPort":"8099"}]}......

2. イメージレイヤー: ファイル保存パス

[root@master ~]# docker イメージの検査 nginx | ​​tail -n 22
  "グラフドライバー": {
   "データ": {
    "下位ディレクトリ": "/var/lib/docker/overlay2/bf20cf788cc053f00ff1467525d50e19bd1cf07a2167f72511bdfcb28918a472/diff:/var/lib/docker/overlay2/317d80bb7ae58ed288be9ebd84aeb5b4b3a1c06f3211f5d1f32d89b629d1876e/diff",
    "マージされたディレクトリ": "/var/lib/docker/overlay2/7782d0eb292fdc8bbd73bf9bae2d65468e8aba0bcd6baed55ac348618b80ae16/マージ済み",
    「上位ディレクトリ」: 「/var/lib/docker/overlay2/7782d0eb292fdc8bbd73bf9bae2d65468e8aba0bcd6baed55ac348618b80ae16/diff」、
    "作業ディレクトリ": "/var/lib/docker/overlay2/7782d0eb292fdc8bbd73bf9bae2d65468e8aba0bcd6baed55ac348618b80ae16/work"
   },
   「名前」: 「オーバーレイ2」
  },

a、コンテナレイヤー、イメージレイヤー: 関連付け

I、サブコンテナ:画像ファイルをコピーする

II、サブコンテナ: 新しいファイルの追加

III. サブコンテナ: イメージからコピーされたファイルの変更

b. イメージレイヤー(ファイル保存ディレクトリ)で、設定ファイルを変更します。

# ミラーコンテナのファイル保存ディレクトリに入り、設定ファイルを変更します [root@master d37ff828e6308...0c0599b]# ls diff/run/
nginx.pid
[root@master d37ff828e6308...0c0599b]# ls diff /var/cache/nginx/
クライアント temp fastcgi_temp プロキシ temp scgi_temp uwsgi_temp
[root@master d37ff828e6308...0c0599b]# ls マージ済み/
bin/ dev/ etc/ lib/ media/ opt/ root/ sbin/ sys/ usr/  
ブート/ .dockerenv ホーム/ lib64/ mnt/ proc/ 実行/ srv/ tmp/ var/  
[root@master d37ff828e6308...0c0599b]# ls マージされた/etc/nginx/
conf.d fastcgi_params koi-utf koi-win mime.types モジュール nginx.conf scgi_params uwsgi_params win-utf
[root@master d37ff828e6308...0c0599b]# ヘッドがマージされました/etc/nginx/nginx.conf 
ユーザー nginx;
ワーカープロセス 1;
#ここで設定ファイルを変更し、2行のセミコロンを削除します。user nginx; worker_process 1; コンテナ内の設定が変更されたかどうかを確認します。[root@master d37ff828e6308...0c0599b]# head merged/etc/nginx/nginx.conf -n 3
ユーザー nginx
ワーカープロセス 1
#コンテナにログインして変更された構成を表示します。有効かどうかを確認します [root@master d37ff828e6308...0c0599b]# docker exec -it nginx2 bash
root@a9c9f31cdccf:/# ヘッド /etc/nginx/nginx.conf -n 3
ユーザー nginx
ワーカープロセス 1

3. デフォルトのストレージパスを変更する

a、/var/lib/dockerディレクトリを再構築する

#新しいストレージパスにデータをバックアップするサービス docker stop
mkdir /docker.bak
mv /var/lib/docker/* /docker.bak
#ソフトリンクを作成する mkdir /home/docker-data
mv /docker.bak/* /home/docker-data/ && rmdir /docker.bak
: := docker-data は、docker コマンドで定義されます。

b. 設定を変更する

: : vi /usr/lib/systemd/system/docker.service を実行します。 
ExecStart=/usr/bin/dockerd --graph /新しいパス/docker 
#設定ファイルをリロード systemctl daemon-reload 
#Dockerを再起動 
systemctl docker.service を再起動します。

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • Docker ポート マッピングと外部アクセス不可の問題
  • Docker ポート マッピングを使用してネットワーク アクセスを実現する方法
  • Dockerは複数のポートマッピングコマンドを有効にします
  • Dockerボリュームのファイルマッピング方法
  • Docker プライマリ ネットワーク ポート マッピング構成
  • 実行中のDockerコンテナのポートマッピングを変更する方法
  • Dockerはポートマッピングを設定しますが、ソリューションにアクセスできません

<<:  MySQLの共通関数を使用してJSONを処理する方法

>>:  HTML pre タグ内の自動改行

推薦する

XHTML CSSを使用して正式なブログを書く

ブログの正式名称は「Web log」で、中国語で「ネットワークログ」を意味します。後にブログに短縮さ...

Centos7 で Java8 と MySQL をインストールしてデプロイする

通常、Java の学習とプロジェクトのデプロイはローカルで行われますが、実稼働環境は Linux 環...

25 個の CSS フレームワーク、ツール、ソフトウェア、テンプレートを共有

スプライトカウダウンロード CSS リントダウンロード プレフィックスダウンロード 1140px C...

JS での Reduce() メソッドの使用の概要

目次1. 文法2. 例3. その他の関連方法長い間、reduce() メソッドの具体的な使い方を理解...

HTML で margin:0 auto を使用するとページ全体が中央に配置されない問題の解決方法

今日、jsp ページを書きました。<div style="margin:0 auto...

HTML タグに類似: strong および em、q、cite、blockquote

XHTML には似た機能を持つタグがいくつかあります。もちろん、ここでの類似性とは意味の類似性を指...

Websocket に基づくシンプルなチャットルームダイアログの実装

この記事では、WebSocketを使用して簡単なチャットルームの会話を実装するための具体的なコードを...

Vue ショッピングカートのケーススタディ

目次1. ショッピングカートの例2. コードの実装3. まとめ1. ショッピングカートの例一連の学習...

axiosのシンプルなカプセル化と使用例コード

序文最近、プロジェクトを構築しているときに、リクエストのカプセル化について考え、どのようにカプセル化...

HTML ファイルにフラッシュ ビデオ形式 (flv、swf) ファイルを埋め込む方法

Flash ファイル形式: .FLV および .SWFフラッシュ ビデオ形式には、.flv と .s...

Docker を使用した nGrinder パフォーマンス テスト プラットフォームの導入プロセスの分析

nGrinderとは何ですか? nGrinder は、スクリプトの作成、テストの実行、監視、結果レポ...

WeChatミニプログラムページとコンポーネント間の情報伝達と機能呼び出し

今回は、私自身の開発経験を踏まえて、以下の観点で関連内容を解説します。ページからコンポーネントにデー...

本番環境でのMySQLパラメータsql_safe_updatesの使用に関する詳細な説明

序文アプリケーションのバグや DBA の誤操作が発生した場合、テーブル全体が更新される可能性がありま...

CSS3を使用して背景画像の色を変更するさまざまな方法

CSS3 では画像の色を変更できます。これからは複数の絵をデザインする必要がなくなり、いつでも修正で...

Javascript の基礎: 演算子とフロー制御の詳細な説明

目次1. オペレーター1.1 算術演算子1.2 インクリメント演算子とデクリメント演算子1.3 比較...