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内的每行命令
构建完成后,可以查看生成的本地镜像: