1.docker三大概念
容器,镜像,仓库
仓库:存放镜像
镜像:相当于类,模板
容器:镜像的实例
2.安装
看中国docker文档,菜鸟教程
修改配置文件:镜像源改为阿里云或者网易云(比较快)
3.docker与虚拟机的区别
4.常用命令
帮助命令
docker info
docker --help
镜像命令
docker images 当前主机上的镜像
PEPOSITORY:镜像的仓库源
TAG: 镜像标签
IMAGE ID:镜像ID
CREATE:镜像创建时间
SIZE:镜像大小
# 以下参数可以一起用
docker images -a all全部(镜像会分层)
docker images -q 查询镜像ID
docker images --digests 说明
docker images --no--trunc 显示完整信息
docker search 镜像名字 查找镜像(docker hub)
docker search -s 30 tomcat 查找星数超过30的
docker search -s 30 --no-trunc tomcat 完整版说明
docker search --automated 列出AUTOMATED参数ok的
docker pull 镜像 下载镜像(默认:latest, 最新版本)
docker rmi tomcat(:latest) 删除镜像 默认最新版本
docker rmi -f tomcat 强制删除
docker rmi -f hello-world ngaix 删除多个 镜像之间加空格
docker -rmi -f (docker images -qa) 批量删除
容器命令
docker run [options] 镜像 实例化容器并启动(从镜像中实例出来)
-it 虚拟化出新的终端并进入
-i 以交互模式运行容器,通常与-t只用
-t 为容器重修分配一个伪输入终端,通常与-i使用
--name 为容器指定一个名称
-d 后台运行(启动之后变退出,因为没前台交互)
docker run -d centos /bin/sh -c 'while true;do echo hello;sleep2;done'
-p 指定端口
docker run -it -p 8888:8080 tomcat 指定端口:里面容器端口 镜像
-d -p 后台启动
-P docker run -P tomcat 随机分配端口:里面容器端口
exit ---> 关闭容器并退出
ctrl+p+q ---> 不关闭容器退出交互终端
docker attach 容器id (/bin/bash 可以不写)---> 查看后台执行的容器并重新进入终端
docker exec -t 容器id 命令(ls - l /tmp)---> 不进入容器内,返回命令在容器内的运行结果
命令那写着 /bin/bash 那么同docker attach
docker cp 容器id:文件路径 宿主机路径 ---> 拷贝容器中文件到宿主机
docker top 容器id ---> 查看容器内运行的进程
docker inspect 容器id ---> 查看容器内的细节 返回的json串
docker logs 容器id ---> 打印日志
-t 显示时间
-f 不停追加,持续看
--tail num 查看最后几条
docker start id或者名字 ---> 启动容器
docker stop id或者名字 ---> 关闭容器
docker kill id或者名字 ---> 强制停止
docker rm id ---> 删除已经停止的容器
-f 强制删除容器,可以是运行中
一次性删除多个容器
docker rm -f$(docker ps -a -q)
docker ps -a -p|xargs docker rm
docker restart ---> 重启容器
docker ps [options] ---> 目前跑着的容器
-l 上次运行的容器
-a 全部运行及过往运行的容器
- n num值 最近三次运行的容器
-q 只显示容器编号
--no-trunc 不截断输出
docker commit -a='作者' -m='说明' 容器id 命名空间/镜像名字:版本
5.关系图
6.镜像的原理
联合文件系统, Union文件系统是镜像的基础。基础镜像上叠加
好处:共享资源,多个镜像假如都从相同的base镜像构建而来,那么宿主机只需要在磁盘上保存一份base镜像
7.数据卷(类似中主机虚拟机共享目录)
目的:持久化保存,数据共享
命令添加
docker run -it -v /宿主机绝对路径:/容器内路径 镜像名
容器内权限为可读可写
docker run -it -v /宿主机绝对路径:/容器内路径:ro 镜像名
容器内权限为只读
dockerfile
创建Dockerfile文件
FROM centos
VOLUME['/dataVolumeContainer', '/dataVolumeContainer2']
CMD echo 'success'
CMD /bin/bash
docker build(创建新的镜像)
docker build -f dockerfile路径 -t 命名
docker build -f /mydocker/Dockerfile -t /llxx/centos
docker run id (/llxx/centos的id)
docker inspect id (/llxx/centos的id) 找到宿主机的默认目录
8.dockerfile
基础知识
每条保留字指令必须大写且后边至少要跟随一个参数
指令从上到下,顺序执行
# 表示注释
每条指令都会创建一个新的镜像层文件,并对镜像进行提交
执行过程
docker从基础镜像运行一个容器
执行一条指令并对容器作出修改
执行类似docker commit的操作提交一个新的镜像层
docker再基于刚提交的镜像运行一个新容器
执行dockerfile中的下一条指令直到所有指令执行完成
保留关键字
FROM base镜像
MAINRAINER 镜像维护者的姓名和邮箱地址
RUN 容器构建时需要运行的命令
EXPOSE 对外端口
WORKDIR 指定创建容器后,终端默认登陆的进来工作目录,一个落脚点(默认/)
ENV 用来在构建镜像过程中设置环境变量
ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和加压tar解压包
COPY 类似ADD,拷贝文件和目录到镜像中
VOLUME 容器数据卷,用于数据保存和持久化工作
CMD 指定一个容器启动时运行的命令
可以指定多个CMD,只有最后一个生效,CMD会被docker run之后的参数替换调
ENTRYPOINT 指定一个容器启动时的命令
目的和CMD一样,都是在指定容器启动程序及参数
ONBUILD 当构建一个被继承Dockerfile运行命令,父镜像在被子进程继承后父镜像的onbuild被触发