美文网首页
Docker基本命令

Docker基本命令

作者: M醉逍遥 | 来源:发表于2018-04-28 16:07 被阅读0次

    镜像操作相关命令

    # 查看版本
    docker version
    
    #拉取镜像(NAME为镜像仓库的名称,TAG是镜像的标签[一般用来表示版本信息,不传默认表示:latest], -a可拉取仓库的所有镜像.REGISTRY为注册服务器,默认为registry.hub.docker.com/)
    docker pull NAME[:TAG]|[REGISTRY_HOST[:REGISTRY_PORT/[PATH/]]NAME[:TAG]
    docker pull hub.c.163.com/public/ubuntu:14.04
    
    #列出本地主机已有镜像(查看详细参数man docker-images)
    docker images
    
    #为镜像添加标签
    docker ubuntu:latest myubuntu:latest
    
    #查看镜像详细信息
    docker inspect ubuntu:latest
    
    #查看镜像历史
    docker history ubuntu:latest
    
    #搜索远程仓库中的共享镜像(-s 指定仅显示评价为指定星级以上的镜像,默认为0)
    docker search [-s 3] nginx
    
    #删除镜像(其中IMAGE为标签或ID[ID只需输入到能够唯一标识即可,不需要输入完整]。当同一镜像有多个标签时,只删除指定标签,不会删除镜像文件;若删除id有多个标签,则会失败;若镜像有对应容器存在,则会失败。可以使用-f强行删除镜像)
    docker rmi IMAGE
    docker rmi myubuntu:latest
    
    #基于容器创建镜像
    docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]
    -a 作者信息
    -c 提交的时候执行Dockerfile指令
    -m 提交信息
    -p 提交时暂停容器运行
    
    #基于本地模板导入镜像
    docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]
    
    #存储镜像到本地文件
    docker save -o centos_latest.tar centos:latest
    
    #载入存储到本地的镜像文件
    docker load --imput centos_latest.tar
    docker load < centos_latest.tar
    
    #登录registry
    docker login -u USER -p PASSWORD REGISTRY
    docerk login -u test -p test 192.168.1.100
    
    #上传镜像到仓库(默认上传到Docker Hub官方仓库)
    docker push NAME[:TAG]|[REGISTRY_HOST[:REGISTRY_PORT/[PATH/]]NAME[:TAG]
    docker tag test:latest user/test:latest
    docker push user/test:latest
    

    容器操作相关命令

    #创建容器(创建出来的容器处于停止状态。docker create --help 查看可选参数)
    docker create [OPTIONS] IMAGE
    docker create -it centos
    
    #启动一个已经创建的容器
    docker start CONTAINER_ID
    
    #新建并启动容器(-t分配一个伪终端并绑定到容器标准输入上,-i让容器标准输入保存打开, --rm容器停止时自动删除,和-d参数冲突。run等价于先create再start)
    docker run [OPTIONS] IMAGE CMD
    //bash中Ctrl+D或输入exit可以退出容器
    docker run -it centos /bin/bash
    
    #守护态运行容器
    docker run -d centos /bin/sh -c "while true; do echo hello world;sleep 1; done"
    //获取容器输出信息
    docker logs CONTAINER_ID
    
    #终止容器(首先向容器发送SIGTERM信号,等待一段超时时间(默认为10秒)后,再发送SIGKILL信号来终止容器。docker kill命令会直接发送SIGKILL信号来强行终止容器)
    docker stop [-t 10] CONTAINER
    
    #重启容器
    docker restart CONTAINER
    
    #进入容器--attach命令
    docker attch [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER
    
    #进入容器--exec命令
    docker exec -it 243... /bin/bash
    
    #进入容器--nsenter工具
    略
    
    #删除容器
    docker rm [-f] [-l] [-v] CONTAINER
    -f:是否强行终止并删除一个运行中的容器
    -l:删除容器的连接,但保留容器
    -v:删除容器挂载的数据卷
    
    #导出容器(不管容器是否处于运行状态)
    docker export [-o|--out-put[=""]] CONTAINER
    docker export -o test_for_run.tar ce1e
    docker export ce1e > test_for_run.tar
    
    #导入容器(导入变成镜像)
    docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|- [REPOSITORY[:TAG]
    docker import test_for_run.tar - test/ubuntu:v1.0
    
    #查看容器
    docker ps [-a]
    

    访问Docker仓库

    #登录仓库(本地用户目录的.dockercfg中保存用户认证信息)
    docker login [-u USER] [-p PASSWORD] [SERVER]
    
    #搜索远程仓库中的镜像
    docker search centos
    
    #拉取镜像
    docker pull centos
    
    #docker hub可跟踪GitHub等进行自动创建
    
    #使用registry镜像来大家一套本地私有仓库(默认情况下,会将仓库创建在容器的/tmp/registry目录下)
    docker run -d -p 5000:5000 [-v /opt/data/registry:/tmp/registry] registry
    

    Docker数据管理

    #在容器内创建数据卷(在用docker run命令的时候,使用-v标记可以在容器内创建一个数据卷。多吃重复使用-v可以创建多个)
    docker run -d -P --name web -v /webapp training/webapp python app.py
    
    #挂载一个主机目录作为数据卷(本地路径必须为绝对路径,默认权限为读写权限rw,也可指定为只读权限ro)
    docker run -d -P --name web -v /src/webapp:/opt/webapp[:rw|ro] training/webapp python app.py
    
    #数据卷容器(如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器)
    //可以使用多次--volumes-from从多个容器挂载多个数据卷(容器数据卷并不需要保存运行状态)
    docker run -it -v /dbdata --name dbdata centos
    docker run -it --volumes-from dbdata --name db1 centos
    docker run -it --volumes-from dbdata --name db2 centos
    
    #删除容器时并不会删除关联的数据卷,可以在删除时加上-v参数
    docker rm -v 0sesfe
    
    #利用数据卷来备份数据
    docker run --volumes-from dbdata -v $(pwd):/backup --name worker centos tar cvf /backup/backup.tar /dbdata
    
    #使用特定驱动的文件系统创建(linux上--driver 为local的支持mount命令的相关参数),以nfs为例
    docker volume create --driver local \
        --opt type=nfs \
        --opt o=addr=192.168.1.1,rw \
        --opt device=:/path/to/dir \
        foo
    

    端口映射与容器互联

    #使用-P或-p将容器端口映射到宿主机端口(默认容器外部不能通过网络访问容器内部的网络应用和服务。-P根据配置范围随机选择一个端口,-p指定特定端口)
    docker run -d -P --name test_web training/webapp python app.py
    //查看端口映射
    docker ps -l 
    //查看容器控制台日志输出
    docker logs -f test_web
    
    #映射所有地址(0.0.0.0)到指定端口(HostPort:ContainerPort)
    docker run -d -p 5000:5000 --name test_web training/webapp python app.py
    //多次使用可绑定多个端口
    docker run -d -p 5000:5000 -p 3000:80 --name test_web training/webapp python app.py
    
    #映射到指定地址的指定端口(IP:HostPort:ContainerPort)
    docker run -d -p 127.0.0.1:5000:5000 --name test_web training/webapp python app.py
    
    #映射到指定地址的任意端口(IP::ContainerPort宿主机随机分配一个端口)
    docker run -d -p 127.0.0.1::5000 --name test_web training/webapp python app.py
    
    #查看当前端口映射
    docker port container_name container_port
    docker port test_web 5000
    
    #获取容器的具体信息(可获取容器内部往来ip等)
    docker inspect container_id
    
    #容器互联(--link name:alias name是要链接的容器名,alias为链接的别名.Docker通过更新环境变量和/etc/hosts文件来是两个容器互联)
    docker run -d --name db training/postgres
    docker run -d -P --name web --link db:db training/webapp python app.py
    

    Dockerfile

    #FROM指令(指定创建镜像的基础镜像.任何Dockerfile的第一条指令必须为FROM指令,同一个Dockerfile可以创建多个镜像)
    FROM <image>[:<tag>]
    
    #MAINTAINER指令(指定维护者信息)
    MAINTAINER image_creator@docker.com
    
    #RUN指令(运行指定命令)
    //在shell终端中运行,即/bin/sh-c
    RUN <command>
    //使用exec执行,不会启动shell环境
    RUN ["executable", "param1", "param2", ...]
    //当命令较长是可以使用\对换行符转义
    RUN apt-get update \
        && apt-get install -y gcc g++ \
        && rm -rf /var/cache/apt
        
    #CMD指令(用来指定启动容器时默认执行的命令,共支持三种格式。每个Dockerfile只能有一条CMD命令,如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时手动制定了运行的命令(作为run的参数),则会覆盖掉CMD指定的命令)
    //使用exec执行,推荐使用该方式
    CMD ["executable", "param1", "param2", ...]
    //在/bin/sh中执行,提供给需要交互的应用
    CMD command param1 param2 ...
    //提供给ENTRYPOINT的默认参数
    CMD ["param1", "param2", ...]
    
    #LABEL指令(用来指定生成镜像的元数据标签信息)
    LABEL <key>=<value> <key>=<value> ...
    
    #EXPOSE指令(声明镜像内服务监听的端口。该指令只起到声明作用,并不会自动完成端口映射。启动容器时用-P或-p来指定映射)
    EXPOSE <port> [<port> ...]
    
    #ENV指令(指定环境变量,在镜像生成过程中会被后续RUN指令使用,在镜像启动的容器中也会存在)
    ENV <key> <value>
    //在启动容器时可以使用--env <key>=<value>覆盖掉
    
    #ADD指令(该命令将复制指定的<src>路径下的内容到容器中的<dest>路径下。其中<src>可以是Dockerfile所在目录的一个相对路径(文件或目录),也可以是一个URL,还可以是一个tar文件(如果是tar文件,会自动解压到<dest>路径下)。<dest>可以是镜像内的绝对路径,或者相对于工作目录WORKDIR的相对路径.路径支持正则表达式)
    ADD <src> <dest>
    ADD *.c /code/
    
    #COPY指令(复制本地主机的<src>(为Dockerfile所在目录的相对路径、文件或目录)下的内容到镜像中的<dest>下。目标路径不存在谁,自动创建。路径支持正则表达式)
    COPY <src> <dest>
    
    #ENTRYPOINT指令(指定镜像默认入口指令,该入口命令或在启动容器时作为根命令执行,所有传入值作为该命令的参数。此时,CMD指令指定的值将作为根命令的参数。每个Dockerfile中只能有一个ENTRYPOINT,当指定多个时,只有最后一个有效。在运行是,可以用--entrypoint参数覆盖掉)
    //exec调用执行
    ENTRYPOINT ["executable", "param1", "param2", ...]
    //shell中执行
    ENTRYPOINT command param1 param2 ...
    
    #VOLUME指令(创建一个数据挂载点。可以从本地主机或其他容器挂载数据卷)
    VOLUME ["/data"]
    
    #USER指令(指定运行容器时的用户名或UID,后续RUN指令等会使用指定的用户身份。当服务不需要管理员权限时,可以通过该命令指定运行用户,并且可以在之前创建所需用户。要临时获取管理员权限可以使用gosu或sudo)
    USER daemon
    RUN groupadd -r postgres && useradd -r -g postgres postgres
    
    #WORKDIR指令(为后续的RUN、CMD和ENTRYPOINT指令配置工作目录。可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前指令指定的路径)
    WORKDIR /path/to/workdir
    
    #ARG指令(指定一些镜像内使用的参数(例如版本号信息等),这些参数在执行docker build命令时才以--build-arg <arg-name>=<value>格式传入)
    ARG <name>[=<default value>]
    
    #ONBUILD指令(配置当前创建的镜像作为其他镜像的基础镜像时,所执行的创建操作指令)
    ONBUILD [INSTRUCTION]
    
    #STOPSIGNAL指令(指定创建镜像启动的容器接收退出的信号值)
    STOPSIGNAL signal
    
    #HEALTHCHECK指令(配置启动容器入户进行监控检查)
    //根据所执行命令返回值是否为0来判断
    HEALTHCHECK [OPTION] CMD command
    //禁止基础镜像中的监控检查
    HEALTHCHECK NONE
    
    #SHELL指令(指定其他命令使用shell时默认shell类型,默认为["/bin/sh", "-c"])
    
    #创建镜像
    //该命令将读取指定路径下(包括子目录)的Dockerfile,并将该路径下的所有内容发送给Docker服务端,由服务端创建镜像
    docker build -t image_tag Dockerfile_dir_path
    docker build -t python3 .
    
    #忽略目录下的文件
    //可以通过.dockerignore文件(每一行添加一条匹配模式)来让Docker忽略匹配模式路径下的目录和文件
    */temp*
    */*/temp*
    ~*
    

    参考资料

    docker 安装
    https://yq.aliyun.com/articles/110806?spm=5176.8351553.0.0.19b21991JvvxTZ

    docker镜像阿里云加速
    https://cr.console.aliyun.com/?spm=a2c4e.11153959.blogcont29941.9.520269d6euX6tR#/accelerator

    相关文章

      网友评论

          本文标题:Docker基本命令

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