ドッキングウィンドウコンテナ知人

「マルコ・教育」コースからの抜粋の一部は、参照のみを学ぶために

1つのドッキングウィンドウ環境の準備

1.1環境の準備

環境:centos7、4C8G、500Gディスク
最初のドッキングウィンドウ-ce.repo CentOSのファイルは、現在/etc/yum.repo(清華ミラー)でシステムにダウンロードされる
*#wgetのhttps://mirrors.tuna.tsinghua.edu.cn /docker-ce/linux/centos/docker-ce.repo*
レポBASEURL = httpsに、アドレスをダウンロードした後:維持背後//download.docker.com/linux/
ヒント:あなたはバッチを置き換えることができます
vimの中で( %S @ HTTPS://download.docker.com@https:内部編集実行 //mirrors.tuna.tsinghua.edu.cn/docker-ce/@)
ここに画像を挿入説明
試験:YUM repolistを実行することは、通常、結果を返します。

1.2インストールのドッキングウィンドウ

#yumドッカ-CEをインストール

ドッカープログラミング環境:
環境設定ファイル:
の/ etc /のsysconfig /ドッカー-ネットワーク
の/ etc /のsysconfig /ドッカー-ストレージ
の/ etc /のsysconfig /ドッカー
ユニットファイル:
Usrの/ libに/にsystemd /システム/ docker.service

ドッカーレジストリプロファイル:
/etc/container/registries.conf

ドッカー-CEプロフィール:
/etc/docker/daemon.json
:登録アリ雲のアカウントは、アクセルアドレス取得
https://cr.console.aliyun.com/#/acceleratorを

1.3ドッキングウィンドウミラーアクセラレータ

1、ドッキングウィンドウ-CN、一般的な加速;
2、アリ雲加速器
3、科学技術の中国大学
の構成アクセラレータ:
中dameon.jsonへの書き込み内容に
{
「レジストリ・ミラー」:[「HTTPS://registry.docker-cn。 COM「]
}
ここに画像を挿入説明

最後に、ドッキングウィンドウサービスを開始
docker.service開始#systemctl
テスト
#dockerバージョンはなど、バージョンを確認囲碁バージョンを使用
#docker情報など、このような記憶ドライブオーバーレイとして、より詳細な情報を見ます

1.4共通コマンド

ドッカー検索:ミラーミラー倉庫検索
ローカルにダウンロード:ドッカープル
リストローカルミラー:ドッカー画像
作成ドッカーを:
ドッカースタート
ドッカーRUN
ドッカーザ・アタッチ
ドッカーPS
ドッカーログ
ドッカーが再起動
ドッカーSTOP
キルドッカーを
ドッカーRM

例:
ドッカープルnginxのイメージ:Alpine-#1.14 nginxのダウンロード画像、(階層化、多層ダウンロード)
ドッカーイメージ・プルbusyboxの番号のデフォルトのダウンロード、最新、busyboxの最小ミラーリングシステムMINIMAL

ダウンロードした後、画像の詳細はTRUNCに記載されています---何
#dockerイメージ-LSは、TRUNCを--noありません

スタートコンテナ:
ドッカー作成コンテナ/ RUN --help
ドッカーRUN --name B1 -it busyboxの:最新の、コンテナB1の名前を作成し、直接アクセスする作成した
PID#1の容器の内側に見ることができるPSを実行するユーザ空間がされますユーザ空間がハングアップした場合、容器が停止し
、書き込みのbusyboxのhttpdサーバー(HTMLフォルダ/コンテナ/データで作成し、共通のindex.htmlファイルを、保存して終了、httpdの-fコンテナ-h /データ/実行HTMLは,,サービスを開始し、アドレスがドッカーに係る容器がホストにアクセスするために、B1、容器カール172.17.0.2アドレスを検査することを見ることができるサービスで見ることができ、サービスが停止している場合、直接CTRL + C)。

 - 备注:create只创建默认不启动,run直接创建后启动

ドッカーを、強制終了]ドッキングウィンドウを殺す船がドッキングウィンドウRM B1、削除され停止することは推奨されません

ドッカーが--name web1と-d nginxのを実行します。ローカルミラー入手できない場合は1.14、高山、ミラーが自動的にダウンロードセンターにドッキングウィンドウを移動します

コンテナは唯一の直接コンソールに、すべての直接フォアグラウンド後にサービスを開始し、ログファイルを保存していない、サービスを実行しているので、あなたは直接ドッキングウィンドウログの容器を見ることができます

インストールRedisのコンテナ
ドッカーは--name kvstore1 -d Redisの実行:4 -alpine、 直接ローカルミラーにプル
行っドッカpsを
ここに画像を挿入説明

容器にインタラクティブ
ドッカー幹部-it kvstore1 / binに/ shを 、 デフォルトSH
1)コンテナのnetstat -anlpを行うサービスポートモニタを表示することができ、など
2)は、Redisのにログオンを入力することができ、キー操作を行う*などのRedis-CLIを実行します

1.5コンテナのライフサイクル

ここに画像を挿入説明

2ドッカー画像管理

2.1ドッカーミラーリング作品

ドッカー:ドッカーズ

ホストホストドッカーと呼ばれるガード用ドッカーデーモンドッカー、
ドッカーコンテナが依存する画像開始
T4 HUBドッカードッカーは、レジストリデフォルトで
異なるミラー識別するために、これらのラベルを用いて、アプリケーションの異なるバージョンのイメージ
画像をアプリケーションコンテナとして理解することができ、端末ロードとアンロードを担当する労働者、

約ドッカー画像
容器と必要のコンテンツを含むドッカーブート・イメージ・ファイル・システム、従って、ドッカー容器を作成して起動するため、
構築層状機構、rootfsのに続いBOOTFSの底、
BOOTFS:ユーザシステム・ブート・ファイル・システム、 ;それはメモリリソースを節約するために開始した後、ブートローダとカーネルを含め、コンテナがアンロードされます
。BOOTFSの上に位置する、ルートファイルシステムコンテナのパフォーマンスがドッキングウィンドウ:rootfsのは
、伝統的なモデルでは、システムの起動時、カーネルはrootfsのを初めてマウントします;モード、セルフテスト、実装読み書きモードの後の整合性「読み取り専用」にリンクされている
書き込み可能な「rootfsの読み取り専用カーネルによってマウント、中には、追加の実装技術により、関節をマウントドッカーを「層;

备注:创建一个容器,拥有完整的文件系统

親鏡画像(親画像)が下になる位置、ボトムベース画像(基準画像)、「読み書き」層の最上層と呼ばれる、下層が読み取り専用です。
ここに画像を挿入説明

Aufs
Advanced multi-layered unification filesystem:高级多层统一文件系统
用于为linux文件系统实现联合挂载
Aufs是之前的UnionFS的重新实现,2006年由Junjiro Okajima开发
Docker最初使用aufs作为文件系统层,它目前仍作为存储后端之一来支持;
Aufs的竞争产品是overlayfs,后者自从3.18版本开始被合并到linux内核
Docker的分层景象,除了aufs,docker还支持btrfs,devicemapper和vfs等;
在Ubuntu系统下,docker默认Ubuntu的aufs;而在centos7上用的是devicemapper;

Docker Registry (Registry 登记处,)docker 仓库
启动容器时,docker daemon会试图从本地获取相关镜像,本地镜像不存在时,将从registry中下载该镜像并保存到本地;

备注:docker registry必须是https

ここに画像を挿入説明

Docker Registry分类
Docker Hub :官方
Sponsor Registry:第三方,供客户和docker社区使用
Mirror Registry:只让客户使用
Vendor Registry :发布docker镜像的供应商提供的Registry
ここに画像を挿入説明
ここに画像を挿入説明

Docker hub和Github可以建立关系,如果Github有变化,docker Hub会自动拉到自己那
本机 - Github – docker Hub,

Docker pull [:]/[/]:
比如:quay.io是一个仓库,命名空间为coreos;软件为flannel,如果不指定,默认去dockerhub中下载
Docker pull quay.io/coreos/flannel:v0.10-am64
解释:docker 下载镜像,pull+哪个仓库:端口可省+命名空间

2.2 基于容器制作docker镜像

ここに画像を挿入説明

过程模拟:
1、 启动一个容器,容器内启动一个服务,制作成一个新的镜像
a) docker run --name b1 -it busybox:latest
b) 进入容器创建data/html目录,创建index.html,内容(去掉第一个\)<\h1> welcome busybox httpd server ,不用关闭容器
c) 在宿主机中执行docker commit -p b1
d) docker image ls 可以看到一个没有TAG的镜像
e) 可以使用docker tag打上标签,dockers tag 38baa835d452 mageedu/httpd:v0.1-1
f) docker image ls就能看到
g) 也可以对有tag的镜像进行改tag,另外一个镜像可以有多少tag
h) 删除镜像用docker image rm mageedu/httpd:v0.1-1
i) 使用docker inspect busybox(镜像名) 可以看到cmd后面是/sh,默认启动,或者nginx -g daemon off代表前台
j) 用创建好的镜像,启动一个容器 docker run --name t1 mageedu/httpd:v0.1-1,然后验证html目录是否存在,这个镜像并没有改变默认运行的命令(sh)
k) 期望容器默认运行httpd,可以在容器内用httpd –h 查看;
l) 制作修改默认运行命令的镜像docker commit -a “Mageedu [email protected]” -c ‘CMD [“/bin/httpd” , “-h” , “/data/html”] ’ -p b1 mageedu/httpd:v0.2 ,
m) docker image 能看到v0.2的镜像
n) 用v0.2的镜像启动一个容器
o) 然后docker inspect + 容器名,可以看到CMD中是http,直接curl +ip 可以访问
ここに画像を挿入説明

推送docker镜像至registry
将docker image中的镜像推送到dockerhub中(需要先注册)
帮助:docker push –help
推送步骤:
1、首先登陆,docker login -u mageedu (mageedu为dockerhub的用户名),然后输入密码
2、docker push mageedu/httpd 如果不加tag默认全推
3、如果推送的非dockerhub,比如aliyun,首先在阿里云官方找到容器镜像服务的推送地址并设置Registry登陆用户名和密码,并创建好仓库名和命名空间
ここに画像を挿入説明
4、docker login -u mageedu,
5、docker push registry.cn-qingdao.aliyuncs.com/mageedu/httpd

备注:远程和本地的标签必须保证一致

2.3 镜像的本地分发

将机器A的镜像传给机器B
首先,将两个镜像打包成myimage.gz
#docker save -o myimage.gz mageedu/httpd:v0.1-1 mageedu/httpd:v0.2
然后,传给机器B(保证已安装docker),在机器B中执行#docker load –i myimage.gz
最后,docker image ls可以看到分发过来的镜像

3 Docker网络Ⅰ

3.1 Docker网络模型及工作原理

六种名称空间:UTS、User、Mount、IPC、PID、NET
OVS;openvswitch 开源虚拟交换机,vxlan 流控技术,SDN等等用软件模拟网络
ここに画像を挿入説明
介绍:宿主机A和宿主机B内的容器通信

图一:S1和S2为一台物理机中的两个虚拟交换机,C1-C4是容器
S1和S2通信用一台docker容器作为路由器(除路由器之外还可以用NAT或者IPTABLES规则代替),如果采用路由器,实现方式为使用单独的名称空间,这个容器模拟网卡
ここに画像を挿入説明
图二:C5为另外一台物理机上面的容器
若C1与C5通信,各自桥接到各自的物理机,两个物理机通信即可。(把物理机当作交换机来用,物理机按照MAC转发到容器中)
ここに画像を挿入説明
图二:C4访问C6, C4做SNAT,C6做DNAT,效率不高,需要做两次转发;
建议方式:使用overlay network 叠加网络,

图三:C1=192.168.1.1 C5=192.168.1.5
C1-> 主机封装C1+目的地址封装,类似于隧道技术,达到C1和C5在同一个网段内通信

3.2 Docker网络模型验证

ここに画像を挿入説明
ここに画像を挿入説明

Docker网段为172.17,启动每一个容器,会自动分配一对网卡设备,一半在物理机上,一半在docker内
比如:物理机中一半,另一半在容器内,并且都关联到docker0网卡中;
ここに画像を挿入説明
通过#brctl show 可以看到关联关系
ここに画像を挿入説明

容器内查看:
ここに画像を挿入説明

生成虚拟网卡规则:
执行#iptables -t nat -vnL (下图)
POSTROUTING 任何接口进来,只要不从docker0地址出去,源地址172.17 都自动SNAT(docker0默认是NAT桥)
ここに画像を挿入説明

知识点:wget -o - -q 172.17.0.2 等同可代替curl 172.17.0.2来测试

3.3 暴露容器应用节至节点外部
访问容器的客户端来源
1、 同一个网段同一个虚拟交换机的容器(可直接访问)
2、 物理机访问(可直接访问)
3、 另外一台物理机访问容器(需要DNAT方式访问,唯一方法,容器创建的时候选择桥接,创建好DNAT规则,才可以被外部访问),(缺陷:如果本台物理机两个容器都是80端口,就会出现冲突),建议采用叠加网络(重叠网)可解决该问题。
ここに画像を挿入説明

共享名称空间的网络模式(部分隔离,部分共享,一般共享网络协议相关的,比如主机名,nat等)下图:
ここに画像を挿入説明
另外,容器可共享物理机的名称空间,这就是第二种网络类型的host,容器可以管理物理机的网络,第三种网络类型NULL,就是代表不给网卡,孤岛环境

3.4 桥接式网络管理

在创建容器的时候,可以指明网络模式(默认bridge),可以用docker network inspect bridge 查看容器使用的网络模式

3.5 配置docker进程的网络属性

指定网络模型来创建容器:
#docker run --name t1 -it --network bridge --rm busybox:latest
创建完容器exit后自动删除:下图
ここに画像を挿入説明

指定none网络模式:
#docker run --name t1 -it --network bridge --rm busybox:latest
ここに画像を挿入説明

4 Docker网络Ⅱ

4.1 网络名称空间

#ip
ここに画像を挿入説明
创建一个网络名称空间:
#ip netns add r1
#ip netns add r2
查看
#ip netns list
ここに画像を挿入説明
查看r1中的网卡
#ip netns exec r1 ifconfig -a (因为没有激活要-a,观察到只有lo 没有其他网卡)

创建网卡对(使用ip link --help)
#ip link add name veth1.1 tyep veth peer name veth1.2
#ip link show (可以看到刚刚创建的网卡) 默认down的状态
ここに画像を挿入説明

可以将一个设备移动到另一个网络名称空间(只能属于一个空间)
#ip link set dev veth1.2 netns r1 ,将veth1.2移动到r1网络名称空间中;
#ip netns exec r1 ip link set dev veth1.2 name eth0 ,将veth1.2名字改成eth0;
#ifconfig veth1.1 10.1.0.1/24 up 激活veth1.1 ;
#ip netns exec r1 ifconfig eth0 10.1.0.1/24 up,激活eth0;
互ping测试,结果可以通信;
将veth1.1移动到r2网络空间中
#ip link set dev veth1.1 netns r2;
#ip link show 查看已经转移
#ip netns exec r2 ifconfig veth1.1 10.1.0.3/24 up 启动
互ping测试,能通信;
IP netns功能,可以模拟物理桥 NAT等作用,再借用iptables nat等一起

4.2 主机名和容器ID

#hostname 得到的就是容器ID,默认的主机名
或者通过创建时修改
#docker run --name t1 -it --network bridge -h t1.mageedu.com --rm busybox:latest
ここに画像を挿入説明

也可以正常执行nslookup (默认主机DNS解析)
ここに画像を挿入説明
还可以指定
#docker run --name t1 -it --network bridge -h t1.mageedu.com --dns 114.114.114.114,8.8.8.8 --rm busybox:latest
ここに画像を挿入説明

或者添加域名
#docker run --name t1 -it --network bridge -h t1.mageedu.com --dns 114.114.114.114 --dns-search ilinux.io --rm busybox:latest
ここに画像を挿入説明

主机名解析
#docker run --name t1 -it --network bridge -h t1.mageedu.com --dns 114.114.114.114 --add-host www.mageedu.com:1.1.1.1 --rm busybox:latest
ここに画像を挿入説明

4.3 服务对外发布(端口映射)

四种暴露方式:
ここに画像を挿入説明
1、ContainerPort 随机端口
举例:
创建一个80端口的服务,(v0.2镜像中有httpd服务,暂时用它启动httpd)

docker run --name myweb --rm -p 80 mageedu/httpd:v0.2

然后使用docker inspect找到该容器IP,宿主机中进行测试
ここに画像を挿入説明
最后,找到物理机中转发到该容器的动态端口,使用iptables -t nat -vnL 或者执行#docker port myweb
ここに画像を挿入説明
ここに画像を挿入説明

ブラウザの種類のhttp://物理マシンIP:9001(マシンは物理アリクラウドECSであるから、それはifconfigコマンドアドレス172.26.36.33に示す機械パブリックネットワークアドレス47.92.83.209に相当します)
ここに画像を挿入説明

最後にドッキングウィンドウキルmyweb、コンテナを閉じます

备注:以上方法为docker的服务固定端口指向物理机所有IP的固定端口上

2、ContainerPort固定物理マシンの固定IPポートを指定し
、指定IPアドレスとポート、コンテナを開始する
#docker実行--name myweb --rm -p 172.26.36.33::80 mageedu / httpdの:v0.2デベロッパー( による物理マシンにアリ雲ECSは、それがネイティブifconfigコマンドで表示172.26.36.33 47.92.83.209アドレスのパブリックネットワークアドレスに相当します)
ここに画像を挿入説明
#dockerポートmywebを実施し、マッピング状態のfacie
ここに画像を挿入説明
ここに画像を挿入説明

図3に示すように、容器80のポート80ポートマッピング物理マシン

v0.2デベロッパー:ドッキングウィンドウ--name myweb --rm -p 80:80 mageedu / httpdの実行
ここに画像を挿入説明
ここに画像を挿入説明

図4に示すように、容器ポート80とポートマッピング物理マシン8090

#dockerラン--name myweb --rm -p 172.26.36.33:8090:80 mageedu / httpdの:v0.2デベロッパーの
ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
概要や注意事項、露出がポートをリスニングする必要があり、複数のポートを繰り返し-p、-Pを露出させることができます(大P)コンテナのホストポートにすべてのポートマッピングを表します

ストレージボリューム5(続きます)

ストレージボリュームタイプと機能の
ストレージボリュームアプリケーション
ストレージボリュームの共有

出版元の記事 ウォンの賞賛0 ビュー40

おすすめ

転載: blog.csdn.net/weixin_40308963/article/details/104713604