学习一把 docker ,把运维的yml文件拿来看看

文章详细介绍了DockerCompose文件中关于网络、服务、端口映射、挂载卷、资源限制以及副本数的配置,包括external网络、extra_hosts、privileged模式、端口绑定、挂载本地jar包以及replicas的含义和用法。
摘要由CSDN通过智能技术生成

目录

学习一把 docker,先来一波注释:

再来一波注释:

这是加载本地的jar包

external: true  是什么意思?

外部怎么创建这个网络呢?

程序运行时候 jar包 在容器中的那个目录下?

extra_hosts: - "nacos-headless:192.168.136.121" 这个什么?怎么用呀

privileged: true # 获取更高的权限 这个有什么用?

ports: - "38941:38941" - "30384:30384" 为什么会有两个端口?

docker 常用 命令

docker network 给举例说明一下

docker volume:管理Docker卷 举例说明一下

replicas: 1 这是什么?


学习一把 docker,先来一波注释:

version: '3.7'  # 版本号,指定使用的 Docker Compose 文件格式的版本

networks:  # 定义网络
  kjds:  # 网络名字
    external: true  # 标记这个网络是外部网络

services:  # 定义服务
  kjds-maintenance-web:  # 服务名字
    image: registry.cn-shenzhen.aliyuncs.com/xxx-test/kjds.xxx.web:1.0.0-release  # 使用的镜像
    container_name: kjds-xxx-web  # 容器名字
    restart: always  # 容器退出时自动重启
    privileged: true  # 是否使用特权模式
    ports:  # 暴露端口
      - "80:80"  # 将容器的80端口映射到主机的80端口
    volumes:  # 挂载卷
      - ./web-init/url_map.env:/etc/url/API_URL:ro  # 映射文件
        # URL 替换, :ro 表示只读,容器内部无法修改
      - ./web-init/init.sh:/docker-entrypoint.d/init.sh  # 容器启动时运行的脚本
    networks:  # 连接的网络
      - kjds  # 连接 kjds 网络
    deploy:  # 部署配置
      replicas: 1  # 副本数
      resources:  # 资源限制
        limits:  # 设置容器的资源限制
          cpus: "0.3"  # 最多使用 30% 的 CPU
          memory: 1024M  # 最多使用 2G 的内存空间
        reservations:  # 设置为容器预留的系统资源(随时可用)
          cpus: "0.1"  # 保留 20% 的 CPU
          memory: 1024M  # 保留 2G 的内存空间
      update_config:  # 更新配置
        parallelism: 1  # 更新的容器数量
        delay: 10s  # 更新之间的时间间隔
      restart_policy:  # 容器重启策略
        condition: on-failure  # 容器退出状态码不为0时自动重启

再来一波注释:

version: '3.7'

# 定义网络
networks: 
  kjds:
    external: true

# 定义服务
services:
  # 接口服务
  base.svc.interface:
    image: registry.cn-shenzhen.aliyuncs.com/xxxx-test/kjds.svc.xxxx:1.4.4-SNAPSHOT
  
    container_name: kjds-svc-xxxx
    restart: always
    privileged: true
    # 定义端口映射
    ports: 
      - "38941:38941"
      - "30384:30384"
    # 指定使用的网络
    networks:
      - kjds
    # 定义挂载卷
    volumes:
      - ./config/xxxx/:/opt/kjds/xxxx/bank/ccb/:ro  # URL 替换
      - ./config/xxxx/:/opt/kjds/xxxx/guarantee/:ro  # URL 替换
    # 定义额外的 hosts
    extra_hosts:
      - "nacos-headless:192.168.136.121"
    # 定义部署配置
    deploy:
      replicas: 1
      # 定义资源限制
      resources:
        # 设置容器的资源限制
        limits:
          cpus: "0.5"  # 设置该容器最多只能使用 30% 的 CPU 
          memory: 3072M  # 设置该容器最多只能使用 2G 的内存空间 
        # 设置为容器预留的系统资源(随时可用)
        reservations:
          cpus: "0.4"  # 为该容器保留 20% 的 CPU
          memory: 2048M  # 为该容器保留 2G 的内存空间
      # 定义更新配置
      update_config:
        parallelism: 1
        delay: 10s
      # 定义重启策略
      restart_policy:
        condition: on-failure  # 当容器出现错误时重启容器

这是加载本地的jar包

version: '3'
services:
  mocktest:
    environment:
      - TZ=Asia/Shanghai
    container_name: mocktest
    image: openjdk:8
    ports:
      - 8885:8885
    volumes:
      - /usr/localjar/jarfile/ccb-test-0.0.1-SNAPSHOT.jar:/app/ccb-test-0.0.1-SNAPSHOT.jar
    command: java -jar /app/ccb-test-0.0.1-SNAPSHOT.jar
    restart: always  # 设置容器始终在停止时和启动时重启
    deploy:
      replicas: 1  # 设置服务的副本数量为 1,表示只部署一个实例
      resources:  # 资源限制配置
        limits:  # 设置容器的资源限制
          cpus: "0.3"  # 设置该容器最多只能使用 30% 的 CPU
          memory: 2048M  # 设置该容器最多只能使用 2G 的内存空间
        reservations:  # 设置为容器预留的系统资源(随时可用)
          cpus: "0.2"  # 为该容器保留 20% 的 CPUpw
          memory: 2048M  # 为该容器保留 2G 的内存空间
      update_config:
        parallelism: 1  # 设置同时进行更新的容器实例数量为 1
        delay: 10s  # 设置容器更新之间的延迟为 10 秒

external: true  是什么意思?

external: true 表示这个网络是由外部创建的,不由该 docker-compose 文件创建。这意味着在运行该 docker-compose 文件之前,该网络必须存在。一般情况下,这个外部网络是由其他 docker-compose 文件或手动创建的,该 docker-compose 文件需要连接到这个外部网络。这样可以在多个 docker-compose 项目之间共享网络,以便容器之间进行通信和服务发现。

外部怎么创建这个网络呢?

可以使用 docker network create 命令来创建一个外部网络。

举个例子,假设我们要创建一个名为 my-external-network 的外部网络,可以在终端输入以下命令:

docker network create --driver bridge my-external-network

这里使用了 bridge 驱动,也可以使用其他驱动,具体可以参考 Docker 官方文档。

创建好外部网络后,在编排文件中可以将 external 标记设置为 true,然后指定该外部网络的名称,这样 Docker 就可以在运行时将服务连接到该外部网络中。

程序运行时候 jar包 在容器中的那个目录下?

在容器中,jar包通常会被放置在 /app 目录下,也有可能会放在 /opt 或其他自定义的目录中,具体取决于容器的配置。通常,Dockerfile 中会指定将 jar 包复制到容器内的哪个目录中。如果您使用的是第三方镜像,可以查看该镜像的文档或源代码来确定 jar 包的位置

上面的配置并没有指定程序在容器中的哪个目录下运行。容器启动时会运行默认命令,如果未指定默认命令,容器会直接退出。因此,需要通过指定commandentrypoint来定义程序在容器中的启动命令和工作目录。

extra_hosts: - "nacos-headless:192.168.136.121" 这个什么?怎么用呀

extra_hosts是用于指定额外的主机名和IP地址的选项。在这个配置中,nacos-headless是一个主机名,192.168.136.121是与该主机名关联的IP地址。

在Docker中,容器之间通常使用网络进行通信,每个容器都有一个唯一的名称和IP地址。但是,在某些情况下,我们可能需要在容器内部引用其他主机上的服务,而这些服务在Docker网络中没有自己的DNS条目。在这种情况下,可以使用extra_hosts选项将主机名和IP地址映射起来,以便容器内的应用程序可以使用主机名来访问服务。

privileged: true # 获取更高的权限 这个有什么用?

privileged: true 是 Docker Compose 中的一个配置选项,用于授予容器更高的特权级别,以访问主机系统的硬件资源或其他敏感资源。

当 Docker 容器运行需要与主机进行交互时,可能需要获取更高的特权级别。例如,当容器需要访问主机系统的网络或文件系统时,可以使用 privileged 来授予容器访问这些资源的权限。

需要注意的是,使用 privileged 可能会增加系统的风险,因为容器可以获得更高的权限,并有可能影响主机系统的安全性。因此,建议在使用 privileged 选项之前,先仔细考虑容器需要访问的资源,并确保授予权限的合理性。

ports: - "38941:38941" - "30384:30384" 为什么会有两个端口?

这个服务容器开放了两个端口,一个是 38941 端口,另一个是 30384 端口。其中,38941 端口可能用于服务的外部访问,而 30384 端口可能是服务容器内部使用的端口,比如用于与其他容器通信等。具体情况需要根据服务本身的实现来确定。

docker 常用 命令

  1. docker run:运行一个容器
  2. docker ps:列出正在运行的容器
  3. docker exec:在正在运行的容器内执行命令
  4. docker stop:停止容器运行
  5. docker start:重新启动容器
  6. docker rm:删除容器
  7. docker images:列出本地的所有镜像
  8. docker rmi:删除一个或多个本地镜像
  9. docker build:构建镜像
  10. docker tag:给镜像打标签
  11. docker push:推送镜像到Docker Hub或者私有仓库
  12. docker pull:从Docker Hub或私有仓库拉取镜像
  13. docker network:管理Docker网络
  14. docker volume:管理Docker卷
  15. docker-compose:使用docker-compose.yml文件来管理多个Docker容器

docker network 给举例说明一下

Docker network 是 Docker 中管理容器网络的工具,可以通过创建网络来连接容器,提供容器之间通信的能力。

比如,我们可以创建一个名为 my-network 的网络,并将两个容器 foo 和 bar 加入到该网络中:

  1. 创建网络 my-network:
docker network create my-network
  1. 创建容器 foo,并将其加入 my-network 网络:
docker run -d --name foo --network=my-network nginx
  1. 创建容器 bar,并将其加入 my-network 网络:
docker run -d --name bar --network=my-network nginx

此时,容器 foo 和 bar 就可以通过 my-network 网络相互通信了。例如,在容器 foo 中可以使用容器名 bar 来访问容器 bar 的服务,例如:

curl http://bar/

在同一个网络中的容器可以直接使用容器名进行互相访问,而不需要使用容器的IP地址或端口等信息。这在多个容器共同工作时非常方便。

docker volume:管理Docker卷 举例说明一下

Docker volume是Docker用于管理容器数据卷的一种机制。使用Docker volume,我们可以将宿主机的目录或者另一个容器的数据卷挂载到当前容器中,从而将数据持久化到宿主机或者其他容器中,便于容器的数据共享和管理。

举个例子,我们要创建一个基于Nginx的Web服务器,需要将Web应用程序挂载到容器中运行。这时,我们可以使用Docker volume进行管理。

首先,我们可以创建一个本地数据卷:

docker volume create mywebapp

接着,我们可以使用docker run命令启动一个容器,并将Web应用程序通过挂载mywebapp卷到容器中:

docker run -d --name mynginx -v mywebapp:/usr/share/nginx/html nginx

这样,当我们修改Web应用程序时,容器的数据卷也会同步更新,可以实现数据的持久化和共享。同时,我们也可以通过其他的容器来管理这个数据卷,比如备份、还原等操作。

总之,Docker volume可以轻松实现容器数据的持久化和共享,方便我们管理容器中的数据

replicas: 1 这是什么?

replicas: 1 是指在 Kubernetes 中某个应用程序的副本数为1。这意味着 Kubernetes 会启动该应用程序的一个实例,如果实例出现故障或需要扩展应用程序,则 Kubernetes 将自动启动另一个副本,以确保应用程序的可用性和可靠性。replicas 的值可以根据实际需要进行扩展或缩减。例如,如果需要更高的可用性,可以将 replica 数增加到 3,这样如果一个副本出现故障,Kubernetes 将维护其余 2 个副本继续提供服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值