Docker笔记

Docker的三大核心概念

镜像(Image)、容器(Container)、仓库(Respository)

镜像( Image )和容器( Container )的关系,就像是面向对象程序设计中的 类 和 实例
一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删
除、暂停等。

Docker镜像 *

镜像是运行容器的前提

获取镜像
  • docker [image] pull NAME[:TAG]
    • NAME:镜像仓库名称(用来区分镜像)
    • TAG:镜像的标签(表示版本信息),不显示指定,默认会下载latest标签
  • docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
    • Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号] 。默认地址是 Docker
      Hub。
    • 仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名> 。对于 Docker
      Hub,如果不给出用户名,则默认为 library ,也就是官方镜像。
docker pull ubuntu:16.04
--> docker pull registry.hub.docker.com/ubutun:16.04

命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub 获取镜像。(如果配置了其它源,从配置的源下载)
而镜像名称是 ubuntu:16.04 ,因此将会获取官方镜像 library/ubuntu 仓库中标签为 16.04 的镜
像。

基本命令

都需要获得权限sudo

启动Docker服务

  • $ sudo service docker start (Ubuntu 14.04)
  • $ sudo systemctl enable docker
    $ sudo systemctl start docker

配置国内镜像加速器

  • /etc/docker/daemon.json 中写入如下内容(如果文件不存在新建该文件)
{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}

查看信息

  • docker info

使用Docker镜像

1. 获取镜像

  • docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
    • 支持的选项
      • -a, --all-tags=true|false:是否获取仓库中的所有镜像,默认为否
      • –disable-content-trust:取消镜像中的内容校验,默认为真
dockr pull hub.c.163.com/public/ubuntu:18.04

2. 运行镜像

以这个镜像为基础启动并运行一个容器

  • docker run -it ubuntu:18.04 bash

    • -it :这是两个参数,一个是 -i :交互式操作,一个是 -t 终端。我们这里打算进入
      bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
    • –rm :这个参数是说容器退出后随之将其删除。
    • ubuntu:18.04 :这是指用 ubuntu:16.04 镜像为基础来启动容器。
    • bash :放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash 。
    • -p,端口
  • docker run --name web2 -d -p 81:80 nginx:v2

    命名为新的服务为 web2 ,并且映射到 81 端口。

  • exit 退出容器

3. 查看镜像信息

  1. 使用image命令列出镜像
  • docker images 或 docker image ls

    • docker images ubuntu|ubuntu:18.04:根据仓库名或特定的镜像
    • -a ,–all=true|false:列出所有(包括临时文件)(包括中间层镜像)镜像文件,默认为否
    • –digests=true|false:列出镜像的数字摘要值,默认为否
    • -f,–filter=[]:过滤列出的镜像,如danglin=true,只显示没有被使用的镜像、before、since
    如:docker image ls -f dangling=true
    
    • –format=“TEMPLATE”:控制输出格式
    docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
    
    • –no-trunc=true|false:对输出太长的内容进行截断,默认为是
    • -q,–quiet=true|false:仅输出ID信息,默认为否
  • 使用tag命令添加镜像标签

docker tag ubuntu:18.04  myubuntu:latest
别名而已,起到了类似链接的命令
  • inspect命令查看详细信息
docker [image] inspect ubuntu:18.04
只获取镜像的Architecture
docker inspect -f {{".Architecture}} ubuntu:18.04
  • 使用history命令查看镜像历史
docker history ubuntu:18.04
如果字段太长被截断,使用 --no-trunc

4. 搜寻镜像

  • docker search [option] keyword
    • -f ,–filter:过滤输出的内容
    • –format string :格式化输出内容
    • limit int :限制输出结果个数,默认为25个
    • –no-trunc:不截断输出结果
搜索官方提供的带nginx关键字的镜像
docker search --filter=is-offical=true nginx

搜索收藏数超过4的关键字包括tensorflow的镜像
docker search --filter=stars=4 tensorflow

5. 删除和清理镜像

  • 使用docker rmi 或 docker image rm 命令,格式为

    docker rmi [选项] <镜像1> [<镜像2> ...]
    
    
    • -f,-force:强制删除镜像,即使有容器依赖它
    • -no-prune:不要清理未带标签的父镜像
5.1 使用标签删除镜像

当一个镜像具有多个标签时,删除一个标签不会影响镜像文件。但当镜像只剩下一个标签时,再次删除会彻底删除镜像文件

5.2 使用镜像ID来删除镜像

会先删除所有指向该镜像的标签,然后删除该镜像文件本身

注意:

  • 当该镜像创建的容器存在时,镜像文件默认是无法被删除的
    • 使用 docker ps -a 查看本机上存在的所有容器
    • 先删除容器 docker rm CONTAINER ID
用 docker image ls 命令来配合

使用 docker image ls -q 来配合使用 docker image rm ,这样可以成批的删除希望删除的镜像。

  • 删除所有仓库名为 redis 的镜像:

    docker image rm $(docker image ls -q redis)
    
  • 删除所有在 mongo:3.2 之前的镜像:

    docker image rm $(docker image ls -q -f before=mongo:3.2)
    

6. 创建镜像

主要有三种方式:

  1. 基于已有镜像创建(commit方式,不用)

  2. 基于本地模板导入

  3. Dockerfile创建 *

commit方式(不使用)
  • 由于命令的执行,还有很多文件被改动或添加了。会有大量的无关内容被添加进来,如果不小心清理,将会导致镜像极为臃肿。

  • 使用 docker commit 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为黑
    箱镜像

DockerFile方式 *
  • 在一个空白目录中,建立一个文本文件,并命名为 Dockerfile :

    $ mkdir mynginx
    $ cd mynginx
    $ touch Dockerfile
    
  • 内容例如

    FROM nginx
    RUN echo '<h1>Hello, Docker!</h1>'  >  /usr/share/nginx/html/index.html
    

Dockerfile 很简单,一共就两行。涉及到了两条指令, FROM 和 RUN 。

  • FROM 指定基础镜像

定制镜像,那一定是以一个镜像为基础,在其上进行定制。就像我们之前运行了一个nginx 镜像的容器,再进行修改一样,基础镜像是必须指定的。而 FROM 就是指定基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。

除了选择现有镜像为基础镜像外,Docker 还存在一个特殊的镜像,名为 scratch 。这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像。

  • RUN 执行命令

    格式分为两种:

    • shell 格式: RUN <命令>
    • exec 格式: RUN [“可执行文件”, “参数1”, “参数2”]
  • 要点:

    • 使用一个 RUN 指令,并使用 && 将各个所需命令串联起来,因为每一个 RUN 的行为,就和手工建立镜像的过程一样:新建立一层,在其上执行这些命令,执行结束后, commit 这一层的修改,构成新的镜像。会变的臃肿。
    • Dockerfile 支持 Shell 类的行尾添加 \ 的命令换行方式,以及行首 # 进行注释的格式
    • && apt-get purge -y --auto-remove $buildDeps:最后添加了清理工作的命令,删除了为了编译构建所需要的软件,清理了所有下载、展开的文件,并且还清理了 apt 缓存文件
  • 构建镜像

    • 在 Dockerfile 文件所在目录执行 docker build 命令,格式为:

      docker build [选项] <上下文路径/URL/->
      
      如  docker build -t nginx:v3 .
      指定了最终镜像的名称 -t nginx:v3
      
  • 镜像构建上下文(Context)

    • 在 docker build 命令最后面有一个 . 。 . 表示当前目录
存出和载入镜像
  • 存出镜像

    docker [image] save
    支持-o、-output string 参数,导出镜像到指定文件中
    
    例子:导出本地的ubuntu:18.04 镜像为文件 ubuntu_18.04.tar(保存在当前目录) :
    $ docker save -o ubuntu_18.04.tar ubuntu:18.04
    
  • 载入镜像

    docker [image] load
    支持-i、-input string参数,从指定文件读取内容
    
    例子:从文件ubuntu_18.08.tar 到入境想到本地镜像列表
    docker load -iubuntu_18.04.tar
    或者 docker load < ubuntu_18.04.tar 
    

Dockerfile指定详解

COPY 复制文件
  • 格式

    COPY <源路径>... <目标路径>
    COPY ["<源路径1>",... "<目标路径>"]
    

操作Docker容器

1. 创建容器

  • 新建容器(此命令新建的容器处于停止状态,使用 start 命令启动)

    docker [container] create   例如:
    
    docker create -it ubuntu:latest
    
    docker ps -a   显示所有容器
    
  • 启动容器

    docker [container] start<NAMES/CONTAINER ID>
    
    通过 docker ps 命令可以查看当前运行的容器
    
  • 新建并启动容器

    docker [container] run 
    等价于 先执行 docker [container] create 命令,在执行 docker [container] start命令
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值