zoukankan      html  css  js  c++  java
  • Docker记录

    docker

    命令汇总
    docker search 在docker hub中搜索镜像;
    docker pull 从docker镜像源服务器拉取指定镜像或者库镜像;
    docker push 推送指定镜像或者库镜像至docker源服务器;
    docker history 展示一个镜像形成历史;
    docker images 列出系统当前镜像;
    docker run 创建一个新的容器并运行一个命令;
    docker start 启动容器;
    docker stop 停止容器;
    docker attach 当前shell下attach连接指定运行镜像;
    docker build 通过Dockerfile定制镜像;
    docker commit 提交当前容器为新的镜像;
    docker cp 从容器中拷贝指定文件或者目录到宿主机中;
    docker create 创建一个新的容器,同run,但不启动容器;
    docker diff 查看docker容器变化;
    docker events 从docker服务获取容器实时事件;
    docker exec 在已存在的容器上运行命令;
    docker export 导出容器的内容流作为一个tar归档文件[对应import];
    docker import 从tar包中的内容创建一个新的文件系统映像[对应export];
    docker info 显示系统相关信息;
    docker inspect 查看容器详细信息;
    docker kill 指定docker容器;
    docker load 从一个tar包中加载一个镜像[对应save];
    docker login 注册或者登陆一个docker源服务器;
    docker logout Docker registry退出;
    docker logs 输出当前容器日志信息;
    docker port 查看映射端口对应的容器内部源端口;
    docker pause 暂停容器;
    docker ps 列出容器列表;
    docker restart 重启运行的容器;
    docker rm 移除一个或者多个容器;
    docker rmi 移除一个或多个镜像;
    docker save 保存一个镜像为一个tar包[对应load];
    docker tag 给源中镜像打标签;
    docker top 查看容器中运行的进程信息;
    docker unpause 取消暂停容器;
    docker version 查看docker版本号;
    docker wait 截取容器停止时的退出状态值。

    
    


    Dockerfile文件中命令细节
    ADD和COPY
    两个都是复制宿主机文件到docker容器中
    不同是ADD如果复制的是tar、bz2类似的文件,则会复制到容器中时会自动解压

    
    
    Docker 包括三个基本概念:
    
    镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
    容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
    仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
    runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
    root@0123ce188bd8:/#
    -t: 在新容器内指定一个伪终端或终端。
    
    -i: 允许你对容器内的标准输入 (STDIN) 进行交互
    
    docker ps        查看正在运行的容器
    
    容器状态:
    created(已创建)
    restarting(重启中)
    running(运行中)
    removing(迁移中)
    paused(暂停)
    exited(停止)
    dead(死亡)
    
    docker logs  ContainerID    查看容器中的标准输出
    
    
    docker镜像加速
    [root@tencent_lg themes]# cat /etc/docker/daemon.json 
    {
        "registry-mirrors":["https://hub-mirror.c.163.com/"]
    }
    
    
    
    docker流程
    启动docker
    systermctl start docker                    
    1.查找镜像
    docker search  centos                    
    2.拉取镜像
    docker pull  镜像名                    
    3.创建并启动容器
    docker run -itd containerID /bin/bash            
    在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。
    [root@tencent_lg ~]# docker run -itd 831691599b88 /bin/bash
    6c1b8166f18de558510653c46a9f8a1c79cf5a9ba770e566011ce0e858c7a80e
    加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
    4.进入容器
    docker exec -it 6c1b8166f18de558510653c46a9f8a1c79cf5a9ba770e566011ce0e858c7a80e /bin/bash
    推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
    docker attach  6c1b8166f18de558510653c46a9f8a1c79cf5a9ba770e566011ce0e858c7a80e
    使用attach进入,然后使用exit退出后容器也会停止,因此推荐使用exec方式进入容器
    5.停止正在运行的容器
    docker stop containerID
    6.启动停止的容器
    docker ps -a     查看所有容器列表(-a包括停止的)
    docker start containerID
    
    7.导出容器(将镜像导出为本地文件)
    两个命令export和save
    docker export 3026f3553800 > CentosV1.tar
    
    docker save -o nginx.tar nginx:latest
    或
    docker save > nginx.tar nginx:latest
    其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
    
    命令区别:
    export命令导出的tar文件略小于save命令导出的
    export命令是从容器(container)中导出tar文件,而save命令则是从镜像(images)中导出
    基于第二点,export导出的文件再import回去时,无法保留镜像所有历史(即每一层layer信息,不熟悉的可以去看Dockerfile),
    不能进行回滚操作;而save是依据镜像来的,所以导入时可以完整保留下每一层layer信息。
    
    8.导入容器(将本地文件生成镜像)
    两个命令:load和import
    示例
    docker load -i nginx.tar
    或
    docker load < nginx.tar
    其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
    
    示例
    docker import nginx-test.tar nginx:imp
    或
    cat nginx-test.tar | docker import - nginx:imp
    
    建议
    可以依据具体使用场景来选择命令
    若是只想备份images,使用save、load即可
    若是在启动容器后,容器内容有变化,需要备份,则使用export、import
    
    9.删除容器
    一个一个删除
    docker rm -f containerId
    一次性删除所有停止的容器
    docker container prune
    
    
    10.我们来运行一个web应用容器
    [root@tencent_lg ~]#  docker pull training/webapp
    [root@tencent_lg ~]# docker run -d -P training/webapp python app.py
    -P:将容器内部使用的网络端口随机映射到我们使用的主机上。
    我们看到容器中的5000端口映射到了本地的32768端口
    这里就可以使用浏览器运行本机ip加上32769端口就能访问到容器中的web应用了
    [root@tencent_lg ~]# docker ps 
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
    ebe4c668f15b        training/webapp     "python app.py"     31 seconds ago      Up 30 seconds       0.0.0.0:32768->5000/tcp   upbeat_saha
    
    我们也可以通过 -p 参数来设置不一样的端口:
    docker run -d -p 5000:5000 training/webapp python app.py
    同样使用浏览器运行本机ip加上5000端口就能访问到容器中的web应用了
    [root@tencent_lg ~]# docker port 6503fdacd500
    5000/tcp -> 0.0.0.0:5000
    使用上面的命令可以直接看到映射的端口号
    [root@tencent_lg ~]# docker top 6503fdacd500
    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    root                10105               10089               0                   00:13               ?                   00:00:00            python app.py
    这个是看容器的进程号
    docker logs -f containerID        这个是看容器内部的标准输出
    
    使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
    [root@tencent_lg ~]# docker inspect 6503fdacd500
    [
        {
            "Id": "6503fdacd5007a3713404bb805b4a7634c7750ff8ebec469a52c2ec1ba1f5765",
            "Created": "2020-07-11T16:13:55.122084508Z",
            "Path": "python",
            "Args": [
                "app.py"
            ],
            "State": {
                "Status": "running",
                "Running": true,
                "Paused": false,
                "Restarting": false,
                "OOMKilled": false,
                "Dead": false,
                "Pid": 10105,
                "ExitCode": 0,
                。。。。。。
    
        }
        
    11.列出所有镜像
    [root@tencent_lg ~]# docker images
    REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
    centosv1                    a                   66470c5389db        About an hour ago   236 MB
    docker.io/ubuntu            latest              adafef2e596e        4 days ago          73.9 MB
    docker.io/centos            latest              831691599b88        3 weeks ago         215 MB
    docker.io/training/webapp   latest              6fae60ef3446        5 years ago         349 MB
    
    REPOSITORY:表示镜像的仓库源
    TAG:镜像的标签
    IMAGE ID:镜像ID
    CREATED:镜像创建时间
    SIZE:镜像大小
    同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,
    有 15.1014.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
    如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。
    
    删除镜像命令:
    docker rmi imageID
    [root@tencent_lg ~]# docker rmi 66470c5389db
    Untagged: centosv1:a
    Deleted: sha256:66470c5389dbe4b4a8a3c6ca7831130a0db242adac129f8af7a90ed51ecd24d4
    Deleted: sha256:679f3da8b3453afa4bdef739cdb93e20dcb15d33113bf9f877c0d7b3caecc56a
    12.修改镜像TAG号
    [root@tencent_lg themes]# docker tag adafef2e596e docker.io/ubuntu:latest
    [root@tencent_lg themes]# docker images
    REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
    docker.io/ubuntu            latest              adafef2e596e        4 days ago          73.9 MB
    docker.io/ubuntu            v1                  adafef2e596e        4 days ago          73.9 MB
    
    13.构建镜像
    编写Dockerfile文件
    [root@tencent_lg ~]# cat Dockerfile 
    From    docker.io/centos:latest
    RUN     /bin/echo 'root:123456' |chpasswd
    RUN     useradd runoob
    RUN     /bin/echo 'runoob:123456' |chpasswd
    RUN     /bin/echo -e "LANG="en_US.UTF-8"" >/etc/default/local
    EXPOSE  22
    EXPOSE  80
    CMD     /usr/sbin/sshd -D
    每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
    第一条FROM,指定使用哪个镜像源
    RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
    然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
    
    [root@tencent_lg ~]# docker build -t runoob/centos:aa .
  • 相关阅读:
    c:forTokens标签循环输出
    jsp转long类型为date,并且格式化
    spring中@Param和mybatis中@Param使用区别(暂时还没接触)
    734. Sentence Similarity 有字典数组的相似句子
    246. Strobogrammatic Number 上下对称的数字
    720. Longest Word in Dictionary 能连续拼接出来的最长单词
    599. Minimum Index Sum of Two Lists两个餐厅列表的索引和最小
    594. Longest Harmonious Subsequence强制差距为1的最长连续
    645. Set Mismatch挑出不匹配的元素和应该真正存在的元素
    409. Longest Palindrome 最长对称串
  • 原文地址:https://www.cnblogs.com/l-gang/p/13286440.html
Copyright © 2011-2022 走看看