Docker应用

一:虚拟化类型:
    主机级虚拟化:首先需要有硬件平台
        Type-1:
        Type-2:VM、Kvm
    容器级虚拟化:
        Docker概念
            1,docker 是一个开源的应用引擎
            2.docker诞生于2013年,基于Go语言实现,dotCloud公司开发(docker inc)
            3,docker可以让开发者打包应用程序及依赖包到有个轻量级的、可移植的容器中,人后发布到任何流行的Linux机器上
            4,容器使用沙箱机制,实现程序相互隔离
            5,容器性能开销极低
            6,Docker从17.03版本之后氛围CE社区办和EE企业

二:内核需要对什么做隔离:
    UTS 主机名域名
    mount 文进系统
    PID     进程号
    IPC 底层通信 消息队列
    user 用户名用户组
    netwoke 网络、端口、协议栈
三:主机资源分配配置
    Control Cgroups CGroups
        cgroups对主机进程进行分组,并对不同的组进行cpu、 内存、IO、device设备等资源分配
四:Docker编排工具
    machine:
    swarm:
    compose:
    Kubenets:
五:docker三大组件
    registry:镜像仓库 https://hub.docker.com
    images:镜像
    containers:容器
六:docker安装
    1,下载清华大学的docker开源软件源到/etc/yum.repo.d/下
        wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
    2,yum clean all &&n yum makecache

    3,yum isntall -y deocker-ce
七:添加docker镜像加速器
    mkdir -p /etc/docker/daemon.json
        {
            "registry-mirrors":{"https://registry.docker-cn.com"}
        }

八:docker命令工具使用
    1,查看docker 版本信息
        docker version
        docker info
    2,搜索镜像
        docker search nginx
    3,下载镜像
        docker 【image】 pull nginx
    4,查看本地下载的镜像
        docker image ls
    5,删除镜像
        docker image rm nginx
    6,查看运行的容器
        [root@ceph3 yum.repos.d]# docker container ls
        [root@ceph3 yum.repos.d]# docker ps
    7,创建并启动容器
        [root@ceph3 yum.repos.d]# docker run --name b1 -it busybox
            / # 
            / # ls
            / # bin   dev   etc   home  proc  root  sys   tmp   usr   var
    8,启动终止的容器
        [root@ceph3 yum.repos.d]# docker container  start -ai b1
            / # 
    9.删除容器
            [root@ceph3 yum.repos.d]# docker container 
                attach   cp       diff     export   kill     ls       port     rename   rm       start    stop     unpause  wait
                commit   create   exec     inspect  logs     pause    prune    restart  run      stats    top      update   
            [root@ceph3 yum.repos.d]# docker container stop b1
                b1
            [root@ceph3 yum.repos.d]# docker container rm b1
                b1
            [root@ceph3 yum.repos.d]# docker container ls -a
                CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
九:镜像制作:
    1,基于容器制作
        1),首先启动一个容器,对容器就行配置修改
            [root@ceph3 ~]# docker run --name b1 -it busybox
                / # ls
                bin   dev   etc   home  proc  root  sys   tmp   usr   var
                / # mkdir -p /data/html
                / # vi /data/html/index.html
                / # ls
                bin   data  dev   etc   home  proc  root  sys   tmp   usr   var
            
        2),使用docker commit 工具制作。不要退出容器,另起一个终端制作新镜像
            [root@ceph3 ~]# docker commit -p b1 busybox:v1.1.1
            sha256:7fef11d271c67d8acb1b7691a8420adf9512ac0eea4344247c5620f1d0dffe25
            [root@ceph3 ~]# docker images
            REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
            busybox             v1.1.1              7fef11d271c6        10 seconds ago      1.22MB
            nginx               latest              ed21b7a8aee9        3 days ago          127MB
            busybox             latest              83aa35aa1c79        3 weeks ago         1.22MB
            [root@ceph3 ~]# 
                -p:制作竟像时暂停容器
                b1:原容器名,即基于哪个容器制作
                busybox:v1.1.1:制作的镜像标签
            2.1)制作竟像时指定镜像启动时的运行命令
                docker commit -a "hu <huzhanxun@139.com>" -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -p b1 busybox:v6.0
                    -a:制定镜像制作作者
                    -c:制定容器启东时的运行指令

        3),验证制作的镜像。通过新镜像启动容器并查看之前配置是否存在
            [root@ceph3 ~]# docker run --name b1 -it busybox:v1.1.1 
                        / # ls
                        bin   data  dev   etc   home  proc  root  sys   tmp   usr   var
                        / # cat  /data/html/index.html 
                        <h1>busybox httpd server</h1>
                        / # 
        4),向docker hub中推送镜像
            1,首先登入docker hub创建一个仓库

            2,登入docker hub
                docker login
                    username:huzhanxun
                    password:!@2020Up#$
            3,推送镜像
                [root@ceph3 ~]# docker push huzhanxun/httpd
                The push refers to repository [docker.io/huzhanxun/httpd]
                b54535c685c3: Pushed 
                5d23f5c71792: Pushed 
                a6d503001157: Pushed 
                Head https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/01/0155eadf7d316b2b172876dfbcaa6d25026c05538e53d6e60203ab160ba25813/data?verify=1585981524-qku%2BHKSb7cuErwe6PnUujmCEMJc%3D: read tcp 192.168.3.149:52382->104.18.124.25:443: read: connection reset by peer
                [root@ceph3 ~]# 
        5),镜像的导出导入
            1,镜像导出
                [root@ceph3 ~]# docker save -o myimage.gz busybox:v1.1.1 huzhanxun/httpd 
                [root@ceph3 ~]# ls
                anaconda-ks.cfg  initial-setup-ks.cfg  myimage.gz  公共  模板  视频  图片  文档  下载  音乐  桌面
                    -o:指定镜像存放位置
            2,镜像导入
                [root@ceph3 ~]# docker load -i myimage.gz 
                Loaded image: huzhanxun/httpd:v1.0
                Loaded image: busybox:v1.1.1
                [root@ceph3 ~]# 
                    -i:指定镜像文件


十:docker 网络
    1),docker安装提供了三种网络模式,默认使用bridge模式
        [root@ceph3 ~]# docker network ls
            NETWORK ID          NAME                DRIVER              SCOPE
            b9d3951b1d34        bridge              bridge              local
            d775c609a7a3        host                host                local
            5f4b6e7427ed        none                null                local
    2),创建容器是指定网络模型
        1,指定none网络
            [root@ceph3 ~]# docker run --name t3  --network none --rm -it -h t1.com busybox
            / # ls
            bin   dev   etc   home  proc  root  sys   tmp   usr   var
            / # hostname 
            t1.com
            / # ifconfig
            lo        Link encap:Local Loopback  
                      inet addr:127.0.0.1  Mask:255.0.0.0
                      UP LOOPBACK RUNNING  MTU:65536  Metric:1
                      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                      collisions:0 txqueuelen:1 
                      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
            1.1指定host网络
                [root@ceph3 ~]# docker run --name t5 --network host -it --rm  busybox
                / # echo "hello container" > /tmp/index.html
                / # httpd -h /tmp/
                / # netstat -tnl
                Active Internet connections (only servers)
                Proto Recv-Q Send-Q Local Address           Foreign Address         State            
                tcp        0      0 :::80                   :::*                    LISTEN      
   
                [root@ceph3 ~]# curl http://192.168.2.3            
                    hello container

            1.2创建新的docker网络桥
                [root@ceph3 ~]# docker network create -d bridge --subnet "172.26.0.0/16" --gateway "172.26.0.1" mybr0
                db1ccd22ebae692e91daa1b305fbed6f484efe35b182f159575890e549cda77e
            
                [root@ceph3 ~]# ifconfig 
                br-db1ccd22ebae: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
                        inet 172.26.0.1  netmask 255.255.0.0  broadcast 172.26.255.255
                        ether 02:42:7f:cf:63:3e  txqueuelen 0  (Ethernet)
                        RX packets 29231  bytes 3228151 (3.0 MiB)
                        RX errors 0  dropped 0  overruns 0  frame 0
                        TX packets 287  bytes 59750 (58.3 KiB)
                        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
                
                [root@ceph3 ~]# docker network ls
                NETWORK ID          NAME                DRIVER              SCOPE
                d1d321a99bce        bridge              bridge              local
                d775c609a7a3        host                host                local
                db1ccd22ebae        mybr0               bridge              local
                5f4b6e7427ed        none                null                local
                
                [root@ceph3 ~]# docker run --name t5 --network mybr0 --rm -it busybox
                / # ifconfig
                eth0      Link encap:Ethernet  HWaddr 02:42:AC:1A:00:02  
                          inet addr:172.26.0.2  Bcast:172.26.255.255  Mask:255.255.0.0
                          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
                          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                          collisions:0 txqueuelen:0 
                          RX bytes:1414 (1.3 KiB)  TX bytes:0 (0.0 B)
            1.3不同bridge下的容器通信需要打开路由转发功能
                echo 1 > /proc/sys/net/ipv4/ip_forward


                    
        2,指定dns
            [root@ceph3 ~]# docker run --name t3  --dns 114.144.144.144 --rm -it -h t1.com busybox
            / # cat /etc/
            group        hostname     hosts        localtime    mtab         network/     passwd       resolv.conf  shadow
            / # cat /etc/resolv.conf 
            nameserver 114.144.144.144
        3,指定hots文件
            [root@ceph3 ~]# docker run --name t3  --dns 114.144.144.144 --add-host t1.com:1.1.1.1 --rm -it -h t1.com busybox
            / # cat /etc/hosts
            127.0.0.1    localhost
            ::1    localhost ip6-localhost ip6-loopback
            fe00::0    ip6-localnet
            ff00::0    ip6-mcastprefix
            ff02::1    ip6-allnodes
            ff02::2    ip6-allrouters
            1.1.1.1    t1.com
            172.17.0.2    t1.com t1
            / # 
        4,动态端口暴露
            [root@ceph3 ~]# docker run --name t5 -p 80 --rm  busybox:v6.0 

            [root@ceph3 ~]# iptables -t nat -vnL
             pkts bytes target     prot opt in     out     source               destination         
                0     0 RETURN     all  --  docker0 *       0.0.0.0/0            0.0.0.0/0           
                0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:32768 to:172.17.0.2:80
            此时访问宿主机的ip:32768就会映射到容器的80上
                [root@ceph3 ~]# curl http://192.168.3.150:32768
                <h1>busybox httpd server</h1>
        5,手动指定暴露的ip和端口
            [root@ceph3 ~]# docker run --name t5 -p 192.168.3.150:8080:80 --rm  busybox:v6.0

            [root@ceph3 ~]# docker port t5 
                80/tcp -> 192.168.3.150:8080
            
            [root@ceph3 ~]# iptables -t nat -vnL
                Chain DOCKER (2 references)
                 pkts bytes target     prot opt in     out     source               destination         
                    0     0 RETURN     all  --  docker0 *       0.0.0.0/0            0.0.0.0/0           
                    0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            192.168.3.150        tcp dpt:8080 to:172.17.0.2:80
        6,指定docker bridge桥网络的ip
            [root@ceph3 ~]# systemctl stop docker
            [root@ceph3 ~]# vim /etc/docker/daemon.json
                {
                "bip": "10.1.0.1/16"
                }
            [root@ceph3 ~]# systemctl  start docker
            [root@ceph3 ~]# ifconfig
                docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
                inet 10.1.0.1  netmask 255.255.0.0  broadcast 10.1.255.255
            [root@ceph3 ~]# docker run --name t5 -it --rm busybox
                        / # ifconfig
                            eth0  Link encap:Ethernet  HWaddr 02:42:0A:01:00:02  
                                  inet addr:10.1.0.2  Bcast:10.1.255.255  Mask:255.255.0.0
        7,允许远程管理本机docker
            1,打开本地2375端口并制定docker.sock
                vim /etc/docker/daemon.json 
                    {
                     "hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]
                    }
                systemctl start docker
            2,在其他主机上执行docker指令制定宿主机ip地址
                docker -H 192.168.3.147 images 
十一:docker存储
    1,docker管理的存储卷。只需要制定容器内的挂载点,无需制定在宿主机上的挂载点,宿主机挂载位置自动生成
        [root@ceph3 ~]# docker run --name t6 -it --rm  -v /data/ busybox
        / # ls
        bin   data  dev   etc   home  proc  root  sys   tmp   usr   var

        查看存储卷在宿主机上的位置
            [root@ceph3 ~]# docker inspect t6
              "Mounts": 
            {
                "Type": "volume",
                "Name": "5a535f05fad37831791ffafc04fd351d23013bd11a77b86d7b8af997d3a68b9a",
                "Source": "/var/lib/docker/volumes/5a535f05fad37831791ffafc04fd351d23013bd11a77b86d7b8af997d3a68b9a/_data",
            }

    2,bind手动管理的存储卷,需要手动指定宿主机和容器的挂载位置
        [root@ceph3 ~]#  docker run --name t6 -it --rm  -v /data/t6:/data/t6/ busybox
        查看存储卷在宿主机上的位置
            [root@ceph3 ~]# docker inspect t6
             "Mounts": 
                {
                    "Type": "bind",
                    "Source": "/data/t6",
                    "Destination": "/data/t6",
                }

     3,共享其他容器的存储卷
          [root@ceph3 ~]# docker run --name t6 -v /data/b1:/data/html/ --rm -it busybox
          [root@ceph3 ~]# docker run --name t7 -it --network container:t6  --volumes-from t6 --rm  busybox

十二:docker file文件制作镜像
    1,编辑dockerfile文件:
        [root@ceph3 img1]# vim Dockerfile 
            FROM busybox:latest
                    #FROM 指定基础镜像。即基于哪个镜像制作
            MAINTAINER "<15910298243@139.com>"
                    #maintainer指定作者信息
            USER ${USER:-user_name}
            ARG user
                    # ARG 相当于定义了一个变量,其他指令可以应用这个变量
                    # 在构建竟像时通过--bulid-arg user=lisi 就可以传递变量了
                    #  docker build --build-arg user=what_user Dockerfile
            ENV DOC_ROOT=/data/web1/ \
                DOC_WEB=/data/web2/
                    #定义变量,后面可以直接应用。多个变量定义是需要用“\”,转移
            COPY index.html $DOC_ROOT
                    #从宿主机复制单个文件到镜像容器中
            COPY 111  /etc/111/
                    #复制宿主机111目录下的文件到镜像/etc/111/目录下
                    #ADD http://nginx.org/download/nginx-1.14.2.tar.gz /
            ADD  nginx-1.14.2.tar.gz /opt/ 
                    #ADD也是复制文件但是可以支持tar文件和url网络文件。同时如果是本地tar文件则会自动展开。如果是url路径的tar文件则只会下载不会展开
            WORKDIR /usr/local/src/
                    #定义容器工作的目录,如果下文引用”./“当前目录则默认就是定义的工作目录
            Volume /data/mysql/
                     #创建存储卷,容器的挂载位置为/data/mysql/
            EXPOSE 80/tcp 
                     #默认待暴露端口但是不会真正暴露。当启动容器是加上-P 就会将指定的暴露端口真正的暴露出来,映射到宿主机的端口上
            RUN mkdir -p /opt/web/ && echo "<h1> hello </h1>" > /opt/web/index.html
                    # RUN运行的指令实在构建镜像时运行的 
            CMD /bin/httpd -f -h /opt/web/
                    # CMD运行的指令是在创建容器是执行的.同事dockerfile中只有最有一个CMD生效
            ADD entryporint.sh /bin/
            ENTRYPOINT /bin/entrypoint.sh
                    # ENTRYPOINT 也是在容器中执行命令,但是entrypoint 可以执行脚本,同时可以接受启动容器时传递的参数
                    # 这里entrypoint将去调用entrypoint.sh脚本
                    # docker run --name t1 -it -e "port=8080" httpd:v1.0  。 -e可以向entrypoint.sh中传递环境变量的值
                    #  vim entrypoint.sh
                    #       #!/bin/sh
                    #       cat /etc/nginx/conf.d/www.conf << EOF
                    #               server{
                    #                       servername=${hostname}
                    #                       listen=${IP:-0.0.0.0}:${PORT:-80
                    #                       root ${NGX_DOC_ROOT:-/usr/share/nginx/html}
                    #               }
                    #               EOF
                    #
                    #               exec "$@"
                    #
                    #               }


    2,docker bulid 构建镜像
        docker bulid -t hrttp:v1.0 ./
         # 运行这个指令需要在dockerfile统计目录下执行

十三:docker registry 私有仓库
    1,无网页版本地私有仓库:
        1,下载软件包
            [root@ceph3 ~]# yum install -y docker-registry
            [root@ceph3 ~]# rpm -ql docker-distribution
                /etc/docker-distribution/registry/config.yml
                /usr/bin/registry
                /usr/lib/systemd/system/docker-distribution.service
                /usr/share/doc/docker-distribution-2.6.2
                /usr/share/doc/docker-distribution-2.6.2/AUTHORS
                /usr/share/doc/docker-distribution-2.6.2/CONTRIBUTING.md
                /usr/share/doc/docker-distribution-2.6.2/LICENSE
                /usr/share/doc/docker-distribution-2.6.2/MAINTAINERS
                /usr/share/doc/docker-distribution-2.6.2/README.md
                /var/lib/registry
                    # 镜像存放默认目录,这个位置是可以在配置文件“/etc/docker-distribution/registry/config.yml”中修改的
            [root@ceph3 ~]# 
        2,因为镜像仓坤都是默认以https方式访问的,在没有证书的情况下需要修改客户端机器的配置文件让客户端信任服务器端http的不安全模式
            [root@ceph3 ~]# vim /etc/docker/daemon.json 
                {
                 "insecure-registries": ["ceph3:5000"]
                }
        3,启动仓库
            [root@ceph3 ~]# systemctl  start docker-distribution
        4,制作镜像,标签要添加上服务的域名和端口号
            [root@ceph3 ~]# docker tag httpd:v1.0 ceph3:5000/web2
        5,推送镜像
            [root@ceph3 ~]# docker push ceph3:5000/web2
            The push refers to repository [ceph3:5000/web2]
            ca8e9bb6aab8: Mounted from web 
            a6d503001157: Mounted from web 
            latest: digest: sha256:5eee58e91e7302d1d016b552b7c1d03d7febb20c95eca22c0b02ae3f43c66cb7 size: 734
            [root@ceph3 ~]#        
        6,查看推送的镜像
            [root@ceph3 ~]# ls /var/lib/registry/docker/registry/v2/repositories/
            web  web2
                # 推送上来的镜像
            [root@ceph3 ~]# 
        7,下载私有仓库的镜像
            [root@ceph3 ~]# docker pull ceph3:5000/web2
            Using default tag: latest
            latest: Pulling from web2
            Digest: sha256:5eee58e91e7302d1d016b552b7c1d03d7febb20c95eca22c0b02ae3f43c66cb7
            Status: Downloaded newer image for ceph3:5000/web2:latest
            ceph3:5000/web2:latest


    2,Harbor私有仓库安装
        1,下载docker-compose包,Harbor依赖docker-compose
            [root@ceph3 harbor]# yum install epel*
            [root@ceph3 harbor]# yum install docker-compose
        2,解压harbor包
            [root@ceph3 harbor]# tar -zxvf harbor-offline-installer-v1.8.1.tgz
            [root@ceph3 harbor]# cd harbor/
            [root@ceph3 harbor]# vim harbor.yml 修改必要的参数
            [root@ceph3 harbor]# ./ install.sh
        3,访问harba
            http://192.168.3.151
            user:admin
            password:Harbor12345
        4,停止habor
            docker-compose stop 


组件概念:
    1,service:由于pod的地址可能改变,通过service可以为pod提供一个统一的访问入口,pod创建后会向service进行注册,通告自身的ip信息。每一组pod都会有一个service。通常一类pod会有一个service提供解析服务
    2.deployment:pod控制器,可以创建指定数量的pod并监控pod状态信息


k8s工具使用:
    1,kubctl:
        kubectl -h 查看帮助信息
        kubectl create deployment my-nginx --image=nginx --replicas=1  建一个nginx服务的deployment,副本数量为1
        kubectl get pods 查看pod的信息及状态
        kubectl get nodes 查看node节点信息
        kubectl describe ---

            1,1deploymeny创建
                kubectl run mynginx --image=nginx:1.8 --replicas=1
    2,查看k8s对象状态:


        kubectl get 资源类型
            kubectl get namespace:查看名称空间
            -n: -n namespace 指定名称空间
            -A:所有名称空间里的pod
            -o wide:显示详细信息


            资源类型:
                pod:
                    kubectl get pod -o wide
                node
                service
                deployment
                    kubectl get deployment -o wide
        kubectl describe:更详细的信息:
            kubectl describe pod pod名称 -n pod所在的名称空间:


node节点安装:
    1,安装docker,作用为了启动容器
    2,安装kubelet,接受apiserver指令控制容器
    3,安装kube-proxy:为容器分配网络
    4,安装网络插件-cni

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一种开源的容器化平台,可以帮助开发者将应用程序及其依赖项打包成一个独立的容器,实现应用程序的快速部署和跨平台运行。下面是Docker应用部署的一般步骤: 1. 安装Docker:首先需要在目标机器上安装Docker引擎,可以根据不同的操作系统选择相应的安装方式。 2. 编写Dockerfile:Dockerfile是一个文本文件,用于定义Docker镜像的构建过程。在Dockerfile中,你可以指定基础镜像、安装依赖、复制文件、设置环境变量等。 3. 构建镜像:使用Docker命令行工具执行`docker build`命令,根据Dockerfile构建镜像。该命令会根据Dockerfile中的指令逐步执行,并生成一个可运行的镜像。 4. 运行容器:使用`docker run`命令来创建并运行一个容器。在运行容器时,可以指定端口映射、环境变量、数据卷等参数。 5. 配置网络:如果应用程序需要与其他容器或主机进行通信,可以使用Docker网络功能进行配置。可以选择使用默认的桥接网络,或者创建自定义网络。 6. 监控和管理:Docker提供了一系列命令和工具来监控和管理容器。例如,可以使用`docker ps`命令查看正在运行的容器,使用`docker logs`命令查看容器的日志。 7. 扩展和更新:如果需要扩展应用程序的规模或更新应用程序的版本,可以使用Docker Swarm或Kubernetes等容器编排工具来管理多个容器的部署和调度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值