容器(docker)docker image 操作

举报
Gere 发表于 2022/08/07 19:30:49 2022/08/07
【摘要】 文章目录前言获取镜像查看镜像信息搜索镜像创建及修改镜像创建修改删除镜像镜像导出和加载导出加载Docker 上传镜像总结前言关于docker 镜像的一些常用操作,整理理解以及方便查询。获取镜像$ docker pull [IMAGE_NAME]:[TAG]# 通过 镜像名:标签 指定镜像,如果不指定tag,默认下载latest标签# eg: docker pull mysql:5.7# 可以通...



前言

关于docker 镜像的一些常用操作,整理理解以及方便查询。


获取镜像

$ docker pull [IMAGE_NAME]:[TAG]

# 通过 镜像名:标签 指定镜像,如果不指定tag,默认下载latest标签
# eg: docker pull mysql:5.7
# 可以通过 docker pull --help 查看全部使用选项

查看镜像信息

$ docker image ls
# 列出已有镜像,不包括中间镜像

$ docker image ls -a
# 列出全部镜像

$ docker inspect [IMAGE_NAME|ID]
# 返回 JSON array格式信息,获取镜像的详细信息,其中,包括创建者,各层的数字摘要等

$ docker history [IMAGE_NAME|ID]
# 列出各个层的创建信息

搜索镜像

$ docker search [option] keyword
# eg: docker search mysql 查找mysql镜像
# eg: docker search --filter=is-offical=true mysql 查找官方提供的 mysql 镜像
# eg: docker search --filter=stars=100 mysql 查找Stars 数超过 100 的 mysql 镜像

创建及修改镜像

创建

  • 基于已有镜像创建
$ docker container commit
# 通过运行已有镜像,在container中作出修改,然后提交产生新的镜像。
# 这种方式创建可复现性较差,操作步骤不好回溯,不推荐。

eg:

$ docker run -it docker.io/ubuntu:latest /bin/bash
$ root@a0a0c8cfec3a:/# touch test.txt
$ root@a0a0c8cfec3a:/# exit
# 运行镜像,修改container

$ docker container commit -m "Added test.txt file" -a "Allen" a0a0c8cfec3a test:0.1
# 提交container,创建新image,该命令会返回新镜像ID信息
  • 基于Dockerfile创建

Dockerfile 是一个文本指令文件,它描述了是如何基于一个父镜像,来创建一个新镜像的过程。eg: 以 koa-demos 项目为例

  1. 下载源码:

    $ git clone https://github.com/ruanyf/koa-demos.git
    $ cd koa-demos
    
  2. 创建文本文件 Dockerfile

    FROM node:8.4
    COPY . /app
    WORKDIR /app
    RUN npm install --registry=https://registry.npm.taobao.org
    EXPOSE 3000
    
    # FROM node:8.4:该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node。
    # COPY . /app:将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。
    # WORKDIR /app:指定接下来的工作路径为/app。
    # RUN npm install:在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。
    # EXPOSE 3000:将容器 3000 端口暴露出来, 允许外部连接这个端口。
    
  3. 创建image文件

    $ docker image build -t koa-demo .
    # 或者
    $ docker image build -t koa-demo:0.0.1 .
    # -t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是latest。
    # 点表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点。
    

    修改

  • 使用 tag 命令为镜像添加标签

    $ docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] 
    # eg: docker tag mysql:5.7 mysql_me:5.7
    # 类似一个快捷方式
    

    删除镜像

    $ docker rmi [image]
    # 或
    $ docker image rm [image]
    # 限制:当通过该镜像创建的容器未被销毁时,镜像是无法被删除的。
    
    $ docker image prune
    
    # 清理掉使用 Docker 一段时间后,系统残存一些临时的、没有被使用的镜像文件
    

镜像导出和加载

导出

$ docker save [OPTIONS] IMAGE [IMAGE...]
# eg: docker save -o python_3.tar python:3 
# eg: docker save busybox > busybox.tar

加载

$ docker load [OPTIONS]
# eg: docker load -i python_3.tar
# eg: docker load < busybox.tar.gz

$ docker image import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
# docker import 是它的别名
# 从tarball中导入内容,创建一个文件系统镜像,对应docker export 导出的tar
# eg: cat exampleimage.tgz | docker import - exampleimagelocal:new
# eg: docker import /path/to/exampleimage.tgz
# eg: sudo tar -c . | docker import - exampleimagedir

Docker 上传镜像

# Docker Hub 账号,获取Docker ID和密码

# 创建docker 仓库

$ docker login
# 命令行登录

$ docker tag python:3 repository_demo/python:3
# 打一个新的标签,前缀与新创建的 Docker ID 、仓库名保持一致

$ docker push repository_demo/python:3
# 推送镜像到远端仓库

总结

Docker 命令都有一个 --help 选项可以查看额外操作功能,可以善加使用。

Dockerfile 是一个很好的设计。

Docker 镜像的管理类似git的工作方式。

参考链接:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。