Docker
Docker 简介
这部分网络上有太多的讲述,我就不在赘述了。需要了解的是,docker 有几个重要的组成部分:镜像(image)、容器(container)、仓库(registry)。镜像就像是一个模板,它记录你的base镜像,添加的组件功能;容器就是镜像的一个运行时状态,它是docker 依据镜像进行创建的一个实例,执行具体的功能;仓库就是存放镜像的地方。
Docker常用命令
查看信息
docker version // 查看版本信息
docker info // 查看详细信息
docker --help // 查看帮助
docker instpect containerID/imageID // 查看详细信息
查询
docker search imageName; // 查找指定名称的镜像,如果没有配置国内镜像源,这个默认查询dockerHub
docker search -s 30 tomcat; // -s 收藏数
docker search --no-trunc tomcat; // --no-trunc 完整镜像信息
docker search --automated tomcat; // --automated 自动转载属性
// 列表中的 official 属性代表是否是官方版本
拉取
docker pull imageName:targ // iamgeName 想要拉取的镜像名;targ 目标镜像版本,如果不写默认latest最新版
创建镜像
docker commit -a author -m message containerID imageName:targ; // -a 作者;-m 备注信息;containerID 准备上传的容器ID;imageName 创建的镜像名称;targ 镜像版本;
// imageName 如果是自己的私人镜像可以通过添加前缀进行区分, prefix/imageName
// targ 自己指定这个镜像的版本,用于区分。
推送至仓库
docker push registryPath/imageName:targ // Push 到指定的仓库地址
查看本地镜像信息
docker images // 查看本地镜像信息
docker images -a // -a 全部镜像信息(包括中间层镜像)
docker images -q // -q 只显示镜像ID
docker images --digests // --digests 显示摘要信息
docker images --no-trunc // --on-trunc 显示完整的镜像信息
删除容器
docker rm containerID; // 删除容器
docker rm -f containerID; // 强制删除容器
docker rm -f $(docker ps -a -q); // 删除全部容器,$() 可以将括号内的执行结果赋值给外面的语句使用
docker ps -a -q | xargs docker rm; // 删除全部容器, | 管道符,xargs 自行参数,将前面语句的执行结果赋值后面的语句执行
删除镜像
docker rmi imageID/imageName:targ // 删除指定镜像
docker rmi -f imageID/imageName:targ // 强制删除指定镜像
docker rmi -f $(docker images -qa) // 删除全部镜像
容器操作
docker start containerID/containerName // 启动指定容器
docker restart containerID/containerName // 重启指定容器
docker stop containerID/containerName // 停止指定容器
docker kill containerID/containerName // 强制停止指定容器
docker top containerID/containerName // 容器内进程信息
docker attach containerID/containerName // 进入容器内部
docker exec containerID/containerName COMMAND // 在容器内执行 COMMAND 命令,输出到宿主机
docker cp containerID:path hostPath // 从容器中copy到主机中,这个顺序可以互换,作用就是从前一个地址复制到后一个地址
docker container ls // 查看容器列表
// 以上命令通过 docker container 命令也同样可用
docker日志查看
docker logs -f -t --tail 8 // -f 跟随最近日志打印;-t 加入时间戳;--tail num 显示最后num条
启动容器
docker run imageID/imageName // 运行指定镜像
docker run -i -t imageID/imageName // -i 以交互模式运行;-t 重新分配一个终端;
// 以 -it 进如交互式界面之后退出方法:# exit 关闭容器并退出;# ctrl+P+Q 推出交互界面
docker run -d imageID/imageName // -d 后台运行,守护式容器
docker run -p 1234:8080 imageID/imageName // -p 宿主机:容器 端口映射,可以有多个
docker run -P imageID/imageName // -P 自动端口映射
docker run -e MYSQL_ROOT_PASSWORD=123456 mysql // -e 添加一个运行变量
docker run --name name iamgeID/imageName // --name 自定义容器名称,如果不设定,默认自动配置
docker run -v /home/temp:/temp imageID/imageName // -v VOLUME 挂载卷的映射
ps
docker ps // docker 正在运行的container
docker ps -a // -a 所有的,包括历史
docker ps -l // -l 上一个container
docker ps -n 2 // -n num 展示最近的num 个
docker ps -q // -q 只展示容器ID
docker ps --no-trunc // 不截断输出
通过dockerFile 创建镜像
docker build -f /temp/dockerFile -t imageName:targ . // 通过指定的dockerFile 创建镜像;-f 指定文件路径,如果在当前目录下可以不用加这个参数;-t 指定镜像名称;末尾的 “ .” 指定在当前目录下执行
容器数据卷
容器数据卷的目的是:数据的持久化,独立于容器自身的生存周期。
特点:
- 多容器共享、重用数据
- 卷中更改直接生效
- 卷中数据的修改不会包含进镜像的更新中
- 卷的生命周期一直到没有容器使用它为止
docker run -v /temp:/temp:ro imageID // 挂载容器中的temp目录在宿主机的temp下,容器内的路径必须是真实存在的,宿主机的路径如果没有会自动创建。 :ro read-only 容器内文件只读属性
// 如果目标容器内有指定多个VLUME路径,通过多个 -v 进行挂载
卸载
systemctl stop docker // 停止服务
yum -y remove docker-ce // 卸载 docker-ce
rm -rf /var/lib/docker // 移除目录文件
dockerFile
dockerFile 是 docker 在创建一个容器时的执行文件,docker 会按照这个文件创建一个容器实例。
dockerFile 保留字指令
FROM // base镜像
MAINTAINER // 镜像维护者信息
RUN // 构建时运行的指令
EXPOSE // 容器对外暴露的端口
WORKDIR // 容器默认的工作的目录
ENV // 构建中的环境变量
ADD // 复制并解压文件
COPY // 复制文件
VOLUME // 挂载卷信息
CMD // 指定一个容器启动时的运行命令,可以有多个,但只有最后一个生效,docker run 命令后的参数也是 CMD 命令
ENTRYPOINT // 同上,不同之处在于,多个命令会进行追加执行
ONBUILD // 继承触发器,当这个镜像被FROM时,会触发该命令后的指令
dockerFile 文件的编写,遵循简单的从上到下的执行顺序,具体的编写语法可以参考网上的其他资料或者dockerHub上的官方镜像的dockeFile。