导图社区 Docker核心知识总结
Docker核心知识总结,Docker 基本操作 Dockerfile 编写 Docker mysql 部署 Docker redis集群 部署 Docker 自动化部署脚本
编辑于2021-08-13 19:51:07docker
容器:非常简易的linux环境
介绍
Docker是什么
是一种容器技术\解决
出现的原因
虚拟机占用资源特别大 启动慢传统的交换模式:只给程序,不给环境1、开发和运维之间的鸿沟2、减少运维的工作量
设计理念
解决了什么问题:运行环境和配置的问题,方便持续集成,有助于整体发布
能干什么
docker与传统虚拟机之间的差异虚拟机:虚拟了整套环境资源占用多,启动慢docker轻量:没有Hypervisor和操作系统,只有docker引擎
企业级
可以作为作为企业级别的容器技术
美团
京东
开发和运维
对开发和运维比较简单
获取
获取docker相关信息
www.docker.com
英文官网文档地址:https://docs.docker.com/get-started/
www.docker-cn.com
中文网站,解决英文网站访问慢的问题
仓库
hub.docker.com
docker 仓库地址国内访问速度比较慢,可以使用Ali云加速加速方式1、请求时制定镜像地址docker pull registry.docker-cn.com/library/ubuntu:16.042、启动docker守护进程时,添加--registry-mirror参数3、修改配置文件/etc/docker/daemon.json{ "registry-mirrors": ["https://registry.docker-cn.com"]}
架构
https://www.cnblogs.com/CloudMan6/p/6763789.htmlclientdocker服务器 (docker 守护进程)docker镜像docker容器 镜像运行的实例仓库 存放镜像的仓库,包含共有和私有运行过程当client 执行命令docker run nginx时,client发送socket消息给docker守护进程,docker守护进程先在本地看下有没有这个镜像存在,如果不存在就去远程仓库下载,然后保存到本地;然后通过 container run命令把这个镜像做成一个容器然后运行起来
安装
参考官方文档
安装社区版本就行centos 安装地址https://docs.docker.com/install/linux/docker-ce/centos/#os-requirements
配置仓库地址
组成
镜像
容器
仓库
命令
学习方法docker info docker相关的信息man dockerdocker --help
帮助命令
docker version
docker info
docker --help
镜像命令
什么镜像一个文件系统的某个目录什么时容器容器时镜像的实例,相当于镜像是一个类,容器是一个实例 ;每个镜像之间是隔离的容器是动态的,镜像是静态的
docker images
docker images --help 可以查看
-a 列出所有镜像
-q 只显示镜像ID
--digests:显示摘要信息
--no-trunc:不截断输出,显示完整的镜像ID
docker search 镜像名
starts 类似github上的starsofficial 是否官方
docker rmi 删除镜像
删除单个 docker rmi 镜像id/镜像名称
删除多个镜像 docker rmi id1 id2
删除全部镜像 docker rmi ${docker images -qa}
docker rmi `docker images -qa`$() ($+小括号)子shell命令
docker 运行命令
+ 创建容器+ 查看容器运行信息+ 启动容器+ 关闭容器
新建并运行
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS --name为容器指定新名称 -d 后台运行 -i交换方式运行 -t伪终端 -p端口映射 -P随机端口映射
docker ps status列中包含up,标识服务已经起来了
列出所有运行的容器
docker ps [options]
-a :所有正在运行和运行过的 -l: 显示最近创建的容器 -n:显示最近创建的n个容器 -q:只显示容器id
退出容器
exit / ctrl + d:退出并停止容器
待验证
ctrl+p+q:退出不停止容器
启动容器
docker start 容器id/名称
启动已经退出的容器
重启容器
docker restart 容器id/名称
停止容器
docker stop 容器id/名称
强制停止所有容器
docker kill 容器id/名称
删除容器
docker rm 容器id/名称
删除所有容器
docker rm -f $(docker ps -aq) docker ps -a -q | xargs docker rm
以后台方式运行容器
docker run -d 容器
不占用当前终端比如tomcat容器,有后台方式运行就不占用当前控制台
进入正在运行的容器,并以前台方式运行
docker exec -t 容器id/名称 bashshell 产生新的进程
-t 伪终端docker exec -it c600f5bdd5b0 /bin/bashdocker exec -it c600f5bdd5b0 bash
docker attach 容器id/名称 进入容器不产生新的进程
容器 <->拷贝文件<->主机
docker copy 容器id/名称:容器中路径 主机路径 docker copy 主机路径 容器id/名称:容器中路径
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
镜像
+ 文件和元数据的集合+ 镜像是分层的+ 不同的image可以共享相同的层+ 镜像本身是只读的
是什么
UnionFS(联合文件系统)
镜像加载原理
分层镜像
为什么采用这种设计
docker commit 镜像提交
docker commit -m="" -a="作者" 容器id 目标镜像名称:[标签名]
docker commit --helpdocker commit -m="create image from current container" -a="panshen" 3a90f19f1669 "tomcat2:2.0"用已经存在的容器做一个新的镜像
网络
单机
Bridge Network
Host Network
None Network
多机
Overlay Network
Dockerfile介绍
可以参考仓库中其他dockerfile文件的定义https://github.com/docker-library/tomcat/blob/f58a6b4236cfe10672c9505aab5024100c9e084d/9.0/jre8/Dockerfiledocker build [-f ...] 当前目录可以省略-f参数docker build -t mytomcat .
是什么
构建Docker镜像的构建文件
执行流程
关键字
FROM
基础镜像,当前镜像是基于那个镜像
MAINTAINER
镜像维护者的姓名和邮箱地址
RUN
镜像构建时需要运行的命令
WORKDIR
容器创建后,默认在那个目录
EXPOSE
当前容器对外暴露的接口
ENV
用来构建镜像时设置环境变量
ADD
将宿主机目录下的文件copy到镜像且ADD命令会自动解压压缩包
ADD 不能加压zip包
COPY
VOLUME
容器数据卷,用来保存和持久化
CMD
指定容器启动时需要运行的命令
多条CMD命令,只有最后一条生效
CMD命令会被docker run之后的参数替换
ENTRYPOINT
指定容器启动过程中需要运行的命令
把docker run命令的参数追加到后面
ONBUILD
数据卷
是什么
能干什么
数据卷
数据容器卷
从其他的容器中那数据卷
是什么
能干什么
日志系统存储(典型场景)
使用
docker run -it --name n1 --volumes-from n0 centos