Docker概述
Docker简介
Docker 是基于 Go 语言实现的云开源项目。
Docker 的主要目标是: Build, Ship and Run Any App, Anywhere ,也就是通过对应用组件的封装、
分发、部署、运行等生命周期的管理,使用户的 APP 及其运行环境能做到 一次镜像,处处运行 Build
once , Run anywhere 。
应用部署的环境问题
大型项目组件较多,运行环境也较为复杂,部署时会遇到一些问题
依赖关系复杂,容易出现兼容性问题
开发、测试、生产环境有差异
一个项目中,部署时需要依赖于 node.js 、 Redis 、 RabbitMQ 、 MySQL 等,这些服务部署时所需要的函 数库、依赖项各不相同,甚至会有冲突。给部署带来了极大的困难。
Docker解决依赖兼容
而 Docker 却巧妙的解决了这些问题, Docker 是如何实现的呢?
Docker 为了解决依赖的兼容问题的,采用了两个手段:
1、将应用的 Libs (函数库)、 Deps( 依赖 ) 、配置与应用一起打包
2、将每个应用放到一个容器去运行,避免互相干扰。
优势
作为一种虚拟化方式, Docker 跟传统的虚拟化方式相比具有众多的优势。
1. 更高效的利用系统资源:由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销, Docker
对系统资源的利用率更高。
2. 更快速的启动时间:可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时
间。
3. 一致的运行环境: Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致
性。
4. 持续交付和部署:使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。
5. 更轻松的迁移
6. 更轻松的维护和扩展
Docker运行速度快的原因
Docker 有比虚拟机更少的抽象层:
由于 Docker 不需要 Hypervisor (虚拟机)实现硬件资源虚拟化,运行在 Docker 容器上的程序直接使用
的都是实际物理机的硬件资源,因此在 CPU 、内存利用率上 docker 有明显优势。
Docker 利用的是宿主机的内核,而不需要加载操作系统 OS 内核:
当新建一个容器时, Docker 不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作
系统内核返回等比较耗时耗资源的过程。当新建一个虚拟机时,虚拟机软件需要加载 OS ,返回新建过程
是分钟级别的。而 Docker 由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个 docker 容
器只需要几秒钟。
Docker 容器的本质就是一个进程。
Docker组成
Docker 并非一个通用的容器工具,它依赖于已经存在并运行的 Linux 内核环境。(在 Windows 上安装
Docker 时需要依赖 WLS ,也即 Windows 下的 Linux 子系统)。
Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部
署的 Linux 主机。
Docker 的基本组成部分:
1:镜像( image )
2:容器( container )
3:仓库( repository )
Docker镜像
Docker 将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。
Docker 镜像就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建多个容器。
Docker容器
Docker 利用容器独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟
化的运行环境,容器是用镜像创建的运行实例。
镜像和容器的区别
镜像,就是把一个应用在硬盘上的文件、及其运行环境、部分系统函数库文件一起打包形成的文件包。
所以镜像以文件形式保存在硬盘中,可以独立存在。
而容器是个进程,只能靠运行镜像而存在,没有能够脱离于镜像而存在的容器。
从一个镜像可以发起多个容器,而一个容器肯定只能从一个镜像产生。
Docker仓库
Docker 仓库是集中存放镜像文件的场所。
仓库分为公开仓库和私有仓库两种。
最大的公开仓库是 Docker 官方的 Docker Hub : https://hub.docker.com/
举个例子 :
我来到一片空地,想建个房子,于是我搬石头、砍木头、画图纸,一顿操作,终于把这个房子盖好了。
结果,我住了一段时间,想搬到另一片空地去。这时候,按以往的办法,我只能再次搬石头、砍木头、
画图纸、盖房子。
但是,跑来一个老巫婆,教会我一种魔法。
这种魔法,可以把我盖好的房子复制一份,做成 “ 镜像 ” ,放在我的背包里。
刚才例子里面,那个放在包里的 “ 镜像 ” ,就是 Docker 镜像。而背包,就是 Docker 仓库。在空地上,用魔法造好的房子,就是一个Docker 容器。
Docker 镜像,是一个特殊的文件系统。它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如环境变量)。镜像不包含任何动态数据,其内容在构
安装docker
安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
配置资源库(阿里)
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
查看版本
Docker version
创建配置文件
/etc/docker/daemon.json
配置镜像加速
{
"registry-mirrors": ["https://docker.m.daocloud.io"]
}
重启docker
Systemctl restart docker
拉取镜像
Docker pull 镜像的名字
Docker pull nginx
查看镜像
Docker images
创建容器
Docker create --name 容器的名字 -p 暴露的端口号:原本的端口号 镜像的名字
例:Nginx 的镜像 容器 mynginx
docker create --name=mynginx -p 80:80 nginx
查看所有的容器
Docker ps -a
查看运行的容器
Docker ps
启动容器
Docker start 容器的id/容器的名字
根据容器的名字启动
docker start mynginx1
根据容器的id启动
docker start 809308bc1fb3
访问容器
访问浏览器我们设置的端口号
删除镜像
dockerrmi镜像名称/ID
删除容器
根据id 和名字进行删除
容器名字不能重复
docker rm 容器的名字
进入容器
语法:
Docker exec -it 容器的名字/容器的id bash
docker exec -it mynginx bash
修改文件
需要vim 容器中是没有的
安装工具
执行命令:
apt-get updateapt-get install vim
修改首页的信息
默认页面位置
vi /usr/share/nginx/html/index.html
安装完后,进入html文件里保存后退出,再次打开浏览器访问nginx页面会跟着变化
导入和导出镜像
导出
docker save -o 名字.tar 镜像id:版本号
导出镜像之后将镜像复制到另外一个服务器中
例: scp ./test.tar root@192.168.184.35/usr
导入
导入镜像
在新的服务器(192.168.184.35)中导入镜像
docker load -i test.tar
查看镜像
[root@hostM1 nginx]# systemctl start docker[root@hostM1 nginx]# docker load -i test.tar[root@hostM1 nginx]# docker images
这样也就相当于我们建了一个房子,可以将他放到背包里,也可以拿出来