若运行容器时,使用的镜像在本地中不存在,则会从 docker 镜像仓库中下载,默认是 Docker Hub 公共镜像源下载

1、列出镜像列表

  1. docker images

image.png
选项说明:
REPOSITORY:镜像的仓库源
TAG:镜像标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小

2、拉取镜像

  1. docker pull ubuntu:15.10

3、查找镜像

  1. docker search ubuntu

image.png
INDEX:镜像源
NAME:镜像仓库源的名称
OFFICIAL:是否 docker 官方发布
DESCRIPTION:镜像描述
STARS:收藏人数
AUTOMATED:是否自动

4、创建镜像

当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

  • 1.从已经创建的容器中更新镜像,并且提交这个镜像
  • 2.使用 Dockerfile 指令来创建一个新的镜像

更新之前,需要使用镜像创建一个容器

  1. docker run -it ubuntu /bin/bash

1、在运行的容器内执行 apt-get update 命令进行更新
2、操作完成后,输入 exit 退出整个容器
3、提交更改

  1. docker commit -m "update ubuntu" -a="man" (新运行的容器ID)(容器名称)

-m:提交的描述信息
-a:指定镜像作者
image.png

5、构建镜像

5.1、需要创建一个 Dockerfile 文件

  1. # 三种方式创建
  2. touch Dockerfile
  3. >Dockerfile
  4. vi Dockerfile 回车
  5. :wq

5.2、编辑 Dockerfile

  1. vi Dockerfile

5.3、输入构建的内容

  1. #指定基础进行为centos
  2. FROM centos:latest
  3. #指定作者
  4. LABEL Author="build"
  5. #运行命令安装nginx
  6. RUN yum install -y yum epel-release && yum install -y nginx && echo "${HOSTNAME}-nginx server" > /usr/share/nginx/html/index.html
  7. #启动容器运行的命令
  8. CMD [ "/usr/sbin/nginx","-g","daemon off;","-c","/etc/nginx/nginx.conf"]

5.4、利用构建好的镜像启动容器,并查看是否允许成功

  1. docker run -d --name nginx-demo -p 8080:80 nginx:v1

5.5、访问

  1. curl http://127.0.0.1:8080

5.6、指令详解

5.6.1、FROM
FROM指令是最重要且必须为 Dockerfile 中的第一个非注释指令,用于为构建的镜像指定基础镜像。
后续指令运行环境基于该基础镜像,构建镜像时候默认会先从主机上寻找镜像,若不存在时则从Docker Hub上拉取镜像。
语法

  1. FROM <repository>
  2. FROM <repository>[:<tag>]
  3. FROM <repository>@<digest>

解释:
repository:镜像仓库
tag:镜像标签,省略就是latest
digest:镜像哈希码

5.6.2、LABEL
LABEL用于为镜像提供元数据信息,其数据格式为key=value。
语法

  1. LABEL <key>=<value>

5.6.3、COPY
用于主机中的文件或者复制到镜像中
语法

  1. COPY [--chown=<user>:<group>] <src>... <dest>
  2. COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]

解释:
src:源文件或者目录,支持通配符。如果src是目录,src目录自己不会被复制,复制的是目录中的文件
dest:容器中文件系统目录,如果目录不存在自动创建创建。
user:复制到容器中的文件所属用户
group:复制到容器中的文件所属用户组
注意事项:

  1. 如果复制的 src 或 dest 中存在空格字符需使用第二种加双引号方式
  2. src必须是 build 的上下文目录(Dockerfile同级目录或子目录),不能是父目录或者绝对路径
  3. 如果指定来多个src或者src中使用了通配符,则dest必须是一个目录,且必须以/结尾

示例

  1. COPY hom* /mydir/ #拷贝以hom开头的的所有文件
  2. COPY hom?.txt /mydir/ #?代表占位符,可以拷贝

6、设置镜像标签

  1. docker tag <镜像ID> <name>:<tag>

7、创建一个交互式容器

  1. docker run -i -t --name=c1 centos /bin/bash

-i 交互式容器
-t tty终端(分配一个终端,操作容器)
—name:指定容器名称(唯一,不能重复)

8、创建守护式容器(后台运行)

  1. docker run -itd --name c2 centos /bin/bash

登录到容器中

  1. docker exec -it c2 /bin/bash

9、查看容器

  1. docker ps:查看正在运行的容器
  2. docker ps -a:查看运行过的容器(所有容器)
  3. docker ps -l:查询最后一次运行的容器