美文网首页docker
Docker基本概念与实践(一)-镜像

Docker基本概念与实践(一)-镜像

作者: Garwer | 来源:发表于2018-04-23 00:42 被阅读29次

    Docker镜像

    镜像是运行容器的前提
    
    Docker镜像是Docker三大核心概念最为关键一环,简单来说镜像就是把业务代码和可运行环境进行整体的打包。
    镜像可以看作是一个特殊而且只可读的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。(例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了Mysql或用户需要的其它应用程序。)
    从下图可以看出,Docker 包含三个基本概念,分别是镜像(Image)、容器(Container)和仓库(Repository)。镜像是 Docker 运行容器的前提,仓库是存放镜像的场所,可见镜像更是Docker的核心。
    结构图
    拉取镜像前准备工作

    为了方便以后的管理,新增docker用户并赋予执行docker命令的权限

    #增加docker分组
    groupadd docker
    
    #创建docker用户的同时直接加入docker组 
    useradd -d /home/docker -g docker docker
    
    #使用root用户为docker用户设置密码 
    passwd docker
    
    #使用root用户 添加sudo文件写权限
    chmod u+w /etc/sudoers
    
    #编辑sudoers文件加入docker用户并保存
    vi /etc/sudoers  #执行这步后找到文件里root ALL=(ALL) ALL  在下面一行添加docker ALL=(ALL) ALL
    
    #恢复sudo文件的只读权限
    chmod 440 /etc/sudoers
    
    #重启Docker 
    systemctl restart docker
    

    国内的服务器由于拉取镜像速度感人QAQ,因此博主采用阿里云作为加速地址(也可使用网易蜂巢等)

    需在阿里云注册个人专属加速地址

    yum安装docker默认配置文件在 /etc/docker/ 下,在daemon.json文件中加

    "registry-mirrors": ["xxx"]  #xxx为专属加速地址
    

    拉取镜像

    1.通过dockerfile构建:dockerfile是用命令行文本的方式构建生成镜像
    
    2.doacker pull拉取镜像:docker pull是从仓库里拉取镜像到本地 
    
    区别在于一个生产新的 一个从已有仓库获取
    

    以拉取官方ubuntu镜像为例

    #搜索带星的ubuntu镜像
    docker search ubuntu--s
    
    #拉取镜像  (默认版本最新标签为latest 【docker inspect ubuntu可以查看具体信息包含版本号】)
    docker pull ubuntu
    
    #拉取后可以随时使用镜像 -t为开启连接终端 -i为开启input输入功能通常一起使用 可以用该操作系统镜像启动容器 执行bash应用等 以执行bash应用为例
    docker run  -t -i ubuntu /bin/bash
    
    #查看刚刚镜像启动的容器
    docker -ps a
    
    #修改镜像标签 例如生成一个名为myubuntu标签为garwer的镜像 此时会多出一个刚创建id相同的镜像(实际指向的镜像文件相同,只是名称不同,docker tag起了类似连接作用
    docker ubuntu:latest myubuntu:garwer
    
    执行结果

    创建镜像的三种方式

    1.基于已有镜像的容器创建
    2.基于本地模板导入
    3.dockerfile创建
    

    1.基于已有镜像的容器创建

    docker commit

    例如现在已经有ubuntu镜像 使用ubuntu安装命令安装apache2

    依次执行

    docker run -i -t ubuntu /bin/bash
    apt-get -yqq update
    apt-get -y install apache2 
    #安装完成后退出
    exit 
    

    启动了一个容器,并在里面安装了Apache。我们会将这个容器作为一个Web服务器来运行,所以我们想把它的当前状态保存下来。这样我们就不必每次都创建一个新容器并再次在里面安装Apache了。为了完成此项工作,需要先使用exit命令从容器里退出,之后再运行docker commit命令:

    #查看刚刚创建并退出的容器
    docker ps -a
    
    #其中 -m为提交信息 -a为作者信息 testapache为起的标签名 会生成一串很长的镜像id fa1a4c0cccb0为你的ubuntu容器id
    docker commit -m "added a new file" -a "Docker linjw" fa1a4c0cccb0  testapache
    
    #查看镜像 包含了个刚刚创建安装有apache2的ubuntu镜像 
    docker images
    

    基于本地模板导入(没试过)

    使用Dockerfile创建

    内容较多,下篇单独讲解


    提交镜像到官方镜像DockerHub上

    1.https://hub.docker.com/ 先在官网注册
    2.上传自制镜像,例如上传创建的testapache镜像(修改标签后上传)
    3.更改标签后然后docker push自制镜像(docker push默认提交到docker仓库,需要登陆)
    
    #更改要提交的镜像的标签,规范格式为 user/imagename:tag,例如:
    docker tag testapache:latest linjiawei10086/testapache:garwer 
    
    #登陆docker官网并输入账号密码
    docker login
    
    #将刚刚修改标签的镜像提交dockerhub
    docker push linjiawei10086/testapache:garwer 
    
    成功后登陆dockerhb个人仓库可看到自己自制提交的镜像
    dockerhub个人仓库

    删除镜像

    #删除镜像  根据镜像命或标签删除单个 例如docker rmi testapache:v1、docker rmi 0cadef2b6ac8
    docker rmi name:tag/imageid
    
    #当有该镜像创建的容器时,镜像文件无法删除,可用docker rmi -f name:tag/imageid强制删除,但建议先删掉容器再删镜像
    docker rmi -f name:tag/imageid
    
    #删除全部镜像
    docker rmi $(docker images -q)
    

    相关文章

      网友评论

      本文标题:Docker基本概念与实践(一)-镜像

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