目录
01 Docker 介绍
在安装部署程序服务过程种存在的问题
01 版本依赖 典型案例: java 环境有很多的 jre 版本
02 环境依赖 典型案例: oracle 安装需要大量支撑包
03 安全风险 典型案例: 多个应用无法安装一个服务器
04 性能瓶颈 典型案例: 硬件设备扩展困难
docker 容器技术和 vmware 的比较
什么是虚拟化技术
在计算机技术中,虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服
务器,网络,内存以及存储等予以抽象转换后呈现出来,打破实体实体结构间不可
切割的障碍,使用户可以用比原本的组态更好的方式来应用这些资源.
docker 的本质
Docker 的诞生基于 linux 的容器技术(Linux Containers,LXC)
容器将应用进行沙盒封装,进行隔离,并独立分配硬件资源.
容器在核心 CPU 本地运行指令,不需要任何专门的解释机制.
Docker 在 LXC 基础上,优化了容器的使用体验
Docker 指令让用户无须关注底层操作,直接管理和使用容器
Docker 通过引入分层文件系统和镜像机制,降低了迁移难度
![](https://i-blog.csdnimg.cn/direct/6420c53d4312455fa25ddcd086792bc7.png)
![](https://i-blog.csdnimg.cn/direct/6099b21f0624459899fdae8002488d9f.png)
docker 容器技术的发展
Docker 是基于 Go 语言实现的开源容器项目 它诞生于 2013 年年初.现在主流
的操作系统包括 linux 各大发行版本,Mac OS ,windows 等都支持 Docker.各大云
服务提供商也纷纷推出了基于 Docker 的服务.
Docker 的构想是要实现"Build ship and run any App ,Any where" 即通过对
应用的封装(packaging),分发(distribution),部署(deploymen).运行(runtime)
生命周期进行管理,达到应用组件级别的"一次封装,到处运行"的目的.
这些应用组件即可以是一个 Web 应用,一个编译环境,也可以是一套数据库平台
服务,甚至是一个操作系统或集群.可以说 Docker 首次为应用的开发,运行和部
署提供了"一站式"的实用解决方案.
docker 容器技术的优势
1 更快的交付和部署
2 更高效的资源利用
3 更轻松的迁移和扩展
4 良好的隔离性
5 完整的技术生态
02 docker 组件
docker 核心组件
![](https://i-blog.csdnimg.cn/direct/0fb7a49ec34d4180ad01228ab142ed73.png)
docker 扩展组件
![](https://i-blog.csdnimg.cn/direct/3f44373df12b4106bbfbb84e80be7a02.png)
03 docker 的使用
docker 安装
Docker image 镜像
![](https://i-blog.csdnimg.cn/direct/dd6cdf4b699642e2899fb47e8e78de6c.png)
镜像获取
#1.
从镜像仓库获取
docker image pull tomcat:9.0.44-jdk8
#2.
从
tar
压缩包获取
docker image load -i /root/oracle.tar
#3.
从
export
导出包获取
docker image import mysql_image.tar mysql:5.7
#4.
从
dockerFile
文件构建
docker image build -t centos7:7 /root/Dockerfile
#5.
从
container
容器转化
docker commit mysqlmaster mysql_master:5.7
镜像操作
#1.
保存迁移镜像
docker image save -o /root/tomcat.tar tomcat:9.0.44-jdk8
#2.
删除镜像
docker image rm mysql:5.7
#3.
删除无用镜像
docker image prune
#4.
上传镜像到仓库
docker image push tomcat:9.0.44-jdk8
镜像查看
#1.
查看镜像列表
docker images ls
#2.
显示一个或多个映像的详细信息
docker image inspect mysql:5.7
#3.
到仓库检索镜像
docker search mysql
#4.
上传镜像到仓库
docker image push tomcat:9.0.44-jdk8
#5.
查看镜像历史
docker image history mysql:5.7
镜像分层结构
![](https://i-blog.csdnimg.cn/direct/8f5a21de9dff488fa2508e35020e864f.png)
Docker Container 容器
![](https://i-blog.csdnimg.cn/direct/3eafc8cfa5c14872beb330e43521dbb0.png)
生成容器
#1.
创建容器
docker create centos
#2.
创建并启动容器
docker run -d tomcat:9.0.44-jdk8
#3.
生成容器常用参数
docker run --name mysql_new -d -p 3306:3306 \
--net mysql-test \
-v /usr/mysql/conf:/etc/my.cnf.d \
-v /usr/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
--restart always \
--privileged=true \
--network-alias mysql \
mysql:5.7
容器操作
#1.
进入容器命令
docker exec -it mysql_new bash
docker attach mysql_new
#2.
删除容器
docker container rm mysql_new
#3.
启停容器
docker container start|stop|restart mysql_new
docker container pause|unpause mysql_new
#4.
容器文件传输
(
拷出
)
docker container cp mysql_new:/root/test /root/test
#5.
导出容器
docker container export -o /root/mysql.tar mysql_new
容器查看
#1.
查看容器列表
docker container ls -a
#2.
查看容器详情
docker container inspect mysql_new
#3.
查看容器执行日志
docker container logs mysql_new
#4.
查看容器进程
docker container ps mysql_new
docker container top mysql_new
#6.
查看容器资源占用
docker container stats
#5.
查看
docker
网络
\
卷
docker network ls
docker volume ls
docker
端口
#1.
随机暴露容器所有端口
(
危险
)
docker run -P -it ubuntu /bin/bash
#2.
将容器指定端口随机映射到宿主机一个端口上
docker run -P 80 -it ubuntu /bin/bash
#3.
将容器指定端口指定映射到宿主机的一个端口上
docker run -p 8000:80 -it ubuntu /bin/bash
#4.
将容器
ip
和端口,随机映射到宿主机上
docker run -P 192.168.0.100::80 -it ubuntu /bin/bash
#5.
将容器
ip
和端口,指定映射到宿主机上
docker run -p 192.168.0.100:8000:80 -it ubuntu /bin/bash
#6.
指定协议
docker run -d -p 8080:80/tcp nginx
docker 网络
![](https://i-blog.csdnimg.cn/direct/5d6c442b142a4374aa8669f13aab974e.png)
#1.
使用
host
网络
docker container run --network=host nginx
#2.
使用
macvlan
网络
#
创建
:
docker network create -d macvlan --subnet=192.168.10.0/24 \
--gateway=192.168.100.1 -o parent=ens33 mac1
#
使用
:
docker run --ip =192.168.100.2 --network mac1 nginx
#3.
使用自定义桥接网络
#
创建
:
docker network create --driver bridge \
--subnet 192.168.10.0/24 --gateway 192.168.10.1 mybridge
#
使用
:
docker run --network=mybridge -d nginx
上机练习
在 docker 上部署 tomcat
1 指令
Docker 安装完毕后
启动容器
docker run --name my-tomcat2 -p 8080:8080 -d tomcat:9.0.44-jdk8
进入容器
docker exec -it
my-tomcat2 /bin/bash
把原来的 webapps 删掉,webapps.dist 更名为新的 webapps
rm -rf webapps
mv webapps.dist webapps
2 部署页面
![](https://i-blog.csdnimg.cn/direct/bf5b3cabe2534425b11afaffb21ebf57.png)
3 部署结果
![](https://i-blog.csdnimg.cn/direct/7b9914f346c5445cb620a625ca0fa2ad.png)