史上最详细的docker学习手册,请查收!(三)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 史上最详细的docker学习手册,请查收!(三)

七、镜像仓库管理系统搭建


搭建一个镜像仓库管理系统需要3个步骤,分别是:生成一个认证文件,rsa的认证文件;创建一个仓库容器;创建一个仓库web管理系统

  • 生成一个认证文件,rsa的认证文件
#建立/app/registry-jackly/conf,在/app/registry-jackly目录下执行 以下命令:
openssl req -new -newkey rsa:4096 -days 365 -subj "/CN=localhost"  -nodes -x509 -keyout conf/auth.key -out conf/auth.cert
  • 创建一个仓库容器
#创建配置文件/app/registry-jackly/conf/registry-jackly.yml
version: 0.1
#镜像存储地方
storage:
  filesystem:
    rootdirectory: /var/lib/registry
  #镜像的删除权限,enabled: true代表开启删除权限
  delete:
    enabled: true
log:
  level: info
#开启仓库的网络,端口号为5000
http:
  addr: 0.0.0.0:5000
#创建仓库命令
docker run \
-v /app/registry-jackly/conf/registry-jackly.yml:/etc/docker/registry/config.yml:ro \
-v /app/registry-jackly/conf/auth.cert:/etc/docker/registry/auth.cert:ro \
-p 5000:5000  --name registry-docker -d \
--privileged=true \
registry
  • 创建一个仓库web管理系统
#创建一个配置文件:/app/registry-jackly/conf/registry-web.yml
registry:
  # 指定registry的地址(注意:registry-docker为仓库的容器名字)
  url: http://registry-docker:5000/v2
  #仓库的名称(注意:registry-docker为仓库的容器名字)
  name: registry-docker:5000
  #是否为只读模式,设置true时,不允许删除镜像
  readonly: false
  #权限验证
  auth:
    #是否开启验证
    enabled: true
    #验证证书的key
    key: /conf/auth.key
    #证书颁发者的名称
    issuer: docker
#创建仓库web管理系统命令(注意:--link registry-docker很重要,没有的话,无法连接仓库。)
docker run \
-v /app/registry-jackly/conf/registry-web.yml:/conf/config.yml:ro \
-v /app/registry-jackly/conf/auth.key:/conf/auth.key \
-v /app/registry-jackly/db:/data \
-d -p 8080:8080 --link registry-docker --name registry-web \
--privileged=true \
hyper/docker-registry-web
  • 效果验证
#登录仓库管理系统
http://172.31.65.26:8080/login/auth
用户名=admin
密码 =admin
#构建镜像
#其中 -t 对镜像进行命名,一般的命名法:仓库名字/镜像名字:版本号
#注意:其中 .号,代表当前目录下的dockerfile文件
docker build -t registry-docker:5000/eureka-server:3.0.0 .
#修改hosts(vi /etc/hosts)
127.0.0.1 registry-docker
#给搭建好的仓库加个镜像 
docker push registry-docker:5000/eureka-server:3.0.0
#权限设置
默认admin用户是没有删除权限,需要重新创建用户,并且给予权限。


八、maven构建springcloud镜像


在先前构建项目时,先通过maven打包出jar,在手动上传到虚拟机上,并编写dockerfile文件,在使用docker build命令构建镜像,比较繁琐。实际上可以通过maven来直接构建springcloud镜像,maven构建springcloud镜像推送给仓库,需要2步骤:开启docker远程API;编写maven的docker插件。

  • 开启docker远程API
#在配置文件中,加入:-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
vi /usr/lib/systemd/system/docker.service
#重启docker
systemctl daemon-reload
systemctl restart docker
#验证docker远程api是否生效
netstat -anp|grep 2375
curl 127.0.0.1:2375/info
  • 编写maven的docker插件
#本地配置hosts(c:\windows\system32\drivers\etc)
172.31.65.26 registry-docker
#docker maven插件
<build>
  <plugins>
   <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
   <!-- 添加docker maven插件 -->
   <plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.1.1</version>
    <configuration>
     <!-- 推送到指定的仓库 -->
     <registryUrl>registry-docker:5000</registryUrl>
     <!-- 开启docker远程API的端口 -->
     <dockerHost>http://registry-docker:2375</dockerHost>
     <!-- 指定镜像名称 格式:仓库域名:端口/镜像名字:镜像的版本号 -->
     <imageName>registry-docker:5000/${project.artifactId}:${project.version}</imageName>
     <!-- 指定基础镜像 类似dockerfile的FROM指令 -->
     <baseImage>java:8</baseImage>
     <!-- 配置容器启动后,执行什么命令,等于与 dockerfile的ENTRYPOINT -->
     <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
     <!-- 为dockerde tag指定版本号、latest -->
     <imageTags>
      <imageTag>${project.version}</imageTag>
      <imageTag>latest</imageTag>
     </imageTags>
     <!-- 是否有push的功能 true代表有 -->
     <pushImage>true</pushImage>
     <!-- push后是否覆盖已存在的标签镜像 -->
     <forceTags>true</forceTags>
     <!-- 复制jar包到docker容器指定的目录 -->
     <resources>
      <resource>
       <targetPath>/</targetPath>
       <!-- 指定要复制jar包的根目录,${project.build.directory}代表 target的目录 -->
       <directory>${project.build.directory}</directory>
       <!-- 指定要复制的文件,${project.build.finalName}代表打包后的jar -->
       <include>${project.build.finalName}.jar</include>
      </resource>
     </resources>
    </configuration>
   </plugin>
  </plugins>
 </build>
#执行命令
clean package -DskipTests docker:build
  • 验证效果

九、编排构建springcloud实例


  • 什么是compose为什么要使用compose
    因为运行一个docker镜像,通常是需要docker run 命令,在运行镜像的时候还需要一定的参数 ;例如 容器的名称 映射的卷,绑定端口等等,非常麻烦。那如果有个一个文件来记录保存这些命令该多好?所以compose就是用于存储这些命令,而且呢是比docker run还要简单存储。那compose是什么呢?它既是一个yaml格式的文件,例如docker-compose.yml文件。
#安装最新compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
#添加可执行权限
chmod +x /usr/local/bin/docker-compose
#测试安装结果
docker-compose --version
  • 自动构建spring cloud注册中心eureka
    创建一个网络
创建命令:docker network create dockernet
查看命令:docker network ls
  • compose内容:
#docker compse 的配置文件包含3大部分:version services networks
version: '3'
services:
  # 服务名称
  eureka:
    # 容器名称
    container_name: eureka
    # 镜像名称
    image: registry-docker:5000/eureka-server:0.0.1-SNAPSHOT
    # 暴露的端口号
    ports:
      - "8761:8761"
    # 设置卷挂载的路径 /opt/data代表的是日志存储路径 
    volumes: 
      - /app/service/eureka/logs:/opt/data
    # 设置权限 :拥有root权限
    privileged: true
    networks:
      - default
networks:
  default:
    external:
      name: dockernet
  • 运行命令
docker-compose -f docker-compose-eureka.yml  up -d
  • 演示效果
http://172.31.65.26:8761/
  • 自动构建spring cloud 配置中心config
    compose内容
version: '3'
services:
  config-server:
    container_name: config-server
    image: registry-docker:5000/config-server:0.0.1-SNAPSHOT
    ports:
      - "9030:9030"
    networks:
      - default
networks:
  default:
    external:
      name: dockernet
  • 运行命令
docker-compose -f docker-compose-config.yml  up -d
  • 演示效果
http://172.31.65.26:9030/e-book-product/default
  • 自动构建spring cloud 调用链zipkin
    compose内容
version: '3'
services:
  zipkin-server:
    container_name: zipkin-server
    image: registry-docker:5000/zipkin-server:0.0.1-SNAPSHOT
    ports:
      - "9411:9411"
    networks:
      - default
networks:
  default:
    external:
      name: dockernet
  • 运行命令
docker-compose -f docker-compose-zipkin.yml  up -d
  • 演示效果
http://172.31.65.26:9411
  • 自动构建spring cloud 日志系统ELK
    compose内容
version: '3'
services:
 elasticsearch:
  container_name: elasticsearch
  image: docker.elastic.co/elasticsearch/elasticsearch:6.1.1
  command: elasticsearch
  ports:
   - "9200:9200"
   - "9300:9300"
  privileged: true
  networks:
   - default
 logstash:
  container_name: logstash
  image: docker.elastic.co/logstash/logstash:6.1.1
  command: logstash -f /etc/logstash/conf.d/logstash.conf
  volumes:
   # 挂载logstash配置文件
   - /app/service/logstash/config:/etc/logstash/conf.d
   - /app/service/logstash/build/:/opt/build/
  ports:
   - "6000:5000"
  privileged: true
  networks:
   - default
 kibana:
  container_name: kibana
  image: docker.elastic.co/kibana/kibana:6.1.1
  environment:
   - ELASTICSEARCH_URL=http://elasticsearch:9200
  ports:
   - "5601:5601"
  privileged: true
  networks:
   - default
networks:
  default:
    external:
      name: dockernet
  • logstash.conf存放在/app/service/config下
# For detail structure of this file  
# Set: https://www.elastic.co/guide/en/logstash/current/configuration-file-structure.html  
input {  
  # For detail config for log4j as input,   
  # See: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html  
  tcp {  
    mode => "server"  
    host => "logstash"  #logstash容器名称
    port => 9250
  }  
}
filter {  
  #Only matched data are send to output.  
}  
output {  
  # For detail config for elasticsearch as output,   
  # See: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html  
  elasticsearch {  
    action => "index"          #The operation on ES  
    hosts  => "elasticsearch:9200"   #ElasticSearch host, can be array.  elasticsearch容器名称
    index  => "applog"         #The index to write data to.  
  }  
}
  • 运行命令
docker-compose -f docker-compose-elk.yml  up -d
 如果elasticsearch 报这个错误
  ERROR: [1] bootstrap checks failed
  [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
 解决方案:sudo sysctl -w vm.max_map_count=262144
  • 演示效果
#创建一个索引
curl -XPUT http://172.31.65.26:9200/applog
#进入elk页面
http://172.31.65.26:5601/app/kibana
  • 自动构建product 服务
    第一步:自动构建 mysql 微服务
# Docker Compose 配置文件,包含3大部分 version、services、networks
version: '3'
services: 
  # 服务名称
  mysql:
    # 容器名称
    container_name: mysql
    # 镜像名称
    image: mysql:5.7
    # 暴露端口
    ports:
      - "3306:3306"
    # 设置卷挂载路径 
    volumes:
      - /app/data/mysql:/var/lib/mysql
    # 环境变量
    environment:
      MYSQL_USER: root
      MYSQL_PASSWORD: agan
      MYSQL_ROOT_PASSWORD: agan
    # 设置权限 :拥有root权限
    privileged: true
    networks:
      - default
networks:
  default:
    external:
      name: dockernet
#启动mysql容器
docker-compose -f docker-compose-mysql.yml  up -d
  • 第二步:自动构建 product 微服务
#docker-compose-product.yml
version: '3'
services:
  product:
    container_name: e-book-product
    image: registry-docker:5000/e-book-product-core:0.0.1-SNAPSHOT
    ports:
      - "8083:8083"
    # 设置权限 :拥有root权限
    privileged: true
    networks:
      - default
networks:
  default:
    external:
      name: dockernet
#启动容器
docker-compose -f docker-compose-product.yml  up -d
  • 第三步:演示效果
#看注册中心
http://172.31.65.26:8761/
#产品查询接口
http://172.31.65.26:8083/product/findAllProduct
#看日志
http://172.31.65.26:5601/app/kibana
#调用链
http://172.31.65.26:9411/
  • 自动构建自动构建 user order trade consumer 微服务
    第一步:构建相关服务
#docker-compose-service.yml
version: '3'
services:
  product:
    container_name: e-book-product
    image: registry-docker:5000/e-book-product-core:0.0.1-SNAPSHOT
    ports:
      - "8083:8083"
    networks:
      - default
  user:
    container_name: e-book-user
    image: registry-docker:5000/e-book-user-core:0.0.1-SNAPSHOT
    ports:
      - "8084:8084"
    networks:
      - default
  order:
    container_name: e-book-order
    image: registry-docker:5000/e-book-order-core:0.0.1-SNAPSHOT
    ports:
      - "8085:8085"
    networks:
      - default
  trade:
    container_name: e-book-trade
    image: registry-docker:5000/e-book-trade-core:0.0.1-SNAPSHOT
    ports:
      - "8086:8086"
    networks:
      - default
  consumer:
    container_name: e-book-consumer-order
    image: registry-docker:5000/e-book-consumer-order:0.0.1-SNAPSHOT
    ports:
      - "8090:8090"
    networks:
      - default
networks:
  default:
    external:
      name: dockernet
#启动容器命令
docker-compose -f docker-compose-service.yml  up -d
  • 第二步:演示效果
#看注册中心
http://172.31.65.26:8761/
#产品查询接口
http://172.31.65.26:8083/product/findAllProduct
#创建订单
http://172.31.65.26:8090/createOrder
#看日志
http://172.31.65.26:5601/app/kibana
#调用链
http://172.31.65.26:9411/
  • 自动构建spring cloud 网关zuul
    第一步:构建zuul服务
#docker-compose-zuul.yml
version: '3'
services:
  zuul-gateway:
    container_name: zuul-gateway
    image: registry-docker:5000/zuul-gateway:0.0.1-SNAPSHOT
    ports:
      - "9010:9010"
    # 设置权限 :拥有root权限
    privileged: true
    networks:
      - default
networks:
  default:
    external:
      name: dockernet
#启动容器
docker-compose -f docker-compose-zuul.yml  up -d
  • 第二步:演示效果
http://172.31.65.26:9010/e-book-consumer-order/createOrder
http://172.31.65.26:9010/e-book-product/product/findAllProduct



以上,希望对你有所帮助!

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
3月前
|
运维 虚拟化 开发者
Docker-全面详解(学习总结---从入门到深化)
Docker-全面详解(学习总结---从入门到深化)
49 1
|
4月前
|
分布式计算 Java Linux
【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(Dockerfile使用手册)
Docker 是一套构建在 Linux 内核之上的高级工具,旨在帮助开发人员和运维人员更轻松地交付应用程序和依赖关系,实现跨系统和跨主机的部署。使用安全且轻量级的容器环境来实现这一目标。容器可以手动创建,也可以通过编写 Dockerfile 自动创建。开发人员和运维人员可以将应用程序及其依赖打包到容器中,实现应用程序的可移植性和环境一致性。
126 5
【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(Dockerfile使用手册)
|
19天前
|
监控 Docker 容器
Docker从入门到精通:Docker log 命令学习
了解 Docker 日志管理对容器监控至关重要。`docker logs` 命令用于查看和管理容器日志,例如,`docker logs &lt;container_name&gt;` 显示容器日志,`-f` 或 `--follow` 实时跟踪日志,`--tail` 显示指定行数,`--timestamps` 添加时间戳,`--since` 按日期筛选。Docker 支持多种日志驱动,如 `syslog`,可通过 `--log-driver` 配置。有效管理日志能提升应用程序的稳定性和可维护性。
17 0
|
28天前
|
存储 Ubuntu Docker
Docker从入门到精通:Docker pull命令学习
了解Docker镜像下载方法!使用`docker pull`命令从[Docker Hub](https://hub.docker.com/)获取镜像。基本语法是`docker pull NAME[:TAG]`。例如,拉取Python最新镜像的命令是`docker pull python`或`docker pull python:latest`。可选参数包括`-a`(拉取所有标签)和`--quiet`(只显示进度条)。拉取后,用`docker images`检查镜像是否成功存储。开始你的容器化之旅吧!
32 0
|
28天前
|
关系型数据库 MySQL Go
Docker从入门到精通:Docker镜像相关命令学习
本文介绍了Docker中管理镜像的基本命令:`docker images`用于查看镜像列表,`docker search`从Docker Hub搜索镜像,`docker rmi`删除镜像,`docker tag`则用于标记和重命名镜像。通过这些命令,用户能有效管理自己的Docker镜像资源。
28 1
|
2月前
|
Cloud Native Shell Linux
云原生专题 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
云原生专题 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
19 0
|
2月前
|
Cloud Native Linux 虚拟化
云原生专题 |【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(底层实现系列)
云原生专题 |【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(底层实现系列)
55 0
|
3月前
|
Ubuntu 应用服务中间件 Docker
docker-学习
docker-学习
22 0
|
3月前
|
消息中间件 RocketMQ Docker
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)
56 0
|
4月前
|
存储 运维 Linux
精彩推荐 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
在使用Docker时,管理维护工作可能会显得复杂。然而,实际上,Docker提供了许多便捷且人性化的工具,这些工具的使用技巧可以大大简化维护工作,并提升效率。通过掌握这些技巧,你不仅能够更轻松地管理Docker环境,还能展现出专业的能力。接下来我们就给大家介绍一下对于我在工作当中对于Docker容器使用的技术实战总结
49 2
精彩推荐 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)