2.Dockerコンテナ管理、ウェアハウス管理、データ管理、データボリュームのバックアップとリカバリ

Dockerコンテナ管理

  • コンテナを作成します:docker create -it centos6 bash //これでコンテナを作成できますが、コンテナが起動しておらず、dockerpsが表示できません。表示するにはdockerps-aが必要です。

[root @ awei-01〜] #docker create -it centos6 bash 
55a10d72564eecca7e11d9ed1d5950109e972a51a2c717102e7eca5a5d52f6df 
[root @ awei-01〜] #docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS 
PORTS NAMES [#root 
CONTAINER ID IMAGE COMMAND CREATED STATUS 
PORTS NAMES 55a10d72564e centos6 "bash" 11秒前に作成されたelated_kepler 
[root @ awei-01〜] #docker exec -it 55a10d72564eが開始されなかったため、「-a」オプションを追加して表示する必要があります。bash ##開始されていないため、
デーモンからのエラー応答を取得できません:コンテナ55a10d72564eecca7e11d9ed1d5950109e972a51a2c717102e7eca5a5d52f6dfが実行されていません

  • コンテナを開始します。dockerstartcontainer_id//コンテナを開始した後、docker psを使用して、開始があるかどうかを確認し、停止して再起動できます。

[root @ awei-01〜] #docker start 55a10d72564e 
55a10d72564e 
[root @ awei-01〜] #dockerpsコンテナ
IDイメージコマンド作成されたステータスポート
名55a10d72564ecentos6 "bash"約1分前最大11秒elated_kepler

 ps:以前に使用したdocker runは、作成して開始するのと同じです

  • コンテナに入り、バックグラウンドで実行されなくなります:docker run -it centos bash

コンテナを直接終了すると、dオプションがないとバックグラウンドで実行されないため、docker psはコンテナを表示できません。ctrl+ dを指定して終了すると、直接終了します。このようにして、仮想端末でいくつかのコマンドを実行できます。コマンドexitまたはctrldを使用してbashを終了すると、コンテナは終了後に停止します。

  • コンテナをバックグラウンドで実行する:docker run -dに加えて「-d」オプションを使用すると、コンテナをバックグラウンドで実行できます

     無限ループ(めったに使用されない)をスクリプト化することもできます。dockerrun-d centos bash -c "while :; do echo" 123 "; sleep 2; done"

  • コンテナを開始するためのカスタム名 docker run -- nameカスタム名 - イメージ bashを開始するためのitd //

[root @ awei-01〜] #docker run --name awei -itd centos6 bash 
d8ba554eae2df6254945e3ce21b09d9f252fba98fba13872ea31c69240ae364c 
[root @ awei-01〜] #docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS 
PORTS NAMES d8ba554 awei 
55a10d72564e centos6 "bash" 22分前20分までelated_kepler

   名前で直接コンテナに入ることができます

[root @ awei-01〜] #docker exec -it awei bash 
[root @ d8ba554eae2d /]#
  • コンテナを起動し、次のコマンドを実行します。dockerrun --rm -it centos bash -c "sleep 30" //-rmは、終了直後にコンテナを削除できます。ここでは、コマンドの実行後にコンテナが終了します。

  • コンテナログの表示:dockerログcontainer_idは、コンテナの実行履歴情報を取得できます。使用法は次のとおりです。 

docker attachは、バックグラウンドで実行されているコンテナに入ることができます。

docker attach container_id //ただし、attachコマンドの使用は簡単ではありません。たとえば、ターミナルを終了する場合は、コンテナーを終了するために終了する必要があります。別の方法があります。

  • コンテナに入る

docker exec -it container_id bash //仮想ターミナルを一時的に開くことができ、終了後もコンテナーは実行されています

  • コンテナを削除する

docker rm container_id // container_idはps時にチェックされるため、コンテナーを削除できます。実行中のコンテナーの場合は、-fを追加できます。

  • コンテナのエクスポート

docker export container_id> file.tar //他のマシンに移行でき、インポートする必要があるコンテナーをエクスポートします

  • コンテナのインポ​​ート

cat file.tar | docker import-aming_test //これによりaming_testのミラーが生成されます


Dockerウェアハウス管理

ミラーを引いてもアップロードミラーを押しても、公式の公共倉庫に行くので、プライバシー保護のため、独自のプライベート倉庫を作ることができます。

プライベートウェアハウスメソッドを作成します。

  • レジストリイメージをダウンロードします。dockerpullregistry// Registryは、コンテナを実行できるdockerが提供する公式イメージであり、これを使用してローカルのdockerプライベートウェアハウスを作成できます。

  • レジストリイメージをコンテナとして開始します。dockerrun-d-p 5000:5000レジストリ//-pは、コンテナのポートをホストにマップします。左側がホストのリスニングポート、右側がコンテナのリスニングポートです。

[root @ localhost〜] #docker run -d -p 5000:5000レジストリ
警告:IPv4転送が無効になっています。ネットワーキングは機能しません。
b31501bfcb453be61b2d0da0589d9c0fbc36c4a954967deeb86d112552bc99c2 
[root @ localhost〜] #dockerpsコンテナ
IDイメージコマンド作成ステータスポート名
b31501bfcb45レジストリ "/entrypoint.sh / etc…" 40秒前19秒0.0.0.0まで
  • 倉庫にアクセスしてください:curl 127.0.0.1:5000/v2/_catalog//この倉庫は一時的に空です。ミラーイメージをアップロードする必要があります

[root @ localhost〜] #curl 127.0.0.1:5000/v2/_catalog 
{"repositories":[]}

画像をプライベートウェアハウスにアップロードする方法:

  • まず、アップロードする画像にタグを付けます

形式:タグ付けするdockerタグイメージ名ホストIP:ホストポート/タグ名

docker tag centos6 192.168.238.128:5000/centos6  //タグにマークを付けます。プライベートウェアハウスのip:portが必要です。

  • マークされた画像をプライベートウェアハウスにプッシュします

docker push 192.168.238.128:5000/centos6

現時点では、成功せず、エラーが報告されます(デフォルトでhttpsアドレスを使用したいため)

[root @ localhost〜] #docker push 192.168.238.128:5000/centos6
デフォルトタグの使用:latest
プッシュはリポジトリを参照します[192.168.238.128:5000/centos6] 
Get https://192.168.238.128:5000/v2/:http :サーバーがHTTPSクライアントにHTTP応答を返しました

構成ファイルを変更し、vi /etc/docker/daemon.json//を次のパラメーターに変更します(デフォルトではhttpsを使用しますが、httpを使用するため、プライベートウェアハウスのアドレス)。

{"insecure-registries":["192.168.18.128:5000"]}

重启docker:systemctl restart docker

開始レジストリ:docker開始レジストリのID 

もう一度押す

docker push 192.168.238.128:5000/centos

[root @ localhost〜
] 
#docker push 192.168.238.128:5000/centos6
デフォルトタグの使用:latestプッシュはリポジトリを参照します[192.168.238.128:5000/centos6] 0a2f11f7b1ef:プッシュされました 
latest:ダイジェスト:sha256:aaa6c8af8eaa472d66066727f791c89fc3adff67495c5ae67b79fc7d0

curl 127.0.0.1:5001/v2/_catalog//プッシュされた画像を表示できます

[root @ localhost〜] 
#curl 127.0.0.1:5000/v2/_catalog {"repositories":["centos6"]}
  • 他のホストはプライベートウェアハウスメソッドをダウンロードして使用します

自分のウェアハウスにアップロードしたばかりの画像を他のホストにダウンロードすることもできます。まず、サーバーにdockerプログラムが必要です。次に、docker pull group host ip:port / imagename 

/etc/docker/daemon.json構成ファイルのIPアドレスを構成し、ウェアハウスサーバーとして構成すると、プルできます。


Dockerデータ管理

コンテナはミラーで開かれているため、コンテナに新しいデータを書き込んだり、新しいデータを更新したりするときに、ミラーを削除したり、データを閉じたりすると、データが削除されます。これには一定のリスクがあります。

解決策:ホストマシンのディレクトリをコンテナにマウントすると、データを書き込むときにホストマシンのディスクに書き込まれます。

  • ローカルディレクトリをコンテナにマウントします

docker run -tid -v /data/:/data centos bash //-v 用来指定挂载目录,:前面的/data/为宿主机本地目录,:后面的/data/为容器里的目录,会在容器中自动创建

  • 挂载数据卷

其实我们挂载目录的时候,可以指定容器name,如果不指定就随机定义了。比如上面我们没有指定,它就生成了一个名字为relaxed_franklin,这个名字可以使用命令 docker ps  看最右侧一列

我们开启一个新的镜像,并指定一个之前可共享的容器:

docker run -itd --volumes-from 共享容器名 要启动的容器名 bash

--volumes-from:指定共享的容器名,其实就是一个数据卷容器 relaxed_franklin:容器名 aming123:新开启的容器叫什么

这样,我们使用aming123镜像创建了新的容器,并且使用了 relaxed_franklin  容器的数据卷

  •  创建数据卷容器

有时候,我们需要多个容器之间相互共享数据,类似于linux里面的NFS,所以就可以搭建一个专门的数据卷容器,然后其他容器直接挂载该数据卷。

首先建立数据卷容器

-v选项:共享目录

docker run -itd -v /data/ --name testvol centos  bash  //注意这里的/data/是容器的/data目录,并非本地的/data/目录。这样加-v选项意思就是把容器的data目录共享出来 

然后让其他容器挂载该数据卷

docker run -itd  --volumes-from testvol aming123 bash

小结:-v选项的两种用法

第一种是挂载映射的作用:-v /data/:/data 把宿主机的data目录挂载到容器里的data目录上

第二种是把容器的某个盘共享出来:-v /data/ 把容器的data目录共享出来当数据卷使用

分享的目录是什么,那挂载的目录就是什么,我分享的是data目录,如果我其中一个容器是data,另一个想是home怎么办,做软连接

软连接:ln -s /data/ /home/


Docker数据卷的备份与恢复

适用于数据卷容器没有映射宿主机目录的情况下

备份

创建目录:mkdir /data/backup (宿主机)

docker run --volumes-from testvol -v  /data/backup/:/backup centos tar cvf  /backup/data.tar /data/

说明:首先我们需要使用testvol数据卷新开一个容器,同时我们还需要把本地的/vol_data_backup/目录挂载到该容器的/backup下,这样在容器中/backup目录里面新建的文件,我们就可以直接在/data/backup/目录中看到了。 然后再把/data/目录下面的文件打包到成data.tar文件放到/backup目录下面。

恢复

思路: 先新建一个数据卷容器,再建一个新的容器并挂载该数据卷容器,然后再把tar包解包。

新建数据卷容器:docker run -itd -v /data/ --name testvol2 centos bash

挂载数据卷新建容器,并解包:docker run --volumes-from testvol2  -v /data/backup/:/backup centos tar xf /backup/data.tar

image.png

1机器共享出/data/目录

2机器在开启的时候使用1镜像创建了新的容器,挂载了1机器的数据卷那么2机器上也会有1机器上共享出来的/data/目录

2机器在自己挂在一个目录(/backup)到宿主机上的一个目录(/data/backup/)

然后2机器把之前/data/目录的数据拷贝到/backup/下,/backup/自然也会映射到宿主机的/data/backup/


おすすめ

転載: blog.51cto.com/12922638/2591043