Docker学习三:配置docker镜像

一、镜像基本操作

镜像拉取

  从远程仓库拉取镜像的命令:docker pull [Registry]/[Repository]/[Image]:[Tag];其中

  Registry为注册服务器,默认会从docker.io拉取镜像,也可以替换为自己的注册服务器

  Repository为镜像仓库

  Image为镜像名称

  Tag为镜像标签,没有指定则为latest

镜像重命名

  重命名镜像命令:docker tag [SOURCE_IMAGE][:TAG] [TARGET_IMAGE][:TAG]

镜像删除

  docker rmi 镜像id/镜像名称

镜像查看

  查看所有镜像:docker images

  查看指定镜像:docker image ls busybox、docker images |grep busybox

镜像构建

主要有两种构建镜像方式:

1.使用docker commit命令从运行中的容器提交为镜像
#先运行一个busybox容器并进入,其中--rm参数表示退出容器即删除容器及相关数据
docker run --rm --name=busybox -it busybox sh

#进入容器后新建一个文件并写入内容
touch hello.txt && echo "I love docker" >> hello.txt

#在新的命令行窗口中,从该容器提取镜像
docker commit busybox busybox:hello

执行docker images查看生成的新镜像:

通过新生成的镜像运行容器并进入后发现,容器中包含在旧镜像容器中创建的文件:docker run --rm --name=busybox -it busybox:hello sh

再通过原始镜像运行容器并进入后发现,没有我们创建的文件:

 也就是说,这种方式可以适用于:在已有容器上做修改并生成新的镜像,但不影响原始镜像

2.使用docker build命令从 Dockerfile 构建镜像

 Dockerfile 是一个包含了用户所有构建命令的文本,通过docker build命令可以从 Dockerfile 生成镜像。

使用 Dockerfile 构建镜像具有以下特性:

  • Dockerfile 的每一行命令都会生成一个独立的镜像层,并且拥有唯一的 ID;
  • Dockerfile 的命令是完全透明的,通过查看 Dockerfile 的内容,就可以知道镜像是如何一步步构建的;
  • Dockerfile 是纯文本的,方便跟随代码一起存放在代码仓库并做版本管理

dockerfile常用指令

FROM Dockerfile  除了注释第一行必须是 FROM ,FROM 后面跟镜像名称,代表我们要基于哪个基础镜像构建我们的容器。
RUN  RUN后面跟一个具体的命令,类似于 Linux 命令行执行命令。
ADD  拷贝本机文件或者远程文件到镜像内
COPY  拷贝本机文件到镜像内
USER  指定容器启动的用户
ENTRYPOINT  容器的启动命令
CMD  CMD为 ENTRYPOINT 指令提供默认参数,也可以单独使用 CMD 指定容器启动参数
ENV  指定容器运行时的环境变量,格式为 key=value
ARG  定义外部变量,构建镜像时可以使用 build-arg = 的格式传递参数用于构建
EXPOSE  指定容器监听的端口,格式为 [port]/tcp 或者 [port]/udp
WORKDIR  为 Dockerfile 中跟在其后的所有 RUN、CMD、ENTRYPOINT、COPY 和 ADD 命令设置工作目录。

构建示例:

在test_dockerfile下创建两个文件,内容分别如下:

#Dockerfile文件内容
FROM centos:7

COPY nginx.repo /etc/yum.repos.d/nginx.repo

RUN yum install -y nginx

EXPOSE 80

ENV HOST=mynginx

CMD ["nginx","-g","daemon off;"]

#nginx.repo内容
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

在当前目录下执行:docker build -t mynginx .命令进行构建

其中,-t表示标签名,.(点)表示指定docker的上下文环境(好像就是当前目录),部分构建过程如下:

首先会发送构建的上下文内容给docker构建引擎,然后分别构建Dockerfile内的每行命令

构建完成后,可以查看生成的本地镜像:

原文地址:https://www.cnblogs.com/canghai1024/p/13638713.html