docker是一个容器
1,docker三大要素
1, 镜像(images),镜像相当于一个模板,但镜像可以创建多个容器
2,容器(container),容器相当于一个简洁版的linux系统,容器是由镜像创建的一个实例
3,仓库(),就是存储镜像的地方
Persion psesion = new Persion();
容器 | 对象 |
镜像 | 类 |
2,docker查询信息命令
docker version
docker info
docker --help
docker 镜像命令 (镜像就是千层饼)
docker images 查看当前本地镜像(images)
-a 所有 例:docker images -a
-q 查看当前镜像全部镜像的id
-digests 显示镜像的摘要信息
-no-trunc 显示当前镜像完整的信息
docker search 查询 (镜像的名称) docker -s 30 search 查询大于3的
docker pull 下载( 镜像的名称) docker pull tomcat:latest 最新版 docker pull tomcat:8.0 版本
docker rmi -f 删除(镜像的名称)docker rmi tomcat:8.0
docker 容器命令
创建并启动容器:docker run [options] image [command] [arg]
oprions:
--name=“name” "为容器起一个别名"
-d 后台运行容器,并守护该容器
-i 以交互模式运行容器,通常与 -t 一起使用
-t 为容器重新分配一个伪终端,通常与 -i 一起
-P 随机端口映射
-p 指定端口映射,有四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
列出当前所有正在启动的容器:
docker ps 【opyions】查看正在运行的容器
-a 列出当前所有正在运行的容器+历史上运行过的
-l 显示最近创建的容器
-n 显示最近n个创建的容器 docker ps -n 2
-q 静默模式,只显示容器编号
--no-trunc 不截断输出
退出容器 两种方法
exit 容器停止退出
ctrl + p + Q 容器不停止退出
启动容器
docker start 容器ID或者容器名
重启容器
docker restart 容器ID或者容器名
停止容器
docker stop 容器ID或者容器名
强制停止容器 (区别一个快速一个慢慢的关闭)
docker kill 容器ID或者容器名
删除已经停止的容器
docker rm 容器ID或者容器名
docker rm -f $(docker ps -q) 删除所有容器
启动守护式容器 docker run -d 容器名
查看容器日志 docker log -f -t --tail 容器id
查看docker进程 docker top 容器id
查看容器内部细节 docker inspect 容器id
进入正在运行额容器并以命令行交互
docker exec it 容器id /bin/bash
重新进入docker attach 容器Id
从容器内拷贝文件到主机上
docker cp 容器Id:容器内路径 目的主机路径
docker run -d centos 后台模式创建并启动一个容器(非交互式(it 交互式并有伪终端))
问题:通过docker ps -a 进行查看,会发现容器已经退出了
很重要说明:Docker容器后台运行,就必须有一个前台进程
容器运行的命令如果不是那些一直挂起的命令就会自动的退出
这个是docker的机制问题,比如你的web容器,我们一nginx为例,
docker镜像:
联合文件系统相当于千层饼,鸡蛋为例鸡蛋壳是镜像里面是容器层(容器层可以包括jdk,tomcat)
docker镜像的commit操作
docker commit提交容器副本生成一个新的镜像
docker commit -m="提交信息描述" -a="作者" 容器ID 要创建目标镜像名称:【标签名版本】
docker容器数据卷:
是什么:类似redis里面的持久化
能干嘛:容器持久化,容器之间继承+共享
数据卷:
直接命令添加:
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
用docker inspect 容器id 查看是否挂载成功
容器和宿主机之间数据在共享
容器停止退出后,主机修改后数据是否同步(答:完全同步 )
dockerFile添加:
vim dockerfile
# volume test
FROM centos
VOLUME ["/data1","/data2"]
CMD echo "finished,----succsss1"
CMD /bin/bash
#要操作centos
#在centos根目录里面新建两个容器卷
# 打出一句话
#可以理解成这样 docker run -it -v /host1:/data1-v /host2:/data2centos /bin/bash
执行命令:docker build -f dockerfile路径 it tag/镜像 . (构建并生成新的镜像)
注意: 后面有一点.
通过docker inspect 容器id查看"Mounts"的Source,宿主机到容器容器到宿主机之间的数据共享
数据卷容器:
是什么:举例,活动硬盘上挂活动硬盘实现数据共享,数据传递依赖
容器间传递共享 (--volumes-from)
docker run -it --name 当前镜像名称 -- volumes-from 已经创建的镜像名称 镜像
DockerFile解析(重要):
DockerFile是用来构建docker镜像的构建文件,由一些参数和命令构建的脚本
步骤:
1,编写DockerFile文件
1,构建Docker build
1,run运行
保留字指令:
FORM 基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER 镜像维护者的姓名和邮箱地址
RUN 容器构建时需要运行的命令
EXPOSE 当前容器对外暴露出的端口
WORKDIR 指定在穿件容器后,在终端默认登录进来的工作目录,一个落脚点
ENV 用来构建镜像过程中设置环境变量
ADD 将宿主机目录下的文件拷贝到镜像中,会自动处理url和解压tar压缩包
COPY 将宿主机目录下的文件拷贝到镜像中
VOLUME 容器数据卷,用于数据保存和持久化工作
CMD 指定一个容器启动时要运行的命令,dockerFile中可以有多个cmd命令,但只有最后一个生效,
ENTRYPOINT 指定一个容器启动时要运行的命令,和cmd一样,都是在指定容器启动程序及参数
ONBUILD 当构建一个被继承的的DockerFIle时运行命令,父镜像在被子继承后父镜像的onbulid被触发
#删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)
sudo docker rm $(sudo docker ps -a -q)