zoukankan      html  css  js  c++  java
  • docker-compose 学习

    简介: 定义,运行多个容器, 使用yaml配置文件,command 命令有哪些?
      1. dockerFile
      2. 定义service docker-compose.yml
      3. docker-compose up
      docker-compose up --build # 启动会重新构建
    docker-compose yaml 文件规则(分为3层):
      # 第一层:
        version: '3.9' #  docker-compose 的版本向下兼容的
      # 第二层:
        services:
            服务1web:  # 服务1的具体配置
              image
              build
              network...
            服务2redis:
      # 第三层: 其他配置项(可以没有,上面两个是核心)
        # 网络/卷/全局规则...
        network:
        volumes:
        configs:
    查看所有卷:
      docker volume ls 
    筛选定义的卷: 
      docker volume ls | grep db_data
    查看卷的详细信息(挂载在主机那个目录):
      docker volume inspect db_data
    
    ***
    systemctl stop firewalld  # 关闭防火墙
    
    docker swarm 学习:
      注意: - worker 节点就是工作节点不能使用manager命令
            - manager 集群需要大于1台才能使用 
      (灰度发布,金丝雀发布...)
      1. 创建一个swarm 集群
      docker swarm init  # 初始化一个节点
      docker swarm init --advertise-addr ip地址 # 会显示创建manager节点成功
      docker swarm join-token worker # 生成令牌 worker节点
      docker swarm join-token manager # 生成令牌manager 节点
      docker swarm leave # 离开当前节点
    docker service 学习:
      docker service create -p 8080:80 --name my-nginx nginx  # 创建一个service ,命令类似docker run
        *** docker service 和 docker run 区别,service 可以动态扩容, docker run 是单机
        1.创建的service 也是只能在manager节点可以查看.
        2.创建的容器会随机分配在swarm集群上
      docker service ls  # 查看创建的service
        ID             NAME       MODE         REPLICAS   IMAGE          PORTS
        sspln65vl8i5   my-nginx   replicated   1/1        nginx:latest   *:8080->80/tcp
      -动态扩容
      docker service update --replicas 3 my-nginx  # 执行后会在集群中创建3个容器
      docker service scale my-nginx=3         # 这个命令也可以实现, 一样的效果
      docker service inspect my-nginx   # 查看详细信息
    移除service
      docker service rm my-nginx
    service 重启:
      docker service update --force wordpress_wordpress # wordpress_wordpress service名字
    docker stack 学习:
      docker stack deploy -c docker-compose.yml wordpress  # 创建一个stack(部署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
              ports:
                - "80:80"
              restart: always
              environment:
                WORDPRESS_DB_HOST: db:3306
                WORDPRESS_DB_USER: wordpress
                WORDPRESS_DB_PASSWORD: wordpress
                WORDPRESS_DB_NAME: wordpress
          volumes:
            db_data: {}
      docker stack services wordpress # 查看wordpress 下的service
      docker service ps wordpress_db  # 查看wordpress_db service 下的详细任务
      **********************
      docker stack deploy -c docker-compose.yml wordpress #启动后 docker service ls 发现 REPLICAS 0/1 不知道什么原因:
          解决方法: docker service update --force wordpress_wordpress  # 重启service 好了
    
    docker-compose: 多容器依赖构建工具
      docker-compose -f docker-compose.yml up # -f 指定一个文件
      docker-compose build # 构建镜像
      docker-compose up -d # 不显示log
      docker-compose up # 默认构建docker-compose.yml
      docker-compose images
      docker-compose exec service(mysql) bash # 进入容器
      docker-compose ps # 类似docker ps
      docker-compose stop # 停止不删除容器 
      docker-compose start # 启动
      docker-compose down # 停止并删除
      docker-compose rm redis  # 删除指定容器
      docker network ls  查看容器网络 
      #验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。 
      docker-compose config  -q  
      docker-compose logs  nginx    #查看nginx的日志 
      docker-compose logs -f nginx    #查看nginx的实时日志
      # 水平扩展 web增加为3个
      docker-compose up --scale web=3 -d
    services:主要用来定义各个容器。
      web:  # 自定义的名字
        # 服务的镜像名称或镜像 ID,如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
        image: hello-world 
        # 基于一份 Dockerfile,在使用 up 启动之时执行构建任务,这个构建标签就是 build,它可以指定 Dockerfile 所在文件夹的路径
        build:
          context: .
          dockerfile: Dockerfile
        # 使用 command 可以覆盖容器启动后默认执行的命令。
        command: bundle exec thin -p 3000
        # 如果你想完全控制容器的命名,可以使用这个标签指定:
        container_name: appxxx
        # depends_on这个标签解决了容器的依赖、启动先后的问题:
        # 注意的是,默认情况下使用 docker-compose up web 这样的方式启动 web 服务时,也会启动 redis 和 db 两个服务,因为在配置文件中定义了依赖关系。
        depends_on:
          - db
          - redis
        # 与Docker client的--link一样效果,会连接到其它服务中的容器。
        links:
          - db
          - redis
        # 将PID模式设置为主机PID模式,跟主机系统共享进程命名空间。容器使用这个标签将能够访问和操纵其他容器和宿主机的名称空间。
        pid: "host"
        #映射端口的标签,使用HOST:CONTAINER格式或者只是指定容器的端口,宿主机会随机映射端口。
        ports:
          - "3000"
        - "8000:8000"
      #挂载一个目录或者一个已存在的数据卷容器,可以直接使用 [HOST:CONTAINER] 这样的格式,或者使用 [HOST:CONTAINER:ro] 这样的格式,后者对于容器来说,数据卷是只读的,这样可以有效保护宿主机的文件系统。
      # Compose的数据卷指定路径可以是相对路径,使用 . 或者 .. 来指定相对目录。
      # 数据卷的格式可以是下面多种形式:
      volumes:
          #只是指定一个路径(容器挂载路径),Docker 会自动在创建一个数据卷(这个路径是容器内部的)。
          - /var/lib/mysql
          #使用绝对路径挂载数据卷(主机opt容器var)
          - /opt/data:/var/lib/mysql
          # 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。
          - ./cache:/tmp/cache
          # 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。
          - ~/configs:/etc/configs/:ro
          # 已经存在的命名的数据卷。
          - datavolume:/var/lib/mysql
        # 加入指定网络,格式如下:
        networks:
          - front-tier
          - back-tier
      redis:
        image: redis
      db:
        image: postgres
       
     其他: 
     #还有这些标签:cpu_shares, cpu_quota, cpuset, domainname, hostname, ipc, mac_address, mem_limit, memswap_limit, privileged, read_only, restart, shm_size, stdin_open, tty, user, working_dir 
     #上面这些都是一个单值的标签,类似于使用docker run的效果。
      cpu_shares: 73
      cpu_quota: 50000
      cpuset: 0,1
    
      user: postgresql
      working_dir: /code
    
      domainname: foo.com
      hostname: foo
      ipc: host
      mac_address: 02:42:ac:11:65:43
    
      mem_limit: 1000000000
      memswap_limit: 2000000000
      privileged: true
    
      restart: always
    
      read_only: true
      shm_size: 64M
      stdin_open: true
      tty: true
          
          
    
    
    
    volumes:定义services使用到的volume
    
    networks:定义需要使用到的network.
    
    
    

      

  • 相关阅读:
    使用MyEclipse开发Java EE应用:EJB项目开发初探(上)
    使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(五)
    使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(四)
    css定位方式有哪几种?
    什么是X-UA-Compatible?X-UA-Compatible的作用
    css中vertical-aling与line-height
    编写优秀CSS代码的8个策略
    less的使用几个技巧
    微信h5页面下拉露出网页来源的解决办法
    input禁止输入的方法
  • 原文地址:https://www.cnblogs.com/412013cl/p/14757216.html
Copyright © 2011-2022 走看看