docker网络&& docker compose
記事ディレクトリ
1つは、コンテナの相互接続
(1)コンテナ相互接続を実現するポートマッピング
- ポートマッピングメカニズムは、コンテナ内のサービスを外部ネットワークアクセスに昇格させます
- ランダムまたは指定されたマッピングポート範囲
docker run -d -P httpd:centos ## -P 是随机分配端口
docker run -d -p 49888:80 httpd:centos ##-p 是指定端口映射
(2)コンテナ相互接続を実現するネットワーク通信トンネル
コンテナの相互接続
- ソースコンテナーとシンクコンテナーの間にネットワーク通信トンネルを確立する
- docker runコマンドの--linkオプションを使用して、コンテナー間の相互接続と通信を実現する
コンテナ相互接続を実現
docker run -d -P --name web1 httpd:centos
docker run -d -P --name web2 --link web1:web1 httpd:centos
docker exec -it web2 /bin/bash
ping web1
(3)同じdockerブリッジを指定してコンテナの相互接続を実装する
//新建docker网卡
docker network create --subnet=172.19.0.0/24 mynetwork ##mynetwork 是docker网络名字
//基于同一张docker 网卡新建一个容器test22
docker run -itd --name test22 --network mynetwork centos:7 /bin/bash
//基于同一张docker 网卡新建一个容器test33
docker run -itd --name test33 --network mynetwork centos:7 /bin/bash
//进入容器test33
docker exec -it test33 /bin/bash
//ping test22通
[root@52c6aa6a2235 /]# ping test22
PING test22 (172.19.0.2) 56(84) bytes of data.
64 bytes from test22.mynetwork (172.19.0.2): icmp_seq=1 ttl=64 time=0.082 ms
64 bytes from test22.mynetwork (172.19.0.2): icmp_seq=2 ttl=64 time=0.096 ms
--- test22 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.082/0.089/0.096/0.007 ms
Dockerネットワークの2つ、4つのモード
- Dockerをインストールすると、ブリッジ(作成されたコンテナーはデフォルトでこのネットワークに接続されます)、なし、ホストの3つのネットワークが自動的に作成されます
- ホスト:コンテナーは、独自のネットワークカードを仮想化したり、独自のIPを構成したりするのではなく、ホストのIPとポートを使用します。
- コンテナ:作成されたコンテナは、独自のネットワークカードを作成して独自のIPを構成するのではなく、指定されたコンテナとIPおよびポート範囲を共有します。
- なし:このモードは、コンテナーのネットワーク機能をオフにします。
- ブリッジ:このモードでは、コンテナーごとにIPを割り当てて設定し、コンテナーをdocker0仮想ブリッジに接続し、docker0ブリッジとiptablesNATテーブル構成を介してホストと通信します。
上記はすべて手作業なしでセットアップされ、実際に構成する必要があるのはカスタムネットワークです。
(1)橋
docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:7 /bin/bash
(发现是失败的,因为使用bridge无法支持指定ip——需要自定义ip然后指定ip)
(2)カスタムネットワーク固定IP
docker network create --subnet=172.19.0.0/24 mynetwork
docker run -itd --name test44 --net mynetwork --ip 172.19.0.20 centos:7 /bin/bash
- カスタムネットワークmynetworkを表示
docker network ls
[root@localhost opt] docker network ls
NETWORK ID NAME DRIVER SCOPE
d88329f07179 bridge bridge local
a58999c6c705 compose_nginx_cluster bridge local
1236c91097a9 host host local
34801c075b17 mynetwork bridge local
a79f44bb5700 none null local
- Dockerコンテナーtest44を表示
docker ps -a
[root@localhost opt] docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fe58a4a7528c centos:7 "/bin/bash" 14 seconds ago Up 13 seconds test44
- Dockerネットワークを削除
docker network rm NETWORK ID (网络ID)docker network ls
docker network rm 后面输入要删除的network id
注:ネットワークカードで特定のコンテナが実行されている場合、カスタムDockerを削除するには、ネットワークを停止または削除する必要があります-ネットワーク
3、docker構成オーケストレーション
(1)作成とは何ですか?
Docker Composeの前身はFig。です。これは、複数のコンテナを定義して実行するためのツールです。DockerComposeでは
、シェルスクリプトを使用してコンテナを起動する必要がなくなりました
。DockerComposeでは、YMLファイルを使用して、アプリケーションで必要なすべてのサービスを構成できます。
- Docker Composeは、複数のコンテナーを組み合わせて開発するシナリオに非常に適しています
YAMLは、マークアップ言語を備えた非常に直感的なデータシリアル化形式であり、データ構造、さまざまな構成ファイル、ファイルアウトラインなどを表現または編集するのに非常に適しています。例:多くの電子メールヘッダー形式はYAMLに非常に似ています
- ファイル形式と書き込みノート
1.タブキーのインデントはサポートされていません。スペースインデントが必要です。インデントを使用して階層関係を示します
。2。通常、インデントの開始は2スペースです。同じレベルの要素が左に揃っている限り、インデントされたスペースの数は重要ではありません。かもしれ
3は、そのようなコロン、カンマ、クロスバーとして1つのスペース文字、インデント
#(注)使用して4、
5を、単一引用符で特殊文字ならば
6、ブール値は引用符で囲む必要があります
-
Docker Composeファイル構造の例:docker-compose.yml
1.上部のボックスにバージョン番号とサービスIDを作成する必要があります
2.属性名と属性値は次のように区切られます:(コロンとスペース)
3. 2つのスペースを使用してレベルを示します
4.サービス属性は-(space space-space)で表されます
(2)Docker Compose構成の共通フィールド
一般的なフィールドには、上記のymlファイル形式でいくつかの説明があります。以下は詳細な説明です。
- Docker Composeでよく使用されるコマンド
基本的なコマンド形式:docker-compose [オプション] [コマンド] [パラメーター]
Docker Composeの使用に関する詳細な説明:使用手順、環境の準備、詳細な形式
- 作成で使用される3つのステップ
1. Dockerfileを使用してアプリケーション環境を定義します
2. docker-compose.ymlを使用して、アプリケーションを構成するサービスを定義し、分離された環境で一緒に実行できるようにします。
3.最後にdocker-compose upコマンドを実行して、アプリケーション全体を起動および実行します
4、Nginxコンテナのワンクリックデプロイメントとオペレーションを構成する
- Docker作成環境の準備
将docker-compose文件拖至opt中,
cp -p docker-compose /usr/local/bin/
chmod +x /usr/local/bin/dockers-compose
mkdir /root/compose_nginx
cd /root/compose_nginx
mkdir wwwroot
cd wwwroot
vim index.html
<h1>this is compose</h1>
mkdir nginx
cd nginx
vim Dockerfile
FROM centos:7
MAINTAINER this is nginx
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ pcre make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.2.tar.gz /usr/local/src
WORKDIR /usr/local/src
WORKDIR nginx-1.12.2
RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin/nginx:$PATH
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;" >>/usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
~
vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
- docker-comppose.ymlを設定する
cd /root/compose_nginx
[root@localhost compose_nginx]# vim docker-comppose.yml
version: '3'
services: ##services 是定义下面的服务
nginx:
hostname: nginx ##主机名
build: ##创建Nginx镜像
context: ./nginx ##切换到镜像目录
dockerfile: Dockerfile ##执行Dockerfile
ports: #开放端口
- 1216:80
- 1217:443
networks:
- cluster
volumes:
- ./wwwroot:/usr/local/nginx/html ##宿主机站点目录挂载到Nginx容器中
networks: ##网络部分:指定上面用到的网络
cluster:
[root@localhost compose_nginx]# tree
.
├── docker-comppose.yml
├── nginx
│ ├── Dockerfile
│ ├── nginx-1.12.2.tar.gz
│ └── run.sh
└── wwwroot
└── index.html
2 directories, 5 files
将Nginx安装包拖至/root/compose_nginx/nginx
- docker-comppose.ymlを使用してワンクリックでNginxをデプロイする
docker-compose -f docker-comppose.yml up -d //up 是指开启,-d 后台运行,守护进程 -f 使用docker-compose.yml
- 画像を表示compose_nginx_nginxとコンテナ
[root@localhost compose_nginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
compose_nginx_nginx latest baaf5c9230ec 20 minutes ago 480MB
[root@localhost compose_nginx]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
144bbbf52901 compose_nginx_nginx "/run.sh" 20 minutes ago Up 20 minutes 0.0.0.0:1216->80/tcp, 0.0.0.0:1217->443/tcp compose_nginx_nginx_1
- 検証
- 実機ブラウザアクセス
192.168.75.200:1216