美文网首页
docker基础 --- 镜像篇

docker基础 --- 镜像篇

作者: 梦想做小猿 | 来源:发表于2017-02-09 17:25 被阅读0次

    说明

    镜像是Docker的三大组件之一,docker运行容器前需要本地存在对应镜像,如果本地没有镜像,docker会从镜像仓库下载(默认是Docker Hub公共服务器中的仓库)

    基础操作

    • 获取镜像

      docker pull [选项] [docker registry地址]<仓库名>:<标签>
      
      • docker registry地址:一般为<域名/IP>[:端口号],默认地址为docker hub
      • 仓库名:仓库名分为两段,<用户名>/<软件名>。如果不给出用户名,则默认为library,也就是官方镜像

      例如:

      [root@localhost ~]# docker pull centos
      

      以上命令中没有给出docker registry地址,则默认是从docker hub中下载镜像。而镜像名是centos,因此会下载官方镜像library/centos仓库标签为最新的(latest)镜像

    • 配置国内镜像加速

      docker pull 默认使用docker hub下载镜像,速度非常慢,这里配置daocloud镜像加速

      1. https://dashboard.daocloud.io/注册
      2. 然后点击加速器,有自动配置docker加速器,复制到命令行运行即可,该命令会在/etc/docker下生成一个daemon.json文件
    • 运行镜像

      启动一个临时容器

      [root@localhost ~]# docker run -it -rm centos bash
      
      • docker run 运行一个新容器
      • -it是两个参数,-i:交互式操作,-t是给一个终端,因为这里需要进入到bash中输入命令,所以需要一个交互式终端
      • -rm,容器退出后自动删除该容器,为了排障需求,默认退出容器不会删除容器,需要手动docker rm。一般测试情况下添加rm参数可以节省空间
      • bash,我们希望有个交互式的shell,因此使用bash

      启动一个web容器

      [root@localhost ~]# docker run --name webserver -d -p 80:80 nginx
      

      用nginx镜像构建一个名为webserver的容器,并将容器的80端口映射到物理机的80端口

    使用Dockerfile定制镜像

    docker的镜像是以分层的形式工作的,定制镜像就是定制每一层所添加的配置、 文件。我们可以把每一层的修改、安装、构建、操作的命令都写入一个脚本,用这 个脚本来构建镜像,这个脚本就是Dockerfile

    以nginx镜像为例,定制ngixn默认首页

    [root@localhost ~]# mkdir mynginx && cd mynginx && touch Dockerfile
    [root@localhost ~]# vim Dockerfile
    FROM nginx
    RUN echo '<h1>Hello Docker</h1>' > /usr/share/nginx/html/index.html
    

    Dockerfile主要由FROM和RUN组成

    • FROM指定基础镜像,是Dockerfile中必备指令,且必须放在第一个,镜像可指定为scratch,表示不以任何镜像为基础
    • RUN 用来指定命令的指令,RUN有两种格式
      • shell格式:RUN <命令>,就像直接在命令行中输入一样,上例就是该格式
      • exec格式:RUN ["可执行文件","参数1","参数2"]

    Dockerfile 中每一个指令都会建立一层,如果有多个RUN会建立多层,会产生非常臃肿、非常多层的镜像,容易出错,效率低,且docker对层有限制,Union FS限制不能超过127层。所以Dockerfile应将命令写成一行,使用一个RUN

    [root@localhost ~]# mkdir mynginx && cd mynginx && touch Dockerfile
    [root@localhost ~]# vim Dockerfile
    FROM centos
    RUN yum install epel-release \
        && yum install nginx \
        && echo '<h1>Hello Docker</h1>' > /usr/share/nginx/html/index.html
    CMD ["nginx","-g","daemon off;"]
    [root@localhost ~]# docker build -t nginx_v3 .
    

    以上Dockerfile将多条命令写到一个RUN中,减少了创建层的个数。如果Dockerfile中有编译安装软件,最后要将下载的源码包删掉,以避免镜像太臃肿。CMD为启动该容器的时候自动运行的命令后续文章会仔细解释

    使用git repo构建镜像

    [root@localhost ~]# docker build https://github.com/xxxx/xxxx.git
    

    使用tar包构建镜像

    [root@localhost ~]# docker build http://server/xxxx.tar.gz
    

    从标准输入构建

    [root@localhost ~]# docker build - < Dockerfile
    [root@localhost ~]# cat Dockerfile | docker build -
    

    从标准输入读取压缩包构建

    [root@localhost ~]# docker build - < xxx.tar.gz
    

    相关文章

      网友评论

          本文标题:docker基础 --- 镜像篇

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