若运行容器时,使用的镜像在本地中不存在,则会从 docker 镜像仓库中下载,默认是 Docker Hub 公共镜像源下载
1、列出镜像列表
docker images
选项说明:
REPOSITORY:镜像的仓库源
TAG:镜像标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
2、拉取镜像
docker pull ubuntu:15.10
3、查找镜像
docker search ubuntu
INDEX:镜像源
NAME:镜像仓库源的名称
OFFICIAL:是否 docker 官方发布
DESCRIPTION:镜像描述
STARS:收藏人数
AUTOMATED:是否自动
4、创建镜像
当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
- 1.从已经创建的容器中更新镜像,并且提交这个镜像
- 2.使用 Dockerfile 指令来创建一个新的镜像
更新之前,需要使用镜像创建一个容器
docker run -it ubuntu /bin/bash
1、在运行的容器内执行 apt-get update 命令进行更新
2、操作完成后,输入 exit 退出整个容器
3、提交更改
docker commit -m "update ubuntu" -a="man" (新运行的容器ID)(容器名称)
-m:提交的描述信息
-a:指定镜像作者
5、构建镜像
5.1、需要创建一个 Dockerfile 文件
# 三种方式创建
touch Dockerfile
>Dockerfile
vi Dockerfile 回车
:wq
5.2、编辑 Dockerfile
vi Dockerfile
5.3、输入构建的内容
#指定基础进行为centos
FROM centos:latest
#指定作者
LABEL Author="build"
#运行命令安装nginx
RUN yum install -y yum epel-release && yum install -y nginx && echo "${HOSTNAME}-nginx server" > /usr/share/nginx/html/index.html
#启动容器运行的命令
CMD [ "/usr/sbin/nginx","-g","daemon off;","-c","/etc/nginx/nginx.conf"]
5.4、利用构建好的镜像启动容器,并查看是否允许成功
docker run -d --name nginx-demo -p 8080:80 nginx:v1
5.5、访问
curl http://127.0.0.1:8080
5.6、指令详解
5.6.1、FROM:
FROM指令是最重要且必须为 Dockerfile 中的第一个非注释指令,用于为构建的镜像指定基础镜像。
后续指令运行环境基于该基础镜像,构建镜像时候默认会先从主机上寻找镜像,若不存在时则从Docker Hub上拉取镜像。
语法
FROM <repository>
FROM <repository>[:<tag>]
FROM <repository>@<digest>
解释:
repository:镜像仓库
tag:镜像标签,省略就是latest
digest:镜像哈希码
5.6.2、LABEL
LABEL用于为镜像提供元数据信息,其数据格式为key=value。
语法
LABEL <key>=<value>
5.6.3、COPY
用于主机中的文件或者复制到镜像中
语法
COPY [--chown=<user>:<group>] <src>... <dest>
COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]
解释:
src:源文件或者目录,支持通配符。如果src是目录,src目录自己不会被复制,复制的是目录中的文件
dest:容器中文件系统目录,如果目录不存在自动创建创建。
user:复制到容器中的文件所属用户
group:复制到容器中的文件所属用户组
注意事项:
- 如果复制的 src 或 dest 中存在空格字符需使用第二种加双引号方式
- src必须是 build 的上下文目录(Dockerfile同级目录或子目录),不能是父目录或者绝对路径
- 如果指定来多个src或者src中使用了通配符,则dest必须是一个目录,且必须以/结尾
示例
COPY hom* /mydir/ #拷贝以hom开头的的所有文件
COPY hom?.txt /mydir/ #?代表占位符,可以拷贝
6、设置镜像标签
docker tag <镜像ID> <name>:<tag>
7、创建一个交互式容器
docker run -i -t --name=c1 centos /bin/bash
-i 交互式容器
-t tty终端(分配一个终端,操作容器)
—name:指定容器名称(唯一,不能重复)
8、创建守护式容器(后台运行)
docker run -itd --name c2 centos /bin/bash
登录到容器中
docker exec -it c2 /bin/bash
9、查看容器
docker ps:查看正在运行的容器
docker ps -a:查看运行过的容器(所有容器)
docker ps -l:查询最后一次运行的容器