docker为什么会出现?
一款产品:开发---->运维,两套环境!应用环境,应用配置!
常见问题:我的电脑可以运行,版本更新,导致服务不可用。
环境配置十分的麻烦,每个机器都需要部署环境(redis集群,es等。。。。)。
不能跨平台。
发布项目(jar+mysql+redis
。。。),项目能不能带上环境去发布。
传统:开发jar
,运维来做!
现在:开发打包部署上线,一套流程。
以上问题,docker
提出解决方法。
java
—>jar
(环境)---->(打包项目带上环境)镜像---->(docker
)---->下载镜像---->运行。
docker的核心思想:隔离,打包装箱,每个箱子互相隔离
。
文档:https://docs.docker.com/
仓库:https://hub.docker.com/
docker能干嘛
之前的虚拟机技术
缺点:
1.资源占用多;
2.冗余步骤多;
3.启动慢。
容器化技术
与传统的虚拟机不同:
- 传统的虚拟机:运行一个完成的操作系统,在这个系统中安装和运行。
- 容器化:应用直接运行在宿主机的内核上,容器自己没有内核, 每个容器间,相互隔离,互不影响。
docker的组成
- 镜像(Images): docker镜像相当于模板
(对象)
,通过镜像来创建容器。镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。 - 容器(Containers): docker镜像相当于
(对象的实例化)
,独立运行一个或一组应用,服务最终运行在容器里面。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的root
文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器运行时,以镜像为基础层,在其上创建一个当前容器的存储层,这个为容器运行时读写而准备的存储层为容器存储层。容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。 - 仓库(Registry): 存放镜像的地方。
安装docker
# 1.移除掉旧的版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
# 2.删除所有旧的数据
sudo rm -rf /var/lib/docker
# 3.安装依赖包
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# 4.添加源,使用了阿里云镜像
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 5.配置缓存
sudo yum makecache fast
# 6.安装最新稳定版本的docker
sudo yum install -y docker-ce
# 7启动docker引擎并设置开机启动
sudo systemctl start docker
# 8.配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
EOF
# 9重启
sudo systemctl daemon-reload
sudo systemctl restart docker
docker version
第一个dockers容器
docker run hello-world
分析run指令
docker是怎么工作的?
docker
是一个client-server
的服务,docker
的守护进程运行在主机上,通过socket
从客户端访问。docker-server
是接受docker-client
的指令。
docker为什么比vm快?
docker
有着比虚拟机更少的抽象层;docker
利用的是宿主机的内核,vm
需要的是Guest OS
。
所以运行容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核。