• docker基本用法


    docker

    基础常用命令

    • 导入镜像

      • 方式1

        docker import kylin_sp2.tar.xz kylin-build:build-hs-220824
        
        • 1
      • 方式2

        [root@ccc64 caojingjing]# cat kylin_sp2.tar.xz | docker import - kylin-build:build-hs-220824
        sha256:c02cba7686b88e633eff58cddba3189712cbe7f449f2fd37b2033158a9405e7b
        
        • 1
        • 2
    • 查看docker镜像

      • [root@ccc64 caojingjing]# docker images
        REPOSITORY       TAG                      IMAGE ID       CREATED              SIZE
                                      5fdee3cda69c   About a minute ago   2.02GB
        kylin-build      build-hs-220824          c02cba7686b8   5 minutes ago        2.19GB
        centos-build     build-hs-iso_767         fcda81fcbb37   4 hours ago          643MB
        
        • 1
        • 2
        • 3
        • 4
        • 5
    • 运行容器

      • # -it 表示 与容器进行交互式启动 -d 表示可后台运行容器 (守护式运行)  --name 给要运行的容器 起的名字  /bin/bash  交互路径
        docker run -it -d --name 要取的别名 镜像名:Tag /bin/bash 
        
        • 1
        • 2
      • [root@ccc64 caojingjing]# docker run -it -d --name hs-libvirt-build kylin-build:build-hs-220824 /bin/bash
        5af66064d291fbc40df53045ee04a9de827fd8c8e1ea6290a96f1b36c19fd397
        
        • 1
        • 2
    • 查看后台容器

      • [root@ccc64 caojingjing]# docker ps -a
        CONTAINER ID   IMAGE                                 COMMAND            CREATED          STATUS          PORTS     NAMES
        5af66064d291   kylin-build:build-hs-220824           "/bin/bash"        43 seconds ago   Up 42 seconds             hs-libvirt-build
        ff524790a6a3   centos-build:build-hs-iso_767         "/usr/sbin/init"   4 hours ago      Up 4 hours                build-hs-iso_767
        45ce5328d690   centos-build:build-hs-iso_762         "/usr/sbin/init"   6 hours ago      Up 6 hours                build-hs-iso_76
        
        • 1
        • 2
        • 3
        • 4
        • 5
    • 进入容器

      • 方式一 (推荐)

        docker exec -it 容器名/容器ID /bin/bash
        
        • 1
        [root@ccc64 caojingjing]# docker exec -it hs-libvirt-build /bin/bash
        [root@5af66064d291 /]# 
        
        • 1
        • 2
      • 方式二

        docker attach 容器名/容器ID
        
        • 1
    • 将宿主机文件COPY到容器中

      • docker cp 文件路径 容器id:容器中存在文件路径
        
        • 1
    • 添加历史记录,基于容器创建镜像,保存历史合并新层,基于容器创建(创建新镜像)

      OPTIONS说明:

      • **-a 😗*提交的镜像作者;
      • **-c 😗*使用Dockerfile指令来创建镜像;
      • **-m 😗*提交时的说明文字;
      • **-p 😗*在commit时,将容器暂停
      docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
      docker commit -a "cjj" -m "add qemu and libvirt compile evironment" 718401b42ec4 ctyun-build:build-hs-230314
      
      • 1
      • 2
    • 查看docker的历史提交记录

      • docker history 镜像ID
        
        • 1
    • 导出/导入镜像

      • 导出镜像到一个文件,不带历史,基于容器创建(迁移容器)

        docker export 容器ID > xxximg.tar
        docker import ...
        
        • 1
        • 2
      • 导出镜像到指定文件(分享镜像)

        docker save [options] images [images...]

        docker save
        docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
        注:不要docker save  -o .tar(会导致载入镜像后名字标签都为)
        如果出现none,可通过增加名字标签,docker tag  :
        
        • 1
        • 2
        • 3
        • 4

        就是说如果用export指令导出,镜像历史提交记录就没了;但是用save,历史提交记录还在

      • 导入指定文件为镜像

        docker load
        docker load < busybox.tar.gz
        
        • 1
        • 2

      可以依据具体使用场景来选择命令

      若是只想备份images,使用save、load即可

      若是在启动容器后,容器内容有变化,需要备份,则使用export、import

    • 修改tag名称

      • docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
        
        [root@ccc64 ~]# docker tag hs-libvirt-build kylin-build:v1
        Error response from daemon: No such image: hs-libvirt-build:latest
        [root@ccc64 ~]# docker tag hs-libvirt-build:v1 kylin-build:v1
        [root@ccc64 ~]# docker images
        REPOSITORY         TAG                      IMAGE ID       CREATED          SIZE
        centos-build       build-qemu_44            164f6fcf5047   2 minutes ago    1.86GB
        hs-libvirt-build   v1                       7ae693d9eeee   8 minutes ago    3.35GB
        kylin-build        v1                       7ae693d9eeee   8 minutes ago    3.35GB
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
    • 删除镜像

      • docker rmi:用于删除一个或者多个镜像

      • 如上出现两个ID一样的,这要怎么搞呢

        docker rmi hs-libvirt-build:v1
        
        [root@ccc64 ~]# docker images
        REPOSITORY       TAG                      IMAGE ID       CREATED             SIZE
        kylin-build      v1                       7ae693d9eeee   19 minutes ago      3.35GB
        centos-build     build-qemu_42            16b7a844e49a   24 minutes ago      1.87GB
        centos-build     build-hserver-rpms_327   3135e3411d4e   About an hour ago   1.87GB
        kylin-build      build-hs-220824          c02cba7686b8   2 hours ago         2.19GB
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
    • 停止容器

      • docker stop NAMES
    • 删除容器

      • docker rm:用于删除一个或者多个容器

    docker file

    创建第一个 Dockerfile,需要理解 file 的组成

    以下是需要指定的命令

    • FROM - 定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。

    • RUN - 用于执行后面跟着的命令行命令。有以下俩种格式:

      • shell 格式:

        RUN <命令行命令>
        # <命令行命令> 等同于,在终端操作的 shell 命令。
        
        • 1
        • 2

        exec 格式:

        RUN ["可执行文件", "参数1", "参数2"]
        # 例如:
        # RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline
        
        • 1
        • 2
        • 3
      • 注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:

        FROM centos
        RUN yum -y install wget
        RUN wget -O redis.tar.gz “http://download.redis.io/releases/redis-5.0.3.tar.gz”
        RUN tar -xvf redis.tar.gz

        以上执行会创建 3 层镜像。可简化为以下格式:

        FROM centos
        RUN yum -y install wget
        && wget -O redis.tar.gz “http://download.redis.io/releases/redis-5.0.3.tar.gz”
        && tar -xvf redis.tar.gz

        如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。

    制作 docker 镜像

    • DockerHub 上有很多的镜像,可以满足大部分的需求。这种情况我们就可以直接通过docker pull ** 从DockerHub上获取对应的镜像 (但如果没有找到想要的 docker image,我们可以自己制作)
    • tar 完成系统压缩包 1、可以选择/跟目录,然后--exclude排除不需要的目录
      • tar -cvpf /tmp/system.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=boot .

    常见问题

    • 使用docker images时,可能会出现REPOSITORY和TAG均为none的镜像

    ​ 解决方式:docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)

    • docker 空间不足

      解决方式:修改 docker 存储的默认路径,docker info 查看,修改配置文件/etc/docker/daemon.json

      {
          ...
          "data-root": "/data/docker/",
          ...
          
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      systemctl restart docker
      
      • 1
    • 修改配置文件,只对新创建的 docker 有效
      在这里插入图片描述

  • 相关阅读:
    2022年度GitHub中文Java项目排行榜Top 10
    css 对号 叉号
    如何做好测试?(一)不就是功能测试和性能测试?
    Postman中几个body请求格式区别及使用说明
    自动拟人对话机器人在客户服务方面起了什么作用?
    深度学习入门:使用CMSIS-NN在微控制器上部署模型的完整指南与Python Jupyter实践
    第一季:7Spring Bean的作用域之间有什么区别【Java面试题】
    经典算法学习之------快速排序
    PE文件(十一)移动导出表和重定位表
    C++ Primer 总结索引 | 第八章:IO库
  • 原文地址:https://blog.csdn.net/weixin_43269452/article/details/133698076