Docker学习(杂)

docker:
    1.默认端口2375      privileged: true 是容器内的root拥有真正的root权限  默认地址/var/lib/docker
    2.springboot项目直接编译成镜像文件时:
        前提:
            1.springboot根目录存在Dockerfile文件(在根目录创建一个docker文件夹,里面放Dockerfile文件)
            2.maven中添加docker的插件配置
            
        1.远程的linux服务器需要开启docker api 服务
            编辑docker宿主机文件/lib/systemd/system/docker.service
            sudo vi /lib/systemd/system/docker.service
            修改以ExecStart为开头的行
            ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock
            --公司配置: ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock
            保存修改后的文件
            通知docker服务做出的修改
            systemctl daemon-reload
            重启docker服务
            sudo service docker restart
            测试可以连接到docker api      Yishi@2020#
                                            Yishi@2020#
                                            
                                            33.181.54.15
                                            Yishi9085
                                            
                                            10.7.117.190
                                            33.181.54.5
                                            
                                            47.96.248.78:60805 
                                                
            curl http://localhost:2375/version
        2.项目中的maven配置:配置dockerHost 宿主机的ip:2375  docker的默认端口2375 
            另:如果系统环境变量中存在DOCKER_HOST,则可以不用配置,如果不存在还不配置,默认为本地地址:2375
        3.maven构建镜像并上传到服务器:mvn clean package -Dskip Tests docker:build
            注:-Dskip Tests 不执行测试用例,但会编译测试用例类,生成对象class文件至target/test-classes下
                -Dmaven.test.skip=true  不执行测试用例,也不编译测试用例类
        4.docker 文件里的配置
            ${PWD}是当前docker文件的目录
            docker文件: docker-compose.yaml  Dockerfile
    3.docker compose
        1.想要执行docker compose文件,需要先安装Docker Compose 命令
        sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
        sudo chmod +x /usr/local/bin/docker-compose  赋予执行权限
        docker-compose -v  查看是否安装成功
        docker-compose up 启动应用程序
        docker-compose up -d  后台执行该服务
        
        docker-compose文件修改后,会出现设置的常量为空的情况 ${PWD} PWD为空 
        解决方案1:PWD改为对应的路径
        
        ps:如果之前就存在镜像文件,运行过后,之前的镜像文件就会失去tag,tag为null
        
        
    4.docker 容器内的通信 
        1.使用--link指定容器名称进行不同容器间的通信 (--link container_name或者将container_name取一个别名)
            例如:docker run -d --name=nginx --link=php:php -v /www:/usr/local/nginx/html -p 81:80 nginx
            nginx和php两个容器之间的通信
        2.compose中:depends_on 依赖哪个容器,可以配置多个  这个可以指定加载顺序  指定的容器加载完后才运行
        3.docker network
            docker network create my_net  创建一个网络名为my_net且drive为bridge的网络(默认创建的就是bridge)
            启动容器的时候加上命令 --network my_net  表示容器在这个网络内,以此来实现容器内的通信
            
            在compose文件中networks是top-level(顶层级别,所以需要在顶层设置),创建网络需要指定driver
            (单一网络使用bridge,swarm集群使用overlay)
            
        Compose配置样本:
            version: '3'
            services:
              nginx:
                image: nginx
                container_name: lnmp-nginx
                depends_on:
                  - php
                ports:
                  - "80:80"
                networks:
                  - "net1"
                volumes:
                  - "/www:/usr/local/nginx/html"
                external_links:
                  - php1:php
              php:
                image: php
                container_name: lnmp-php
                expose: 
                  - "9000"
                networks:
                  - "net1"
                volumes:
                  - "/www:/usr/local/nginx/html"

            networks:
              net1:
                driver: bridge
        
    
                
    5.配置镜像源:
    vi /etc/docker/daemon.json
                {

     "registry-mirrors": [ "http://hub-mirror.c.163.com"] }    //公司配置

    }
    
     systemctl daemon-reload
     systemctl restart docker
    
    6.命令:
        停用所有容器:docker stop $(docker ps -q)
        删除全部容器:docker rm $(docker ps -aq)
        停用并删除容器:docker stop $(docker ps -q) & docker rm $(docker ps -aq)
        删除所有停用的容器:docker container prune
        
    7.docker网络参数解释:
    host:
        1.host:容器与主机在相同的网络命名空间下面,使用相同的网络协议栈,容器可以直接使用主机的所有网络端口
        2.host模式不能使用端口映射和自定义路由规则,这些都与主机一致,-p与-icc参数是无效的
        3.host模式下面的网络模型是最简单和最低延迟的模式,容器进程直接与主机网络接口通信,与物理机性能一致
    bridge:
        1.bridge模式:每一个容器使用自己的网络命名空间
        2.每一个容器的网络与主机的bridge设备连接
        3.主机NAT(端口映射)容器里面的数据包ip与外部通信
        4.推荐使用自定义的bridge网络,自定义的网络有更多的功能与灵活性
        5.各个bridge里面的网络隔离
    overlay: 
        1.解决跨主机通信
        另:
            集群容器其他使用
                1、使用 docker service 命名使用 overlay 网络 (略) 。
                2、docker stack + docker-compse.yml 可以实现服务集群部署 。
                3、 docker-compose + docker-compse.yml 只能实现主机部署。
    8.Dockerfile
        1.理解:是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
            一条条指令在构建镜像的时候已经执行了。镜像里面就已经有这些资源了。
        2.命令:docker build -t 镜像名 .  .是Dockerfile文件存在的位置
    9.docker-machine  
    
    10.docker-compose stop  关闭关联的开启的容器
    11.docker-compose rm  删除关联的容器
    
    12.docker images|grep none|awk '{print $3}'|xargs docker rmi 删除tag标签为none的镜像
    
    13.docker tag 70ff7873d7cd my_centos:tomcat-centos
    
    14.进入容器:sudo docker attach 44fc0f0582d9  
    sudo docker exec -it ubuntu:14.04 /bin/bash  
    

        


 

你可能感兴趣的:(Docker学习(杂))