docker学习(2) - 使用镜像
使用镜像
- 使用
[code]获取镜像: docker pull [选项] [Docker Registry地址]<仓库名>:<标签> 默认地址为:Docker Hub 列出镜像: docker images 虚悬镜像: docker images -f dangling=true 删除虚悬镜像: docker rmi $(docker images -q -f dangling=true) 镜像过滤: docker images -f|--filter since|before=mongo:3.2 docker images --format "{{.ID}}: {{.Repository}}" docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
- 定制镜像:Dockerfile
Dockerfile是一个文本文件,里面为一条条指令,每一条指令建立一层,描述镜像如何构建。所以为了镜像的不臃肿,体积更小,把多个脚本写为一个脚本。
FROM指令:
一个Dockerfile中FROM是必备指令,并且必须是第一个。FROM含义为选择一个基础镜像,如果不想选择一个镜像,可以用下面命令,表示以一个空镜像为基础镜像,接下来所写的指令作为镜像的第一层开始存在。
[code]FROM scratch
RUN 执行命令
RUN 指令是用来执行命令行命令的。
RUN指令有两种格式:
[code]shell 格式: RUN <命令>, RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html exec 格式: RUN ["可执行文件", "参数1", "参数2"]
COPY 复制文件
[code]两种格式: COPY <源路径>... <目标路径> COPY ["<源路径1>",... "<目标路径>"]
<目标路径> 可以是容器内的绝对路径,也可以是相对于工作目录的相对路径(工 作目录可以用 WORKDIR 指令来指定)。目标路径不需要事先创建,如果目录不存 在会在复制文件前先行创建缺失目录。
使用 COPY 指令,源文件的各种元数据都会保留。比如 读、写、执行权限、文件变更时间等。
ADD 更高级的复制文件
add的源路径可以是url,可以是压缩文件。如果是url会自动下载文件,并设置权限为600。如果是压缩文件,会自动解压到目标路径。这个命令完全可以使用run命令替代。意义不大。
在 Docker 官方的最佳实践文档中要求,尽可能的使用COPY ,因为 COPY 的语 义很明确,就是复制文件而已,而 ADD 则包含了更复杂的功能,其行为也不一定很清晰。最适合使用 ADD 的场合,就是所提及的需要自动解压缩的场合。
CMD 容器启动命令
依然有shell格式和exec格式,一般用exec格式。shell格式会自动转化为sh -c格式执行,exec格式会解析成json数组。
[code]CMD echo $HOME 在实际执行中,会将其变更为: CMD [ "sh", "-c", "echo $HOME" ]
docker里前后台执行问题:
docker不是虚拟机。容器中的应用都应该在前台运行。容器没有后台运行概念。
ENTRYPOINT 入口点
同cmd,但cmd后不能跟参数,entrypoint后能跟参数。 entrypoint能够执行脚本:ENTRYPOINT ["docker-entrypoint.sh"]
[code]Dockerfile里命令一如下: FROM ubuntu:16.04 RUN apt-get update \ && apt-get install -y curl \ && rm -rf /var/lib/apt/lists/* CMD [ "curl", "-s", "https://ip.cn" ] 接着执行命令二: docker build -t myip . (注意逗号) 再执行命令三: docker run myip 最后一行命令不能给curl命令传参数,但如果命令一中cmd换成ENTRYPOINT,然后在命令三后添加参数可以执行了就
ENV 设置环境变量
[code]env param 1000 run echo $param
ARG 构建参数
构建参数和 ENV 的效果一样,都是设置环境变量。所不同的是, ARG 所设置的 构建环境的环境变量,在将来容器运行时是不会存在这些环境变量的。
VOLUME 定义匿名卷
docker运行时不要往容器存储层写数据。需要写数据的可以定义一个匿名卷,如:volume /data,在运行时不指定挂载,容器也可以正常运行,不会向容器存储层写入大量数据。运行时可覆盖:-v mydata:/data。
EXPOSE 声明端口
EXPOSE 和在运行时使用 -p <宿主端口>:<容器端口> : -p ,是 映射宿主端口和容器端口,换句话说,就是将容器的对应端口服务公开给外界访 问,而 EXPOSE 仅仅是声明容器打算使用什么端口而已,并不会自动在宿主进行 端口映射。
WORKDIR 指定工作目录
WORKDIR 指定工作目录,格式为 WORKDIR <工作目录路径> 。
USER 指定当前用户
格式: USER <用户名>
USER 指令和 相似,都是改变环境状态并影响以后的层。 WORKDIR是改变工作目录,USER 则是改变之后层的执行 RUN , CMD 以及ENTRYPOINT 这类命令的身份。当然,和 WORKDIR 一样, USER 只是帮助你切换到指定用户而已,这个用户必须是事先建立好的,否则无法切换。
HEALTHCHECK 健康检查
和 CMD , ENTRYPOINT 一样, HEALTHCHECK 只可以出现一次,如果写了多个, 只有最后一个生效。
ONBUILD 为他人做嫁衣裳
格式: ONBUILD <其它指令> 。
ONBUILD 是一个特殊的指令,它后面跟的是其它指令,比如 RUN , COPY 等, 而这些指令,在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去 构建下一级镜像的时候才会被执行。
定制完成后,可在Dockerfile所在的文件夹执行:docker build -t [name] .命令生成镜像(注意命令最后的点)
- 删除镜像
-
docker rmi [选项] <镜像1> [<镜像2> ...]
-
删除虚悬镜像:docker rmi $(docker images -q -f dangling=true)
- Docker学习笔记之使用Dockerfile创建镜像
- windows环境docker学习随笔(二)使用Dockerfile打包镜像
- Docker学习之Docker镜像基本使用
- Docker学习笔记2-mysql镜像的使用和外网访问
- Docker学习笔记(3)-- 如何使用Dockerfile构建镜像
- docker学习(2) mac中docker-machine使用vmware fusion以及配置国内镜像加速
- docker学习笔记3-使用docker镜像、容器运行过程
- Docker学习笔记(3)-- 如何使用Dockerfile构建镜像
- docker学习笔记4.1-使用Dockerfile文件构建镜像
- Docker学习--本地springboot项目使用Maven插件构建Docker镜像并自动上传到linux服务器docker私有仓库
- docker学习(2) mac中docker-machine使用vmware fusion以及配置国内镜像加速
- docker学习笔记04:Centos7使用阿里云镜像加速
- Docker学习笔记-- 如何使用Dockerfile构建镜像
- Docker学习笔记(3)-- 如何使用Dockerfile构建镜像
- docker学习笔记(六)使用Dockerfile构建镜像
- Docker学习笔记-- 如何使用Dockerfile构建镜像
- Docker学习笔记(3)-- 如何使用Dockerfile构建镜像
- Docker | 学习系列 (四)Docker镜像常用命令使用教程
- docker学习系列(二):使用Dockerfile创建自己的镜像
- Docker学习6 - 使用Dockerfile构建镜像