精华内容
下载资源
问答
  • 详解Docker三剑客

    2020-12-24 20:56:44
    详解Docker三剑客:Swarm、 Machine、 Compose
  • Docker 三剑客

    2021-02-01 00:37:54
    链接: docker-machine 提取码: 6itu [root@server1 ~]# mv docker-machine-Linux-x86_64-0.16.1 /usr/local/bin/docker-machine [root@server1 ~]# chmod +x /usr/local/bin/docker-machine [root@server1 ~]# ssh-...

    链接: docker-machine 提取码: 6itu

    [root@server1 ~]# mv docker-machine-Linux-x86_64-0.16.1 /usr/local/bin/docker-machine
    [root@server1 ~]# chmod  +x /usr/local/bin/docker-machine
    
    [root@server1 ~]# ssh-keygen
    [root@server1 ~]# ssh-copy-id server2:
    [root@server1 ~]# docker-machine create --driver generic --generic-ip-address=172.25.1.2 server2
    

    在这里插入图片描述

    [root@server1 ~]# yum install bash-* -y
    

    在这里插入图片描述

    [root@server1 ~]#  cd /etc/bash_completion.d
    

    将下面几个组件放置这个目录下
    链接: .bash文件 提取码: gi5f
    在这里插入图片描述

    [root@server1 ~]# vim .bashrc
    PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '
    

    退出当前shell,重新登陆即可生效

    [root@server1 ~]# docker-machine env server2
    [root@server1 ~]# eval $(docker-machine env server2)
    

    在这里插入图片描述
    我们再次使用docker时,显示的就是server2的images
    在这里插入图片描述
    搭建不同版本的
    在真机上搭建yum源放到http的默认发布目录中

    [root@Sun_s html]# vim docker-ce.repo 
    [docker]
    name=docker-ce
    baseurl=http://172.25.1.250/docker-ce
    gpgcheck=0
    [root@Sun_s html]# wget https://get.docker.com
    [root@Sun_s html]# mv index.html get-docker.sh
    修改下图圈出内容  yum源位置
    

    在这里插入图片描述
    在这里插入图片描述

    [root@server1 ~]# docker-machine create --driver generic --engine-install-url "http://172.25.1.250/get-docker.sh" --generic-ip-address 172.25.1.3 server3
    [root@server1 ~]# eval $(docker-machine env server3)
    

    在这里插入图片描述

    1.Docker-compose

    [root@server1 ~]# mkdir compose
    [root@server1 ~]# cd compose/
    [root@server1 compose]# vim docker-compose.yml
    version: "3.9"
    services:
      web1:
        image: nginx
        networks:
          - mynet
        volumes:
          - ./web1:/usr/share/nginx/html
      
      web2:
        image: nginx
        networks:
          - mynet
        volumes:
          - ./web2:/usr/share/nginx/html
    
      haproxy:
        image: haproxy
        networks:
          - mynet
        ports:
          - "80:80"
        volumes:
          - ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
    
    networks:
      mynet:
    
    [root@server1 compose]# mkdir haproxy
    [root@server1 compose]# mkdir web1
    [root@server1 compose]# mkdir web2
    [root@server1 compose]# echo web1 >web1/index.html
    [root@server1 compose]# echo web2 >web2/index.html
    [root@server1 compose]# cd haproxy/
    [root@server1 haproxy]# ls
    [root@server1 haproxy]# vim haproxy.cfg
    
    global
            maxconn         65535
            stats socket    /var/run/haproxy.stat mode 600 level admin
            log             127.0.0.1 local0
            uid             200
            gid             200
            #chroot          /var/empty
            daemon
    
    defaults
            mode            http
            log             global
            option          httplog
            option          dontlognull
            monitor-uri     /monitoruri
            maxconn         8000
            timeout client  30s
            retries         2
            option redispatch
            timeout connect 5s
            timeout server  5s
            stats uri       /status
    
    
    
    # The public 'www' address in the DMZ
    frontend public
            bind            *:80 name clear
            #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem
    
            #use_backend     static if { hdr_beg(host) -i img }
            #use_backend     static if { path_beg /img /css   }
            default_backend dynamic
    
    # The static backend backend for 'Host: img', /img and /css.
    backend dynamic
            balance         roundrobin
            server          app1 web1:80 check inter 1000
            server          app2 web2:80 check inter 1000
    
    [root@server1 compose]# docker-compose up
    [root@server1 compose]# docker-compose start
    [root@server1 compose]# docker-compose ps
    

    在这里插入图片描述

    在这里插入图片描述
    在真机上测试负载均衡情况
    在这里插入图片描述
    查看健康检查

    [root@server1 compose]# docker-compose stop web1
    

    在这里插入图片描述
    Docker Compose 常用命令

    Build:构建或重新构建服务。
    kill:强制停止服务容器。
    logs:查看服务的输出。
    port:打印绑定的公共端口。
    ps:列出所有容器。
    pull:拉取服务所需镜像。
    rm:删除停止的服务容器。
    up:构建并启动容器。

    2.docker swam

    初始化

    [root@server1 harbor]# docker swarm init
    

    在这里插入图片描述
    根据提示在其他docker节点上执行命令:
    在这里插入图片描述
    在这里插入图片描述
    查看swarm集群节点

    [root@server1 ~]# docker node ls
    

    在这里插入图片描述

    [root@server1 ~]# docker load -i myapp.tar
    [root@server1 ~]# docker load -i visualizer.tar
    [root@server1 ~]# docker tag ikubernetes/myapp:v1 myapp:v1
    
    

    实现负载均衡
    在这里插入图片描述
    在这里插入图片描述

    节点升降级

    [root@server1 ~]# docker node promote server2
    [root@server1 ~]# docker node demote server1
    

    在这里插入图片描述

    [root@server1 ~]# docker swarm leave
    [root@server2 ~]# docker node rm server1
    

    在这里插入图片描述

    加入一个新的节点
    重新配置一台server4
    加入集群,注意现在的managerserver2,要写server2的ip

    [root@server4 ~]# docker swarm join --token SWMTKN-1-5worodwhvojzfl76gmoi3n68encf8ha3gaze302aus6yw7g382-c2d31ke2j0ncdiijo1efgpffu 172.25.1.2:2377
    

    在这里插入图片描述

    [root@server2 docker]# vim daemon.json
    {
      "registry-mirrors": ["https://reg.westos.org"]
    }
    [root@server2 docker]# scp daemon.json server4:/etc/docker/
    [root@server2 docker]# scp daemon.json server3:/etc/docker/
    [root@server2 docker]# scp -r certs.d/ server4:/etc/docker/
    [root@server2 docker]# vim /etc/hosts
    

    在这里插入图片描述

    2.加入本地私有仓库

    [root@server1 harbor]# docker-compose start
    [root@server1 ~]# docker tag myapp:v1 reg.westos.org/library/myapp:v1
    [root@server1 ~]# docker push reg.westos.org/library/myapp:v1
    
    [root@server2 ~]# docker service rm my_cluster
    然后把各个节点上已经拉取的镜像删除掉
    [root@server2 ~]# docker service create --name myweb --replicas 3 -p 80:80  myapp:v1
    [root@server2 docker]# docker  service scale myweb=6
    

    在这里插入图片描述

    3. 实现业务滚动更新

    [root@server2 ~]# docker service update --image myapp:v2 --update-parallelism 2 --update-delay 5s  myweb
    
    [root@server4 ~]# systemctl  stop docker.service
    

    当把server4down掉的话,业务会自动跳到其他的server上
    在这里插入图片描述

    3.docker stack部署集群

    基于 Docker Swarm 之上来完成应用的部署,面向大规模场景下的多服务部署和管理。

    1.docker stack与docker-compose的区别:

    • Docker stack不支持“build”指令,它是需要镜像是预先已经构建好的, 所以docker-compose更适合于开发场景;
    • Docker Compose是一个Python项目,使用Docker API规范来操作容器。
    • Docker Stack功能包含在Docker引擎中,是swarm mode的一部分。
    • Docker stack不支持基于第2版写的docker-compose.yml ,也就是version版本至少为3。然而Docker Compose对版本为2和3的 文件仍然可以处理;
    • docker stack把docker compose的所有工作都做完了,因此docker stack将占主导地位。

    2.docker stack相关命令:

    在这里插入图片描述

    参考官方地址集群部署
    在部署之前需要先清除刚才所做的service

    3.编写yml文件

    [root@server2 ~]# mkdir compose
    [root@server2 ~]# cd compose/
    [root@server2 compose]# vim docker-compose.yml
    version: "3.9"
    services:
      web:
        image: myapp:v1
        networks:
          - mynet
        deploy:
          replicas: 2
          update_config:
            parallelism: 2
            delay: 10s
          restart_policy:
            condition: on-failure
      visualizer:
        image: visualizer
        ports:
          - "8080:8080"
        stop_grace_period: 1m30s
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock"
        deploy:
          placement:
            constraints:
              - "node.role==manager"
    networks:
      mynet:
    

    将监控的镜像也上传至本地私有仓库,方便使用,因为yml编写的时候直接从本地仓库拉取

    [root@server1 ~]# docker tag dockersamples/visualizer reg.westos.org/library/visualizer:latest
    [root@server1 ~]# docker push reg.westos.org/library/visualizer:latest
    

    4.执行

    [root@server2 compose]# docker stack deploy -c docker-compose.yml my_cluster
    

    在这里插入图片描述

    5.查看效果

    [root@server2 compose]# docker service ls
    

    在这里插入图片描述
    我们在监控页面查看
    在这里插入图片描述

    4.Portainer可视化

    1.部署portainer

    链接: portainer 目录 提取码: zzct

    [root@server1 ~]# cd portainer/
    [root@server1 portainer]# ls
    portainer-agent-stack.yml  portainer-agent.tar  portainer.tar
    [root@server1 portainer]# docker load -i portainer-agent.tar
    [root@server1 portainer]# docker load -i portainer.tar
    将这些镜像统一放到我们搭建的本地私有仓库中
    [root@server1 portainer]# docker tag portainer/agent:latest reg.westos.org/library/agent:latest
    [root@server1 portainer]# docker tag portainer/portainer:latest reg.westos.org/library/portainer:latest
    [root@server1 portainer]# docker push reg.westos.org/library/agent:latest
    [root@server1 portainer]# docker push reg.westos.org/library/portainer:latest
    [root@server1 portainer]# scp portainer-agent-stack.yml server2:~/
    
    [root@server2 ~]# vim portainer-agent-stack.yml                   ##对镜像位置进行修改即可
    

    在这里插入图片描述

    [root@server2 ~]# docker stack deploy -c portainer-agent-stack.yml portainer      ##执行
    

    在这里插入图片描述
    在这里插入图片描述
    在web 界面查看 172.25.1.2:9000 可以看到登录界面 首次登录需要设置账号,密码
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • docker三剑客

    2020-12-03 16:29:42
    docker-machine 作用:自动化部署docker (go语言) 二进制文件: docker-machine 提取码: d26s 实验环境: 三台虚拟机server1,server2,server3, 其中server3作为管理端安装了docker,server1和server2并没有安装...

    docker-machine

    作用:自动化部署docker
    (go语言)
    二进制文件: docker-machine 提取码: d26s
    实验环境:
    三台虚拟机server1,server2,server3, 其中server3作为管理端安装了docker,server1和server2并没有安装docker

    利用docker machine在server1和server2上自动部署docker

    实验步骤:

    1. 安装获取docker-machine,
    2. 完成server3对server1和server2的免密登陆
    1. 建立一个repo文件,如果server2和server3属于内网不能上网,那么可以在server3建立一个软件仓库,通过apache的方式发布出去,由于我用的是虚拟机,所以我将安装docker的所需要的软件包和repo文件都放在了宿主机上了,我的repo文件内容;
     [root@snji html]# cat docker.repo 
    [docker-ce]
    name=docker-ce
    baseurl=ftp://172.25.3.250/docker-ce
    gpgcheck=0
    enable=1
    
    1. wget https://get.docker.com/ -O /var/www/html/docker.sh 从官方获取执行文件,并修改
      在这里插入图片描述
      在这里插入图片描述

    运行测试:
    docker-machine create --driver generic --engine-install-url "http://172.25.3.250/docker.sh" --generic-ip-address 172.25.3.1 server1
    在这里插入图片描述
    会在节点生成/etc/systemd/system/docker.service.d/10-machine.conf文件
    在这里插入图片描述

    docker-machine的bash文件
    链接: https://pan.baidu.com/s/1iIvCSP2D8httX6y64ig9gA 提取码: vmq4

    1. 将三个文件放到这个目录下在这里插入图片描述
    2. 修改 ~/.bashrc文件,添加
      PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '
      并且source ~/.bashrc文件 使之生效
      在这里插入图片描述

    docker-compose

    作用:多容器管理

    配置haproxy负载均衡

    需要的镜像: nginx,haproxy
    实现步骤:

    建立一个compose 目录,并创建一个docker-compose.yml 文件,文件内容如下:

    [root@server3 compose]# cat docker-compose.yml 
    version: "3.8"
    services:
    
      web1:
        image: nginx
        networks:
          - my_net
        volumes:
          - ./web1:/usr/share/nginx/html
     
      web2:
        image: nginx
        networks:
          - my_net
        volumes:
          - ./web2:/usr/share/nginx/html
    
      ha_proxy:
        image: haproxy
        ports:
          - "80:80"
        networks:
          - my_net
        volumes:
          - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
    networks:
      my_net:
    

    compose目录下放上两个nginx 的发布目录,并直接挂载到web1和web2服务上,并且创建一个haproxy.cfg文件, 目录结构
    在这里插入图片描述

    haproxy文件内容

    [root@server3 compose]# egrep -v '#|^$' haproxy.cfg 
    global
    defaults
        mode                    http
        log                     global
        option                  httplog
        option                  dontlognull
        option http-server-close
        option forwardfor       except 127.0.0.0/8
        option                  redispatch
        retries                 3
        timeout http-request    10s
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
        maxconn                 3000
        stats uri /admin/status
    frontend main
        bind 0.0.0.0:80
        default_backend             app
    backend app
        balance     roundrobin
        server  app1 web1:80 check
        server  app2 web2:80 check
    

    在compose目录下,docker-compose up 加-d 参数表示在后台运行
    在这里插入图片描述

    测试:
    在这里插入图片描述
    在这里插入图片描述

    swarm

    集群管理

    实现步骤

    1. 在server1管理节点执行 docker swarm init
      在这里插入图片描述
    2. 在其他两个节点执行docker swarm join --token 就是刚刚swarm初始化时生成的命令
      在这里插入图片描述
      docker node ls
      在这里插入图片描述
      至此,集群就创建好了

    通过命令行的方式建立服务

    1. 创建一个自定义的overlay网络my_net
      docker network create -d overlay my_net
    2. docker service create --name web_cluster --replicas 3 --network my_net -p 80:80 myapp:v1 创建一个服务名字叫web_cluster ,3个副本, 用的是自定义网络my_net 端口映射 80:80 , 镜像是myapp的v1版本
      在这里插入图片描述
      访问测试:
      在这里插入图片描述
      使用dockersamples/visualizer 镜像,可以网页版查看集群中副本的分布情况
      docker run -d --name viz -p 8080:8080 -it -v /var/run/docker.sock:/var/run/docker.sock dockersamples/visualizer
      在这里插入图片描述

    通过命令行的方式修改副本的个数

    docker service scale web_cluster=6
    在这里插入图片描述
    在这里插入图片描述

    更新节点镜像的版本

    docker service update --image myapp:v2 --update-parallelism 2 --update-delay 2s web_cluster

    --update-parallelism 2表示每次更新两个
    --update-delay 2s表示每两秒更新一次

    在这里插入图片描述

    通过文件的方式建立服务

    将上个实验的service全部删掉,用文件的方式部署
    web.yml文件:

    version: "3.8"
    services:
      web_cluster:
        image: myapp:v2
        networks:
          - my_net
        ports:
          - "80:80"
        deploy:
          replicas: 6
          update_config:
            parallelism: 2
            delay: 5s
          restart_policy:
            condition: on-failure
      visualizer:
        image: visualizer
        ports:
          - "8080:8080"
        stop_grace_period: 1m30s
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock"
        deploy:
          placement:
            constraints:
              - "node.role==manager"
    
    networks:
      my_net:
    

    docker stack deploy -c web.yml web_cluster 直接用docker stack 命令部署

    在这里插入图片描述
    在这里插入图片描述
    效果:
    在这里插入图片描述
    回收:
    在这里插入图片描述

    利用portainer 工具,实现web化建立集群

    portainer安装包: 链接: https://pan.baidu.com/s/1dCYigimgmxQ8fIhhQpEk9w 提取码: fvwn

    实现步骤:

    1. 解压安装包, 里面有两个镜像包, 和yml文件,
      在这里插入图片描述
      可以选择搭建harbor仓库将这两个镜像放到仓库里,也可以选择将其他的其他的节点手动导入portainer-agent镜像,解决镜像问题之后
      docker stack deploy -c portainer-agent-stack.yml portainer开始部署
      在这里插入图片描述

    访问测试: 浏览器访问172.25.3.1: 9000端口
    默认会先让做一个初始化密码
    在这里插入图片描述
    页面的大概情况
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • Docker三剑客

    千次阅读 2017-12-01 17:10:59
    Docker集群管理工具 实验环境:CentOS 6.9Docker Machine Docker Compose Docker Swarm Docker Machine 安装 # https://github.com/docker/machine/releases $ sudo curl -L ...

    Docker集群管理工具

    实验环境:CentOS 6.9

    • Docker Machine
    • Docker Compose
    • Docker Swarm

    Docker Machine

    • 安装
    # https://github.com/docker/machine/releases
    $ sudo curl -L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine
    $ sudo chmod +x /usr/local/bin/docker-machine
    
    # 查看版本
    [root@db-slave ~]# docker-machine -v
    docker-machine version 0.13.0, build 9ba6da9
    • 使用

    Docker Machine 支持多种后端驱动,包括虚拟机、本地主机和云平台,使用 virtualbox 类型的驱动,创建一台 Docker 主机,命名为 aniu

    [root@db-slave ~]# docker-machine create -d virtualbox aniu
    Running pre-create checks...
    Error with pre-create check: "VBoxManage not found. Make sure VirtualBox is installed and VBoxManage is in the path"
    # 注意这里报错提示需要安装VirtualBox环境
    • 配置VirtualBox源
    # cat /etc/yum.repos.d/virtualbox.repo 
    [virtualbox]
    name=Oracle Linux / RHEL / CentOS-$releasever / $basearch - VirtualBox
    baseurl=http://download.virtualbox.org/virtualbox/rpm/el/$releasever/$basearch
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc
    You have new mail in /var/spool/mail/root
    • 安装VirtualBox
    yum install -y VirtualBox-5.2 # 使用yum search VirtualBox 然后安装指定版本的VirtualBox
    [root@db-slave ~]# sudo /sbin/vboxconfig # 重新加载VirtualBox服务
    vboxdrv.sh: Stopping VirtualBox services.
    vboxdrv.sh: Building VirtualBox kernel modules.
    vboxdrv.sh: Starting VirtualBox services.
    vboxdrv.sh: Starting VirtualBox services.
    # 如果内核版本不一样可能会出错,需要:
    [root@db-slave ~]# rpm -qa | grep kernel-lt
    kernel-lt-4.4.103-1.el6.elrepo.x86_64
    kernel-lt-devel-4.4.103-1.el6.elrepo.x86_64
    # yum --enablerepo=elrepo-kernel install kernel-lt-devel kernel-lt-headers -y --skip-broken
    • 继续利用docker-machine创建docker主机
    [root@db-slave ~]# docker-machine create -d virtualbox aniu
    Running pre-create checks...
    (aniu) Image cache directory does not exist, creating it at /root/.docker/machine/cache...
    (aniu) No default Boot2Docker ISO found locally, downloading the latest release...
    (aniu) Latest release for github.com/boot2docker/boot2docker is v17.11.0-ce
    (aniu) Downloading /root/.docker/machine/cache/boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v17.11.0-ce/boot2docker.iso...
    (aniu) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%
    Creating machine...
    (aniu) Copying /root/.docker/machine/cache/boot2docker.iso to /root/.docker/machine/machines/aniu/boot2docker.iso...
    (aniu) Creating VirtualBox VM...
    (aniu) Creating SSH key...
    (aniu) Starting the VM...
    (aniu) Check network to re-create if needed...
    (aniu) Found a new host-only adapter: "vboxnet0"
    (aniu) Waiting for an IP...
    Waiting for machine to be running, this may take a few minutes...
    Detecting operating system of created instance...
    Waiting for SSH to be available...
    Detecting the provisioner...
    Provisioning with boot2docker...
    Copying certs to the local machine directory...
    Copying certs to the remote machine...
    Setting Docker configuration on the remote daemon...
    Checking connection to Docker...
    Docker is up and running!
    To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env aniu
    You have new mail in /var/spool/mail/root
    • 查看主机
    # docker-machine ls
    NAME   ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
    aniu   -        virtualbox   Running   tcp://192.168.99.100:2376           v17.11.0-ce  
    • 创建主机成功后,可以通过 env 命令来让后续操作目标主机
    $ docker-machine env aniu
    • 可以通过 SSH 登录到主机
    $ docker-machine ssh aniu

    这里写图片描述

    官方支持的驱动列表

    # 通过 -d 选项可以选择支持的驱动类型。
    amazonec2
    azure
    digitalocean
    exoscale
    generic
    google
    none
    openstack
    rackspace
    softlayer
    virtualbox
    vmwarevcloudair
    vmwarevsphere
    • 常用操作命令
    active 查看活跃的 Docker 主机
    config 输出连接的配置信息
    create 创建一个 Docker 主机
    env 显示连接到某个主机需要的环境变量
    inspect 输出主机更多信息
    ip 获取主机地址
    kill 停止某个主机
    ls 列出所有管理的主机
    provision 重新设置一个已存在的主机
    regenerate-certs 为某个主机重新生成 TLS 认证信息
    restart 重启主机
    rm 删除某台主机
    ssh SSH 到主机上执行命令
    scp 在主机之间复制文件
    mount 挂载主机目录到本地
    start 启动一个主机
    status 查看主机状态
    stop 停止一个主机
    upgrade 更新主机 Docker 版本为最新
    url 获取主机的 URL
    version 输出 docker-machine 版本信息
    help 输出帮助信息
    
    #每个命令,又带有不同的参数,可以通过
    docker-machine COMMAND --help

    Docker Compose

    安装参考:http://blog.csdn.net/wh211212/article/details/78665052

    [root@aniu-k8s ~]# docker-compose --help
    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
      --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 (for example if your docker host
                                  is an IP address)
      --project-directory PATH    Specify an alternate working directory
                                  (default: the path of the Compose file)
    
    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 Swarm

    Docker Swarm 是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。

    • Swarm mode

      Docker 1.12 Swarm mode 已经内嵌入 Docker 引擎,成为了 docker 子命令 docker swarm。请注意与旧的 Docker Swarm 区分开来。

      Swarm mode 内置 kv 存储功能,提供了众多的新特性,比如:具有容错能力的去中心化设计、内置服务发现、负载均衡、路由网格、动态伸缩、滚动更新、安全传输等。使得 Docker 原生的 Swarm 集群具备与 Mesos、Kubernetes 竞争的实力。

    • 基本概念

    Swarm 是使用 SwarmKit 构建的 Docker 引擎内置(原生)的集群管理和编排工具

    • 节点

    运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 (node) 。

    节点分为管理 (manager) 节点和工作 (worker) 节点。

    管理节点用于 Swarm 集群的管理,docker swarm 命令基本只能在管理节点执行(节点退出集群命令 docker swarm leave 可以在工作节点执行)。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader,leader 通过 raft 协议实现。

    工作节点是任务执行节点,管理节点将服务 (service) 下发至工作节点执行。管理节点默认也作为工作节点。也可以通过配置让服务只运行在管理节点。

    这里写图片描述

    • 服务和任务

    任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。

    服务 (Services) 是指一组任务的集合,服务定义了任务的属性。服务有两种模式:

    replicated services 按照一定规则在各个工作节点上运行指定个数的任务。

    global services 每个工作节点上运行一个任务

    两种模式通过 docker service create 的 –mode 参数指定。

    来自 Docker 官网的这张图片形象的展示了容器、任务、服务的关系。

    这里写图片描述

    创建Swarm 集群

    • 初始化集群(实验环境:CentOS7 Docker CE)

    由于切换了实验主机,需要重新安装VirtualBox,注意CentOS6/7安装VirtualBox貌似不同,参考:

    # CentOS7 安装VirtualBox
    cd /etc/yum.repos.d
    wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo
    
    yum --enablerepo=epel install dkms
    yum groupinstall "Development Tools" -y && yum install kernel-devel -y
    # 安装VirtualBox
    yum install VirtualBox-5.2 -y
    
    # 参考链接:https://wiki.centos.org/HowTos/Virtualization/VirtualBox
    • 使用 docker swarm init 在本机初始化一个 Swarm 集群
    [root@aniu-saas-4 ~]# docker swarm init --advertise-addr 192.168.0.209
    Swarm initialized: current node (s2ffwdkzjntux1rarf139vygb) is now a manager.
    
    To add a worker to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-4uijqfvw990m8j065ulwdzuv14ec6rmzgpljm5lhyd3rmv358o-ersojr3gglsj7v4i2enmmvt3z 192.168.0.209:2377
    
    To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

    如果 Docker 主机有多个网卡,拥有多个 IP,必须使用 –advertise-addr 指定 IP


    • 增加工作节点

    使用 Docker Machine 创建两个 Docker 主机,并加入到swarm集群中

    $ docker-machine create -d virtualbox worker1
    $ docker-machine ssh worker1
    
    docker@worker1:~$ docker swarm join --token SWMTKN-1-4uijqfvw990m8j065ulwdzuv14ec6rmzgpljm5lhyd3rmv358o-ersojr3gglsj7v4i2enmmvt3z 192.168.0.209:2377
    
    # Running pre-create checks...
    Error with pre-create check: "This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory"
    
    # 注意安装运行dockers swarm必须支持VT-X/AMD-v
    $ docker-machine create -d virtualbox worker2
    docker@worker1:~$ docker swarm join --token SWMTKN-1-4uijqfvw990m8j065ulwdzuv14ec6rmzgpljm5lhyd3rmv358o-ersojr3gglsj7v4i2enmmvt3z 192.168.0.209:2377

    细心的读者可能通过 docker-machine create –help 查看到 –swarm* 等一系列参数。该参数是用于旧的 Docker Swarm,与本章所讲的 Swarm mode 没有关系

    • 查看集群
    $ docker node ls
    ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
    03g1y59jwfg7cf99w4lt0f662    worker2   Ready   Active
    9j68exjopxe7wfl6yuxml7a7j    worker1   Ready   Active
    dxn1zf6l61qsb1josjja83ngz *  manager1  Ready   Active        Leader

    参考教程

    展开全文
  • 企业运维容器之 docker 三剑客machine Run this command to configure your shell:eval $(docker-machine env server3)Run this command to configure your shell:eval $(docker-machine env server3)Run this ...

    企业运维容器之 docker 三剑客machine

    1. Docker Machine 介绍

    • Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境。
    • Docker Machine支持在常规Linux操作系统、虚拟化平台、openstack、公有云等不同环境下安装配置docker host。
    • Docker Machine 项目基于 Go 语言实现,目前在 Github 上的维护地址: https://github.com/docker/machine/

    2. Docker Machine 实践

    可以从 https://github.com/docker/machine/releases/download/ 下载,Docker Machine二进制脚本,然后将其移至环境变量中,给其执行权限;

    [root@server1 ~]# ls
    base-debian10.tar  docker                              harbor-offline-installer-v1.10.1.tgz
    convoy             docker-machine-Linux-x86_64-0.16.1  rhel7.tar
    convoy.tar.gz      harbor
    [root@server1 ~]# mv docker-machine-Linux-x86_64-0.16.1 /usr/local/bin/docker-machine
    [root@server1 ~]# chmod +x /usr/local/bin/docker-machine
    [root@server1 ~]# docker-machine --help	##查看帮助
    Usage: docker-machine [OPTIONS] COMMAND [arg...]
    
    Create and manage machines running Docker.
    
    Version: 0.16.1, build cce350d7
    

    创建machine:
    machine指的是docker daemon主机,其实就是在host上安装和部署docker。
    创建machine要求免密登陆远程主机:
    #ssh-keygen
    #ssh-copy-id 目标ip,当有解析时也可以指定主机名;

    新开虚拟机,来部署 docker 查看其效果;

    先做免密认证;

    [root@server1 ~]# ssh-keygen  ##生成私钥和公钥
    [root@server1 ~]# ssh-copy-id server3	##将公钥移至server3上
    

    从帮助中可以看到,其执行的过程是在当前主机上连接 https://get.docker.com/ 来进行下载脚本;
    由于在部署时该结点不能联网,在宿主机中下载执行的脚本并配置 docker 软件仓库;让虚拟机连接宿主机来完成部署。

    [root@foundation15 ~]# cd /var/www/html/
    [root@foundation15 html]# ls
    docker-ce  openstack  rhel7.6  rhel8.2  upload_file.php
    [root@foundation15 html]# curl -fsSL https://get.docker.com -o get-docker.sh		##下载脚本
    [root@foundation15 html]# ls
    docker-ce  get-docker.sh  openstack  rhel7.6  rhel8.2  upload_file.php
    [root@foundation15 html]# vim get-docker.sh 
    
    
    431                         yum_repo="http://172.25.15.250/docker-ce.repo"
    	##指定安装路径和安装版本
    
    492                                 if [ -n "$cli_pkg_version" ]; then
    493                                         $sh_c "$pkg_manager install -y -q docker-ce-cli-19.03.15-    3.el7"
    494                                 fi
    495                                 $sh_c "$pkg_manager install -y -q docker-ce-19.03.15-3.el7"
    	##指定安装的版本
    496                                 # shellcheck disable=SC2031
    497                                 #if [ -n "$has_rootless_extras" ]; then
    498                                 #       $sh_c "$pkg_manager install -y -q docker-ce-rootless-extr    as$pkg_version"
    499                                 #fi
    	##由于下载的不是最新版,此时需要将最新版的配置信息注释掉
    	
    [root@foundation15 html]# vim docker-ce.repo
    [root@foundation15 html]# cat docker-ce.repo
    [docker]
    name=docker-ce
    baseurl=http://172.25.15.250/docker-ce
    gpgcheck=0
    

    创建主机:(离线安装需要在目标主机提前安装好docker软件包)
    开安部署:

    [root@server1 ~]# docker-machine create -d generic --generic-ip-address 172.25.15.3 --engine-install-url "http://172.25.15.250/get-docker.sh" server3
    

    在执行的过程中会比较慢,此时可以被执行的主机中查看进程:

    [root@server3 ~]# ps ax
    
     4072 pts/1    R+     0:12 /usr/bin/python /usr/bin/yum install -y -q d
    
    [root@server3 ~]# docker info
     ## 完成之后查看部署的 docker 信息,也可以查看其复制过来的软件库信息和证书等相关信息。
     [root@server1 server3]# pwd
    /root/.docker/machine/machines/server3
    [root@server1 server3]# ls
    ca.pem  cert.pem  config.json  key.pem  server-key.pem  server.pem
    [root@server3 ~]# cd /etc/docker/
    [root@server3 docker]# ls
    ca.pem  key.json  server-key.pem  server.pem
    [root@server3 docker]# systemctl status docker
    [root@server3 docker]# cat /etc/systemd/system/docker.service.d/10-machine.conf
    [Service]
    ExecStart=
    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver overlay2 --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic 
    Environment=
    

    machine 所在主机上查看其常用命令:

    [root@server1 ~]# docker-machine env server3
    export DOCKER_TLS_VERIFY="1"
    export DOCKER_HOST="tcp://172.25.15.3:2376"
    export DOCKER_CERT_PATH="/root/.docker/machine/machines/server3"
    export DOCKER_MACHINE_NAME="server3"
    # Run this command to configure your shell: 
    # eval $(docker-machine env server3)
    [root@server1 ~]# docker-machine ls
    	##显示当前 docker 安装的引擎
    NAME      ACTIVE   DRIVER    STATE     URL                      SWARM   DOCKER      ERRORS
    server3   -        generic   Running   tcp://172.25.15.3:2376           v19.03.15  
    

    控制容器:

    [root@server1 ~]# docker-machine env server3
    export DOCKER_TLS_VERIFY="1"
    export DOCKER_HOST="tcp://172.25.15.3:2376"
    export DOCKER_CERT_PATH="/root/.docker/machine/machines/server3"
    export DOCKER_MACHINE_NAME="server3"
    # Run this command to configure your shell: 
    # eval $(docker-machine env server3)
    [root@server1 ~]# eval $(docker-machine env server3)
    [root@server1 ~]# docker images 
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    [root@server1 ~]# export
    declare -x DOCKER_CERT_PATH="/root/.docker/machine/machines/server3"
    declare -x DOCKER_HOST="tcp://172.25.15.3:2376"
    declare -x DOCKER_MACHINE_NAME="server3"
    declare -x DOCKER_TLS_VERIFY="1"
    

    配置 bash 环境变量,下载环境变量:

    [root@server1 ~]# yum install -y bash-*
    [root@server1 ~]# cd /etc/bash_completion.d/
    [root@server1 bash_completion.d]# ls
    docker-machine.bash          rhn-migrate-classic-to-rhsm
    docker-machine-prompt.bash   rhsmcertd
    docker-machine-wrapper.bash  rhsm-debug
    iprutils                     rhsm-icon
    rct                          subscription-manager
    redefine_filedir
    ##此处的 docker-machine.bash   ,docker-machine-prompt.bash ,docker-machine-wrapper.bash 为自己下载过来的;
    [root@server1 ~]# vim .bashrc 	##写入环境变量
    
    PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '
    

    加载资源之后,此时在调用 server3 上 docker 时会有指示信息:

    [root@server1 ~]# docker-machine env server3
    export DOCKER_TLS_VERIFY="1"
    export DOCKER_HOST="tcp://172.25.15.3:2376"
    export DOCKER_CERT_PATH="/root/.docker/machine/machines/server3"
    export DOCKER_MACHINE_NAME="server3"
    # Run this command to configure your shell: 
    # eval $(docker-machine env server3)
    [root@server1 ~]# eval $(docker-machine env server3)
    [root@server1 ~ [server3]]# 
    

    在 server2 上也用 machine 来部署 docker :

    [root@server1 ~]# ssh-copy-id server2
    [root@server1 ~]# docker-machine create -d generic --generic-ip-address 172.25.15.2 --engine-install-url "http://172.25.15.250/get-docker.sh" server2
    [root@server1 ~]# docker-machine ls
    NAME      ACTIVE   DRIVER    STATE     URL                      SWARM   DOCKER      ERRORS
    server2   -        generic   Running   tcp://172.25.15.2:2376           v19.03.15   
    server3   -        generic   Running   tcp://172.25.15.3:2376           v19.03.15 
    

    两个的切换:

    [root@server1 ~]# docker-machine env server2
    export DOCKER_TLS_VERIFY="1"
    export DOCKER_HOST="tcp://172.25.15.2:2376"
    export DOCKER_CERT_PATH="/root/.docker/machine/machines/server2"
    export DOCKER_MACHINE_NAME="server2"
    # Run this command to configure your shell: 
    # eval $(docker-machine env server2)
    [root@server1 ~]# eval $(docker-machine env server2)
    [root@server1 ~ [server2]]# eval $(docker-machine env server3)
    [root@server1 ~ [server3]]# docker images 
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    [root@server1 ~ [server3]]# eval $(docker-machine env server2)
    [root@server1 ~ [server2]]# docker images 
    REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
    busybox                        latest              d3cd072556c2        12 days ago         1.24MB
    nginx                          latest              f0b8a9a54136        2 weeks ago         133MB
    reg.westos.org/library/nginx   latest              f0b8a9a54136        2 weeks ago         133MB
    ubuntu                         latest              7e0aa2d69a15        5 weeks ago         72.7MB
    game2048                       latest              19299002fdbe        4 years ago         55.5MB
    [root@server1 ~ [server2]]# 
    

    此时在 machine 主机上控制容器之后,此时除了在容器中的指令外其余的指令还是在当前主机执行的;对于控制容器之后,退出时需要退出当前的 shell 再次进入时才会释放控制容器。

    展开全文
  • 能够说出docker-compose是什么 能够安装docker-compose 能够说出使用docker-compose的基本三步骤 了解docker-compose的基本语法 能够使用docker-compose实现基础应用案例 能够说出docker swarm是什么 ...
  • docker三剑客之docker machine

    千次阅读 2021-02-05 15:36:00
    docker三剑客之docker machinedocker machine简介docker machine实践安装创建machine远程控制创造的machine给没有安装docker-ce的主机,使用docker-machine进行安装 链接: docker machine. docker machine简介 ...
  • Docker三剑客——Machine

    千次阅读 2018-06-13 22:30:15
    在上一篇文章中,我们介绍了docker三剑客中的Swarm,对使用docker集群方式管理容器有了一定的了解,如果忘记了该内容,可以先去复习一下。Docker三剑客——Swarm。 今天我们开始介绍docker三剑客中的另一个——...
  • 一、docker-machine是什么? 什么是docker-machine,简单来说就是快速创建一个docker容器环境的,在多台阿里云ECS安装上docker, 可以使用相关的命令同时给多主机上安装docker软件 不需要用传统的方式一台台的安装 ...
  • Docker三剑客之Docker Machine一、什么是Docker Machine二、为什么要使用Docker Machine三、Docker和Docker Machine之间的区别四、Docker Machine的安装部署实验准备:安装 Docker Machine配置客户端配置资源发布端...
  • Docker三剑客:Compose、Machine和Swarm

    万次阅读 2018-06-06 22:00:23
    Docker三大编排工具: Docker Compose:是用来组装多容器应用的工具,可以在 Swarm集群中部署分布式应用。 Docker Machine:是支持多平台安装Docker的工具,使用 Docker Machine,可以很方便地在笔记本、云平台及...
  • 安装docker-compose 安装docker 安装swarm docker-compose.yml 前言 安装docker-compose sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$...
  • Docker三剑客——Compose

    万次阅读 多人点赞 2018-07-07 17:28:06
    前面介绍了Docker三剑客中的两个,今天我们介绍一下三剑客中的最后一个——docker-compose。
  • docker-compose,快速对docker容器集群进行编排 Docker Compose 介绍 Docker-Compose 是 Docker 的一种编排服务,是一个用于在 Docker 上定义并运行复杂应用的工具,可以让用户在集群中部署分布式应用。 通过 Docker-...
  • Docker三剑客详解

    2019-12-17 10:34:41
    docekr-compose、docekr-machine 和 docker-swarm 是docker 原生提供的三大编排工具。 docker-machine doceker-machine是在解决docker运行环境的问题 docker技术是基于Linux内核的cgroup技术实现的,那么问题来了,...
  • Docker三剑客之Swarm

    2021-01-30 13:29:03
    1、Docker Swarm简介 2、Docker Swarm 实践 2.1 Docker Swarm 的安装 docker swarm init docker swarm join --token SWMTKN-1-32axwyv0mqh43epu7igmmk2n00kxxnztm17f8vouy56sdh3gsc-74epd17ja8kbf4rrd2jjawmq3 ...
  • 容器技术|Docker三剑客之docker-machine

    千次阅读 2018-07-20 14:51:49
    接上一篇:容器技术|Docker三剑客之docker-compose docker-machine是什么? ocker-machine就是docker公司官方提出的,用于在各种平台上快速创建具有docker服务的虚拟机的技术,甚至可以通过指定driver来定制...
  • docker 三剑客

    2020-04-26 13:25:55
    docker-machinedocker-machine是解决docker运行环境问题。 docker技术是基于Linux内核的cgroup技术实现的,那么问题来了,如果在非Linux平台上使用docker技术需要依赖安装Linux系统的虚拟机。 docker-machine就是...
  • docker-machine是解决docker运行环境问题。 docker技术是基于Linux内核的cgroup技术实现的,那么问题来了,如果在非Linux平台上使用docker技术需要依赖安装Linux系统的虚拟机。docker-machine就是docker公司官方提出...
  • docker三剑客之machine一.Docker Machine简介二.Docker Machine实践 一.Docker Machine简介 Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境。 Docker Machine...
  • 为了把容器化技术的优点发挥到极致,docker公司先后推出了三大技术:docker-machine,docker-compose,docker-swarm,可以说是几乎实现了容器化技术中所有可能需要的底层技术手段。 doceker-machine是在解决docker运行...
  • docker swarm 192.168.213.10 server1 192.168.213.20 server2 192.168.213.30 server3 三台主机分别装好docker统一版本 关闭之前的docker-compose docker volume rm compose_web-data #删除卷 搭建集群 .....
  • 一、Docker三剑客 (1)Docker compose Docker Compose是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用。 先抛出链接,后续会根据个人经验详细阐述。 (2)Docker Machine Docker ...
  • docker-machine 下载地址:添加链接描述 scp docker-machine-Linux-x86_64 server1:/usr/local/bin/ #复制的server1 server1: mv docker-machine-Linux-x86_64 docker-machine #改名便于操作 chmod +x docker-...
  • Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。 Docker-Compose是一个容器编排工具。通过一个....
  • Docker三剑客:Compose 、Machine (不主流)、Docker Swarm(已过时) 概述 Compose项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟OpenStack中的Heat...
  • 一.java基础面试知识点 java中==和equals和hashCode的区别 int、char、long各占多少字节数 int与integer的区别 探探对java多态的理解 String、StringBuffer、StringBuilder区别 什么是内部类?内部类的作用 ...
  • docker三剑客的区别?

    2019-02-10 11:43:33
    本链接来自知乎docker三剑客的区别? - 知乎用户的回答 - 知乎https://www.zhihu.com/question/277356093/answer/393019013 转载于:https://blog.51cto.com/13670314/2349058

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,410
精华内容 964
关键字:

docker三剑客