Docker学习笔记
参考资料:《Docker-从入门到实践》
镜像
创建镜像
从仓库下载
# 简略版,默认从官方Docker Hub上下载镜像
docker pull ubuntu:16.04(镜像标签)
# 完全版,指定镜像仓库下载镜像
docker pull [Docker Registry 地址[:端口号]/]仓库名[:标签]
通过Dockerprofile创建
Dockerprofile指令
- COPY 复制文件:
COPY <源路径>... <目标路径>
COPY ["<源路径1>",... "<目标路径>"]
- ADD 更高级的复制文件
- 格式于
COPY
相同 - 原路径可以是URL,自动下载,文件权限为600,压缩文件不解压
- 源路径如果是
tar
压缩文件,将自动解压至目标路径
- 格式于
- CMD 容器启动命令
shell
格式:CMD <命令>
exec
格式:CMD ["可执行文件", "参数1", "参数2"...]
- 注意:由于一个容器实际上就是一个进程,使用
shell
格式,实际的命令会被包装成shell -c
参数的形式进行执行。比如:CMD echo $HOME
,在实际过程中被解释为CMD ["sh", "-c", "echo $HOME"]
。
- ENTRYPOINT 入口点
ENTRYPOINT
的格式和RUN
指令格式一样,分为exec
格式和shell
格式。- *
- ENV 设置环境变量
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
- ARG 构建参数
- 格式:
ARG <参数名>[=<默认值>]
- 构建参数和
ENV
的效果一样,都是设置环境变量。ARG
,所设置的构建环境的环境变量,在将来容器运行时是不会存在这些环境变量的。但是不要因此就使用ARG
保存密码之类的信息,因为docker history
还是可以看到所有值的。 Dockerfile 中的ARG
指令是定义参数名称,以及定义其默认值。该默认值可以在构建命令docker build
中用--build-arg <参数名>=<值>
来覆盖。
- 格式:
- VOLUME 定义匿名卷
- 格式为:
VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>
- 容器运行时应该尽量保持容器存储层不发生写操作,对于数据库类需要保存动态数据的应用,其数据库文件应该保存于卷(volume)中
Dockerfile
中,我们可以事先指定某些目录挂载为匿名卷,这样在运行时如果用户不指定挂载,其应用也可以正常运行,不会向容器存储层写入大量数据
- 格式为:
- EXPOSE 声明端口
- 格式为
EXPOSE <端口1> [<端口2>...]
EXPOSE
指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在Dockerfile
中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是docker run -P
时,会自动随机映射EXPOSE
的端口。
- 格式为
- WORKDIR 指定工作目录
- 格式为
WORKDIR <工作目录路径>
- 使用
WORKDIR
指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR
会帮你建立目录。
- 格式为
- USER 指定当前用户
- 格式:
USER <用户名>
USER
指令和WORKDIR
相似,都是改变环境状态并影响以后的层。WORKDIR
是改变工作目录,USER
则是改变之后层的执行RUN
,CMD
以及ENTRYPOINT
这类命令的身份。
- 格式:
- HEALTHCHECK 健康检查
- 格式:
HEALTHCHECK [选项] CMD <命令>
:设置检查容器健康状况的命令HEALTHCHECK NONE
:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
HEALTHCHECK
指令是告诉Docker
应该如何进行判断容器的状态是否正常,这是 Docker 1.12 引入的新指令。
- 格式:
- ONBUILD 为他人做嫁衣裳
- 格式:
ONBUILD <其它指令>
ONBUILD
是一个特殊的指令,它后面跟的是其它指令,比如RUN
,COPY
等,而这些指令,在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行。Dockerfile
中的其它指令都是为了定制当前镜像而准备的,唯有ONBUILD
是为了帮助别人定制自己而准备的。
- 格式:
创建命令
docker builder -t 仓库名[:标签] [Dockerprofile的路径]
查看镜像
docke images
删除镜像
docker image rm [选项] <镜像1> [<镜像2> ...]
容器
创建并启动容器
# 创建容器并进入bash交互界面
docker run -i -t 仓库名[:标签] /bin/bash
docker run
命令参数
-i
: 让容器的标准输入保持打开-t
: 让docker分配一个伪终端(pseudo-TTY),并绑定到容器的标准输入上-p 8080:8080
: 内部端口8080映射到外部端口8080-d
: 让容器后台运行,并返回container id
,通过docker container logs [container ID or NAMES]
查看输出信息--name
: 指定容器名称
查看容器
# 查看容器
docker container ls
# 查看所有已创建的容器,包括终止状态
docker container ls -la
进入后台运行的容器
attach
: 退出时会关闭容器docker attach [id or name]
exec
: 退出时不关闭容器docker exec -it [id or name]
终止容器
docker container stop [id or name]
在启动时进入容器终端,exit
或Ctrl+d
退出终端时,该容器立刻终止
导出容器
导出某个镜像快照
docker export [id or name] > name.tar
导入容器
将容器快照导入本地镜像库
docker import [source] []
删除容器
单个删除容容器
docker container rm [容器ID或Name]
清空所有处于终止状态的容器
docker container prune