Docker是一个开源的应用容器引擎;是一个轻量级容器技术;
Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;
运行中的这个镜像称为容器,容器启动是非常快速的。
docker search 关键字
docker search mysql
docker pull 镜像名:tag
tag是可选的,tag表示标签,多为软件的版本,默认是latest(最新的)
docker pull mysql
docker images
root@VM-0-15-ubuntu:/home/ubuntu# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat latest 2d43521f2b1a 3 months ago 463MB jenkins latest cd14cecfdb3a 3 months ago 696MB mysql latest f45277861b04 3 months ago 445MB dominate/idea-license-server latest ec21bba92a2f 11 months ago 127MB
-a
, 列出所有相关信息(含中间印象层)
-q
,只显示镜像id
--digest
,显示镜像的摘要信息
--no-trunc
,显示完整的镜像信息
docker rmi image-id
如果已经使用镜像(image)创建过容器(container),可能会删除不了,报错:
unable to delete ec21bba92a2f (must be forced) - image is being used by stopped container
这是需要使用-f
强制删除:
docker rmi -f image-id
docker rmi -f ${docker images -qa}
使用Dockerfile文件构建新的镜像
docker build -f /root/Dockerfile -t new-image-name:tag .
命令结尾有个.
表示当前目录
docker run [options] image [command][arg...]
docker run --name 容器名称 -d -v 主机绝对路径 : 容器内路径 tomcat:latest
--name:为容器指定一个名称
-d:后台运行
-i:以交互模式运行容器,通常与-t同时使用
-t:为容器随机分配一个伪输入终端,通常与-i同时使用
-P:随机端口映射
-p: 将主机的端口映射到容器的一个端口(主机端口:容器内部的端口)
-v:数据卷的挂载(主机绝对路径 : 容器内路径)
docker run -d -p 8888:8080 tomcat
这里涉及到docker container的一个特性,container如果停止运行了,那么再次启动时,之前所有运行相关的数据和文件就都不存在了,就类似于设置了自动还原的电脑一般,无论你做了多少的操作,一旦关机重启之后就又恢复到最初的状态。数据卷就是来解决上述问题的,通过Docker container外部的文件夹的挂载,将可持久化的文件存储到外部挂载的文件夹中。
docker ps -a
-a:显示全部,包括启动失败的
root@VM-0-15-ubuntu:/home/ubuntu# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19e2ea0a7a37 dominate/idea-license-server "/docker-entrypoint.…" 2 months ago Up 2 months 0.0.0.0:1017->1017/tcp idea_server
exit:容器停止退出
ctrl+P+Q:容器不停止退出
docker rm container-id
docker stop container-id #
docker kill container-id # 强制停止容器
docker start container-id
docker start container-id -a
-a: 查看输出日志
docker logs -f -t --tail container-id
-f:加入时间戳
-t:跟随最新的日志打印
--tail:数字 显示最后多少条
docker top container-id
docker inspect container-id
# 直接进入容器启动命令的终端,不会启动新的进程
docker attach container-id
# 是在容器中打开新的终端,并且可以启动新的进程
docker exec -it container-id bashShell
docker cp container-id:容器内路径 目的主机路径
docker cp container-id:/tmp/xxx.log /root/xxx.log
docker commit -m "提交的描述信息" -a "作者" container-id image-name:tag
-p:在commit时,将容器暂停
-c:使用Dockerfile指令创建镜像
docker run -it -v 主机绝对路径目录:容器绝对路径目录 image-name
:ro # readOnly 只能读不能写,新建文件都不可以
docker run -it -v 主机绝对路径目录:容器绝对路径目录:ro image-name
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
- 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
- 指令按照从上到下,顺序执行
#
是注释- 每条指令都会创建一个新的镜像层,并对镜像进行提交
- docker从基础镜像运行一个容器
- 执行一条指令并对容器作出修改
- 执行类似docker commit的操作提交一个新的镜像层
- docker再基于刚提交的镜像运行一个新的容器
- 执行dockerfile中的下一条指令直到所有指令都执行完毕
- FROM : 基础镜像,当前新镜像是基于哪个镜像的
- MAINTAINER : 镜像维护者的姓名和邮箱地址
- RUN : 容器构建时需要运行的命令
- EXPOSE : 当前容器对外暴露出的端口
- WORKDIR : 指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
- ENV : 用来在构建镜像过程中设置环境变量
- ADD : 将宿主机目录下的文件拷贝进镜像,且ADD命令会自动处理URL和解压压缩包
- COPY : 类似ADD命令,但是不会解压压缩文件
- VOLUME : 容器数据卷,用于数据保存和持久化工作
- CMD : 指定一个容器启动时要运行的命令,Dockerfile中可以有多个CMD指令,但是只有最后一个生效,CMD会被docker run 之后的参数替换
- ENTRYPOINT : 和
CMD
命令类似,但是ENTRYPOINT
命令可以追加参数 - ONBUILD : 当构建一个被继承的Dockerfile时运行命令
--privileged=true # 写权限不够,加上该参数