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