コンテナ技術ウッドDockerThreeMusketeersで構成

コンテナ技術ウッドDockerThreeMusketeersで構成

收录于话题
#Docker 专辑
9个

上の「MigrantWorkersBrother Linux Operation and Maintenance」をクリックし、「Top Official Account」を選択してください。
興味深く、意味のある記事ができるだけ早く配信されます!

3人の銃士の紹介

docker-machine

dockerテクノロジーはLinuxカーネルのcgroupテクノロジーに基づいて実装されていますが、問題は、Linux以外のプラットフォームでdockerテクノロジーを使用することは不可能ですか?答えは「はい」ですが、Linux環境をシミュレートするには明らかに仮想マシンが必要です。
Docker-machineは、docker companyによって正式に提案されており、さまざまなプラットフォームでdockerサービスを使用して仮想マシンをすばやく作成するために使用されます。ドライバーを指定して、仮想マシン(通常はvirtualbox)の実装原則をカスタマイズすることもできます。

docker-compose

Dockerイメージが作成された後、イメージを取得するために手動でプルしてから、runコマンドを実行してイメージを実行する必要がある場合がよくあります。サービスが複数のコンテナを使用する必要があり、コンテナ間にさまざまな依存関係と接続が生成される場合、サービスを展開する手動操作は非常に面倒です。
docker-composeテクノロジーは、すべてのコンテナー展開メソッド、ファイルマッピング、コンテナー接続、およびその他の構成を.yml構成ファイルを介して構成ファイルに書き込み、最後にdocker-composeupコマンドを実行するだけで済みます。コンテナを1つずつインストールし、スクリプトを実行するようにコンテナを自動的に展開すると、複雑なサービスの展開が大幅に容易になります。

docker-swarm

Swarmは、dockerプラットフォームに基づくクラスター技術であり、いくつかの簡単な手順でDockerクラスターをすばやく作成し、クラスターの共有ネットワークにアプリケーションをデプロイして、最終的に分散サービスを実現できます。

docker-composeワークフロー

作成を使用するには、次の3つの手順のみが必要です。

1.アプリケーションを定義する環境Dockerfileを使用して、どこでも複製できるようにします。
2.アプリケーションを構成するサービスdocker-compose.ymlを定義して、分離された環境で一緒に実行できるようにします。
3. docker-compose upとcomposeを実行して、アプリケーション全体を起動して実行します。
参考記事:https//docs.docker.com/compose/overview/

Docker-composeのインストールと展開

[root@docker ~]# curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   617    0   617    0     0    396      0 --:--:--  0:00:01 --:--:--   397
100 10.3M  100 10.3M    0     0   678k      0  0:00:15  0:00:15 --:--:-- 1876k
[root@docker ~]# chmod +x /usr/local/bin/docker-compose 
[root@docker ~]# docker-compose --version
docker-compose version 1.21.2, build a133471

docker-compose管理コマンドの概要

Composeには、アプリケーションのライフサイクル全体を管理するコマンドがあります。

サービスの開始、停止、再構築実行中のサービスの
ステータスの表示
実行中のサービスのログ出力
ストリーミングサービスで1回限りのコマンドを実行します

[root@docker ~]# docker-compose --help
Define and run multi-container applications with Docker.

Usage:
  docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
  docker-compose -h|--help

Options:
  -f, --file FILE             Specify an alternate compose file
                              (default: docker-compose.yml)
  -p, --project-name NAME     Specify an alternate project name
                              (default: directory name)
  --verbose                   Show more output
  --log-level LEVEL           Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
  --no-ansi                   Do not print ANSI control characters
  -v, --version               Print version and exit
  -H, --host HOST             Daemon socket to connect to

  --tls                       Use TLS; implied by --tlsverify
  --tlscacert CA_PATH         Trust certs signed only by this CA
  --tlscert CLIENT_CERT_PATH  Path to TLS certificate file
  --tlskey TLS_KEY_PATH       Path to TLS key file
  --tlsverify                 Use TLS and verify the remote
  --skip-hostname-check       Don't check the daemon's hostname against the
                              name specified in the client certificate
  --project-directory PATH    Specify an alternate working directory
                              (default: the path of the Compose file)
  --compatibility             If set, Compose will attempt to convert deploy
                              keys in v3 files to their non-Swarm equivalent

Commands:
  build              Build or rebuild services
  bundle             Generate a Docker bundle from the Compose file
  config             Validate and view the Compose file
  create             Create services
  down               Stop and remove containers, networks, images, and volumes
  events             Receive real time events from containers
  exec               Execute a command in a running container
  help               Get help on a command
  images             List images
  kill               Kill containers
  logs               View output from containers
  pause              Pause services
  port               Print the public port for a port binding
  ps                 List containers
  pull               Pull service images
  push               Push service images
  restart            Restart services
  rm                 Remove stopped containers
  run                Run a one-off command
  scale              Set number of containers for a service
  start              Start services
  stop               Stop services
  top                Display the running processes
  unpause            Unpause services
  up                 Create and start containers
  version            Show the Docker-Compose version information

docker-composeの実行中は、サービス名を指定するか、複数を同時に指定するか、指定する必要はありません。指定しない場合、デフォルトでは、構成ファイル内のすべてのサービスに対してコマンドが実行されます。

-f#構成ファイルを指定するために使用されます
-p#プロジェクト名を指定するために使用されます

#docker-compose build
用来创建或重新创建服务使用的镜像
docker-compose build service_a
创建一个镜像名叫service_a

#docker-compose kill
用于通过容器发送SIGKILL信号强行停止服务

#docker-compose logs
显示service的日志信息

#docker-compose pause/unpause
docker-compose pause   #暂停服务
docker-compose unpause  #恢复被暂停的服务

#docker-compose port
用于查看服务中的端口与物理机的映射关系
docker-compose port nginx_web 80 
查看服务中80端口映射到物理机上的那个端口

#dokcer-compose ps
用于显示当前项目下的容器
注意,此命令与docker ps不同作用,此命令会显示停止后的容器(状态为Exited),只征对某个项目。

#docker-compose pull
用于拉取服务依赖的镜像

#docker-compose restart
用于重启某个服务中的所有容器
docker-compose restart service_name
只有正在运行的服务可以使用重启命令,停止的服务是不可以重启

#docker-compose rm
删除停止的服务(服务里的容器)
-f    #强制删除
-v    #删除与容器相关的卷(volumes)

#docker-compose run
用于在服务中运行一个一次性的命令。这个命令会新建一个容器,它的配置和srvice的配置相同。
但两者之间还是有两点不同之处
1、run指定的命令会直接覆盖掉service配置中指定的命令
2、run命令启动的容器不会创建在service配置中指定的端口,如果需要指定使用--service-ports指定

#docker-compose start/stop
docker-compose start 启动运行某个服务的所有容器
docker-compose stop 启动运行某个服务的所有容器

#docker-compose scale
指定某个服务启动的容器个数
[root@docker ~]# docker-compose scale --help
Numbers are specified in the form `service=num` as arguments.
For example:

    $ docker-compose scale web=2 worker=3

This command is deprecated. Use the up command with the `--scale` flag
instead.

Usage: scale [options] [SERVICE=NUM...]

Options:
  -t, --timeout TIMEOUT      Specify a shutdown timeout in seconds.
                             (default: 10)

docker-compose構成ファイルの例

docker-compose.ymlのサンプルファイルは次のとおりです。

version: "3"
services:
  nginx:
    container_name: web-nginx
    image: nginx:latest
    restart: always
    ports:
      - 80:80
    volumes:
    - ./webserver:/webserver
    - ./nginx/nginx.conf:/etc/nginx/nginx.conf
#下面将配置文件做个简单的解释说明
docker-compose的配置文件是一个.yml格式的文件
第一部分
version: "3"  #指定语法的版本
第二部分
services:     #定义服务
  nginx:      #服务的名称,-p参数后接服务名称
    container_name: web-nginx    #容器的名称
    image: nginx:latest          #镜像
    restart: always
    ports:                       #端口映射
      - 80:80
第三部分
volumes:       #物理机与容器的磁盘映射关系
    - ./webserver:/webserver
    - ./nginx/nginx.conf:/etc/nginx/nginx.conf

全体的なディレクトリ構造は次のとおりです

[root@docker docker]# tree ./
./
├── docker-compose.yml
├── nginx
│?? └── nginx.conf
└── webserver
    └── index.html

2 directories, 3 files

構成ファイルは次のとおりです

[root@docker docker]# cat webserver/index.html 
welcome to nginx server!!!!!!!!!
[root@docker docker]# cat nginx/nginx.conf
#user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    client_max_body_size 10m;  
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
server {
    listen       80;
    server_name  localhost;
    location / {
        root   /webserver;
        index  index.html index.htm;
    }
}
    include /etc/nginx/conf.d/*.conf;
}

コマンドでコンテナを起動します

[root@docker docker]# docker-compose up -d
Pulling nginx (nginx:1.14)...
Trying to pull repository docker.io/library/nginx ... 
1.14: Pulling from docker.io/library/nginx
f2aa67a397c4: Already exists
6160d1ac49e9: Pull complete
046b67408776: Pull complete
Digest: sha256:85ab7c44474df01422fe8fdbf9c28e497df427e8a67ce6d47ba027c49be4bdc6
Status: Downloaded newer image for docker.io/nginx:1.14
Creating nginx-server ... done
[root@docker docker]# lsof -i :80
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
docker-pr 891 root    4u  IPv6 1187080      0t0  TCP *:http (LISTEN)
[root@docker docker]# docker ps |grep nginx
07ca899cc44b   nginx:1.14   "nginx -g 'daemon ..."   29 seconds ago  Up 28 seconds  0.0.0.0:80->80/tcp  nginx-server
#如果启动时不指定里面的服务名称,就是直接启动配置文件里所有的服务

ブラウザテストは通常​​のアクセスです
コンテナ技術ウッドDockerThreeMusketeersで構成

次に、対応するホームページファイルを次のように変更します

[root@docker docker]# cat webserver/index.html 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>welcome to nginx web stie</title>
</head>
<body>
   <h2>欢迎来nginx站点</h2>
</body>
</html>

もう一度ブラウザを開いて効果を確認してください

コンテナ技術ウッドDockerThreeMusketeersで構成
とても便利ですか

Docker-Composeを使用してnginxプロキシTomcatクラスターをデプロイし、負荷分散を実現します

一般的な手順は、次の4つの手順に分かれています。

1.必要なファイルtomcat、jdkをダウンロードします
。2。tomcatおよびjava環境を展開するdockerfileを書き込み、イメージファイルを生成します。3。docker
-compose.yml構成ファイルを書き込み、すべてのコンテナーサービスを開始します
。4。特定の構成ファイルの負荷分散をテストします

#整个目录结构
[root@master java]# tree ./
./
├── docker-compose.yml
├── etc
│   └── localtime
├── nginx
│   └── nginx.conf
├── tomcat
│   ├── apache-tomcat-8.5.31.tar.gz
│   ├── Dockerfile
│   └── jdk-8u144-linux-x64.tar.gz
└── webserver
    ├── tomcatA
    │   └── index.jsp
    └── tomcatB
        └── index.jsp
6 directories, 8 files
#两个测试首页文件
[root@master java]# cat webserver/tomcatA/index.jsp 
welcome to tomcat-A server
[root@master java]# cat webserver/tomcatB/index.jsp 
welcome to tomcat-B server
#配置文件
[root@master java]# cat docker-compose.yml 
version: "3"
services:
  nginx:
    image: nginx:1.14
    restart: always
    ports:
      - 80:80
    links:
      - tomcat1:tomcat1
      - tomcat2:tomcat2
    volumes:
      - ./webserver:/webserver
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./etc/localtime:/etc/localtime
    depends_on:
      - tomcat1
      - tomcat2
  tomcat1:
    hostname: tomcat1
    build: ./tomcat
    volumes:
      - ./webserver/tomcatA:/usr/local/apache-tomcat-8.5.31/webapps/ROOT
      - ./etc/localtime:/etc/localtime
  tomcat2:
    hostname: tomcat2
    build: ./tomcat
    volumes:
      - ./webserver/tomcatB:/usr/local/apache-tomcat-8.5.31/webapps/ROOT
      - ./etc/localtime:/etc/localtime
#安装JAVA环境
[root@master java]# cat tomcat/Dockerfile 
FROM centos
ADD jdk-8u144-linux-x64.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_144
ADD apache-tomcat-8.5.31.tar.gz /usr/local
EXPOSE 8080
ENTRYPOINT ["/usr/local/apache-tomcat-8.5.31/bin/catalina.sh", "run"]

すべてのコンテナサービスを開始する

[root@master java]# docker-compose up
Building tomcat1
Step 1/6 : FROM centos
Trying to pull repository docker.io/library/centos ... 
latest: Pulling from docker.io/library/centos
7dc0dca2b151: Pull complete
Digest: sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322
Status: Downloaded newer image for docker.io/centos:latest
 ---> 49f7960eb7e4
Step 2/6 : ADD jdk-8u144-linux-x64.tar.gz /usr/local
 ---> 8c9e14062a24
Removing intermediate container a499940235ac
Step 3/6 : ENV JAVA_HOME /usr/local/jdk1.8.0_144
 ---> Running in cefedfd97f61
 ---> 12528cd5a517
Removing intermediate container cefedfd97f61
Step 4/6 : ADD apache-tomcat-8.5.31.tar.gz /usr/local
 ---> 246fa08bea1c
Removing intermediate container a1aaaa2bf0b8
Step 5/6 : EXPOSE 8080
 ---> Running in 87c4b41f3c1e
 ---> fd207f27b830
Removing intermediate container 87c4b41f3c1e
Step 6/6 : ENTRYPOINT /usr/local/apache-tomcat-8.5.31/bin/catalina.sh run
 ---> Running in 9adaed8e3ab9
 ---> b6fc6d3925f7
Removing intermediate container 9adaed8e3ab9
Successfully built b6fc6d3925f7
WARNING: Image for service tomcat1 was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Building tomcat2
Step 1/6 : FROM centos
 ---> 49f7960eb7e4
Step 2/6 : ADD jdk-8u144-linux-x64.tar.gz /usr/local
 ---> Using cache
 ---> 8c9e14062a24
Step 3/6 : ENV JAVA_HOME /usr/local/jdk1.8.0_144
 ---> Using cache
 ---> 12528cd5a517
Step 4/6 : ADD apache-tomcat-8.5.31.tar.gz /usr/local
 ---> Using cache
 ---> 246fa08bea1c
Step 5/6 : EXPOSE 8080
 ---> Using cache
 ---> fd207f27b830
Step 6/6 : ENTRYPOINT /usr/local/apache-tomcat-8.5.31/bin/catalina.sh run
 ---> Using cache
 ---> b6fc6d3925f7
Successfully built b6fc6d3925f7
WARNING: Image for service tomcat2 was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Pulling nginx (nginx:1.14)...
Trying to pull repository docker.io/library/nginx ... 
1.14: Pulling from docker.io/library/nginx
f2aa67a397c4: Already exists
6160d1ac49e9: Pull complete
046b67408776: Pull complete
Digest: sha256:85ab7c44474df01422fe8fdbf9c28e497df427e8a67ce6d47ba027c49be4bdc6
Status: Downloaded newer image for docker.io/nginx:1.14
Creating java_tomcat2_1 ... done
Creating java_tomcat1_1 ... done
Creating java_nginx_1   ... done

起動状況を確認する

[root@master java]# docker-compose ps
     Name                   Command               State         Ports       
----------------------------------------------------------------------------
java_nginx_1     nginx -g daemon off;             Up      0.0.0.0:80->80/tcp
java_tomcat1_1   /usr/local/apache-tomcat-8 ...   Up      8080/tcp          
java_tomcat2_1   /usr/local/apache-tomcat-8 ...   Up      8080/tcp  

負荷分散を確認する

[root@master java]# curl http://localhost
welcome to tomcat-A server
[root@master java]# curl http://localhost
welcome to tomcat-B server
[root@master java]# curl http://localhost
welcome to tomcat-A server
[root@master java]# curl http://localhost
welcome to tomcat-B server

ブラウザアクセステストの負荷分散

コンテナ技術ウッドDockerThreeMusketeersで構成
ログ出力情報の表示

nginx_1    | 192.168.22.170 - - [08/Jun/2018:02:14:36 +0000] "GET / HTTP/1.1" 200 27 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-"
nginx_1    | 192.168.22.170 - - [08/Jun/2018:02:14:36 +0000] "GET / HTTP/1.1" 200 27 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-"
nginx_1    | 192.168.22.170 - - [08/Jun/2018:02:14:37 +0000] "GET / HTTP/1.1" 200 27 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-"
nginx_1    | 192.168.22.170 - - [08/Jun/2018:02:14:37 +0000] "GET / HTTP/1.1" 200 27 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-"
nginx_1    | 192.168.22.170 - - [08/Jun/2018:02:14:37 +0000] "GET / HTTP/1.1" 200 27 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-"
nginx_1    | 192.168.22.170 - - [08/Jun/2018:02:14:37 +0000] "GET / HTTP/1.1" 200 27 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-"
nginx_1    | 192.168.22.170 - - [08/Jun/2018:02:14:38 +0000] "GET / HTTP/1.1" 200 27 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-"
nginx_1    | 192.168.22.170 - - [08/Jun/2018:02:14:38 +0000] "GET / HTTP/1.1" 200 27 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-"
nginx_1    | 192.168.22.170 - - [08/Jun/2018:02:14:38 +0000] "GET / HTTP/1.1" 200 27 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-"
nginx_1    | 192.168.22.170 - - [08/Jun/2018:02:14:38 +0000] "GET / HTTP/1.1" 200 27 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-"
nginx_1    | 192.168.22.170 - - [08/Jun/2018:02:14:38 +0000] "GET / HTTP/1.1" 200 27 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-"
nginx_1    | 192.168.22.170 - - [08/Jun/2018:02:14:39 +0000] "GET / HTTP/1.1" 200 27 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-"
nginx_1    | 172.19.0.1 - - [08/Jun/2018:02:18:30 +0000] "GET / HTTP/1.1" 200 27 "-" "curl/7.29.0" "-"
nginx_1    | 172.19.0.1 - - [08/Jun/2018:02:18:31 +0000] "GET / HTTP/1.1" 200 27 "-" "curl/7.29.0" "-"
nginx_1    | 172.19.0.1 - - [08/Jun/2018:02:18:32 +0000] "GET / HTTP/1.1" 200 27 "-" "curl/7.29.0" "-"
nginx_1    | 172.19.0.1 - - [08/Jun/2018:02:18:33 +0000] "GET / HTTP/1.1" 200 27 "-" "curl/7.29.0" "-"
nginx_1    | 192.168.22.170 - - [08/Jun/2018:02:19:32 +0000] "GET / HTTP/1.1" 200 27 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-"

これまでのドッカーシリーズの記事は次のとおりです。
[コンテナテクノロジー] Dockerコンテナテクノロジーの概要(1)
[コンテナテクノロジー] Dockerコンテナテクノロジーの概要(2)
この記事がお役に立てば、転送して、より多くの困っている人と共有してください。人々;同時に、友人はメッセージを残し、感謝し、レンガを作り、前進し、サポートすることを歓迎します!
コンテナ技術ウッドDockerThreeMusketeersで構成

おすすめ

転載: blog.51cto.com/mingongge/2555102