docker version 显示docker的版本信息
docker info 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help 帮助命令
帮助文档地址 :Reference documentation | Docker Documentation
镜像命令
docker images 查看所有本地的主机上的镜像
docker images -q 只显示镜像的id
docker search 搜索镜像
docker search -s 30 tomcat 找STARS大于等于30的tomcat
可选项,通过收藏来过滤 --filter=STARS=3000 #搜索出来的镜像就是STARS大于3000的
docker pull 下载镜像
docker rmi -f 镜像id 删除指定镜像
docker rmi -f 镜像id 镜像id 删除多个镜像
docker rmi -f $(docker images -aq) 删除全部的镜像
容器命令
说明:我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习
docker pull centos
新建容器并启动
docker run [可选参数] image
#参数说明
- --name="Name" 容器名字
- -d 后台方式运行
- -it 使用交互方式运行,进入容器查看内容
- -P 指定容器的端口 -p 8080:8080(主机端口:容器端口)
- -p 随机端口
#测试: 启动并进入容器
docker run -it centos /bin/bash
docker ps 列出当前正在运行的容器
docker ps -a 列出当前正在运行的容器+带出历史运行过的容器
docker ps -a -n=? 显示上n次运行的容器
docker ps -aq 只显示容器编号
docker ps -l 显示最近创建的容器
退出容器:
exit 直接停止容器并退出
Ctrl + P + Q 容器不停止退出
删除容器:
docker rm 容器id 删除指定的容器,如需删除正在运行的容器 rm -f
docker rm -f $(docker ps -aq) 删除所有的容器
docker ps -a -q|xargs docker rm 删除所有的容器
docker kill 容器id 强制停止当前容器
常用其他命令:
后台启动容器
docker run -d 镜像名
问题:docker ps : 发现 centos 停止了
常见的坑: docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
ps -ef : 查看linux里的所有进程
docker top 容器ID 查看容器内运行的进程
docker inspect 容器ID 查看容器内部细节
从容器内拷贝文件到主机上 docker cp 容器ID:容器内路径 目的主机路径
查看日志
docker logs -f -t --tail 容器
Docker镜像底层原理
docker镜像实际上由一层一层的文件系统组成,这种层级的文件系统就叫UnionFS(联合文件系统)。
对于一个精简的os,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供rootfs就行了。对于linux的不同发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs。
docker commit提交容器副本使之成为一个新的镜像
docker commit -m="提交的信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
Docker容器数据卷
就是容器的持久化操作以及容器间数据的共享以及容器与宿主机间的数据共享。
添加数据卷:1、命令添加:docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
2、编写dockerfile文件,构建镜像docker build -f(f就是file,指明D ockerfile在哪儿) dockerfile所在路径 -t 新镜像名字:TAG .(表示当前目录)
3、运行
数据卷容器:
容器间传递共享:
docker run -it --name dc02 --volumes-from 要导入卷配置的容器名称 镜像名称(共享的主机目录是同一个)
DockerFile解析
DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
1、手动编写一个dockerfile文件,符合file的规范
2、有这个文件后,直接docker build命令执行,获得一个自定义的镜像
3、docker run
Dockerfile基础知识:
1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2、指令按照从上到下,顺序执行
3、#表示注释
4、每条指令都会创建一个新的镜像层,并对镜像进行提交
Docker执行Dockerfile的大致流程:
1、docker从基础镜像运行一个容器
2、执行一条指令并对容器作出修改
3、执行类似docker commit的操作提交一个新的镜像层
4、docker再基于刚提交的镜像运行一个新容器
5、执行dockerfile中的下一条指令直到所有指令都执行完成
Docker就相当于是软件的原材料,Docker镜像就相当于是软件的交付品,Docker容器就是软件的运行态。
DockerFile保留字指令:
1、FROM:基础镜像,当前新镜像是基于哪个镜像的
2、MAINTAINER:镜像维护着的姓名和邮箱地址
3、RUN:容器构建时需要运行的命令
4、EXPOSE:当前容器对外暴露出的端口
5、WORKDIR:指创建容器后,终端默认登陆进来的工作目录
6、ENV:用来在构建镜像过程中设置环境变量
7、 ADD(COPY+解压):将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
8、COPY:类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
9、VOLUME:容器数据卷
10、CMD:指定一个容器启动时要运行的命令
Dockerfile中可以有多个CMD指令,但只有最后一个生效(最后一个生效但是都会执行),CMD会被docker run之后的参数替换
11、ENTRYPOINT:指定一个容器启动时要运行的命令
ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数
ENTRYPOINT docker run之后不会替换,而是追加。
12、ONBUILD:当构建一个子(from 父镜像名)Dockerfile时,父镜像的dockerfile的onbuild被触发。