docker进阶

Docker进阶

1.Docker Compose

简介

Docker Compose可以轻松高效的管理容器,定义运行多个容器

Compose是Docker官方的开源项目,需要安装。

Dockerfile让程序在任何地方运行。

Compose文件

version: '2.0'
services:
  web:
    build:
    ports:
    - "5000:5000"
    volumes:
    - .:/code
    - logvolume01:/var/log
    links:
    - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

docker-compose up 即使是100个服务也是一次性启动

Compose:重要的概念

  • services : 容器,应用。(web,redis,nginx…)
  • 项目project : 一组关联的容器

安装compose

安装

[root@localhost ~]# sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/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   633  100   633    0     0    963      0 --:--:-- --:--:-- --:--:--   966
100 12.1M  100 12.1M    0     0   165k      0  0:01:15  0:01:15 --:--:--  156k
[root@localhost ~]# ls /usr/local/bin/
docker-compose

授权
[root@localhost ~]# chmod +x /usr/local/bin/docker-compose 
[root@localhost ~]# ll /usr/local/bin/docker-compose 
-rwxr-xr-x. 1 root root 12728384 Jun 21 00:28 /usr/local/bin/docker-compose

查看是否安装成功
[root@localhost ~]# docker-compose version
docker-compose version 1.29.1, build c34c88b2
docker-py version: 5.0.0
CPython version: 3.7.10
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019


体验

官网参考地址 
https://docs.docker.com/compose/gettingstarted/

创建一个目录,并编写一个文件

[root@localhost home]# mkdir composetest
[root@localhost home]# cd composetest/
[root@localhost composetest]# vim app.py
[root@localhost composetest]# cat app.py 
import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)

@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)
    
创建一个文件
[root@localhost composetest]# vim requirements.txt
[root@localhost composetest]# cat requirements.txt 
flask
redis
创建dockerfile文件 
[root@localhost composetest]# vim Dockerfile
[root@localhost composetest]# cat Dockerfile 
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

创建docker-compose.yml文件(定义整个服务,需要的环境),完整的上线服务
[root@localhost composetest]# vim docker-compose.yml
[root@localhost composetest]# cat docker-compose.yml 
version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

启动compose
[root@localhost composetest]# docker-compose up
Building web
Sending build context to Docker daemon  5.632kB
Step 1/10 : FROM python:3.7-alpine
3.7-alpine: Pulling from library/python
540db60ca938: Pull complete 
a7ad1a75a999: Pull complete 
37ce6546d5dd: Pull complete 
ec9e91bed5a2: Pull complete 
ecb9463b81f8: Pull complete 
Digest: sha256:deaefc5e07ef1f3420411dd5225b2fc2ab23ae7731e8cb216d9fe74557d81db5
Status: Downloaded newer image for python:3.7-alpine
 ---> 078bbc5dc0e6
Step 2/10 : WORKDIR /code
 ---> Running in 54fa73a3b81a
Removing intermediate container 54fa73a3b81a
 ---> 54bca3558bce
Step 3/10 : ENV FLASK_APP=app.py
 ---> Running in c2fbc8416478
Removing intermediate container c2fbc8416478
 ---> fb1675a62b57
Step 4/10 : ENV FLASK_RUN_HOST=0.0.0.0
 ---> Running in 63f853ef73ba
Removing intermediate container 63f853ef73ba
 ---> 43b0a25be2df
Step 5/10 : RUN apk add --no-cache gcc musl-dev linux-headers
 ---> Running in 719ddddd7dab
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz

​``````
Creating composetest_redis_1 ... done
Creating composetest_web_1   ... done
​``````

检测是否安装成功

有两个服务web和redis
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS         PORTS                                       NAMES
9bbc65e77cda   composetest_web   "flask run"              46 seconds ago   Up 3 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   composetest_web_1
d55d70dcb8d4   redis:alpine      "docker-entrypoint.s…"   30 minutes ago   Up 4 seconds   6379/tcp                                    composetest_redis_1

验证5000端口,服务正常
[root@localhost ~]# curl localhost:5000
Hello World! I have been seen 1 times.
[root@localhost ~]# curl localhost:5000
Hello World! I have been seen 2 times.

docker images
写在 yaml 文件的服务,都会下载成镜像,不需要手动去 run
[root@localhost ~]# docker images
REPOSITORY        TAG          IMAGE ID       CREATED          SIZE
composetest_web   latest       2d57dfc6002e   4 minutes ago    184MB
<none>            <none>       2f35460abc9e   34 minutes ago   184MB
redis             alpine       1690b63e207f   2 weeks ago      32.3MB
python            3.7-alpine   078bbc5dc0e6   3 weeks ago      41.9MB
hello-world       latest       d1165f221234   3 months ago     13.3kB

网络

通过docker-compose启动的服务都在同一个网络

[root@localhost ~]# docker network ls
NETWORK ID     NAME                  DRIVER    SCOPE
023494d4b7e4   bridge                bridge    local
6b636dfe7c1e   composetest_default   bridge    local
047aca2ce154   host                  host      local
ec2fbbfb74a6   none                  null      local

#可以看到redis和web在同一网络内,可以通过域名访问
[root@localhost ~]# docker network inspect 6b636dfe7c1e
[
    {
        "Name": "composetest_default",
        "Id": "6b636dfe7c1e5c3a84de27f7872ddf5d1c69fe4e4b98e8f3edfa41c2f3a944a9",
        "Created": "2021-06-21T00:52:37.146259806-07:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "9bbc65e77cdaed1873cfe891cc3aff167e628336dd5e6c25309e9aeae67bd22c": {
                "Name": "composetest_web_1",
                "EndpointID": "89c87fef595ff6addbfbc0beb63724747db7102483bec61c9082e743cb400302",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            },
            "d55d70dcb8d4c22b290d53c43fd8eb17c53e220c327ea120cdad78332c1fa2b7": {
                "Name": "composetest_redis_1",
                "EndpointID": "4b99d701f97a1264cbf69ebc7ce3e2ba4f84739959068a716970d778ca18299f",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "composetest",
            "com.docker.compose.version": "1.29.1"
        }
    }
]

yaml规则

官网参考地址
https://docs.docker.com/compose/compose-file/

version: ""   #版本
services:    #服务
  服务1:web
   #服务配置
   images
   build
   network
   ······
   服务2:redis
   ······
   服务3:redis
#其他配置  网络/卷 全局规则

开源项目

1、下载项目
[root@localhost home]# mkdir my_wordpress
[root@localhost home]# cd my_wordpress/
[root@localhost my_wordpress]# vim docker-compose.yml
[root@localhost my_wordpress]# cat docker-compose.yml 
version: "3.9"
    
services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
volumes:
  db_data: {}
  wordpress_data: {}
[root@localhost my_wordpress]# docker-compose up -d (后台启动)
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED              STATUS              PORTS                                   NAMES
f7f9bb076cd6   wordpress:latest   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:8000->80/tcp, :::8000->80/tcp   my_wordpress_wordpress_1
ba1fcc9c17de   mysql:5.7          "docker-entrypoint.s…"   About a minute ago   Up About a minute   3306/tcp, 33060/tcp                     my_wordpress_db_1

测试访问ip:8000端口

在这里插入图片描述

2.Docker Swarm

工作模式

在这里插入图片描述

创建集群

#初始化节点

[root@docker1 ~]# docker swarm init --advertise-addr 172.18.77.207
Swarm initialized: current node (xla5se30w25kl69mspl6ojrqh) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-1xqmstk66u6emvfw2z6a7gws60au5o8rdhi71vy5qzczoihiqi-0to7f4r0hk1nnvw3s4hckdakb 172.18.77.207:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

#加入一个节点

获取令牌
docker swarm join-token manager  获取manager令牌
docker swarm join-token worker   获取worker令牌

#加入worker节点
[root@docker2 ~]# docker swarm join --token SWMTKN-1-1xqmstk66u6emvfw2z6a7gws60au5o8rdhi71vy5qzczoihiqi-0to7f4r0hk1nnvw3s4hckdakb 172.18.77.207:2377
This node joined a swarm as a worker.

#查看加入的节点信息
[root@docker1 ~]# docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
xla5se30w25kl69mspl6ojrqh *   docker1    Ready     Active         Leader           20.10.7
iji18ryi39e2fpf7mo37dt49y     docker2    Ready     Active                          20.10.7

#生成worker令牌
[root@docker1 ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-1xqmstk66u6emvfw2z6a7gws60au5o8rdhi71vy5qzczoihiqi-0to7f4r0hk1nnvw3s4hckdakb 172.18.77.207:2377

#加入worker节点
[root@docker3 ~]# docker swarm join --token SWMTKN-1-1xqmstk66u6emvfw2z6a7gws60au5o8rdhi71vy5qzczoihiqi-0to7f4r0hk1nnvw3s4hckdakb 172.18.77.207:2377
This node joined a swarm as a worker.

#查看加入的节点信息
[root@docker1 ~]# docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
xla5se30w25kl69mspl6ojrqh *   docker1    Ready     Active         Leader           20.10.7
iji18ryi39e2fpf7mo37dt49y     docker2    Ready     Active                          20.10.7
rywzzwhfnvry0rdeto1r2ot8b     docker3    Ready     Active                          20.10.7

#生成manager令牌
[root@docker1 ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-1xqmstk66u6emvfw2z6a7gws60au5o8rdhi71vy5qzczoihiqi-4b412prfpzednxsvwspjp3rj6 172.18.77.207:2377

#加入manager节点
[root@docker4 ~]# docker swarm join --token SWMTKN-1-1xqmstk66u6emvfw2z6a7gws60au5o8rdhi71vy5qzczoihiqi-4b412prfpzednxsvwspjp3rj6 172.18.77.207:2377
This node joined a swarm as a manager.

#查看加入的节点信息
[root@docker1 ~]# docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
xla5se30w25kl69mspl6ojrqh *   docker1    Ready     Active         Leader           20.10.7
iji18ryi39e2fpf7mo37dt49y     docker2    Ready     Active                          20.10.7
rywzzwhfnvry0rdeto1r2ot8b     docker3    Ready     Active                          20.10.7
xz66ze5hi5ay7pkb4lbfr398b     docker4    Ready     Active         Reachable        20.10.7

Raft协议

双主双从:假如一个节点挂了,其他节点是否可用?

Raft协议:保证大多数节点存活才可以用,至少要 > 1,集群至少 > 3

#实验
#停掉docker1主节点
[root@docker1 ~]# systemctl stop docker

#会发现docker4节点也无法使用
[root@docker4 ~]# docker node ls
Error response from daemon: rpc error: code = Unknown desc = The swarm does not have a leader. It's possible that too few managers are online. Make sure more than half of the managers are online.

#重新启动docker1后,发现docker4成为了新的leader
[root@docker1 ~]# systemctl start docker
[root@docker4 ~]# docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
xla5se30w25kl69mspl6ojrqh     docker1    Ready     Active         Reachable        20.10.7
iji18ryi39e2fpf7mo37dt49y     docker2    Ready     Active                          20.10.7
rywzzwhfnvry0rdeto1r2ot8b     docker3    Unknown   Active                          20.10.7
xz66ze5hi5ay7pkb4lbfr398b *   docker4    Ready     Active         Leader           20.10.7


#尝试将docker3离开节点
[root@docker3 ~]# docker swarm leave
Node left the swarm.

#可以看到docker3的状态显示为Down
[root@docker1 ~]# docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
xla5se30w25kl69mspl6ojrqh *   docker1    Ready     Active         Reachable        20.10.7
iji18ryi39e2fpf7mo37dt49y     docker2    Ready     Active                          20.10.7
rywzzwhfnvry0rdeto1r2ot8b     docker3    Down      Active                          20.10.7
xz66ze5hi5ay7pkb4lbfr398b     docker4    Ready     Active         Leader           20.10.7

#将docker3重新以manager身份加入节点
[root@docker1 ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-1xqmstk66u6emvfw2z6a7gws60au5o8rdhi71vy5qzczoihiqi-4b412prfpzednxsvwspjp3rj6 172.18.77.207:2377
[root@docker3 ~]# docker swarm join --token SWMTKN-1-1xqmstk66u6emvfw2z6a7gws60au5o8rdhi71vy5qzczoihiqi-4b412prfpzednxsvwspjp3rj6 172.18.77.207:2377
This node joined a swarm as a manager.

[root@docker3 ~]# docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
xla5se30w25kl69mspl6ojrqh     docker1    Ready     Active         Reachable        20.10.7
iji18ryi39e2fpf7mo37dt49y     docker2    Ready     Active                          20.10.7
r1us2r3piwb6tsxlnucqac1sx *   docker3    Ready     Active         Reachable        20.10.7
rywzzwhfnvry0rdeto1r2ot8b     docker3    Down      Active                          20.10.7
xz66ze5hi5ay7pkb4lbfr398b     docker4    Ready     Active         Leader           20.10.7

#worker节点就是工作的、只有管理节点才能操作
[root@docker2 ~]# docker node ls
Error response from daemon: This node is not a swarm manager. Worker nodes can't be used to view or modify cluster state. Please run this command on a manager node or promote the current node to a manager.

#当有三个主节点的时候,停掉docker1节点
[root@docker1 ~]# systemctl stop docker

#发现这次其他主节点依然可以正常使用
[root@docker4 ~]# docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
xla5se30w25kl69mspl6ojrqh     docker1    Ready     Active         Unreachable      20.10.7
iji18ryi39e2fpf7mo37dt49y     docker2    Ready     Active                          20.10.7
r1us2r3piwb6tsxlnucqac1sx     docker3    Ready     Active         Reachable        20.10.7
rywzzwhfnvry0rdeto1r2ot8b     docker3    Down      Active                          20.10.7
xz66ze5hi5ay7pkb4lbfr398b *   docker4    Ready     Active         Leader           20.10.7

#停掉两个主节点
[root@docker3 ~]# systemctl stop docker

#发现docker4主节点也无法使用了
[root@docker4 ~]# docker node ls
Error response from daemon: rpc error: code = Unknown desc = The swarm does not have a leader. It's possible that too few managers are online. Make sure more than half of the managers are online.



结论: 要保证集群的高可用,至少要设置三台主节点,并且要保证存活的节点 >1

体会

弹性,扩缩容,集群

以后告别 docker run

docker-compose up 启动一个容器! 单机!

集群:swarm 命令 docker service

容器 --> docker service

容器!–> 服务!–> 副本!

docker server命令

[root@docker01 ~]# docker service --help

Usage:  docker service COMMAND

Commands:
  create      创建一个service
  inspect     查看service细节
  logs        查看service日志
  ls          列出所有service
  ps          列出正在运行的service服务
  rm          删除一个services
  rollback    回滚节点
  scale       动态扩缩容
  update      更新service

docker run	# 容器启动! 不具有扩缩容功能!
docker service 	# 服务!具有扩缩容功能! 滚动更新!

#创建一个服务
[root@docker1 ~]# docker service create -p 8888:80 --name my-nginx nginx
r92nojin01z5phvx13b4ix2xy
overall progress: 1 out of 1 tasks 
1/1: running   [==================================================>] 
verify: Service converged 

#查看服务
[root@docker1 ~]# docker service ls
ID             NAME       MODE         REPLICAS   IMAGE          PORTS
r92nojin01z5   my-nginx   replicated   1/1        nginx:latest   *:8888->80/tcp

# 发现在docker01启动的容器,确跑在docker02上面(集群内部随机分布!)
[root@docker01 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

[root@docker02 ~]# docker ps
CONTAINER ID   IMAGE               STATUS         PORTS     NAMES
cb9bf02f094c   nginx:latest       Up 4 minutes   80/tcp    my-nginx.1.6mkcbs9nfkezz2fz50t2t24tq

[root@docker03 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

[root@docker04 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

#通过web访问ip+端口 发现无论用那一台服务器的ip都可以访问到nginx

动态扩缩容

[root@docker01 ~]# docker service ls
ID             NAME       MODE         REPLICAS   IMAGE          PORTS
ngvtl97e1dwj   my-nginx   replicated   1/1        nginx:latest   *:888->80/tcp
# 现在只有一个副本,如果业务量增多,一个副本扛不住,这个时候就需要扩容

# 更新副本数量(动态扩缩容)
[root@docker1 ~]# docker service update --replicas 10 my-nginx
my-nginx
overall progress: 10 out of 10 tasks 
1/10: running   [==================================================>] 
2/10: running   [==================================================>] 
3/10: running   [==================================================>] 
4/10: running   [==================================================>] 
5/10: running   [==================================================>] 
6/10: running   [==================================================>] 
7/10: running   [==================================================>] 
8/10: running   [==================================================>] 
9/10: running   [==================================================>] 
10/10: running   [==================================================>] 
verify: Service converged 

# 查看副本已添加(随机分配到集群中的服务器)
[root@docker1 ~]# docker service ls
ID             NAME       MODE         REPLICAS   IMAGE          PORTS
r92nojin01z5   my-nginx   replicated   10/10      nginx:latest   *:8888->80/tcp

[root@docker1 ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS              PORTS     NAMES
341558d273de   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    my-nginx.6.ttj2nufw1o2c6p11ddqlx76oq
e60f832c63d1   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    my-nginx.10.2fbqzi8efv3ryryotesxuexpz
f819dfbdf25a   nginx:latest   "/docker-entrypoint.…"   20 minutes ago       Up 20 minutes       80/tcp    my-nginx.1.5tqjljvj8mdt4oengoowk1ynk

[root@docker2 ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS              PORTS     NAMES
57834e105680   nginx:latest   "/docker-entrypoint.…"   58 seconds ago       Up 51 seconds       80/tcp    my-nginx.9.r77d9gd0a43xvcwp34od0041k
e6e5e720118b   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    my-nginx.8.ocgzy8opwk54g0dt9dm22m5xt
1da5e34ff3b8   nginx:latest   "/docker-entrypoint.…"   3 minutes ago        Up 3 minutes        80/tcp    my-nginx.3.4g7mm96gjlnfggquyjz3gdbbn

[root@docker4 ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS              PORTS     NAMES
e30280a05b9a   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up 57 seconds       80/tcp    my-nginx.4.s0vj1eddlsolt92u3hajs9z4w
b5f998f7e689   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up 57 seconds       80/tcp    my-nginx.5.mckcf6ijf3nsob5arspda9e7l
256b80486e0f   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    my-nginx.7.fpiiysboabrkqggwt5t1n2mut
fe757cb65902   nginx:latest   "/docker-entrypoint.…"   3 minutes ago        Up 3 minutes        80/tcp    my-nginx.2.pf4l98g49vlntyggql8k796qw

# 动态扩缩容(可以动态自由更改)
[root@docker1 ~]# docker service update --replicas 1 my-nginx
my-nginx
overall progress: 1 out of 1 tasks 
1/1:   
verify: Service converged 
[root@docker1 ~]# docker service ls
ID             NAME       MODE         REPLICAS   IMAGE          PORTS
r92nojin01z5   my-nginx   replicated   1/1        nginx:latest   *:8888->80/tcp


#删除服务
[root@docker1 ~]# docker service rm my-nginx
my-nginx
[root@docker1 ~]# docker service ls
ID        NAME      MODE      REPLICAS   IMAGE     PORTS


服务: 集群是一个整体,他的任意一个节点都可以访问;服务可以有多个副本,随时动态扩缩容实现高可用!

工作原理: 一个 service 可以创建多个副本,每一个副本就是一个 task 任务 ,任务里面跑的就是我们的容器

内部原理: 命令 --> 管理者 --> api – >scheduler(调度) --> 工作节点(创建Task容器,维护创建!)

概念总结

swarm

集群的管理和编排,docker可以初始化一个swarm集群,其他节点可以加入,加入的角色有管理者(manager),工作者(worker)

node

就是一个docker节点,多个节点组成一个网络集群,节点的角色有管理者(manager),工作者(worker)

service

任务,可以在管理节点或者工作节点来运行,核心!用户可以访问!

Task

容器内的命令,细节任务

Docker Stack

大规模场景下的多服务部署和管理是一件很难的事情!

幸运的是,Docker Stack 为解决该问题而生,Docker Stack 通过提供期望状态、滚动升级、简单易用、扩缩容、健康检查等特性简化了应用的管理,这些功能都封装在一个完美的声明式模型当中。

Stack 能够在单个声明文件中定义复杂的多服务应用。Stack 还提供了简单的方式来部署应用并管理其完整的生命周期:初始化部署 -> 健康检查 -> 扩容 -> 更新 -> 回滚,以及其他功能!

单机模式下,我们可以使用 Docker Compose 来编排多个服务,而 Docker Swarm 只能实现对单个服务的简单部署。通过 Docker Stack 我们只需对已有的 docker-compose.yml 配置文件稍加改造就可以完成 Docker 集群环境下的多服务编排。

pi – >scheduler(调度) --> 工作节点(创建Task容器,维护创建!)

概念总结

swarm

集群的管理和编排,docker可以初始化一个swarm集群,其他节点可以加入,加入的角色有管理者(manager),工作者(worker)

node

就是一个docker节点,多个节点组成一个网络集群,节点的角色有管理者(manager),工作者(worker)

service

任务,可以在管理节点或者工作节点来运行,核心!用户可以访问!

Task

容器内的命令,细节任务

Docker Stack

大规模场景下的多服务部署和管理是一件很难的事情!

幸运的是,Docker Stack 为解决该问题而生,Docker Stack 通过提供期望状态、滚动升级、简单易用、扩缩容、健康检查等特性简化了应用的管理,这些功能都封装在一个完美的声明式模型当中。

Stack 能够在单个声明文件中定义复杂的多服务应用。Stack 还提供了简单的方式来部署应用并管理其完整的生命周期:初始化部署 -> 健康检查 -> 扩容 -> 更新 -> 回滚,以及其他功能!

单机模式下,我们可以使用 Docker Compose 来编排多个服务,而 Docker Swarm 只能实现对单个服务的简单部署。通过 Docker Stack 我们只需对已有的 docker-compose.yml 配置文件稍加改造就可以完成 Docker 集群环境下的多服务编排。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值