zoukankan      html  css  js  c++  java
  • docker学习记录

    Container 容器是一种基础工具, 泛指任何容纳其他物品的工具, 可以部分或者完全封闭,被用于容纳,储存, 运输物品, 物体可以放置在容器中, 而容器可以保护内容物

    1 Docker Objects: images, containers, networkers,volumes, plugins

    2 基础环境

      64位cpu, 内核版本3.1以上, linux支持控制组(Cgroups)和名称空间(namespaces) centos6 也可以使用docker, 不过有极大的不稳定性

    3 docker默认的配置文件在/etc/docker/damon.json

       dokcer镜像加速

            docker.cn

            阿里云

            中国科技大学

    4 docker常用命令

           docker version 查看docker版本, 

           docker info 查看docker的详细信息

           docker search 在指定的源搜索镜像   eg. docker search nginx

           docker pull 拉取镜像   eg. docker pull nginx:alpine 拉取nginx最基本的版本 

           docker images 列出本地的所有镜像

           docker image rm 删除镜像

           docker container ls 列出正在运行的容器 等价于 docker ps, 这个命令只显示处于正在运行状态的容器, -a, 显示所有容器

           docker run 运行容器   eg. docker run  -it busybox:latest

           docker container start -a -i <name> 启动容器

           docker container rm <name> 删除容器, 只能删除运行状态为停止状态的容器

           docker inspect : 获取容器/镜像的元数据。

           docker container exec <name> 进入容器

          docker commit 制作镜像

          docker tag 管理标签 eg. docker tag 141b7fb4ff9f lwf/ww:v-01

          docker post <容器名称> 查询容器端口映射

          docker run -p <ip>:<port>:<containerport>, 将容器指定的端口暴露出去

          docker run --name b2 --network container:b1 -it busybox 表示共享b1的网络空间, 正常的两个容器ip是不同的, 这样查看两个容器的ip是相同的,其他的名称空间 都是隔离的共享IPC,例子, 同一个主机上的两个进程

         docker run --name b3 --network host -it --rm busybox 共享宿主机的网络名称空间

         

          5 存储卷(数据脱离容器声明周期)(volume)

          docker 自己管理

          docker run --name b4 -it -v /data busybox, 指定容器内的卷位置, 可以使用docker inspect <containerName>查看容器详细信息, 此位置与宿主机目录绑定, 操作任何一个都是影响其他一个, 

          docker目录与宿主机目录都明确指定(绑定挂载卷)

          docker run --name b5 --rm -it -v /lwf/volume/b5:/data busybox 将容器的/data 目录与宿主机/lwf/volume/b5建立关系

        6 Dockerfile

         语法格式

          format

          #Comment

          # INSTR UCTION arguments指定约定俗称使用大写, 但是对大小写不敏感

           第一个非注释行必须用FROM开始,

           1 得有一个docker的工作目录, 2 Dockerfile文件首字母必须大写

             FROM 指令是是最重要的一个且必须为Dockerfile文件开篇的第一个非注释行,用于为映像文件构建过程中的指定基准镜像,后续指令运行基于此镜像提供的操作

             MAINTANIER 此dockerfile的维护者的详细信息, Dockerfile不会限制这个指令的位置, 但是推荐放置在FROM指令之后

             COPY: 用于从Docker主机复制文件至创建的新映像文件, 拷贝是要拷贝的文件必须在docker的工作目录中或者在docker工作目录的的子目录

             eg.        

              

             构建镜像命令:docker build ./ -t httpdl:v0.1-1 , 当前目录, httpdl仓库, tag为v0.1-1, 以上文件中有个错误, COPY目录文件必须以/结尾, 否则不能拷贝成功, 但是还不报错,这就很烦了

             CYPE 指令在复制文件的时候只复制源文件的子文件以及子目录,不复制本目录

             ADD 这个指令类似于COPY命令,ADD指令支持TAR文件和URL路径

             如果add引用的是一个tar文件, 将会自动的被展开为一个目录,如果是通过URL获取的tar文件, 将不会被展开, 视频教程中说的是tar文件将会被展开, 但是实际操作中并没有被展开

            WORKDIR 个人理解为切换目录,

             VOLUME: 卷, 用于在image中创建一个挂载点目录,以挂载Dokcer host上的卷或者其他容器的卷, 这种方式只能管理docker管理的卷  

              EXPOSE 用于为容器打开指定要监听的端口以实现与外部通信,Dockerfile加入这个是带暴露端口, 不是真的暴露, 可以在docker run是手动加入-P

              ENV 用于为镜像文件所需的环境变量,并且能为Dockerfile文件中其他的其他指令所调用

             RUN 用于指定docker build过程中运行的程序

             CMD 类似RUN 指令,CMD也可以用于运行任何命令活任何程序,不过,二者运行的时间点不同

             RUN指令运行于映象文件构建的过程中,而CMD指令运行基于Dockerfiile构建出的新映象文件,文件启动一个容器时

             CMD 指令的首要目的在于为启动的容器指定默认要运行的程序,且其运行结束后,容器也将运行终止, 不过, CMD指定的命令可以被docker run命令行选项所覆盖,

             在Dockerfile中可以存在多个CMD命令,但仅仅最后一个会生效

            CMD 运行方式, 如果以CMD command将会以sh的子进程启动, 如果以CMD [command]的方式启动, 不会以sh的子进程启动, 如果以这种方式启动时需要用以sh的子进程启动, 那么CMD ["/bin/sh", "command","command"]这种方式启动

          在docker run的时候可以指定命令覆盖Dockfile中的CMD命令

         ENTR YPOINT 类似CMD指令的功能,用于为容器指定默认运行程序,从而使得让容器像是一个单独的可执行程序

         与CMD不同的是, 由ENTR YPOINT 启动的程序不会被docker run命令行指定的参数所覆盖,而且, 这些命令参数会被当做参数传递给ENTR YPOINT 指定的程序

         不过, docker run 命令中的 --entrypoint选项的参数可覆盖ENTR YPOINT指令指定的程序, 如果ENTR YPOINT ,和CMD同时定义, 那么cmd的参数会被作为参数传递给ENTR YPOINT

         emmmmmmmmmmmmmmmmmmmmmmmmmmm

              

        

           

          

  • 相关阅读:
    How to change hostname on SLE
    How to install starDIct on suse OS?
    python logging usage
    How to reset password for unknow root
    How to use wget ?
    How to only capute sub-matched character by grep
    How to inspect who is caller of func and who is the class of instance
    How to use groovy script on jenkins
    Vim ide for shell development
    linux高性能服务器编程 (二) --IP协议详解
  • 原文地址:https://www.cnblogs.com/sailfan/p/10701886.html
Copyright © 2011-2022 走看看