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 .
  • 相关阅读:
    div 居中
    [转贴]Linux新增用户和组
    wmsys.WM_CONCAT
    [转]深刻理解Oracle数据库的启动和关闭
    [转]JAVA 程序中使用ORACLE 绑定变量( bind variable )
    考研的一些入门知识
    [转帖]什么是CPU的核心
    js空格处理函数
    [转]Vi 基础命令
    EMPTY_CLOB()/EMPTY_BLOB()使用
  • 原文地址:https://www.cnblogs.com/l-gang/p/13286440.html
Copyright © 2011-2022 走看看