• docker(一)--基础命令


    什么是容器
    一种虚拟化的方案
    操作系统级别的虚拟化
    只能运行相同或相似内核的操作系统
    依赖于linux内核特性:namespace和cgroups(control group)


    linux namespaces 命名空间

    通过namespaces将以下资源隔离:

    uts(unix timesharing system)主机名和域名
    ipc(inter-process communication)信号量、消息队列和共享内存 跨进程通信的访问
    pid(processid) 进程编号
    net(network) 管理网络接口,网络设备、网络栈、端口等
    mnt(mount) 管理挂载点(文件系统)
    user 用户和用户组

    control groups(cgroups)控制组 用户空间的资源分配

    blkio:块设备io
    cpu:cpu
    cpuacct:cpu资源使用报告
    cpuset:多处理器平台上的cpu集合
    devices: 设备访问
    freezer:挂起或恢复任务
    memeory:内存用量及报告
    perf_event:对cgroup中的任务进行统一性能测
    net_cls:cgroup中的任务创建的数据报文的类别

     镜像:静态

     容器:动态的,有生命周期

    安装docker
    依赖环境:

    • 64bits cpu
    • linux kernel 3.10+
    • linux kernel cgroups and namespaces

    最好是安装在centos7,因为yum的仓库docker版本比较老,直接使用清华大学的镜像
    配置yum源:
      # wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
    修改
      # sed -i 's@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' docker-ce.repo

    安装
      # yum install docker-ce

    docker配置文件

     mkdir /etc/docker    #默认不存在,需要自己创建
     vim /etc/docker/daemon.json   

    定义镜像加速器:

      可以使用docker cn/阿里云加速器/中国科技大学加速器

    {
    "registry-mirrors": ["https://registry.docker-cn.com"]
    }

    Daemon:
    # systemctl start docker
    # docker version   #查看docker client和server 的version信息

    # docker --help

    docker 对象有images,containers,networks,volumes,plugin等对象,都可以执行增删改查操作。

     # docker container --help 

    # docker info #查看docker详细信息

    镜像
    # docker search nginx

       alpine:(微型发行版,小镜像,提供基础环境,不带调试工具,不建议用在生产环境)

    # docker [image] pull

    # docker inspect 1e1148e4cc2c #查看镜像的详细信息

    容器
    docker container ls  # 列出正在运行的容器
    docker container ls -a  # 列出所有容器,包括停止运行的

    docker ps   等同于docker container ls 

     docker [container] run
     docker container stop 9a34a9f0e7d2
     docker container rm 9a34a9f0e7d2

    运行容器

    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

    • -t (tty)  让docker分配一个伪终端

    • -i   交互式访问
    • --name  容器名称
    • --network  容器网络,默认bridge。 通过docker network ls 可以查看到
    • -d  运行在后台

    运行一个容器:

     # docker run -d --name web1 nginx:1.14-alpine

     # docker run --name b1 -it busybox
     / # ls
     bin dev etc home proc root sys tmp usr var

     / # httpd --help

     / # mkdir /data/html -p
     / # vi /data/html/index.html

     / # httpd -f -h /data/html/   运行httpd

     在容器外部可以访问该httpd服务,打开另一个终端:

    # docker inspect b1  查看容器信息,容器ip

    # curl  172.17.0.2

    docker ps -a (docker container ls -a) 查看所有容器

    启动已停止的容器

    docker start [OPTIONS] CONTAINER [CONTAINER...]

    Start one or more stopped containers

    Options:
    -a, --attach Attach STDOUT/STDERR and forward signals
    --detach-keys string Override the key sequence for detaching a container
    -i, --interactive Attach container's STDIN

    # docker start -a -i b1  重新启动b1容器

    停止容器

    docker stop 

    docker kill 

    删除容器

    docker rm b1

    进入一个后台启动的容器中:

    docker attach container_name/container_id

    在容器中执行命令

    docker container exec -it web1 /bin/sh

    / # ps
    PID USER TIME COMMAND
    1 root 0:00 nginx: master process nginx -g daemon off;
    6 nginx 0:00 nginx: worker process
    17 root 0:00 /bin/sh
    23 root 0:00 ps

    查看容器日志

    docker container logs 63e704e720fa

    Docker Images

    docker镜像中含有启动容器所需要的文件系统及其内容,因此,其用于创建并启动容器。 

    • 采用分层构建机制,最底层为bootfs,上面是rootfs
      • bootfs:  用于系统引导的文件系统,包括bootloader和kernel,容器启动完成后会被卸载以节约内存资源
      • rootfs:位于bootfs之上,表现为docker容器的根文件系统;

          传统模式中,系统启动时,内核挂载rootfs时会首先将其挂载为只读模式,完整性自检完成后将其重新挂载为读写模式
          docker中,rootfs由内核挂载为“只读”模式,而后通过联合“挂载技术”额外挂载一个“读写层”。

                

    dockers image layer

    • 位于下层的镜像为父镜像(parent image),最底层的为基础镜像
    • 最上层为“可读写”层,其下的均为“只读”层,如果容器被删除,最上层的读写层会一并被删除

    docker 分层镜像

    docker分层镜像,除了aufs,还支持btrfs,devicemapper,overlay2和vfs等

    Docker Registry

    启动容器时,docker daemon 会试图从本地获取相关镜像,本地镜像不存在时,会从Registry中下载镜像并保存到本地。

    Registry用于保存docker镜像,包括镜像的层次结构和元数据

    分类:

    • Sponsor Registry:第三方的registry,供客户和docker社区使用
    • Mirror Registry:第三方的registry,只让客户使用
    • Vendor Registry:由发布docker镜像的供应商提供的registry
    • Private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry

    Registry(repository and index)

    Repository  

    • 由某特定的docker镜像的所有迭代版本组成的镜像仓库
    • 一个Registry可以存在多个Repository
      • Repository可分为“顶层仓库”和“用户仓库”
      • 用户仓库名称格式为“用户名/仓库名”
    • 每个仓库可以包含多个Tag(标签),每个标签对应一个镜像。一个镜像可以有多个tag,一个tag只能属于一个镜像

    Index

    • 维护用户账户、镜像的校验以及公共命名空间的信息
    • 相当于为registry提供了一个完成用户认证等功能的检索接口

    docker registry中的镜像通常由开发人员制作,而后推送至“公共”或“私有”registry上保存,公其它人员使用,例如部署到生产环境

     

    镜像的生成途径

    • Dockerfile    build
    • 基于容器制作   commit
    • Docker Hub automated builds

    基于容器制作镜像

      docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

      Options:

      -a, --author string Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
      -c, --change list Apply Dockerfile instruction to the created image    改变dockerfile指令
      -m, --message string Commit message
      -p, --pause Pause container during commit (default true)

     例如:

    docker run --name b1 -it busybox   (启动一个容器)
    / # mkdir /data/html -p
    / # vi /data/html/index.html

    基于容器创建镜像

    docker commit -p b1    
    sha256:ae437fa992d9c8182cffcf60e382f8d15a44e26065871b447e2838421b9231a1

    docker image ls

    REPOSITORY   TAG          IMAGE ID         CREATED          SIZE
    <none>           <none>     ae437fa992d9   3 seconds ago  1.2MB

     给镜像打标签

     docker tag ae437fa992d9 abao/bbox:v0.1

    docker image ls
    REPOSITORY   TAG    IMAGE ID          CREATED        SIZE
    abao/bbox       v0.1    ae437fa992d9   5 minutes ago 1.2MB

    一个镜像可以打多个标签:

    docker tag abao/bbox:v0.1 abao/bbox:latest

    镜像创建完成后,启动容器查看

    docker run --name t1 -it abao/bbox:latest
    / # ls
    bin data dev etc home proc root sys tmp usr var
    / # cat data/html/index.html 

    查看镜像详细信息

    busybox container t1可以看到t1这个镜像的详细信息  

    "Cmd": [  #默认执行的指令,通过构建镜像时的-c可以更改
    "sh"
    ],

    docker commit -a "abao <abao@test.com>" -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -p b1 abao/bbox:v0.2

    启动镜像

    docker run --name t2 abao/bbox:v0.2

    可以查看到

    docker ps 

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    ea4d55c5ad60 abao/bbox:v0.2 "/bin/httpd -f -h /d…" About a minute ago Up About a minute t2

    也可以通过curl访问到

    docker push

    docker login 先

    docker push  (如果不是push到docker hub,必须先打tag,tag包含服务器地址/名称空间/仓库名称:标签)

    镜像的导入和导出

    主机1: 

    docker save -o myimages.gz  abao/bbox:v0.1 abao/bbox:v0.2  

    主机2:

    docker load -i myimages.gz  

  • 相关阅读:
    搭建wamp环境,数据库基础知识
    练习题:选择器和选择好友
    例子:滑动效果
    TCPDump
    内存
    Cache和Buffer的区别(转载)
    经典问题回忆
    history
    DNS
    bc的用法
  • 原文地址:https://www.cnblogs.com/xiaobaozi-95/p/10538743.html
Copyright © 2020-2023  润新知