通俗讲就是软件带环境安装
安装的时候,把原始环境一模一样的复制过来。利用Docker可以消除协作编码时“在我的机器上可以正常工作”的问题
Docker镜像的设计,使得Docker得以打破过去【程序即应用】的观念。透过镜像将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。
Docker理念
通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的app及其运行环境能够做到**“一次封装,到处运行”**
解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术
Docker和传统虚拟化方式的不同之处
- 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程
- 而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器比传统虚拟机更加轻便
- 每个容器之间互相隔离,每个容器有自己的文件系统,容器之间不会相互影响,能区分计算资源
Docker安装
可以通过uname -r查看自己的内核信息
cat /etc/redhat-release查看版本
docker架构图
docker的基本组成
- 镜像
只读的模板。镜像可以用来创建docker容器,一个镜像可以创建多个容器
- 容器
docker可以利用容器独立运行一个组件。容器时用镜像创建的运行实例
它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看作是一个简单版的Linux环境和运行在其中的应用程序
容器的定义和镜像几乎一样,也是一堆层的统一视角,唯一区别就是容器最上面那一层是可读可写的
- 仓库
集中存放镜像文件的场所
Docker安装
安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
这里第三个命令时出现了
问题 1: problem with installed package podman-2.0.5-5.module_el8.3.0+512+b3b58dca.x86_64
- package podman-2.0.5-5.module_el8.3.0+512+b3b58dca.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed
- package podman-2.2.1-7.module_el8.3.0+699+d61d9c41.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed
- package containerd.io-1.4.4-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64
- package containerd.io-1.4.4-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64
- package containerd.io-1.4.4-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.3.0+699+d61d9c41.x86_64
- package containerd.io-1.4.4-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.3.0+699+d61d9c41.x86_64
- cannot install the best candidate for the job
- package runc-1.0.0-64.rc10.module_el8.3.0+479+69e2ae26.x86_64 is filtered out by modular filtering
问题 2: problem with installed package buildah-1.15.1-2.module_el8.3.0+475+c50ce30b.x86_64
- package buildah-1.15.1-2.module_el8.3.0+475+c50ce30b.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
- package buildah-1.16.7-4.module_el8.3.0+699+d61d9c41.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
- package docker-ce-3:20.10.6-3.el8.x86_64 requires containerd.io >= 1.4.1, but none of the providers can be installed
- package containerd.io-1.4.3-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.3.0+699+d61d9c41.x86_64
- package containerd.io-1.4.3-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.3.0+699+d61d9c41.x86_64
- package containerd.io-1.4.3-3.2.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.3.0+699+d61d9c41.x86_64
- package containerd.io-1.4.3-3.2.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.3.0+699+d61d9c41.x86_64
- package containerd.io-1.4.4-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.3.0+699+d61d9c41.x86_64
- package containerd.io-1.4.4-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.3.0+699+d61d9c41.x86_64
- cannot install the best candidate for the job
- package containerd.io-1.4.3-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64
- package containerd.io-1.4.3-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64
- package containerd.io-1.4.3-3.2.el8.x86_64 conflicts with runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64
- package containerd.io-1.4.3-3.2.el8.x86_64 obsoletes runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64
- package containerd.io-1.4.4-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64
- package containerd.io-1.4.4-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64
- package runc-1.0.0-56.rc5.dev.git2abd837.module_el8.3.0+569+1bada2e4.x86_64 is filtered out by modular filtering
- package runc-1.0.0-64.rc10.module_el8.3.0+479+69e2ae26.x86_64 is filtered out by modular filtering
可以用下面这命令
yum erase podman buildah
之后再重试第三个命令
再安装下面两个
sudo yum install docker-ce docker-ce-cli
启动
sudo systemctl start docker
安装完成!
阿里云镜像加速器配置
打开阿里云镜像服务
选择自己要用的系统,这里我选的时centos
修改配置文件
vim /etc/docker/daemon.json
这里可能没有这个文件,vim会新建一个
{
"registry-mirrors": ["https://****.mirror.aliyuncs.com"]
}
在文件中配置地址,然后重启服务
systemctl daemon-reload
systemctl restart docker
查看docker信息
最后测试
docker run hello-world
run执行
docker为什么比vm快
(1)docker有着比虚拟机更少的抽象层。由于docker不需要实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker在效率上有明显提升
(2)docker利用的是宿主机的内核。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统
docker常用命令
- 帮助命令
docker version ----版本信息
docker info ----详细信息
docker --help
- 镜像命令
docker images ---列出本地主机上的镜像
-a:列出本地所有镜像
-q:只显示镜像id
--digests:显示镜像摘要信息
--no-trunc:显示完整的镜像信息
docker search 镜像名
docker pull 镜像名
docker rmi 镜像名ID 删除镜像
删除单个 -docker rmi -f 镜像
删除多个 -docker rmi
删除全部
-
容器命令
要有镜像才可以创建容器新建并运行容器 docker run -it id
-
列出当前所有正在运行的容器
docker ps
- 退出容器
exit 容器停止退出
ctrl+P+Q 容器不停止退出
- 启动容器
docker start 容器名
- 重启容器
docker restart 容器名
- 停止容器
docker stop 容器名
- 强制停止容器
docker kill 容器名
- 删除已停止的容器
docker rm 容器名
一次删除多个容器
docker rm-f ${docker -ps-a -q}
启动守护式容器
docker run -d 容器名
发现容器已经退出了,很重要的说明一点:docker容器后台运行,就必须有一个前台进程
查看容器日志
docker logs -f -t --tail 容器ID
查看容器内的进程
docker top 容器ID
查看容器内的细节
docker inspect 容器ID
进入正在运行的容器并以命令行交互
docker attach 容器ID ----直接进入容器启动命令的终端,不会启动新的进程
docker exec -t 容器ID 执行命令 ----在容器中打开新的终端,可以启动新的进程
从容器拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径