• Docker安装以及常用命令


    引言

    写这篇文章记录一下docker的一些基本概念和使用方法。

    什么是Docker?

    Docker是基于Go语言实现的云开源项目。

    Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。

    安装

    卸载旧版docker

    sudo apt-get remove docker docker-engine docker.io

    更新系统软件

    sudo apt-get update
    

    安装依赖包

    sudo apt-get install 
        apt-transport-https 
        ca-certificates 
        curl 
        software-properties-common

    添加官方秘钥

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    

    再次更新系统软件

    sudo apt-get update
    

    安装docker

    如果想指定安装某一版本,可使用 sudo apt-get install docker-ce= <VERSION_STRING>命令,把<VERSION_STRING>替换为具体版本即可。 以下命令没有指定版本,默认就会安装最新版:

    sudo apt-get install docker-ce
    

    验证是否安装成功

    docker version       //查看docker版本

     

    docker run hello-world      //运行hello-world
    

     

    docker常用命令

    帮助命令

    docker version        //查看docker版本
    docker info //查看docker配置信息
    docker --help

    镜像命令

     1、列出本地主机上的镜像

    docker images

    -a:列出本地所有镜像(包含中间映像层)

    -q:只显示镜像ID

    --digests:显示镜像的摘要信息

    --no-reunnc:显示完整的镜像信息

    REPOSITORY:表示镜像的仓库源

    TAG:镜像的标签(同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。)

    IMAGE ID:镜像ID

    CREATED:镜像创建时间

    SIZE:镜像大小
     

     2、从docker hub上查找镜像

    docker search [OPTIONS]镜像名字
    
    --no-trunc:显示完整的镜像描述
    -s:列出收藏数不小于指定值的镜像
    --automated:只列出automated build类型的镜像

     3、下载镜像

    docker pull 镜像名字[:TAG]

    4、删除镜像

    docker rmi -f 镜像ID            //删除单个镜像
    docker rmi -f 镜像名1:TAG 镜像名2:TAG...... //删除多个镜像
    docker rmi -f $(docker images -qa) //删除全部镜像

    5、 登录/退出第三方仓库

    docker login/logout [ 仓库地址 ]

    6、 推送镜像到仓库

    docker push sqli-labs

    7、 打包本地镜像,使用压缩包完成迁移

    docker save [ 镜像名 ] > [ 文件路径 ]

    8、 导入镜像压缩包

    docker load < [ 文件路径 ]

    容器命令

    1、新建并启动容器

    docker run [OPTIONS] IMAGES [COMMAND]
    
    --name="容器新名字": 为容器指定一个名称;
    
    -d: 后台运行容器,并返回容器ID,也即启动守护式容器;
    
    -i:以交互模式运行容器,通常与 -t 同时使用;
    
    -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    
    -P: 随机端口映射;
    
    -p: 指定端口映射,有以下四种格式
    
          ip:hostPort:containerPort
    
          ip::containerPort
    
          hostPort:containerPort
    
          containerPort

     run指令相关参数如下:

    选项 说明
    -d 后台运行容器, 并返回容器ID;不指定时, 启动后开始打印日志, Ctrl + C 退出命令同时会关闭容器
    -i 以交互模式运行容器, 通常与 -t 同时使用;
    -t 为容器重新分配一个伪输入终端, 通常与 -i 同时使用
    --name "sqli-labs" 为容器指定一个别名, 不指定时随机生成
    -h docker-anyesu 设置容器的主机名, 默认随机生成
    --dns 8.8.8.8 指定容器使用的 DNS 服务器, 默认和宿主机一致
    -e docker_host=172.17.0.1 设置环境变量
    --cpuset="0-2" or --cpuset="0,1,2" 绑定容器到指定 CPU 运行
    -m 100M 设置容器使用内存最大值
    --net bridge 指定容器的网络连接类型, 支持 bridge / host / none / container 四种类型
    --ip 172.18.0.13 为容器分配固定 ip ( 需要使用自定义网络 )
    --expose 8081 --expose 8082 开放一个端口或一组端口, 会覆盖镜像设置中开放的端口
    -p [宿主机端口]:[容器内端口] 宿主机到容器的端口映射, 可指定宿主机的要监听的 ip, 默认为 0.0.0.0
    -P 注意是大写的, 宿主机随机指定一组可用的端口映射容器 expose 的所有端口
    -v [宿主机目录路径]:[容器内目录路径] 挂载宿主机的指定目录 ( 或文件 ) 到容器内的指定目录 ( 或文件 )
    --add-host [主机名]:[ip] 为容器 hosts 文件追加 host , 默认会在 hosts 文件最后追加内容:[主机名]:[容器ip]
    --volumes-from [其他容器名] 将其他容器的数据卷添加到此容器
    --link [其他容器名]:[在该容器中的别名] 添加链接到另一个容器, 在本容器 hosts 文件中加入关联容器的记录, 效果类似于 --add-host

    2、列出当前所有正在运行的容器

    docker ps [OPTIONS]
    
    -a :列出当前所有正在运行的容器+历史上运行过的
    
    -l :显示最近创建的容器。
    
    -n:显示最近n个创建的容器。
    
    -q :静默模式,只显示容器编号。
    
    --no-trunc :不截断输出。
    

    3、退出容器

    exit            //容器停止并退出
    ctrl + P + Q    //容器不停止退出
    

    4、启动容器

    docker start 容器ID或容器名
    docker restart 容器ID或容器名

    启动交互式容器

    docker run -it 容器名 /bin/bash
    #使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。

    启动守护式容器,

    Docker容器后台运行,就必须有一个前台进程.

    容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。

    docker run -d 容器名    #使用镜像centos:latest以后台模式启动一个容器

    5、停止容器

    docker stop 容器ID或容器名
    docker kill 容器ID    //强制停止容器

    6、删除已停止的容器

    docker rm 容器ID
    docker rm -f $(docker ps -a -q)
    docker ps -a -q | xargs docker rm

    7、查看容器日志

    docker logs -f -t --tail n 容器ID
    
    -t 是加入时间戳
    
    -f 跟随最新的日志打印
    
    --tail 数字 显示最后多少条
    

    8、查看容器内运行的进程

    docker top 容器ID
    

    9、查看容器内部细节

    docker inspect 容器ID
    

    10、进入正在运行的容器并以命令行交互(两种方式)

    两种方式的区别:

    exec是在容器中打开新的终端,并且可以启动新的进程,也可执行单条命令。

    attach直接进入容器启动命令的终端,不会启动新的进程。

    docker exec -it 容器ID /bin/bash    

    docker attach 容器ID

    11、容器中拷贝文件到主机上

    docker cp 容器ID:容器内路径 目的主机路径
    

    12、其他

    attach    Attach to a running container                 # 当前 shell 下 attach 连接指定运行镜像
    
    build     Build an image from a Dockerfile              # 通过 Dockerfile 定制镜像
    
    commit    Create a new image from a container changes   # 提交当前容器为新的镜像
    
    cp        Copy files/folders from the containers filesystem to the host path   #从容器中拷贝指定文件或者目录到宿主机中
    
    create    Create a new container                        # 创建一个新的容器,同 run,但不启动容器
    
    diff      Inspect changes on a container's filesystem   # 查看 docker 容器变化
    
    events    Get real time events from the server          # 从 docker 服务获取容器实时事件
    
    exec      Run a command in an existing container        # 在已存在的容器上运行命令
    
    export    Stream the contents of a container as a tar archive   # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
    
    history   Show the history of an image                  # 展示一个镜像形成历史
    
    images    List images                                   # 列出系统当前镜像
    
    import    Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export]
    
    info      Display system-wide information               # 显示系统相关信息
    
    inspect   Return low-level information on a container   # 查看容器详细信息
    
    kill      Kill a running container                      # kill 指定 docker 容器
    
    load      Load an image from a tar archive              # 从一个 tar 包中加载一个镜像[对应 save]
    
    login     Register or Login to the docker registry server    # 注册或者登陆一个 docker 源服务器
    
    logout    Log out from a Docker registry server          # 从当前 Docker registry 退出
    
    logs      Fetch the logs of a container                 # 输出当前容器日志信息
    
    port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT    # 查看映射端口对应的容器内部源端口
    
    pause     Pause all processes within a container        # 暂停容器
    
    ps        List containers                               # 列出容器列表
    
    pull      Pull an image or a repository from the docker registry server   # 从docker镜像源服务器拉取指定镜像或者库镜像
    
    push      Push an image or a repository to the docker registry server    # 推送指定镜像或者库镜像至docker源服务器
    
    restart   Restart a running container                   # 重启运行的容器
    
    rm        Remove one or more containers                 # 移除一个或者多个容器
    
    rmi       Remove one or more images             # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
    
    run       Run a command in a new container              # 创建一个新的容器并运行一个命令
    
    save      Save an image to a tar archive                # 保存一个镜像为一个 tar 包[对应 load]
    
    search    Search for an image on the Docker Hub         # 在 docker hub 中搜索镜像
    
    start     Start a stopped containers                    # 启动容器
    
    stop      Stop a running containers                     # 停止容器
    
    tag       Tag an image into a repository                # 给源中镜像打标签
    
    top       Lookup the running processes of a container   # 查看容器中运行的进程信息
    
    unpause   Unpause a paused container                    # 取消暂停容器
    
    version   Show the docker version information           # 查看 docker 版本号
    
    wait      Block until a container stops, then print its exit code   # 截取容器停止时的退出状态值
    

      

  • 相关阅读:
    20100822 动漫店 员工卡缓存出现问题。
    性能报告——使用AOP与DYNAMICProxy的orm性能测试
    性能报告——反射创建对象
    抓虾 老板体会。
    Pixysoft.framework.configuration 性能提升报告
    今天你抛弃了ASP.NET了吗?问题篇
    20100922 项目重构计划
    经过一年时间的沉淀 再次回首 TCP Socket服务器编程
    对Google Me的社会化网络 “The Real Life Social Network” 翻译
    20100718 项目重构计划
  • 原文地址:https://www.cnblogs.com/s1awwhy/p/14050740.html
Copyright © 2020-2023  润新知