美文网首页
docker(三)docker镜像文件

docker(三)docker镜像文件

作者: 7ColorLotus | 来源:发表于2020-06-04 11:45 被阅读0次
    • 数据管理

      1. 前提
        1>docker容器不应该负责持久化
        2>业界使用docker,等价于使用服务
        3>官方使用docker,每次启服务,可以直接创建后运行。直接docker run ,而不使用docker start。这样的好处是:启动docker服务时,不必关心以前遗留的数据
        4>docker容器运行生成的文件不应该放在容器内,应该放在宿主机内
      2. 数据挂载
        1>挂载命令:docker run --name ce -v /opt/data -it centos /bin/bash。可以指定宿主机路径docker run --name ce -v /opt/data:/data -it centos /bin/bash
        2>查看宿主机中的挂载路径:docker inspect 容器id 。查看mounts节点
        3>docker 的数据卷在宿主机里的默认位置:/var/lib/docker/volumes
        4>共享其他容器的共享文件:docker run -it --name cen3 --volumes-from ce centos
        5>删除容器时,默认不删除共享文件。可以强制删除
    • 镜像的制造

      1. 使用commit方式建镜像, 以nginx为例
        1>启动一个centos容器
        2>进入容器安装nginx。
         a, 使用rpm安装。rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
         b, 使用yum安装 。先搜索(yum search nginx )再安装(  yum install nginx -y)
        
        3> 提交镜像:docker commit centos4nginx my-centos-nginx:v1
        4> 启动容器并启动容器内的nginx服务:
          a,命令:docker run -d --name  my-centos-nginx-c -p 8081:80 my-centos-nginx:v1 /usr/sbin/nginx -g "daemon off;"
          b, /usr/sbin/nginx 进程是以后台进程启动
          c, -g "daemon off;" 要以前台的方式启动,daemon off守护关闭
        
        5> 容器包含一个读写层的文件层。commit操作时,此层变为只读层即镜像
      2. 使用docker file 创建镜像
        1>准备dockfile文件
        2>创建镜像:docker build -t cmd . (.指定在当前目录寻找dockerfile)
        3>运行镜像:docker run -it cmd
        4>RUN就是增加一个镜像层
        5>Dockerfile指令集
        a,From 第一条指令必须为FROM指令,用于指定基础镜像
        b,MAINTAINER 指定维护者信息
        c,RUN 会在shell终端运行命令
        d,EXPOSE 格式为EXPOSE[...]声明容器需要暴露的端口号,镜像启动可以通过-P或-p进行端口映射的绑定
        e,ENV 指定一个环境变量,可以被后续的RUN引用,并且在容器中记录该环境变量
        f,ADD 该命令将复制指定的文件到容器中,其中可以是Dockfile所在目录的一个相对路径;也可以是tar文件(自动解压)
        g,VOLUME 格式为VOLUME[path],创建一个可以从本地主机或其他容器挂载点,一般用来存放需要保持的数据
        h,USER 指定容器时的用户名,后续RUN也会指定该用户
        i,WORKDIR 指定工作空间,后续命令都在此目录下执行
        j,ENTRYPOINT 配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
        每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。
      
      DockFile详解.png

      6> CMD VS ENTRYPOINT

      a, CMD ---- 给出的是一个容器的默认的可执行体,多个cmd最后一个生效
         ----shell用法:CMD echo "hello cmd"
         ----exec用法:CMD ["/bin/bash","-c","echo 'hello cmd'"]
      b,ENTRYPOINT----是正统的用于定义容器启动以后执行的。容器入口,多个ENTRYPOINT最后一个生效
         ----shell用法(不接受参数,不推荐):CMD ["p in cmd"]  ENTRYPOINT echo
         ----exec用法:CMD ["p in cmd"]  ENTRYPOINT ["echo"]
      

      7>Dockerfile样例

         a,在centos里启动nginx容器文件内容
           FROM centos
           MAINTAINER 626477293@qq.com
           RUN rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
           RUN yum install nginx -y
           CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
         b,创建镜像:docker build -t nginx4build:1.0 .
         c,根据镜像运行容器:docker run -it -d  -p 8081:80 --name ngnx4build1 nginx4build:1.0
      

    相关文章

      网友评论

          本文标题:docker(三)docker镜像文件

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