一、Docker简介
具体见ppt
我们之前做的许多项目如果要部署在别人电脑上,就要安装许多的库,环境部署,安装ngix等等,docker就可以处理这个问题,直接将做好的项目封装成一个容器,拿来用就可以了。
1.什么是虚拟化
在计算机中,虚拟化(英文: Virtualization)是一种资源管理技术,是将计算机的各种实体资源(如: 服务器、网络、内存及存储等)予以抽象、转化后呈现出来,
- 在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,从而最大化的利用物理硬件,对资源充分利用。
- 虚拟化的种类有很多,例如:
软件虚拟化:Vmware软件、KVM软件、VirtualBox软件等
硬件虚拟化: 磁盘阵列RAID、逻辑卷LVM、
内存虚拟化、网络虚拟化、桌面虚拟化、服务虚拟化、虚拟机等
2. 什么是Docker
Docker是一个开源的应用容器引擎, 诞生2013年,最初是dotCloud 公司内部的一个业余项目。它基于Google公司推出的Go语言实现。 项目后来加入Linux基金会,遵从了Apache2.0协议,源代码托管在 Github 进行维护。
3.为什么选择Docker?(*敲黑板)
- 上手快
用户只需要几分钟,就可以把自己的程序"Docker化"。
Docker依赖于"写时复制"(copy-onwrite)模型,使修改应用程序也非常迅速,可以说达到"随心所欲,代码即改"的境界。
随后,就可以创建容器来运行应用程序了。大多数Docker容器只需要不到1秒即可启动。由于去除了管理程序的开销,Docker容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户尽可能的充分利用系统资源。
- 职责的逻辑分类
使用Docker,开发人员只需要关心容器中优秀的应用程序,而运维人员只需要关心如何管理容器。**Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。**从而降低那种"开发时一切正常,肯定时运维的问题(测试环境都是正常的, 上线后出了问题就归结为肯定是运维的问题)"。
- 快速高效的开发生命周期
Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作。(通俗一点说,Docker就像一个盒子,里面可以装很多物件,如果需要这些物件的可以直接将该大盒子拿走,而不需要从盒子里一件一件的取)。
- 鼓励使用面向服务的架构
Docker还鼓励面向服务的体系结构和微服务架构。Docker推荐单个容器只运行一个应用程序或者进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器。从而使分布式部署应用程序,扩展和调试应用程序都变得非常简单,同时也提高了程序的内省性。(当然,一个程序中可以运行多个应用程序)。
4.容器与虚拟化的比较
虚拟化方式,每个虚拟机都有一个自己的操作系统
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200501195016202.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU2ODYzMw==,size_16,color_FFFFFF,t_70
5.Docker组件
(1)Docker服务器与客户端
Docker是一个客户端/服务器(C/S)架构的程序。Docker客户端只需向Docker服务器或守护进程发出请求,服务器或守护进程将完成所有工作并返回结果。
- Docker提供了一个命令行工具docker以及一整套RESTful API来与守护进程交互。
- 用户可以在同一台宿主机上运行Docker守护进程和客户端。
(2)Docker镜像与容器
仓库:每个仓库存放某一类镜像。
镜像:类似虚拟机镜像(eg:xxx.iso)。 eg: MySQL镜像、Redis镜像、2048镜像
容器:类似linux系统环境,运行和隔离应用。容器从镜像启动的时候,docker会在镜像的最上一层创建一个可写层,镜像本身是只读的,保持不变。
(3) Registry(注册中心)
Docker用Registry来保存用户构建的镜像。Registry分为公有和私有两种。
- 公有仓库 :所有人可以访问下载镜像的仓库。Docker公司运营公共的Registry叫做Docker Hub。
- 私有仓库: 规定范围内可以访使用的库。用户可以构建私有的Registry。
二、Docker的安装与启动
1.安装docker
1.打开git bash
连接阿里云服务器
设置服务器主机名
$ ssh root@39.101.175.120
[root@iz8vbijtqjs4nfugeph2m5z ~]# hostname docker #设置主机名为docker
[root@iz8vbijtqjs4nfugeph2m5z ~]# logout #退出重新进
$ ssh root@39.101.175.120
2.安装
yum install docker -y
3.docker一些操作指令
[root@docker ~]# docker -v
Docker version 1.13.1, build cccb291/1.13.1
[root@docker ~]# docker info
[root@docker ~]# systemctl start docker
[root@docker ~]# systemctl restart docker
[root@docker ~]# systemctl enable docker
2.设置ustc的镜像
编辑/etc/docker/daemon.json
文件,添加清华镜像
修改了配置文件,重启docker
[root@docker ~]# vim /etc/docker/daemon.json #编辑此文件添加清华镜像
[root@docker ~]# systemctl restart docker
三、常用命令
镜像相关命令
docker images #查看镜像
docker search 2048(镜像名称) #搜索镜像
docker pull docker.io/blackicebird/2048 #从镜像仓库拉取镜像
docker rmi 镜像ID #删除镜像
docker rmi `docker images -q` #删除所有镜像(注意:``是反向单引号)
容器相关命令
1.查看容器
docker ps #查看所有正在运行的容器
docker ps -a #查看所有容器(无论是否运行)
docker ps -l #查看最后一次运行的容器
docker ps -f status=exited #查看停止的容器
2.创建容器
(1)交互式创建容器(不建议)
# 交互式创建容器,退出后直接关闭容器,再次进入容器需要先docker start * 开启容器
docker run -it --name=myubuntu ubuntu /bin/bash # 交互式创建容器, exit退出当前容器
退出:ctl +p+q退出时不会关闭容器
docker exec -it 容器名称/容器ID /bin/bash # 登录守护容器交互环境的方式
(2)守护式创建容器(建议)
docker run -d --name 2048 -p 0.0.0.0:81:80 docker.io/blackicebird/2048 #守护式创建容器
-d:后台运行;
--name:容器名字;
-p:将容器的80端口映射到本地的81端口,0.0.0.0:和81绑定的任何ip都可以访问;
容器的端口在哪里查找?在[Docker Hub](https://hub.docker.com/)官方文档里搜索2048,查找2048容器的端口。
docker.io/blackicebird/2048:拉去下来的镜像
3.关闭与启动容器
docker stop 容器名称(或者容器ID) #关闭容器
docker start 容器名称(或者容器ID) #启动容器
1.项目案例:基于Docker构建2048项目
介绍:
我们呢只需要从镜像仓库中拉取2048的镜像到本地,运行创建容器,浏览器访问服务器IP,就可以玩游戏了。
也可以把我们自己写的项目封装成一个镜像,别人拉取下来创建容器就可以访问了。
操作如下:
1.查看docker镜像,发现没有镜像,
2.在仓库中进行搜索 ,出现很多相关镜像,选一个START高的,进行pull
[root@docker ~]# docker images #查看镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@docker ~]# docker search 2048 #搜索2048相关镜像
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/blackicebird/2048 2048 with logging 4
docker.io docker.io/isula/2048 1
3.从镜像仓库拉取镜像到本地
4.查看本地是否有此镜像
5.有,创建容器
https://hub.docker.com/
[root@docker ~]# docker pull docker.io/blackicebird/2048 #从镜像仓库拉取镜像
[root@docker ~]# docker images #查看
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/blackicebird/2048 latest 960672cda083