1.Docker简介
1.1 什么是虚拟化
一种资源管理技术,实际用处一般用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件,对资源充分利用
虚拟化技术的种类:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(虚拟化ip)、桌面虚拟化、服务虚拟化、虚拟机等
1.2 什么是Docker
Docker最初是dotCloud公司内部的一个业余项目,Go语言实现。现开源,遵从Apache2.0协议,项目代码在GitHub上维护
Docker项目的目标是实现轻量级的操作系统虚拟化解决方案,Docker的基础是Linux容器(LXC)等技术
Docker的优势
- 上手快
只要将自己的程序"Docker化"一下,几分钟就可以完成。
然后,就可以创建容器运行程序,1s中即可启动。Docker容器性能很高,同时同一台宿主机中可以运行更多容器,使资源充分利用 - 职责逻辑分类
使用Docker,开发测试运维时程序部署的生产环境完全一致,开发测试一切正常,就是运维的问题。 - 快速高效的开发生命周期
Docker就像一个盒子,里面可以装很多物件,如果需要可以将盒子直接拿走,而不是一件件取货物。 - 鼓励使用面向服务的架构
Docker和微服务有着紧密的联系。Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型。应用程序或服务都表示为一系列内部互联的容器。
1.3 容器与虚拟机比较
容器是在操作系统层面上实现虚拟化,直接复制本地主机操作系统,而传统方式是硬件层面实现
1.4 Docker组件
1.4.1 Docker服务器与客户端
Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或守护进程发出请求,服务器或守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具DOcker以及一整套RESTfulAPI。可以在同一台宿主机上运行Docker守护进程和客户端也可以从本地Docker客户端连接到另一台宿主机上的远程Docker守护进程
1.4.2 Docker镜像与容器
用户基于镜像来运行自己的容器。镜像就是宿主机的一些文件,比如mysql镜像,centos镜像。接着可以使用mysql镜像,创建一个mysql容器(可以创建多个)。
也可以把镜像当做容器的"源代码"(好比类和对象的关系)。镜像体积很小,易于分享、存储和更新。
1.4.3 Registry(注册中心)
Docker用Regitsry来保存用户构建的镜像。Registry分为公有和私有两种。公有的叫做Docker Hub,由Docker公司运营。用户可以注册账号,保存并分析自己的镜像,但是慢,可以自己构建私有Registry。
https://hub.docker.com/
2.Docker安装与启动
3.Docker常用命令
3.1 镜像相关命令
- 查看镜像
docker images
- 搜索镜像
docker search
- 拉取镜像
docker pull 镜像名称
- 删除镜像
docker rmi 镜像ID
- 删除所有镜像
docker rmi `docker images -q`
3.2 容器相关命令
- 查看容器
- 查看正在运行容器
docker ps
- 查看所有容器
docker ps -a
- 查看最后一次运行容器
docker ps -l
- 查看停止的容器
docker ps -f status=exited
- 查看正在运行容器
- 创建与启动容器
- 交互方式创建容器
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
退出exit
- 守护方式创建容器
docker run -di --name=容器名称 镜像名称:标签
- 登录守护容器方式
docker exec -it 容器名称 (或者容器ID) /bin/bash
-i
表示运行容器、-t
表示容器启动后进入命令,it就表示容器创建就能登录进去。即分配一个伪终端、--name
表示为创建的容器命名、-v
表示目录映射关系、-d
表示在run后面加上-d参数,则会创建一个守护式容器在后台运行(创建后不想进入)、-p
表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
- 交互方式创建容器
- 停止与启动容器
- 停止容器
docker stop 容器名称(或ID)
- 启动容器
docker start 容器名称(或ID)
- 停止容器
- 文件拷贝
- 拷贝到容器内
docker cp 需要拷贝的文件或目录 容器名称:容器目录
- 从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录
- 拷贝到容器内
- 目录挂载
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
- 即
创建容器 添加-v参数 后边为 宿主机目录:容器目录
- 多级目录权限不足,添加 参数
--privileged=true
解决
- 查看容器ip地址
- 容器相关所有数据
docker inspect 容器名称(容器ID)
- 直接看ip
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
- 容器相关所有数据
- 删除容器
docker rm 容器名称(容器ID)
4. Docker应用部署
4.1 MySQL部署
- 拉取mysql镜像
docker pull centos/mysql-57-centos7
- 创建容器
docker run -di --name=tensquare_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
- 远程登录mysql:Navicat连接宿主机,端口33306
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的登陆密码
4.2 Tomcat部署
- 拉取镜像
docker pull tomcat:7-jre7
- 创建容器
docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
-p表示地址映射
4.3 Nginx部署
- 拉取镜像
docker pull nginx
- 创建Nginx容器
docker run -di --name=mynginx -p 80:80 nginx
4.4 Redis部署
- 拉取镜像
docker pull redis
- 创建容器
docker run -di --name=myredis -p 6379:6379 redis
5. 迁移与备份
5.1 容器保存为镜像
mynginx为容器名称,mynginx_i为镜像名称。
docker commit mynginx mynginx_i
5.2 镜像备份
可以将镜像保存为tar 文件,然后就可以传给别人了
docker save -o mynginx.tar mynginx_i
5.3 镜像恢复与迁移
删除掉mynginx_img镜像后 执行此命令进行恢复
docker load -i mynginx.tar
-i 输入的文件