美文网首页
Docker Starter

Docker Starter

作者: DongGuangqing | 来源:发表于2017-01-17 16:42 被阅读24次

    Docker是怎么工作的

    Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问, 客户端和守护进程也可以运行再同一主机上,但这不是必须的。Docker命令行客户端也是类似的工作方式,但它通常通过Unix域套接字而不是TCP套接 字连接。

    守护进程从客户端接受命令并管理运行在主机上的容器。

    Docker Client-ServerDocker Client-Server

    Docker 概念及相互作用

    • 主机, 运行容器的机器。
    • 镜像,文件的层次结构,以及包含如何运行容器的元数据
    • 容器,一个从镜像中启动,包含正在运行的程序的进程
    • Registry, 镜像仓库
    • 卷,容器外的存储
    • Dockerfile, 用于创建镜像的脚本

    创建镜像

    • docker commit container-id
    • docker import url-to-tar
    • docker build -f Dockerfile .

    Dockerfile 中的命令

    BUILD 命令:

    • FROM - 新镜像是基于哪个镜像的
    • MAINTAINER - 镜像维护者的姓名和邮箱地址
    • COPY - 拷贝文件和目录到镜像中
    • ADD - 同COPY一样,但会自动处理URL和解压tarball压缩包
    • RUN - 在容器中运行一个命令, 比如:apt-get install
    • ONBUILD - 当构建一个被继承的Dockerfile时运行命令
    • .dockerignore - 不是一个命令, 但它能控制什么文件被加入到构建的上下文中,构建镜像时应该包含.git以及其它的不需要的文件。

    RUN 命令:

    • CMD - 运行容器时的默认命令,可以被命令行参数覆盖
      CMD指定容器启动是执行的命令,每个Dockerfile只能有一条CMD命令,如果指定了多条,只有最后一条会被执行。如果你在启动容器的时候也指定的命令,那么会覆盖Dockerfile构建的镜像里面的CMD命令。
    格式:
    CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;
    CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
    CMD ["param1","param2"] 提供给ENTRYPOINT的默认参数;
    
    • ENTRYPOINT - 和CMD类似都是配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
    格式:
       ENTRYPOINT ["executable", "param1","param2"]
       ENTRYPOINT command param1 param2(shell中执行)。
    

    ENTRYPOINT没有CMD的可替换特性,也就是你启动容器的时候增加运行的命令不会覆盖ENTRYPOINT指定的命令。 所以生产实践中我们可以同时使用ENTRYPOINT和CMD

    ENTRYPOINT ["/usr/bin/rethinkdb"]
    CMD ["--help"]
    
    • ENV - 设置容器内的环境变量
    • EXPOSE - 从容器中暴露出端口, 必须显式的通过在主机上的RUN命令带上-p或者-P来暴露端口
    • VOLUME - 指定一个在文件系统之后的存储目录。如果不是通过docker run -v设置的, 那么将被创建为/var/lib/docker/volumes

    BUILD, RUN命令都有的命令:

    • USER - 为RUN、CMD、ENTRYPOINT命令设置用户
    • WORKDIR - 为RUN、CMD、ENTRYPOINT、ADD、COPY命令设置工作目录

    Docker 容器管理

    用于与镜像交互的命令

    $ docker images  # 查看所有镜像.
    $ docker import  # 从tarball创建镜像
    $ docker build   # 通过Dockerfile创建镜像
    $ docker commit  # 从容器中创建镜像
    $ docker rmi     # 删除镜像
    $ docker history # 列出镜像的变更历史
    

    用于与容器交互的命令

    $ docker create  # 创建一个容器,但不启动它
    $ docker run     #  创建并启动一个容器
    $ docker stop    # 停止容器
    $ docker start   #  启动容器
    $ docker restart # 重启容器
    $ docker rm      # 删除容器
    $ docker kill    #  给容器发送kill信号
    $ docker attach  # 连接到正在运行的容器中
    $ docker wait    # 阻塞直到容器停止为止
    $ docker exec    # 在运行的容器中执行一条命令
    

    检查容器的命令

    $ docker ps      # 显示运行的容器
    $ docker inspect # 显示容器信息(包括ip地址)
    $ docker logs    # 获取容器中的日志
    $ docker events  # 获取容器事件
    $ docker port    # 显示容器的公开端口
    $ docker top     # 显示容器中运行的进程
    $ docker diff    # 查看容器文件系统中改变的文件
    $ docker stats   # 查看各种纬度数据、内存、CPU、文件系统等
    

    PS

    docker run 选项:
    --interactive (-i) - 将标准输入发送给进程
    -tty (-t) - 告诉进程有终端连接。 这个功能会影响程序的输出和它如何处理Ctrx-C等信号。
    --rm - 退出时删除镜像。

    --name - 给容器命名, 否则它是一个随机容器
    --env (-e)- 设置容器中的环境变量
    --env-file - 从env-file中引入所有环境变量(同Linux下的source env-file 功能)

    发布容器端口80和主机上的8080端口

    $ docker run -p 8080:80 nginx

    启动新的nginx容器,设置/var/log为卷,并映射到主机的/tmp目录下

    $ docker run -v /tmp:/var/log nginx

    参考地址

    相关文章

      网友评论

          本文标题:Docker Starter

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