美文网首页
初识Docker

初识Docker

作者: 谭英智 | 来源:发表于2020-08-05 19:03 被阅读0次

    虚拟化

    打破实体结构间不可切割的障碍,从逻辑上分割内存/CPU/网络/存储,使得资源利用最大化

    全虚拟化

    GuestOS并不知道自己是虚拟机,因为VMM从逻辑上进行了各种资源的分配,并交由GustOS操作。

    docker-fullvir

    操作系统虚拟化

    亦称容器化,将操作系统内核虚拟化,允许用户空间软件实例被分割成几个独立单元,在内核中运行,要求与hostOS同一体系

    docker-opervir

    优势是占用服务器空间少,几秒钟可以启动完成,弹性扩容

    平台虚拟化

    docker-platvir

    docker特征

    • 只能运行在底层主机相似的操作系统
    • 隔离性不高,会引起安全问题
    • 直接运行在操作形同内核上的用户空间
    • 占用资源少,启动快
    • 直接使用操作系统系统调用

    docker与虚拟机比较

    docker-cmp

    架构

    docker-arch

    client通过命令向docker host发起请求,deamon根据命令,操作镜像和容器

    docker命令

    启动/停止

    systemctl start docker
    systemctl restart docker
    systemctl stop docker
    

    列出镜像

    docker images
    

    拉取镜像

    docker pull centos/tomcat...
    

    配置镜像加速器

    - 阿里云
    - docker中国加速器
    - USTC加速器
    - daocloud/网易蜂巢加速器
    
    vi /etc/docker/demon.json
    {
        "registry-mirrors": ["url"]
    }
    systemctl deamon-reload
    systemctl restart docker
    

    查找镜像

    docker search tomcat
    

    删除镜像

    docker rmi name/id
    

    创建交互式容器

    docker run -i -t --name=c1 centos /bin/bash
    # i:交互式
    # t:分配终端
    # name:唯一名字
    

    创建守护式容器

    docker run -d --name c2 centos /bin/bash
    #登录容器
    docker exec -it c2 /bin/bash
    

    查看容器

    docker ps #当前运行
    docker ps -a #所有
    docker ps -l #最后一次运行
    

    启动/停止容器

    docker start/stop/restart name
    

    查看容器信息

    docker inspect name #所有信息
    docker inspect -f='{{NetworkSettings.IPAddress}}' #ip信息
    

    删除容器

    docker rm name/id #删除一个或多个
    docker rm `docker ps -a -q` #删除所有
    

    查看日志

    docker logs name/id
    

    文件拷贝

    docker cp 1.txt name:/root
    docker cp name:/root/2.txt /root
    

    目录挂载

    docker run -id --name c4 -v /opt/:/usr/local/myhtml centos
    

    制作镜像

    - 创建操作系统基础容器
    - 登录容器安装软件,例如tomcat
    - docker commit 容器名 name
    - docker run -itd --name t1 -p 8888:8080 name /bin/bash #创建容器
    - docker exec t1 /usr/local/apache-tomcat/bin/startup.sh #启动tomcat
    

    镜像/容器打包

    docker save -o /root/tomcat.tar imageName
    scp tomcat.tar otherServer:/root
    docker load -i /root/tomcat.tar
    
    docker export -o /root/t1.tar containerName
    docker import t1.tar coontainerName:latest
    

    DSL

    docker-dsl

    Dockerfile构建镜像

    mkdir dirName
    vi Dockerfile
        FROM docker.io/centos
        MAINTAINER yingzhi yingzhi@163.com
    
        RUN yum install ...
        RUN <install nginx>
    
    docker build -t imageName --rm=true
    docker run --t1 -d --name testNginx -p 8899:80 imageName /bin/bash
    docker exec testNginx /bin/bash
    

    搭建私有仓库

    #启动docker Registry
    docker run -d \
    -p 5000:5000
    --restart=alaways \
    -name registry \
    -v /mnt/registry:/var/lib/registry \
    registry:2
    
    #d:后台运行
    #p:端口映射
    #restart=alaways:启动后自动启动本地私有仓库
    #name:命名
    #v:目录挂载
    
    docker tag imageName:lastest registryIp:5000/reproName
    docker push registryIp:5000/reproName
    
    #查看本地仓库
    http://registryIp:5000/v2/reproName/tags/list
    ls /mnt/registry/docker/registry/v2/reproName
    
    

    查看docker网络

    docker network ls
    docker inspect name
    docker network inspect bridge
    - bridge网络,docker跟host的docker0网卡通讯,docker0跟外网通讯
    

    自定义网络

    可以自定义bridge网络/overlay网络

    • 对于单主机小型docker,建议使用bridge网络
    • 对于集群并不对外服务的,使用overlay网络
    • 否则使用Custom network plugins定制网络插件

    不同的自定义bridge网络,会组成不同的局域网段,彼此不能通讯

    docker swarm集群

    一群docker,向外统一提供服务,api与docker deamon一致

    docker-swarm

    创建manager

    docker swarm init --advertise-addr ip
    #会返回管理节点的加入命令与工作节点的加入命令
    

    查看集群信息

    docker node ls
    

    创建Nginx服务

    #建立网络
    docker network create -d=overlay myNet
    #建立nginx
    docker service create \
    --network myNet \
    --name my-web \
    -p 8080:80 \
    --replicas 2 \
    nginx
    #查看
    docker service ps my-web
    #nginx有可能落在manager上,也可能落在worker上
    

    docker compose

    dockerfile/容器创建/网络管理/vol分配/环境变量整合到一个yml文件中,只需一条命令,就可以把整个集群建立起来

    #安装 略
    - 编写Dockerfile
    - 编写docker-compose.yml
    - 运行docker-compose up
    
    yml例子:
    version: '1'
    services:
        db:
            image:mysql:5.7
            volumes:
                - db_data:/var/lib/mysql
            restart: always
            environment:
                MYSQL_ROOT_PASSWORD: wordpress
                MYSQL_DATABASE: wordpress
                MYSQL_USER: wordpress
                MYSQL_PASSWORD: wordpress
        
        wordpress:
            depends_on:
                - db
            image: wordpress:lastest
            ports:
                - "8001:80"
            restart: always
            environment:
                WORDPRESS_DB_HOST: db:3306
                WORDPRESS_DB_USER: wordpress
                WORDPRESS_DB_PASSWORD: wordpress
    volumes:
        db_data;
    

    可视化工具

    • docker ui (local)
    • portainer (local/remote)
    • DaoCloud (fee)

    相关文章

      网友评论

          本文标题:初识Docker

          本文链接:https://www.haomeiwen.com/subject/sigwcktx.html