# 镜像使用


当运行容器时，使用的镜像如果在本地中不存在，docker 就会自动从 docker 镜像仓库中下载，默认是从 Docker Hub 公共镜像源下载

## 镜像列表
```bash
docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
qiang/ubuntu        latest              8804036498ef        2 weeks ago         74.2MB
qiang/ubuntu        test-dockerfile     8804036498ef        2 weeks ago         74.2MB
ubuntu              latest              74435f89ab78        4 weeks ago         73.9MB
training/webapp     latest              6fae60ef3446        5 years ago         349MB
```
* REPOSITORY：表示镜像的仓库源
* TAG：镜像的标签,同一仓库源可以有多个 TAG，代表这个仓库源的不同个版本
* IMAGE ID：镜像ID
* CREATED：镜像创建时间
* SIZE：镜像大小

## 查找镜像
docker search [镜像]

## 获取镜像
docker pull [镜像][:TAG]

## 删除镜像
docker rmi [名称]

## 创建镜像
当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时，我们可以通过以下两种方式对镜像进行更改。
* 从已经创建的容器中更新镜像，并且提交这个镜像
* 使用 Dockerfile 指令来创建一个新的镜像

### 更新镜像
* 行运行并进入或进入一个运行的容器  
  docker exec -it 0546f66f7e25 /bin/bash
* 在运行的容器内使用 apt-get update 命令进行更新, 之后exit退出   
    ```bash
    apt-get update

    Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [107 kB]                               
    Get:2 http://archive.ubuntu.com/ubuntu focal InRelease [265 kB]
    Get:3 http://security.ubuntu.com/ubuntu focal-security/restricted amd64 Packages [33.9 kB]
    Get:4 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages [165 kB]
    Get:5 http://security.ubuntu.com/ubuntu focal-security/universe amd64 Packages [45.2 kB]
    Get:6 http://security.ubuntu.com/ubuntu focal-security/multiverse amd64 Packages [1078 B]
    Get:7 http://archive.ubuntu.com/ubuntu focal-updates InRelease [111 kB]
    Get:8 http://archive.ubuntu.com/ubuntu focal-backports InRelease [98.3 kB]
    Get:9 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages [1275 kB]
    Get:10 http://archive.ubuntu.com/ubuntu focal/restricted amd64 Packages [33.4 kB]
    Get:11 http://archive.ubuntu.com/ubuntu focal/multiverse amd64 Packages [177 kB]
    Get:12 http://archive.ubuntu.com/ubuntu focal/universe amd64 Packages [11.3 MB]
    Get:13 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [310 kB]                                                                                                      
    Get:14 http://archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 Packages [4202 B]                                                                                                
    Get:15 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [157 kB]                                                                                                  
    Get:16 http://archive.ubuntu.com/ubuntu focal-updates/restricted amd64 Packages [33.9 kB]                                                                                               
    Get:17 http://archive.ubuntu.com/ubuntu focal-backports/universe amd64 Packages [3209 B]                                                                                                
    Fetched 14.2 MB in 7s (1966 kB/s)                                                                                                                                                       
    Reading package lists... Done
    ```
* 此时 ID 为 0546f66f7e25 的容器，是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本
    ```bash
    docker commit -m="test update" -a="zhaojq" 0546f66f7e25 zhaojq/ubuntu:v1
    sha256:7c9585e7c2def642516fe9a55a726ac3a325c60c0f4c40fc5e3f07ca3c921ef8

    # -m: 提交的描述信息
    # -a: 指定镜像作者
    # 0546f66f7e25: 容器ID
    # zhaojq/ubuntu:v1: 要创建的目标镜像名
    ```
* 此时再次docker images 就可看到刚创建的镜像了

### 构建镜像
* 创建Dockerfile文件
    ```vim
    FROM ubuntu:latest
    MAINTAINER zhaojq "test@qq.com"

    RUN /bin/echo 'root:123456'|chpasswd
    RUN useradd qiang
    RUN /bin/echo 'qiang:123456'|chpasswd
    RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >etc/default/local
    EXPOSE 22
    EXPOSE 80
    CMD /usr/sbin/sshd -D
    ```
* docker build 构建镜像
    ```bash
    # -t 指定创建的目标镜像名
    # . Dockerfile文件所在目录
    docker build -t zhaojq_dockerfile/ubuntu:v1 .

    Sending build context to Docker daemon  2.048kB
    Step 1/9 : FROM ubuntu:latest
    ---> 74435f89ab78
    Step 2/9 : MAINTAINER zhaojq "test@qq.com"
    ---> Running in 4622ba2d0438
    Removing intermediate container 4622ba2d0438
    ---> 4cc82d05c454
    Step 3/9 : RUN /bin/echo 'root:123456'|chpasswd
    ---> Running in 23f01fbf0bb4
    Removing intermediate container 23f01fbf0bb4
    ---> 9b6776103afa
    Step 4/9 : RUN useradd qiang
    ---> Running in ba293211f269
    Removing intermediate container ba293211f269
    ---> 8a62690dce30
    Step 5/9 : RUN /bin/echo 'qiang:123456'|chpasswd
    ---> Running in 73c84bc6b8b0
    Removing intermediate container 73c84bc6b8b0
    ---> dfc99a7193d8
    Step 6/9 : RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >etc/default/local
    ---> Running in 39ba22f4387b
    Removing intermediate container 39ba22f4387b
    ---> a49e9249f23a
    Step 7/9 : EXPOSE 22
    ---> Running in d6c13b91fc82
    Removing intermediate container d6c13b91fc82
    ---> 0232f7837c27
    Step 8/9 : EXPOSE 80
    ---> Running in 7669c7a72559
    Removing intermediate container 7669c7a72559
    ---> 278af938ab7d
    Step 9/9 : CMD /usr/sbin/sshd -D
    ---> Running in bad5d00e250b
    Removing intermediate container bad5d00e250b
    ---> e7ed32cec67e
    Successfully built e7ed32cec67e
    Successfully tagged zhaojq_dockerfile/ubuntu:v1
    ```
* docker images查看刚才创建的镜像
  
### 设置镜像标签
`docker tag [镜像ID] [标签名称]`

