一、docker的三点好处
- 统一环境和配置:想想平时怎么迁移服务。
- 高效伸缩性:想想平时怎么扩容
- 资源隔离(使用lxc):想想单机多部署。
二、docker在linux上安装方法
为了简单(非生产环境),使用yum进行安装。
所有安装的前提是内核版本要在大于等于3.10
|
|
1.更新yum
|
|
2.添加yum仓库
|
|
3.安装docker
|
|
但实际生产过程中,不一定要安装最新版本,可以通过如下方式获取现有的版本。
|
|
然后在去安装,例如:
|
|
4.启动docker
|
|
5.验证安装成功(客户端和服务端)
|
|
6.卸载docker
- 卸载docker软件包
|
|
- 删除镜像、容器、卷以及自定义配置:
|
|
三、docker的三个重要概念
- Build: 构建,例如java项目,将tomcat + war包 + jdk(tomcat的docker会包含jdk)通过dockerfile构建在一起成为镜像
- Ship: 集装箱,用于存储镜像,仓库有中央的(例如官方的nginx,redis,memcached, tomcat等等),私有仓库(例如公司的项目)
- Container: 容器,可以认为是运行镜像的地方,容器实际是一个进程,进程之间彼此使用lxc进行隔离。
四、快速使用
1.从仓库下载镜像
仓库有国内外的,例如官网、阿里云、网易等
- 官网:https://hub.docker.com/,点击explore就可以找到对应的镜像
例如下载redis
|
|
会下载最新版本的redis,如果需要下载指定版本的redis,可以用
|
|
使用docker images可以查看当前机器拥有的镜像,例如当前:
|
|
- REPOSITORY是镜像名
- TAG是版本
- IMAGE ID是镜像id
2.启动容器
例如启动redis,-d代表守护进程方式启动
|
|
docker ps可以看到所有的docker进程
|
|
但是在进程外通过redis-cli是无法连接到redis的
|
|
而且netstat也看到6379端口
|
|
这是因为宿主机和容器的端口是隔离的,容器的端口是虚拟的,宿主机需要做端口映射,要执行命令可以用两种方法
(1) 使用docker exec进入容器内部执行
|
|
|
|
(2) 启动的时候做好端口映射
|
|
-p 宿主机端口:容器端口
|
|
3.停止容器
|
|
或者
|
|
五、构建自己的镜像
构建一个spring boot的docker
1.准备jdk镜像
|
|
2.准备一个spring-boot带controller的jar包
|
|
生成
3.编写dockerfile
|
|
4.构建
将spring-boot-docker-0.0.1-SNAPSHOT.jar和Dockerfile放在一个目录
|
|
5.运行和测试
|
|
宿主机测试
|
|
容器测试
|
|
五、docker工作流
1. 宿主机:
- Docker deamon: 运行在宿主机的后台进程。
- 用于接收客户端命令
- 从仓库拉去镜像
- Container: 运行镜像
- images: 本地镜像
2. 客户端:
发送各种docker命令给Docker deamon。
3. 仓库:
存放镜像,概念和maven很类似,也可以划分本地仓库和中央仓库。
六、总结
本文只是简单了解了docker的部署和使用,实际生产过程中还有很多复杂的用法、配置等。但是docker确实解决第一节提到的三个问题,还是很值得学习的。