docker-comper编排

1.下载pip

[root@localhost ~]# yum -y install python2-pip
[root@localhost ~]# pip list
[root@localhost ~]# pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
如果提示没有config是因为pip版本较低,使用下面命令升级
[root@localhost ~]# pip install --upgrade pip==20.3  -i https://mirrors.aliyun.com/pypi/simple          //使用阿里云镜像站临时安装pip-20.3

2.下载docker-compose


docker-compose 是一个用于定义和运行多容器Docker应用程序的工具。 
[root@localhost ~]# pip install docker-compose --ignore-installed requests                                             //--ignore-installed requests 这个用法在确保 docker-compose 安装不会因 requests 包的版本问题而失败[root@localhost ~]# pip list                   //1.18及以上
docker-compose                     1.26.2

3.上传harbor压缩包到该主机


下载地址:
https://github.com/goharbor/harbor/releases/download/v2.11.1/harbor-offline-installer-v2.11.1.tgz
使用(vpn)不然很慢

[root@localhost ~]# ls                         
harbor-offline-installer-v2.11.1.tgz
[root@localhost harbor]# vim /etc/docker/daemon.json                    //修改daemon.json文件
{
    "registry-mirrors": [
    "https://do.nark.eu.org",
    "https://dc.j8.work",
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.nju.edu.cn"
    ],

        "hosts": [
        "tcp://0.0.0.0:2375",
        "unix:///var/run/docker.sock"
    ],         
    "insecure-registries":[
        "http://192.168.1.20"
    ]         
}
[root@localhost ~]# docker --version            //这里docker版本必须大于20.10及以上,并且已经启动
Docker version 26.1.4, build 5650f9b
[root@localhost ~]# tar -zxvf harbor-offline-installer-v2.11.1.tgz                  //解压harbor
[root@localhost ~]# cd harbor/
[root@localhost harbor]# ls
common.sh  harbor.v2.11.1.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare
[root@localhost harbor]# cp harbor.yml.tmpl harbor.yml            //备份这个模板在复制模板上修改
[root@localhost harbor]# vim harbor.yml                                //修改配置文件


[root@localhost harbor]# ./prepare                            //运行
[root@localhost harbor]# netstat -lnput|grep 5000                   //5000和80端口不能被占用
[root@localhost harbor]# netstat -lnput|grep 80
[root@localhost harbor]# ./install.sh                          //

浏览器访问本机IP:192.168.1.20

输入用户名密码:默认用户名:admin 默认密码Harbor12345

4.使用harbor上传镜像

[root@localhost harbor]# docker login http://192.168.1.20                //必须先登录
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@localhost harbor]# docker images                      //查看镜像
REPOSITORY                      TAG       IMAGE ID       CREATED         SIZE
centos                          httpd0    b91c1a8e080f   45 hours ago    338MB        //几天前创建的
goharbor/harbor-exporter        v2.11.1   cdf68efc001e   13 days ago     114MB
goharbor/redis-photon           v2.11.1   acf90a312d47   13 days ago     170MB
goharbor/trivy-adapter-photon   v2.11.1   24a8273e807a   13 days ago     339MB
goharbor/harbor-registryctl     v2.11.1   43fca2a06374   13 days ago     168MB
goharbor/registry-photon        v2.11.1   9da6663b36f2   13 days ago     90.3MB
goharbor/nginx-photon           v2.11.1   193a1b77b7d4   13 days ago     159MB
goharbor/harbor-log             v2.11.1   2752e033bfbb   13 days ago     169MB
goharbor/harbor-jobservice      v2.11.1   a8005a88b3dc   13 days ago     165MB
goharbor/harbor-core            v2.11.1   eaf65baad3f6   13 days ago     191MB
goharbor/harbor-portal          v2.11.1   f58813018a49   13 days ago     167MB
goharbor/harbor-db              v2.11.1   be56f8030c48   13 days ago     277MB
goharbor/prepare                v2.11.1   1d00ffdb2e67   13 days ago     216MB
registry                        latest    cfb4d9904335   11 months ago   25.4MB
centos                          latest    5d0da3dc9764   2 years ago     231MB
[root@localhost harbor]# docker tag centos:httpd0 192.168.1.20/library/centos:httpd  //打标签
[root@localhost harbor]# docker images
192.168.1.20/library/centos     httpd     b91c1a8e080f   45 hours ago    338MB    //刚刚打了标签的
[root@localhost harbor]# docker push 192.168.1.20/library/centos:httpd           //上传

浏览器访问:看到镜像已经上传成功


如何拉取


5.在其他主机上下载镜像

下载docker
[root@localhost ~]# vim /etc/docker/daemon.json           //指定镜像仓库
{
    "insecure-registries":[
        "http://192.168.1.20"
    ]         
}
[root@localhost ~]# systemctl restart docker                    //重启
[root@localhost ~]# docker pull 192.168.1.20/library/centos:httpd               //粘贴复制过来的拉取指令
[root@localhost ~]# docker run -it 192.168.1.20/library/centos:httpd /bin/bash       //创建容器测试

6.Docker-compose管理项目


(1)Docker-compose 定义
1. docker compose 是 docker 官⽅的开源项⽬,负责实现对docker 容器集群的快速编排(容器,依赖,⽹络,挂载)
2. compose 是 docker 公司推出的⼀个⼯具软件,可以管理多个docker 容器组成的应⽤
3. 需要定义⼀个 YAML 格式的配置⽂件 docker-compose.yml,写好多个容器之间的调⽤关系
4. 使⽤ compose 的步骤、
5. 1. 使⽤ Dockerfile 定义各个微服务应⽤并构建出对应的镜像⽂件Dockerfile 的使⽤,以便可以在任何地⽅复制。
2. 使⽤ docker-compose.yml 定义⼀个完整的业务单元,安排好整体应⽤中的各个容器服务。
3. 最后,执⾏ docker-compose up 命令来启动并运⾏整个应⽤程序,完成⼀键部署。

(2)Docker-compose 产⽣背景
1. 使⽤ Dockerfile 定义镜像⽂件,再⼿动构建、运⾏容器等操作,⽽微服务架构⼀般包含若⼲个微服务,且每个微服务⼀般都会部署多个实例,所以,若每个微服务都需要⼿动启停,那么维护量会⾮常庞⼤,并且⼯作效率也会很低。
2. ⽽ compose 是⽤于定义和运⾏多容器 docker 应⽤程序的⼯具。通过 compose,可以使⽤ YML ⽂件来配置应⽤程序需要的所有服务。
3. 仅需使⽤⼀个命令,就可以从 YML ⽂件配置中创建并启动所有服务。
4. Compose 可以基于 Compose ⽂件帮我们快速的部署分布式应⽤,⽆需⼿动⼀个个创建和运⾏容器。
5. Compose ⽂件是⼀个⽂本⽂件,通过指令定义集群中的每个容器如何运⾏。

(3)Docker-compose 核⼼概念
Docker-compose 将管理的容器分为三层:⼯程(project)、服务(service)、容器(container)
1. ⼯程:运⾏ compose 的⽬录下所有的⽂件,包括 dockercompose.yml、extends ⽂件、环境变量⽂件等组成⼀个⼯程,若⽆特殊指定⼯程,⼯程名即为当前⽬录名。⼯程的默认配置⽂件为 docker-compose.yml,可通过环境变量 COMPOSE_FILE或 -f 参数⾃定义配置⽂件,其定义了多个有依赖关系的服务及每个服务运⾏的容器。
2. 服务:⼀个⼯程中包含多个服务,每个服务中定义了容器运⾏的镜像、参数、依赖等。⼀个服务中可包括多个容器实例。
3. 容器:被 docker-compose 管理或部署的容器集群,调⽤docker 服务提供的 API 来对容器进⾏管理,只要操作的平台⽀持 docker API,即可在其上进⾏ compose 的容器编排。

(4)YAML ⽂件的格式和语法
1)YAML ⽂件格式
1. yaml 是⼀种标记语⾔很直观的数据序列化格式,可读性很⾼。类似于 xml 描述性语⾔,语法⽐xml简单的很多。
2. yaml 数据结构通过缩进进⾏表示,连续的项⽬通过减号来表示,键值对⽤冒号分隔,数组⽤中括号括起来,hash⽤花括号括起来。
3. yaml ⽂件的基本格式由⼀系列键值对构成。每个键值对都⽤冒号“: ”分隔
注:如果值包含特殊字符(如冒号或短横线),则应该使⽤引号将其括起来,如:description: "This is a YAML file: good for configuation files."

2)YAML 注意事项
1. 不⽀持制表符 tab 键缩进,需要使⽤空格缩进。
2. 通常开头缩进 2 个空格。
3. 字符后缩进 1 个空格,如:冒号,逗号,横杠。
4. ⽤ # 表示注释。
5. 如果包含特殊字符⽤单引号引起来。
6. 布尔值(true、false、yes、no、on、off)必须使⽤“”引号括起来,这样分析器会将它们解释为字符串。

3)列表和数组
在yaml中,可以使⽤“-”符号表示⼀个列表和数组

fruits:          # fruits是⼀个键,它对应⼀个列表,包含三个元素:apple、banana、orange
  - apple        # fruits为⼀个⼤项,下⾯的⼩项只需要缩进⼏个空格,与其他项⽬对⻬即可
  - banana
  - orange

4)嵌套数据结构
yaml⽀持嵌套数据结构,可以⽤缩进来表示不同层级之间的关系,可使⽤ # 号表示注释信息。

person: 
     name: 'Meng Mr'             # 两个空格,name和age是person的⼀级⼦节点
     age: "34"
     address:                     # address是person的⼆级⼦节点
         street: '123 Main St'     # address节点包含了street、city、state和zip四个⼀级⼦节点
         city: 'Anytown'
         state: 'CA'
         zip: '12345'

(5)docker-compose 命令解析
1、⽂件内常⽤指令字段
(1)version
指定了Docker compose编排⽂件的版本
Docker Compose ⽬前有三个版本,分别为 Version1、Version2和Version3。
Version1 是较早的版本,它将来会被弃⽤。
Version2 是⽬前的稳定版本,⽀持更多的指令。
Version3 在功能上与 Version2 类似,但进⾏了⼀些改进和扩展,例如增加了对 Docker BuildKit 的⽀持,可以加速构建过程。

(2)service
指定了在 docker compose 编排中要运⾏的服务,每个服务都有⼀个名称,并指定要使⽤的镜像和容器的配置选项。

services:
     mysql:     #服务名
            # 再往下可以对该服务进⾏定义,⽐如指定映射端⼝,指定使⽤的镜像等,但要注意缩进格式。

(3)image
指定要使⽤的 docker 镜像。

services:
     mysql:                 # 服务名
         image: mysql:5.5     # 指定mysql镜像,如果主机内不存在该镜像,会从登录的docker镜像仓库内拉取,⼀般都是从dockerhub上拉取

(4)build
允许在 docker compose 编排中指定 dockerfile 的位置。

services:
     mysql:                    # 服务名
         build: /docker/mysql     # 这⾥为⽤户微服务⽂件夹,⾥⾯存放的是该服务代码jar包和Dockerfile⽂件

(5)environment
指定了要设置的环境变量。

services:
     mysql: # 服务名
         environment:                         # 下⾯是MySQL环境变量的例⼦
         MYSQL_ROOT_PASSWORD: 000000         # 设置MySQL的root⽤户的密码
         MYSQL_DATABASE: database             # 指定要创建的数据库名称
         MYSQL_USER: user                     # 指定要创建的MySQL⽤户名
         MYSQL_PASSWORD: 123                 # 指定要创建的MySQL⽤户的密码

(6)volumes
挂载宿主机路径或命名卷

1. 指定路径挂载

services:
     mysql:                             # 服务名
        volumes:
        - ./mysql/data:/var/lib/mysq     # 直接指定路径挂载
[root@doc ~]# docker volume create mysql      //⽣成名为mysql的volume卷

2.共享⽬录挂载

[root@doc ~]# vim docker-compose.yml
version: '2'                             # 使⽤共享⽬录挂载只有‘2’版本⽀持
service:
     mysql: # 服务名
         volumes:
        - /var/lib/mysql                 # 将这个⽬录作为共享⽬录
     nginx:
         volumes:
        - /usr/local/nginx/html
     php:
         volumes_from:                 # 共享⽬录来⾃
         - mysql                         # 挂载的共享⽬录,挂载后会在容器内⽣成与被挂载的⽬录同名的路径
        - nginx                         # 共享挂载可以是⼀个列表

(7)port
指定了要宿主机映射到容器的端⼝,端⼝不能低于 60(宿主机端⼝:容器端⼝),如果选择的端⼝号低于 60,可能会与系统保留的知名端⼝冲突。

services:
     mysql:                 # 服务名
         ports:
        - 3306:3306         # 宿主机端⼝:容器端⼝

(8)expose
⽤于在 docker 容器内部暴露端⼝的选项。

services:
     mysql:                 # 服务名
         expose:
        - 3306

(9)networks
加⼊⽹络,引⽤顶级 networks 条⽬.

networks:                     # 与services同级
     dev:                     # ⾃定义或已存在的⽹络设备名
         driver: bridge         # 设备类型:⽹桥
         external: true             # 外部存在:是

(10)hostname
设定容器主机名

services:
     mysql:                     # 服务名
         hostname: mysql        #主机名

(11)command
指定容器启动时要运⾏的命令,覆盖构建时的默认命令

services:
     mysql:                     #服务名
         command: --character-set·server=utf-8


2、docker compose 命令选项
1. build:重新构建服务
2. ps:列出容器
3. up:启动所有docker-compose服务
4. up -d:启动所有docker-compose服务启动并后台运⾏
5. exec:进⼊容器实例内部
6. scale:指定⼀个服务器启动数量
7. top:显示容器进程
8. logs:查看容器输出⽇志
9. down:停⽌并删除容器、⽹络、卷、镜像
10. stop:停⽌服务
11. start:启动服务
12. restart:重启服务
13. config:检查配置
14. config -q:检查配置,有问题才有输出
15. --version:查看版本


7.Docker-compose实例
环境:主机192.168.1.80

安装docker
使用脚本(在最前面的docker里面,去找)

[root@localhost ~]# source docker.sh 
[root@localhost ~]# vim /etc/docker/daemon.json 
{
    "registry-mirrors": [
        "https://do.nark.eu.org",
        "https://dc.j8.work",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
        ],
    "hosts": [
        "tcp://0.0.0.0:2375",
        "unix:///var/run/docker.sock"
    ]        
}
[root@localhost ~]# vim /usr/lib/systemd/system/docker.service 
[root@localhost ~]# systemctl daemon-reload 
[root@localhost ~]# systemctl restart docker

(1)创建yml文件(这里推荐使用visual studio code创建)
[root@localhost ~]# mkdir test
[root@localhost ~]# cd test/
[root@localhost test]# vim docker-compose.yml
version: "3"
services:
  nginx:
    container_name: c1
    image: "nginx:latest"
    ports: 
    - "80:80"
    volumes:
    - /root/test/html/:/usr/share/nginx/html/

(2)创建数据卷⽬录
[root@localhost test]# mkdir html
[root@localhost test]# echo "zz" > ./html/index.html
[root@localhost test]# ls
docker-compose.yml  html

(3)启动compose 集群
[root@localhost test]# docker compose up -d
[root@localhost test]# docker ps --all                             //容器已经启动
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS          PORTS                               NAMES
34c7373321ce   nginx:latest   "/docker-entrypoint.…"   17 seconds ago   Up 16 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   c1

(4)访问测试
[root@localhost test]# curl localhost                          //能访问到
zz

  • 24
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值