• Docker


    docker

    Linux 容器的一种封装,提供简单易用的容器使用接口。Docker 中包括三个基本的概念:镜像(Image),容器(Container),仓库(Repository)
    

    镜像

    docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
    镜像(Image)就是一堆只读层(read-only layer)的统一视角:镜像由多个层组成,每层叠加之后,从外部看来就如一个独立的对象。镜像内部是一个精简的操作系统(OS),同时还包含应用运行所必须的文件和依赖包。

    容器

    容器也是一堆层的统一视角,和镜像的区别在于容器的最上面那一层是可读可写的。
    

    镜像搜索操作

    搜索镜像:
    docker search image_name
    搜索结果过滤是否官方镜像:
    docker search --filter "is-official=true" image_name
    搜索结果过滤是否自动化构建:
    docker search --filter "is-automated=true" image_name
    搜索结果过滤大于多少颗星:
    docker search --filter stars=3 image_name
    

    列出本地主机上的镜像

    列出本地所有的镜像(包含中间映像层)
    docker images -a
    只显示镜像ID
    docker images -q
    显示镜像的摘要信息
    docker images --digests
    显示完整的镜像信息
    docker images --notrunc
    

    创建容器

    docker run -itd --name=container_name image_name
    参数说明:
        -i: 表示以交互模式运行容器
        -d: 表示后台运行容器,并返回容器ID
        -t: 为容器重新分配一个伪输入终端
        --name: 为容器指定名称
    

    容器基础操作

    查看运行中的容器
    docker ps
    查看所有容器(包括已停止):
    docker ps -a
    停止容器:
    docker stop container_name/container_id
    启动容器:
    docker start container_name/container_id
    重启容器:
    docker restart container_name/container_id
    删除容器:
    docker rm container_name/container_id
    

    查看容器日志

    docker logs -f -t --tail 900 container_id
    参数说明:
        -f: 跟随最新的日志
        -t: 加入时间戳
        --tail 900: 显示最后面的900条日志
    

    查看容器的运行

    查看容器内运行的进程
    docker top container_id
    查看容器内部细节
    docker inspect container_id
    

    进入容器和退出容器

    进入容器
    docker exec -it container_name/container_id /bin/bash
    退出容器
    exit
    

    容器的修改和保存容器修改

    提交容器修改
    docker commit -a "username" -m "commit message" container_name/container_id new_image_name:tag_name
    参数说明:
        -a: 可选,指定作者
        -m: 可选,提交信息
        container_name/container_id: 容器名或者容器ID
        new_image_name: 镜像名
        tag_name: 镜像标签,不写时默认标签为latest
    

    容器内和本地机器间的文件和数据操作

    端口映射
    docker run -itd -p 机器端口号:容器端口号
    文件挂载
    docker run -itd -v 机器目录:容器目录
    将容器的文件复制到本地
    docker cp 容器名:/容器目录/文件名 /机器目录/文件名
    将机器本地的文件复制到容器
    docker cp /机器目录/文件名 容器名:/容器目录/文件名
    容器互联
    docker run -itd --link 要关联的容器名字:容器在被关联的容器中的别名
    

    Dockerfile

    Dockerfile 是一个内容包含以下linux命令的文件,docker通过读取文件中的命令来创建镜像。
    Dockerfile 一般分为四个部分:基础镜像信息,维护者信息,镜像操作指令 和 容器启动时的执行指令
    Dockerfile的运行:
    docker build -t image_name:tag_name .
    或者
    docker build -f /path/Dockerfile .
    

    Dockerfile常用命令

    FROM: 第一个命令(且必须为第一个),指定基础镜像
    ‘’‘
    格式如下:
       FROM <image_name>
       FROM <image_name>:<tag>
       FROM <image_name>@<digest>
    eg:
       FROM centos:7.0
    ’‘’
    
    MAINTAINER: 维护者信息
    '''
    格式如下:
       MAINTAINER <username>
    eg:
       MAINTAINER yanfeici
    '''
    
    RUN: 构建镜像是执行的命令
    '''
    格式如下:
       RUN <command>
       或者
       RUN ["executable", "param1", "param2"]
    eg:
       RUN yum install nginx
       RUN ["/bin/executable", "param1", "param2"]
    '''
    
    ADD: 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网路资源,类似wget
    '''
    格式如下:
       ADD <src> <dest>
       ADD ["<src>", "<dest>"]
    eg:
       ADD test* /mydir/    # 添加所有以test开头的文件到/mydir/
       ADD tes?.txt /mydir/ # ?替代一个单字符,如:test.txt
       ADD test /mydir/     # 添加test 到 /mydir/
    备注:第一个路径为机器本地文件路径,第二个路径为容器路径
         COPY的功能类似ADD,但是不会自动解压文件,也不能访问网络资源
    '''
    
    CMD: 构建容器后调用,也就是在容器启动时才进行调用
    '''
    格式如下:
       CMD ["executable", "param1", "param2"]
       CMD ["param1", "param2"]
       CMD command param1 param2
    eg:
       CMD echo "test" | wc -
       CMD ["/usr/bin/wc", "--help"]
    备注: CMD和RUN不同,CMD用于指定在容器启动时所需要执行的命令,而RUN用于指定镜像构建时所要执行的命令
    '''
    
    ENTRYPOINT: 配置容器,使其可执行化。配合CMD可省去"application",只使用参数
    '''
    格式如下:
       ENTRYPOINT ["executable", "param1", "param2"]
       ENTRYPOINT command param1 param2
    eg:
       ENTRYPOINT ["top", "-b"]
    备注: ENTRYPOINT和CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当作参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令
    '''
    
    LABEL: 用于为镜像添加元数据
    '''
    格式如下:
       LABEL <key>=<value> <key>=<value> ...
    eg:
       LABEL version="2.0" description="this is a test image"
    备注: 使用LABEL指定元数据时,一条LABEL指定可以指定一条或者多条元数据,指定多条元数据时不同元数据之间通过空格分隔。推荐将所有的元数据通过一条LABEL指令来指定,以免生产过多的中间镜像
    '''
    
    ENV: 设置环境变量
    '''
    格式如下:
       ENV <key> <value>    # <key>之后的所有内容均会被视为其<value>的组成部分,因此一次只能设置一个变量
       ENV <key>=<value>... # 可以设置多个变量,如果key中包含空格,可以使用来转义,也可以使用""来标识,且反斜线可以用来续行
    eg:
       ENV username tom smith
       ENV username=tomsmith
    '''
    
    EXPOSE: 指定与外界交互的端口
    '''
    格式如下:
       EXPOSE <port> [<port>...]
    eg:
       EXPOSE 80 8080
       EXPOSE 8443
    备注: EXPOSE不会让容器的端口访问到主机,要使其可以访问,需要在docker run运行容器时通过-p来发布这些端口,或者通过-P参数来发布EXPOSE导出的所有端口
    '''
    
    VOLUME: 指定持久化目录
    '''
    格式如下:
       VOLUME ["/path/to/dir"]
    eg:
       VOLUME ["/data"]
       VOLUME ["/var/www", "/home/html", "/etc/nginx"]
    备注: 一个卷可以存在于一个或者多个容器的指定目录,该目录可以绕过联合文件系统并具有以下功能:
    1. 可以容器间共享重用
    2. 容器并不一定要和其他容器共享卷
    3. 修改卷后会立即生效
    4. 对卷的修改不会对镜像产生影响
    5. 卷会一直存在,直到没有任何容器使用它
    '''
    
    WORKDIR: 工作目录,类似cd命令
    '''
    格式如下:
       WORKDIR /path/to/workdir
    eg:
       WORKDIR /home/project  # /home/project
       WORKDIR nginx          # /usr/local/nginx
       WORKDIR sbin           # /usr/local/nginx/sbin
    备注: 通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN,CMD,ENTRYPOINT,ADD,COPY等命令都会在该目录下执行,在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录
    '''
    
    USER: 指定运行容器时的用户名或者UID,后续的RUN也会使用指定用户。使用USER指定用户时,可以使用用户名,UID或者GID,或者两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户,并且可以在之前创建所需要的用户
    '''
    格式如下:
       USER linux_user
       USER user:group
       USER uid
       USER uid:gid
       USER user:gid
       USER uid:group
    eg:
       USER nginx
    备注: 使用USER指定用户后,Dockerfile中其后的命令RUN,CMD,ENTRYPOINT都将使用该用户,构建镜像完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户
    '''
    
    ARG: 指定传递给构建运行时的变量
    '''
    格式如下:
       ARG <name>[=<default value>]
    eg:
       ARG site
       ARG build_user=www
    '''
    
    ONBUILD: 设置镜像触发器
    '''
    格式如下:
       ONBUILD [INSTRUCTION]
    eg:
       ONBUILD ADD . /webapp/src
       ONBUILD RUN /usr/local/bin/python-build --dir /app/src
    备注: 当所构建的镜像被用做其他镜像的基础镜像,该镜像中的触发器将会被触发
    '''
    

    Dockerfile命令总结

    一个Dockerfile例子

    docker执行Dockerfile的流程

    1. docker从基础镜像运行一个容器
    2. 执行一条指令并对容器做出修改
    3. 执行类似docker commit的操作提交一个新的镜像层
    4. docker再基于刚刚提交的镜像运行一个新的容器
    5. 执行Dockerfile中的其他指令直到所有直到执行完成
    

    本文作者:温茶又折花

    本文链接: https://www.cnblogs.com/dyfblogs/p/14961448.html

    转载文章请注明作者和出处,谢谢!
  • 相关阅读:
    2019春季第五周作业
    2019春第四周作业(基础题)计算机
    2019第三周作业
    第二周基础作业
    2019春第九周作业
    2019年春第八周作业
    第七周总结
    第六周作业
    2019春第五周作业
    2019年春季学期第四周作业
  • 原文地址:https://www.cnblogs.com/dyfblogs/p/14961448.html
Copyright © 2020-2023  润新知