美文网首页
Docker技术

Docker技术

作者: 巨子联盟 | 来源:发表于2018-01-21 11:01 被阅读0次
    image.png

    Union FS: 是一种支持将不同目录挂载到同一个虚拟文件系统下的文件系统

    Cgroups:实现对资源的配额和度量

    Namespaces:LXC所实现的隔离性,主要来自kernel的namespaces,
    其中PID、NET、IPC、MNT、UTS等namespace将container的进程、
    网络、消息、文件系统、UTS和用户空间隔离开

    LXC: Linux Container,提供了一种操作系统级的虚拟化方法。
    借助namespaces和cgroups来管理container

    image.png image.png
    • Docker安装

    1. 检查内核
      运行Linux3.8或更高的版本内核
      运行64位CPU架构的计算机(目前只能是x86_64和amd64),目前不支持32为CPU
      内核必须支持并开启cgroup和命名空间(namespace)功能
    [root@registry ~]# uname -a
    Linux registry.qiku.com 3.10.0-514.16.1.el7.x86_64 #1 SMP Wed Apr 12 15:04:24 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
    
    1. 检查Device Mapper
      检查 /proc/devices 是否有Device Mapper 条目
    [root@registry ~]# grep device-mapper /proc/devices
    253 device-mapper
    

    3 安装方法
    安装方式:
    yum或apt-get
    sudo yum install docker 或 sudo apt-get install docker
    RPM 文件安装

    sudo wget ftp://rpmfind.net/linux/mageia/distrib/cauldron/x86_64/media/core/release/docker-17.03.1-3.mga6.x86_64.rpm
         sudo rmp -Uvh docker-17.03.1-3.mga6.x86_64.rpm
    

    脚本安装

         sudo yum update
         curl -sSL https://get.docker.com/ | sh 
         sudo service docker start
    

    源码编译安装

    sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
    [dockerrepo]
    name=Docker Repository
    baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
    enabled=1
    gpgcheck=1
    gpgkey=https://yum.dockerproject.org/gpg
    EOF
    
    sudo yum install -y docker-engine 
    sudo service docker start 
    sudo chkconfig docker on
    或
    sudo systemctl start docker.service
    sudo systemctl enable docker.service
    

    -### Docker命令

    • 容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
    • 容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|import|port]
    • 容器rootfs命令 — docker [commit|cp|diff]
    • 镜像仓库 — docker [login|pull|push|search]
    • 本地镜像管理 — docker [images|rmi|tag|build|history|save|import]
    • 其他命令 — docker [info|version]
    image.png
    #拉取
    docker pull registry.domain.com:5000/repos:<tag_name>
    docker pull dl.dockerpool.com:5000/mongo:latest
    [root@registry ~]# docker images --no-trunc
    REPOSITORY                                         TAG                 IMAGE ID                                                                  CREATED             SIZE
    dockermaster_master                                latest              sha256:76c86913b2bf78349fbeee7f7eff4c538a2d9b9ad6073b0dd216a128f7ab4681   38 hours ago        940MB
    <none>                                             <none>              sha256:2a6d16993de0256f4d77a2585fed1b076399d1f4454c58dc56fa275e37cc303a   38 hours ago        940MB
    mavencentos                                        latest              sha256:8b23262eab3dbec329f3c5000a2e8c1e516eb6d60d4cc38126dc6f4e4213311d   38 hours ago        791MB
    
    • 给镜像打上标签(tag)
      tag的作用主要有两点:一是为镜像起一个容易理解的名字,二是可以通过docker tag来重新指定镜像的仓库,这样在push时自动提交到仓库。
     docker tag 195eb90b5349 seanlook/ubuntu:rm_test
     docker tag Registry/Repos:Tag New_Registry/New_Repos:New_Tag
    
    image.png
    • 推送一个镜像到仓库
      docker push 10.100.21.114:5000/mongo:1.0
      -启动一个镜像
    docker run –it –name centos1 centos
    docker run -d -p 5000:5000 --restart always --name registry[别名] registry[镜像名称]
    docker run -d --restart=always --name test_container1  ubuntu /bin/bash -c "while true; do echo hello world ; sleep 1; done"  
    

    run 参数:
    -i:选项表示使用交互模式,始终保持输入流开放
    -t: 选项表示分配一个伪终端
    --name:可以指定docker run 命令启动的容器名字,若无此项Docker容器将随机分配一个名字
    -d: 选项表示将容器在后台运行。
    -p:选项用户将容器的端口暴露给宿主机的端口,格式host-port:container-port
    -v:用于挂载一个volume 可以用多个-v参数同时挂载多个volume。Volume的格式为[host-dir]:[container-dir]:[rw:ro]
    -c: 选项表示用于运行容器中的所有进程分配CPU的shares值,这时一个相对权重,实际的处理速度与宿主机的CPU相关。
    -m: 选项表示用户限制为容器中所有的进行分配的内存总量,以B,K,M,G为单位


    • 查看容器
      docker ps 默认显示当前正在运行中的container
      docker ps -a 查看包括已经停止的所有容器
      docker ps -l 显示最新启动的一个容器(包括已停止的)

    • 连接到正在运行中的container(exec)
      docker exec –it 容器ID或容器名称

    • 查看image或container的底层信息(inspect)
      inspect的对象可以是image、运行中的container和停止的container。
      docker inspect --format=‘{{.Name}}’ 容器或镜像
      docker inspect -f=‘{{.Name}}’ 容器或镜像


      image.png
    • 查看容器中正在运行的进程(top)

    ps -ef|grep docker
    docker top 5289df0834bf
    docker top wiki
    
    • 显示一个或多个容器的统计信息(stats)
    oot@registry docker]# docker ps
    CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                              NAMES
    1b7dc14d617a        dockermaster_master   "/bin/tini -- /usr..."   39 hours ago        Up 39 hours         0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp   dockermaster_master_1
    [root@registry docker]# docker stats 1b7dc14d617a
    CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
    1b7dc14d617a        0.05%               789.5MiB / 3.702GiB   20.83%              2.11MB / 580kB      53.9MB / 318kB      53
    
    • 获取容器的日志(logs)
      当容器运行过程中,我们需要知道容器内部具体发生了什么可以通过 docker logs 来进行查看。
    docker logs [OPTIONS] CONTAINER
    docker logs --tail 10 CONTAINER –获取容器日志的最后10行
    docker logs --tail 0 -f CONTAINER ----获取容器的最新日志而不必读整个文件
    docker logs --tail 10  -t -f  CONTAINER --- -t标志为每条日志项加上时间戳。
    docker run --name test_container -d ubuntu /bin/sh –c "while true; do echo hello world; sleep 1; done"
    
    • 控制Docker守护进程和容器所用的日志驱动
      sudo docker run --log-driver="syslog" --name test_container -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
    Driver Description
    none No logs will be available for the container and docker logs will not return any output.
    json-file The logs are formatted as JSON. The default logging driver for Docker.
    syslog Writes logging messages to the syslog facility. The syslog daemon must be running on the host machine.
    journald Writes log messages to journald. The journald daemon must be running on the host machine.
    gelf Writes log messages to a Graylog Extended Log Format (GELF) endpoint such as Graylog or Logstash.
    fluentd Writes log messages to fluentd (forward input). The fluentd daemon must be running on the host machine.
    awslogs Writes log messages to Amazon CloudWatch Logs.
    splunk Writes log messages to splunk using the HTTP Event Collector.
    etwlogs Writes log messages as Event Tracing for Windows (ETW) events. Only available on Windows platforms.
    gcplogs Writes log messages to Google Cloud Platform (GCP) Logging.
    nats NATS logging driver for Docker. Publishes log entries to a NATS server.
    • 将一个container固化为一个新的image(commit)
      当我们在制作自己的镜像的时候,会在container中安装一些工具、修改配置,如果不做commit保存起来,那么container停止以后再启动,这些更改就消失了。
      docker commit <container> [repo:tag]
      后面的repo:tag可选
      只能提交正在运行的container,即通过docker ps可以看见的容器,

    • docker build 使用此配置生成新的image
      build命令可以从Dockerfile和上下文来创建镜像:
      docker build [OPTIONS] PATH | URL | -


    相关文章

      网友评论

          本文标题:Docker技术

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