大神"狂神说"免费学习路径:https://www.kuangstudy.com/course
1.docker与vm差异
1.1环境优点
vm虚拟机,虚拟出一整个硬件,运营一个完成的操作系统,然后这个系统上安装和运行软件
docker容器内的应用直接运行在宿主的内容,容器是没有自己的内核的(用服务器内核),每个容器间是相互隔离的,每个容器内都有一个属于自己的文件系统,互不影响
1.2部署优点
应用更快速的交付和部署
传统部署环境:一堆帮助文档,安装程序
Docker优点:
打包镜像发布,一键完成
更便捷的升级和扩缩容
更简单的系统运维:容器化之后,开发,测试环境都是高度一致的
更高效的计算资源利用
1.3Docker为什么比Vm快
1.Docker有着比虚拟机更少的抽象层,由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在Cpu、内存利用率上Docker将会在效率上有明显优势。
2.Docker利用的是宿主机的内核,而不需要Guest OS,因此,当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统,避免了引导、加载操作系统内核这个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的,而Docker由于直接利用宿主机的操作系统则省略了这个过程,因此新建一个Docker容器只需要几秒钟。
2.docker基本概念
镜像(image):好比是一个模板,可以通过这个模板创建容器服务,tomcat镜像===>run===>tomcat1容器(提供服务),通过这个镜像可以创建多个容器(最终服务运行或项目运行就是在容器中的).
容器(container):docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的,启动,停止,删除,基本命令;目前就可以把容器理解为就是一个简易的linux系统
仓库(repository):
仓库是放镜像的地方
仓库分为共有仓库和私有仓库
Docker Hub(默认是国外的访问慢)
阿里云,华为云…都有容器服务(配置镜像加速!)
3.docker安装
3.1前置准备
https://docs.docker.com/engine/install/centos/ #官方文档地址
环境准备:
1.需要linux基础
2.linux服务器
3.xshell连接工具
环境查看
uname -r
当前内核是3.10以上的,(要求3.0以上)
系统版本centos7(要求7以上),其他系统在官方文档查找
cat /etc/os-release #查看当前系统
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
3.2安装
3.2.1.卸载docker旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
3.2.2.安装依赖包
sudo yum install -y yum-utils
3.2.3.安装镜像
#国外的地址不推荐太慢了
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
百度搜索”阿里云docker的镜像地址”,推荐使用阿里云的,快
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新yum软件包索引(非必须)
yum makecache fast
3.2.4.安装docker相关的引擎
docker-ce社区版(推荐) ee企业版
#默认安装最新版
sudo yum install docker-ce docker-ce-cli containerd.io
#指定版本安装
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
3.2.5.启动docker
sudo systemctl start docker
3.2.6.验证是否安装成功
#查看docker是否正确安装
docker version
通过运行hello-world 映像验证 Docker Engine 是否已正确安装
sudo docker run hello-world
3.2.7.查看下载的镜像
docker images
3.3.8.卸载docker(了解)
1.卸载依赖
sudo yum remove docker-ce docker-ce-cli containerd.io
2.删除资源(/var/lib/docker 默认资源路径)
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
3.2.9.阿里云镜像加速
登录阿里云===>>控制台===>>产品与服务===>>>弹性计算===>>容器镜像服务
找到加速配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ebl1n6t6.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
命令分析
创建目录
sudo mkdir -p /etc/docker
修改配置(用自己阿里云的加速地址,使用他人的容易失效)
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ebl1n6t6.mirror.aliyuncs.com"]
}
EOF
重新加载配置文件
sudo systemctl daemon-reload
启动
sudo systemctl restart docker
4.Run的流程和Docker使用原理
回顾hello word流程
run一个不存在的镜像时,他会去仓库里找,找不到后返回镜像不存在
Docker是如何工作的
Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问
DockerServer接收到Docker-Client的指令,就会执行这个命令!
5.常用命令
5.1帮助命令
docker version #显示docker的版本信息
docker info #docker的系统信息包括镜像和容器的数量
docker 命令 --help
官方帮助文档: https://docs.docker.com/engine/reference/run/
5.2镜像命令
5.2.1查看镜像
docker images -a #列出所有镜像
docker images -q #只显示镜像的id
docker images -aq #显示所有镜像的id
docker images 查看所有本地主机上的镜像
展示字段分析
repository:镜像的仓库源,下载运行都用这个名称
TAG:镜像的标签
IMAGE ID:镜像的id
CREATED:镜像的创建时间
SIZE:镜像的大小
5.2.2搜索下载镜像
docker search 镜像名称
搜索过滤(了解)
举例:搜过并过滤收藏大于5000的mysql镜像
docker search mysql --filter=STARS=5000
5.2.3下载镜像
docker pull 镜像名[:tag]
如果不写tag,默认下载最新的版本
docker pull mysql
docker pull mysql:5.7
指定版本下载,版本号必须是官方库里有的
分层下载:docker的高明之处,之前下载了最新的,再次下载5.7版本的时候,重复文件不会再进行下载
下载镜像后查看,有版本号的显示版本号,最新版本的显示latest
5.2.4删除镜像
docker rmi -f 镜像id/名称 一般采用id删除
docker rmi -f 镜像id 空格 镜像id 空格 镜像id 一次删除多个镜像
docker rmi -f ${docker images -aq} 删除所有镜像
5.3容器命令
说明:我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习
docker pull centos
5.3.1新建容器并启动
docker run [可选参数] image
#参数说明
**–name=”Name”**容器名字,如tomcat1,tomcat2,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -P 8080:8080映射容器端口
举例:
docker run -it centos /bin/bash
docker run -it --name cenos000000 id
/bin/bash意思是指定控制台路径默认为/bin/bash
退出命令(从容器内部退出)
exit容器停止并退出
Ctrl+p+Q (ctrl+p+shift+q) q要大写,容器不停止退出
后台运行并指定容器名称
docker run -d --name="centos001" centos /bin/bash
常见坑
docker run -d centos 后台启动命令
启动后用docker ps查看容器,发现没有在运行,因为-d是后台运行命令需要前台进程支持,后台运行的时候因为centos内没有任何启动的应用,所以自动停掉;
再比如nginx启动后发现自己没有提供服务就会自动挂掉
5.3.2查看容器
docker ps 查看运行中的容器
docker ps -a 查看正在运行过的容器加历史运行过的容器
docker ps -n=? 显示最近运行的?个容器,?为数字
docker ps -q 只显示正在运行容器的编号
5.3.3删除容器
docker rm 容器id 指定删除,无法删除运行中的容器
docker ps -a -q|xargs docker rm 全部删除
5.3.4启停容器
docker start容器id 启动
docker restart容器id 重启
docker stop 容器id 停止
docker kill 容器id 强制停止,在stop报错后使用
5.3.5查看容器日志
当前centos内无进程,人工模拟日志
docker run -d centos /bin/sh -c "while true;do echo 6666;sleep 1;done"
显示日志
-t #表示时间戳
-f #为动态打印
-tf #显示时间戳格式日志,持续更新(常用)
docker logs -tf 容器id
–tail ? #显示指定行数日志
docker logs -tf --tail 10 容器id
查看容器内的进程信息
docker top 容器id
5.3.6查看容器的镜像
docker inspect 容器id
5.3.7进入当前正在运行的容器
通常容器采用后才运行的方式,但有时候我们需要进去修改一些配置
方式一:
docker exec -it 容器id bashShell(默认的命令行) -it以交互模式运行
docker exec -it 3b56de072c69 /bin/bash
方式二:
docker attch 容器id
docker attach 3b56de072c69
区别:
docker exec #进入容器后开启一个新的终端,可以在里面操作
docker attach #进入容器正在执行的终端,不会启动新的进程
5.3.8从容器内拷贝文件到主机上面
docker cp 容器id:容器内路径 本机路径
进入容器内,创建个文件test.sh,退出容器
查看本机home下是没有这个文件的
复制容器文件,复制命令不受容器状态影响,就算容器已经停止运行也可以复制文件
docker cp 3b56de072c69:/home/test.sh /home