说明
- 使用平台win10 1709版本,提示如果你的也是win10系统,而且版本较低可能也会提示xxxpro什么的,意思就是你的电脑版本不对。
- docker使用Linux containers 可以使用docker version查看信息,单击小鲸鱼switch to xxxx 进行切换
- 此篇文章由学习后所写第一个docker化的java应用 感谢慕课网的这位老师
什么是Docker
定义
根据百度百科定义: Docker(应用容器引擎) 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
组成要素
- dockerClient客户端
- Docker Daemon守护进程
- Docker Image镜像
- DockerContainer容器
局限
Docker并不是全能的,设计之初也不是KVM之类虚拟化手段的替代品,简单总结几点: Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用 LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的 隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库 网络管理相对简单,主要是基于namespace隔离 cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费) Docker对disk的管理比较有限 container随着用户进程的停止而销毁,container中的log等用户数据不便收集
同类产品
CoreOs发布的一个名为Rocket。
为什么会出现
解决了什么问题
有了Docker,开发人员不再需要为处理各种开发、 测试、生产环境的差异而花费大量精力,他们可以将一个干净的开发环境直接迁移到生产环境,而不必担心各种依赖和配置问题。这有效的解决了开发者经常面临的“依赖陷阱”。(来源http://blog.csdn.net/zhushuai1221/article/details/52486684) 总的来说:Docker解决了运行环境和配置问题,方便发布,也就方便做持续集成。更轻量的虚拟化,节省了虚拟机的性能损耗
未出现前怎么解决
额,说说在我不知道有这项技术之前部署自己的博客系统吧。各种环境配置,jdk,mysql,tomcat,nginx...需要一个个下载安装,配置,检查是否有问题,真的是相当麻烦。
怎么做?Demo
设置镜像源
Docker 中国官方镜像加速。通过 Docker 官方镜像加速,中国区用户能够快速访问最流行的 Docker 镜像。设置后速度快的不要不要的。 官方网站镜像说明:https://www.docker-cn.com/registry-mirror 使用该镜像源只需要设置 registry-mirrors为https://registry.docker-cn.com即可
第一个镜像hello-world
- dos命令下输入命令docker images 即可查看目前所有镜像
- 获取第一个镜像hello-world 命令docker pull hello-world pull是拉的意思,和git中的pull拉仓库的代码很相似吧。同样的也对应一个命令push(推)
- 运行镜像 docker run hello-world 运行结果如下
其实运行一个镜像命令不仅仅如此简单,更详细的操作可以使用docker run --help查看所有命令
第二个镜像运行nginx
那么镜像我们去哪里下载呢?docker官方有一个仓库,其实理解起来和maven的中央仓库一样,我们需要什么去中央仓库拿就好了。 官方网址
- 下载nginx镜像,在页面详情页获取Docker Pull Command(命令) 下载成功
-
运行nginx 使用命令docker run -d nginx -d的意思是在后台运行。启动后看看状态,使用命令docker ps
-
试试在浏览器输入127.0.0.1 这个时候nginx还是访问不了的,请先操作下面
-
如果我们想知道容器内部怎么办?可以使用命令docker exec docker exec --help 看一下帮助信息
-
使用命令docker exec -it be 注意:这个be是我运行nginx镜像后获取的一个id,而be只是前两位,注意第2点的docker ps 镜像nginx的CONTAINER ID(容器ID) 因为只启动了一个镜像,所以我输入be就能识别我要执行的镜像
- 进入后你会发现和Linux系统好像呀!其实就是一个虚拟Linux系统好嘛! 熟悉的Linux命令
7.退出容器命令exit
Docker网络
更详细的学习前往(https://www.cnblogs.com/allcloud/p/7150564.html)
特别说明:图片引用来自慕课网
还记得在步骤 第二个镜像运行nginx的第三点吗?试试在浏览器输入127.0.0.1.....但是无法访问对吧。 通过本地8080端口映射docker容器中的80端口 此时就可以访问docker中的nginx。 命令
docker run -d -p 8080:80 nginx
再次在浏览器访问127.0.0.1:8080 ,成功访问nginx
制作自己的镜像并部署
创建一个文件夹,改文件夹下包含Dockerfile文件和Jpress.war包
- 制作自己的Dockerfile文件 在Dockerfile文件写入一下信息。注意这个文件没有后缀,可以建立一个txt文件在重复名去掉txt后缀即可
from tomcat
MAINTAINER peng xxx@163.com
COPY jpress.war /usr/local/tomcat/webapps
意思是需要tomcat(会默认下载jdk,免去下载jdk的步骤) 镜像所有者信息 发布到tomcat/webapps目录下 如果你是按照步骤来的,那么tomcat镜像没下载吧。前面的步骤还记得吗?拉取tomcat镜像,命令docker pull tomcat
- 我们需要部署自己的web应用到服务器这里我们使用Jpress博客系统作为我们测试的应用。 在GitHub下载war包 Github-JPress-War包下载
- 创建镜像使用命令 docker build .
注意 . 表示当前目录,给镜像起一个名字(准确说是加一个标签) docker build -t jpress:latest .
使用命令docker images 查看镜像jpress成功。注意我的jpress错了,标签应该为latest,一开始打错了..
- 运行tomcat 此时运行tomcat镜像jpress就可以访问了!命令
docker run -d -p 8888:8080 jpress
- 拉取MySQL并设置数据库密码,建立jpress数据库 由于jpress博客框架的运行需要MySQL数据库的支持,同样的去镜像库获取pull命令,下拉到自己的仓库即可。 MySQL相关命令的操作在MySQL 都有说明。使用命令
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=a -e MYSQL_DATABASE=jpress mysql
注意!如果你的电脑安装了MySQL并且启动了MySQL服务,此时会报错,解决方案是换个端口即可。
- 连接数据库 如果数据库主机为localhost无法连接数据库,则改为IP地址。查看本机IP地址方法cmd命令下inconfig ,注意此时的端口号应该改为3307.安装成功!
- 重启web容器 查看容器运行情况 docker ps 执行命令docker restart CONTAINER ID(容器ID) 即可访问jpress啦
Over!牛逼的技术,在学习路上...
前段时间在微博看到他人分享关于Docker的原理分析,移步学习 Docker 核心技术与实现原理