docker 三要素:
镜像(images):
只读模板,用于创建docker容器。一个镜像可以创建多个容器
容器(container):
独立运行的一个或一组应用。是用镜像创建的运行实例,每个容器都是相互隔离的。
仓库:
集中存放镜像文件的地方。仓库分为公开仓库和私有仓库
最大公开仓库:Docker Hub https://hub.docker.com
仓库和仓库注册服务器的区别:
仓库注册服务器:放置多个仓库,每个仓库中包含多个镜像,每个镜像有不同的标签。
阿里云镜像加速:
进入阿里云容器镜像服务中的镜像加速器,选择相应的系统。复制加速地址。
设置本机docker加速配置:
1. vim /etc/docker/daemon.json
2.把阿里云中的配置案例复制下来,修改其中的配置信息:
例如:
{
"registry-mirrors": ["复制的个人加速地址"]
}
3.重新加载:systemctl daemon-reload
4.重启docker:systemctl restart docker
5.查看docker在本机的进程信息:ps -ef|grep docker
docker命令:
帮助命令:
docker version
说明:
查看docker版本
docker info
说明:
查看docker信息
docker --help
说明:
查看docker的帮助
镜像命令:
docker images
说明:
查看本地所有镜像
PEPOSITORY:镜像仓库源
TAG:镜像标签
IMAGE ID:镜像id
CREATE:镜像创建时间
SIZE:镜像大小
参数:
-a:列出班底所有镜像(包括中间映像层)
-q:只显示镜像ID
--digests:显示镜像的摘要信息
--no-trunc:显示完整镜像信息
docker search [参数] 镜像名
说明:
查询镜像
参数:
-s:收藏数不小于指定值的镜像
--automated:只列出automated build类型的镜像
--no-trunc:显示完整镜像信息
docker push 镜像名[:TAG]
说明:
下载镜像
参数:
-s:收藏数不小于指定值的镜像
--automated:只列出automated build类型的镜像
--no-trunc:显示完整镜像信息
docker rmi [参数] 镜像名1[:TAG] 镜像名2[:TAG]...
说明:
删除一个或多个镜像
参数:
-f:强制删除
docker rmi [参数] $(docker images -qa)
说明:
删除全部镜像
参数:
-f:强制删除
docker
组成:
docker client 客户端
docker daemon 守护进程
docker image 镜像
docker container 容器
基本操作:
docker inspect 镜像名
说明:
查看镜像名的配置
docker start [-i] 镜像名
说明:
启动镜像,-i参数是以交互式启动
docker attach 镜像名
说明:
进入正在运行的镜像
netstat -anp |grep 端口号
说明:
查看端口占用
守护式进程:
运行:
docker run -i -t 镜像名 /bin/bash
ctrl+p ctrl+q 退出交互式容器,但后台还继续运行
查看运行镜像中的进程:
docker top 镜像名
在运行的镜像中启动新进程:
docker exec [-d] [-i] [-t] 镜像名 [command] [arg....]
停止守护容器:
docker stop 镜像名
docker kill 镜像名
容器端口映射:
docker run [-P|-p] -i -t 镜像名
-P:publish-all=true | false (默认) 暴露所有端口
-p:publish=[] 指定端口映射
格式:
1.指定容器端口:
docker run -p 端口号 -i -t 镜像名 /bin/bash
2.主机端口:容器端口
docker run -p 主机端口:容器端口 -i -t 镜像名 /bin/bash
3.ip地址::容器端口
docker run -p ip地址::容器端口 -i -t 镜像名 /bin/bash
4.ip地址:主机端口:容器端口
docker run -p ip地址:主机端口:容器端口 -i -t 镜像名 /bin/bash
docker run [参数] 镜像名 [command] [arg...]
说明:
option:
--name="容器新名字" :为容器指定一个名称
-d:后台运行容器,并返回容器id,启动守护式容器(ps -a 查不出 此类的)
-i:以交互式模式运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端,通常与-i使用
-P(大写):随机端口映射,通常与-t使用
-p(小写):指定端口映射,有以下四种方式:
1. ip:主机端口 容器端口
2. ip:容器端口
3. 主机端口:容器端口
4. 容器端口
Ctrl p + q:退出容器,但后台继续运行容器
eixt:退出容器,容器停止运行
docker kill 容器名称
说明:
强制停止容器的运行
docker logs -f -t --tail 容器id
说明:
查看容器运行日志
-f:跟随最新的日志打印
-t:加入时间戳
--tail:数字,显示最后多少条
docker top 容器id
说明:
查看容器内运行的进程
docker inspect 容器id
说明:
查看容器内部细节
docker attach 容器id
说明:
直接进入容器启动命令的终端,不会启动新的进程
docker exec -it 容器id bashshell
说明:
在容器中打开新的终端,并启动新的进程
docker cp 容器id:容器内路径 目的主机的路径
说明:
从容器中拷贝文件到主机上
docker镜像
联合文件系统:
分层,轻量级高性能的文件系统,对文件系统的修改作为一次提交来一层层的叠加
特性:
一次同时加载多个文件系统
镜像都是只读的
docker commit [参数] 镜像id 要创建的目标镜像名:[标签名]
说明:
提交容器副本使之成为一个新的镜像
参数:
-m:提交的描述信息
-a:作者
例如:
docker commit -a="zhangxiaosan" -m="it is tomcat which is haven't doct" e9bd0c5f0a37 zhangxiaosan/tomcat:9
docker容器数据卷
做数据持久化+容器数据共享
直接命令添加主机和容器文件夹绑定
docker run -it -v /主机绝对路径目录:/容器内目录:[权限] 镜像名
权限:
ro:read only 只读
wo:wirte only 只写
dockerFile
镜像的构建文件,是由命令和参数组成的脚本
构建镜像
docker build -f Dockerfile所在目录 -t 构建的镜像标识/构建的镜像名
例如:
docker build -f /mydocker/Dockerfile -t zhangxiaosan/myDockerfileDemo1
dockerFile解析过程:
注意:
1.每条保留字指令必须为大写且之后跟有至少一个参数
2.指令从上往下顺序执行
3.#表示注解
4.每条指令都会创建一个新的镜像层,并对镜像进行提交
过程:
1.docker从基础镜像运行一个容器
2.执行一条指令并对容器进行修改
3.执行类似的docker commit 的操作提交一个新的镜像层
4.docker再基于刚提交的镜像运行一个新的容器
5.执行dockerFile中的下一条指令,直到所有的指令都执行完成
dockerFile保留字指令:
FROM:
基础镜像,当前新的镜像是基于哪个镜像
MAINTAINER:
镜像维护者的姓名和邮箱
RUN:
容器构建时需要运行的命令
EXPOSE:
当前容器暴露的端口号
WORKDIR:
指定容器创建后,终端登录进来的工作目录,未指定时工作目录为根目录
ENV:
用来在构建镜像过程中设计的环境变量
ADD:
将宿主机目录下的文件拷贝到镜像,且ADD命令会自动处理URL和解压tar压缩包
COPY:
类似ADD,拷贝镜像或目录到镜像中。
将从构建上下文目录中<源路径>的文件或目录复制到新一层的镜像内<目标路径>的位置
用法:
方式1.COPY src dest
方式2.COPY ["src","dest"]
VOLUME:
容器数据卷,用于保存数据和持久化工作
CMD:
指定一个容器启动时需要运行的命令。
Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后的参数替换
ENTRYPOINT:
指定一个容器启动时需要运行的命令。
与CMD类似,可以有多个,但是不会像CDM会被docker run 之后的参数替换,而是被追加。
ONBUILD:
当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承之后父镜像的ONBUILD被触发
构建自定义的DockerFile镜像
docker build -f DockerFile路径 -t 新镜像名:标签版本 .
说明:
末尾的点 . 代表当前的路径
例如:docker build -f DockerFile_MyCenterOS -t mycenteros:1.0 .
案例1:
自定义centeros
dockerfile(DockerFile_MyCenterOS):
FROM centos
#设置环境变量
ENV MYPATH /tmp
#设置默认工作目录
WORKDIR $MYPATH
#运行安装vim和net-tools
RUN yum -y install vim
RUN yum -y install net-tools
#暴露端口
EXPOSE 80
CMD bin/bash
容器间数据共享
docker run -it -name 容器1别名 --volumes-from -name 容器2别名 容器2
实现数据共享,
例如:
容器2,3继承容器1
删除容器1,容器2,3数据依然存在,且容器2,3数据依然共享