目录
Docker介绍
Docker 是世界领先的软件容器平台。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。
运维人员利用 Docker 可以在隔离容器中并行运行和管理应用,获得更好的计算密度。
企业利用 Docker 可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为 Linux 和 Windows Server 应用发布新功能。
Docker原理
Docker底层是利用了Linux系统的namespace和cgroups技术达到轻量虚拟化。
Docker组成
Docker由镜像(images)、容器(Container)、仓库(Registry)组成。
- 镜像为静态的概念,比如windows系统的iso文件;
- 容器为动态时的概念,比如已安装好运行起来的操作系统;
- 仓库主要是用于存放、管理镜像。
Docker安装
首先准备一个纯净的CentOS 7.4及以上的虚拟机,确保虚拟机可以连接外网。
将以下文件上传虚拟机的/etc/yum.repos.d/目录下面:
注:上传工具可使用lrzsz、xftp等等
最后执行一下命令开始安装:
|
Docker配置
安装成功后,最后还需要一些简单配置,将以下文件上传到虚拟机的/etc/docker/目录下面。
若没有该目录可以先创建一下:mkdir -p /etc/docker
Docker启动
在启动Docker之前,我们需要先关闭防火墙等安全措施,方便后续安装完成后的访问。
关闭防火墙
|
关闭selinux
|
启动Docker
|
检查启动状态
|
出现绿色的active (running),则表示已启动成功了。
Docker常用命令
下载镜像
默认从官方的镜像仓库中下载,官方仓库地址:https://hub.docker.com
|
运行容器
我们可以直接运行一个容器,当这个容器的镜像不存在时,将会自动进行下载。
|
命令参数介绍
--name:容器名称
-dp是两个参数的组合:
- -d:daemon以守护后台进程的方式运行
- -p:端口映射,将本地的端口映射到容器内的端口
latest表示最新的版本
查看本机所有的镜像
|
查看本机的容器
|
停止容器
|
删除容器
需要注意的是,不能直接删除正在运行的容器,需要先将容器停止,再删除。
|
删除镜像
这里需要注意,要删除的镜像必须是当前没有基于该镜像启动的容器,如果有则需要先停止并删除容器。
|
项目实战
上面已经介绍了Docker的基础知识,现在我们再来用实际的项目操作一下。
再开始之前先安装git工具,方便下载源代码。
|
vue前端项目
下载源码
我们通过git下载前端vue示例项目源码:
|
源码下载好了以后,我们还需要借助node进行编译,在没使用docker之前,我们还需要去官网下载node然后进行安装配置环境变量等,现在不需要了。
我们可以通过docker直接拉取node镜像,然后在镜像中编译我们的源码。最大地降低主机环境的污染。
下载node镜像
|
编译前端项目
启动容器
我们下载好源码和node镜像之后,就可以启动node镜像,并且将源码挂载到容器内,就可以进行编译了。
|
命令参数:
- -it:分配一个提供输入输出的伪终端
- --rm:用完退出容器后,自动删除容器
- -v: 挂载本地目录到容器内,这里表示将本地的/rooit/luhy-vue-demo目录挂载到容器的/opt目录下面
- sh:启动容器后执行sh命令,得到一个命令输入输出环境
通过cd /opt,进入/opt目录,可以执行ls命令,看一下目录是否挂载成功了。
编译项目
|
运行前端项目
构建编译完成后,在当前目录下会生成一个dist的目录,这个就是我们最终需要的文件了。
我们现在再退出容器,执行exit
要将项目运行起来,通过web页面可以访问,我们还需要一个nginx镜像,用于访问前端的文件。
|
浏览器访问:http://[虚拟机IP]
即可看到访问后的页面,正常情况应该是看到vue页面了
java后端项目
下载源码
我们通过git下载后端springboot示例项目源码:
|
源码下载好了以后,我们还需要借助maven进行编译,在没使用docker之前,我们还需要去官网下载jdk和maven然后进行安装配置环境变量等,现在不需要了。
我们可以通过docker直接拉取maven镜像,然后在镜像中编译我们的源码。
下载maven镜像
|
编译后端项目
启动容器
|
启动运行参数这里就不再重复介绍了,上面已有。
通过cd /opt,进入到/opt目录,可以执行ls命令,看一下目录是否挂载成功了。
编译项目
|
编译项目需要下载很多依赖,需要几分钟时间。
运行后端项目
构建编译完成后,在当前目录下会生成一个target的目录,在这个目录中有我们需要的ROOT.war文件。
我们现在再退出容器,执行exit
要将项目运行起来,通过web页面可以访问,我们还需要一个tomcat镜像,用于访问后端接口。
|
浏览器访问:http://[虚拟机IP]:8080
即可看到访问后的页面,正常情况应该是返回了Hello,World
中级篇
自定义镜像
在基础篇中,我们一直都用的是别人官方打包好的镜像,那我们自己的应用如何也打包成一个镜像呢
这就需要我们来制作自定义的镜像了。
Dockerfile介绍
自定义镜像需要依赖一个Dockerfile文件,
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
Dockerfile常用指令
FROM
所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。而 FROM 就是指定基础镜像,因此一个 Dockerfile
中 FROM
是必备的指令,并且必须是第一条指令
。
COPY
顾名思义,COPY就是将本地的一个文件或目录复制到镜像中,这在我们制作镜像时很常用。
RUN
就是在镜像中运行一条命令,它将会生成一层镜像,最好不要用的太多。
CMD
容器启动时,执行的命令,也就是我们通过docker run命令,在容器启动后,第一时间执行的命令。
更多的指令可以参看官方文档:https://docs.docker.com/engine/reference/builder/#from
通过Dockerfile构建自己的镜像
制作前端项目镜像
我们先进入到前端项目目录,cd /root/luhy-vue-demo
里面已经有了一个Dockerfile,其中文件内容如下,大家也可以试着自己编写一下:
|
构建镜像
|
不要溜了中间的点,它表示在当前目前下找Dockerfile文件进行构建生成镜像。
-t 表示生成的镜像名字
运行容器
|
浏览器访问:http://[虚拟机IP]:81
即可看到访问后的页面,正常情况应该是看到vue页面了
制作后端项目镜像
我们先进入到后端项目目录,cd /root/luhy-maven-demo
里面已经有了一个Dockerfile,其中内容如下:
|
构建镜像
|
运行容器
|
浏览器访问:http://[虚拟机IP]:8081
即可看到访问后的页面,正常情况应该是返回了Hello,World
上传镜像
我们构建完了自己的镜像还不够,如何把我们的镜像上传到仓库,在其他任意地方都可以使用,才是其真正价值所在。
它实现了一次构建,处处运行的目标。
镜像仓库又分为2种:公开仓库和私有仓库。
- 公开仓库:dockerHub,官方的仓库,地址为:docker.io,页面访问:https://hub.docker.com
- 私有仓库:几乎每个使用Docker的公司都有自己的私有仓库。比如我们PaaS平台,目前开发环境仓库地址为:docker.paastest.nebulogy.com
这里公开仓库需要大家自己去注册一个账号,我这里就不多演示了。可以先用一下我们的私有仓库。
登录
在上传镜像之前,需要先登录仓库,我们私有仓库的默认账号密码为admin/admin123
通过执行以下命令进行登录:
|
如果出现:Login Succeeded,则表示登陆成功了。
标记镜像
我们之前构建的镜像都是没有带私有仓库前缀的,所以默认就是官方仓库,这里我们要把之前的镜像标记为我们的私有仓库镜像。
|
上传镜像
标记完成后,我们就可以上传镜像到我们的私有仓库了。
|
搜索镜像
我们最后还可以搜索私有仓库中已有的镜像。
|
下载自定义镜像
仓库已经有了我们的镜像,现在我们可以在其他任意有安装Docker的环境下,拉取我们的镜像了。
|
这样就真正的实现了一次构建,处处运行的理念思想了。
高级篇
结合CI/CD自动构建自定义镜像、上传镜像、运行容器