docker概述
docker为什么出现
一款产品:开发->上线 需要环境部署和应用配置,会出现本地运行没问题上线有问题,版本更新导致发布有问题
发布项目:以前发布一个jar(需要redis,es,Hadoop等环境),不能跨平台,那么项目能不能带着环境打包。
docker针对以上问题提出了解决方案
一个app项目:java开发->打包成apk->发布到应用商店->下载安装即可
java开发->jar(加环境)->打包项目带上环境(镜像)->发布docker仓库(类似商店)->下载安装即可
docker的思想来自于集装箱
隔离:docker的核心思想,打包装箱,每个箱子相互隔离
docker能干嘛
虚拟机技术
缺点:1.资源占用多,2.冗余步骤多,3.启动慢
容器化技术
比较docker和虚拟机的不同
- 传统虚拟机,虚拟出一套硬件,运行一个完整的操作系统,在这个操作系统上安装运行软件
- 容器内的应用直接运行在宿主机的内核,容器没有自己的内核也没有虚拟我们的硬件,轻便
- 每个容器间是相互隔离的,互不影响
docker安装
docker的基本组成
镜像(image):好比一个模板,可以通过这个模板来创建容器服务。比如tomcat镜像->run->tomcat1容器
通过镜像可以创建多个容器服务,最终的项目运行就是在容器中
容器(container):docker利用容器技术可独立运行一个或一组应用,通过镜像创建。可将容器理解为一个简易的linux系统
仓库(repository):存放镜像的地方
配置镜像加速
安装
安装环境
系统内核3.10以上centos(uname -r命令查看)
安装步骤(来自帮助文档)
- 卸载旧版本: yum remove docker
- 需要的安装包:yum install -y yum-utils
- 设置镜像仓库,阿里云仓库
- 安装docker相关的引擎 docker-ce社区版 ee企业版
yum install docker-ce docker-ce -cli containerd.io
- 开机自启动docker systemctl start docker
- 检查docker是否安装成功 docker version
- 运行docker docker run hello-word
- 查看下载的hello-word镜像是否存在 docker images
- 卸载docker 1.yum remove docker-ce docker-ce -cli containerd.io,2.rm -rf /var/lib/docker(docker的默认工作路径)
阿里云镜像加速
1.登录阿里云服务器,找到容器服务
2.找到镜像加速地址
3.配置使用
docker run的流程和docker原理
run的流程原理
底层原理
docker是怎么工作的?
docker是一个client-sever结构的系统,docker的守护进程运行在一个主机上,通过socket从客户端访问,dockerserver接收到dockerclient的指令,就会执行指令
DOCKER的常用命令
https://docs.docker.com/reference/
帮助命令
docker version #docker的版本信息
docker info #docker的系统信息,包括镜像和容器的数量
docker --help #查看docker的常用命令
镜像命令
查看命令
docker images #查看本机上所有的镜像
docker images --help #获取docker镜像的帮助命令
下载镜像
docker pull mysql[:tag] 下载MySQL镜像(默认下载最新版本,可通过tag指定版本)
删除镜像
docker rmi -f 镜像id
docker rmi -f ${docker images -a}
容器命令
有了镜像才可以创建容器
docker pull centos #下载一个centos的镜像
新建容器并启动
docker run [可选参数] image
#参数说明
--name="name" 容器名字,Tomcat1 Tomcat2
-d 后台方式运行
-it 交互运行方式启动
常见的坑
- 后台运行docker
docker run -d 镜像名(centos)后台运行一个docker时,使用docker ps时发现centos停止了。容器启动后发现没有提供服务,就会自己停止,就没有程序了
- 查看日志
docker -tf tail 10 镜像id :显示日志
列出所有运行的容器
docker ps #正在运行的容器
docker ps -a #历史运行过容器
退出容器
exit #容器停止并退出
ctrl+P+q #容器不停止退出
删除容器
docker rm 容器id #删除指定容器,不能删除正在运行的容器
docker rm -f ${docker ps -aq } #删除所有容器
docker ps -a -q|xargs docker rm #删除所有容器
进入当前正在运行的容器,两种方式
1.docker exec -it 容器id /bin/bash-->进入容器后开起一个新的终端,可以在里面操作
2.docker attach 容器id /bin/bash-->进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件到主机
docker cp 容器id:容器内路径 目的的主机路径