Docker 镜像相关

获取镜像

  • docker pull
    docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
    
    • Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub。
    • 仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。
    $ docker pull ubuntu:16.04
    
  • docker run
    $ docker run -it --rm 
        ubuntu:16.04 
        bash
    
    • -it
      interaction 和 terminal,交互式终端
    • --rm
      remove,用完后自动删除
    • ubuntu:16.04
      使用的镜像
    • bash
      运行后使用bash
  • docker exec
    在运行的容器中执行命令
    docker exec -it bf130089d033 bash
    
    • -d :
      分离模式: 在后台运行
    • -i :
      即使没有附加也保持STDIN 打开
    • -t :
      分配一个伪终端

列出镜像

  • docker image ls || docker images
    显示仓库名、标签、镜像 ID、创建时间以及所占用的空间。
    root@len:~# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    tomcat              9-jre8              08ea7be8264a        27 hours ago        464MB
    tomcat              latest              27600aa3d7f1        27 hours ago        463MB
    ubuntu              16.04               a3551444fc85        12 days ago         119MB
    
  • docker system df
    查看真实的镜像、容器、数据卷所占用的空间。
    root@len:~# docker system df
    TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
    Images              3                   1                   600.9MB             582.8MB (96%)
    Containers          1                   0                   57.43kB             57.43kB (100%)
    Local Volumes       0                   0                   0B                  0B
    Build Cache         0                   0                   0B                  0B
    
  • docker image ls -a
    显示全部镜像
  • docker image prune
    删除无意义的虚悬镜像
    root@len:~/docker/tomcat# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    <none>              <none>              b1d3946144d1        27 seconds ago      503MB
    <none>              <none>              557d0f6e459a        36 hours ago        463MB
    <none>              <none>              594ec29cf32d        36 hours ago        463MB
    <none>              <none>              9a832102d97c        36 hours ago        463MB
    
    由于在拉取和构建过程中,版本号被替代后原来的镜像就失去了意义,需要删除:
    docker image prune
    
    如果删除失败则说明有容器在占用,删除容器后再删除虚悬镜像

删除镜像

docker image rm [选项] <镜像1> [<镜像2> ...]

<镜像> 可以是:

  • 镜像短 ID:3个字符以上即可
  • 镜像长 ID:完整的ID
  • 镜像名:镜像名
  • 镜像摘要:DIGEST号码

Dockerfile

一般的,需要在空白目录新建 Dockerfile 的文件,在里面写入相应指令

  • FROM
    表示以XX镜像为基础,在其上定制修改。
  • RUN
    表示执行命令行,++每运行一次 RUN 命令,就会建立一层镜像++,因此要减少 RUN 的层数。有两种格式:
    • shell 格式
      直接写相应 shell 脚本即可
    • exec 格式
      类似调用函数
FROM tomcat
COPY index.html /usr/local/tomcat/webapps/ROOT

表示把上下文目录中的 index.html 拷贝到镜像中的目录中

构建自己的镜像

  • docker build
    参数: -t 表示 target
    docker build -t myimage:v1 .
    
    表示将当前目录的文件打包,目标是myimage的v1版
    root@len:~/docker/tomcat# docker build -t myimage .
    Sending build context to Docker daemon  3.072kB
    Step 1/2 : FROM tomcat
     ---> 27600aa3d7f1
    Step 2/2 : COPY index.html /usr/local/tomcat/webapps/ROOT
     ---> Using cache
     ---> b2baada4a8f5
    Successfully built b2baada4a8f5
    Successfully tagged myimage:latest
    
    看出,此过程分别执行对应的指令,打包成不同的层
  • 参数中 . 的理解
    . 指的是上下文环境,并不一定是Dockerfile文件所在的目录(该文件可以在任意地方,使用 -f ../XXX指定),需要什么文件就将什么文件放入该目录再打包。

Dockerfile指令

  • ADD
    会自动将 tar 包解压
    ADD app.tar.gz .
  • WORKDIR
    由于每条指令对应的是不同层,因此shell的执行路径不一定相同,所以先指定工作目录
    WORKDIR /usr/local/tomcat/webapps/ROOT
  • EXPOSE
    暴露出端口

没有修不好的电脑
原文地址:https://www.cnblogs.com/duniqb/p/12702475.html