48

面向开发人员的 Docker 入门级实战,真香

 4 years ago
source link: https://mp.weixin.qq.com/s/Ay52fP0XQRZJf8bkTqWwuA
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

好记性不如烂笔头,记录下来的才是永恒!这里是JavaQ大本营,诚邀关注。本文已收录入GitHub:https://github.com/wind7rui/JavaHub。

聊聊Oracle

2013年“去IOE”这个话题在IT圈火热起来,它是由阿里巴巴提出的概念,意思是在IT架构中,去掉IBM的小型机、Oracle数据库、EMC存储设备,以自己在开源软件基础上开发的系统取而代之。虽然,Oracle数据库以容量大、稳定、安全、性能高自居,但是这些高性能指标都需要厚实的资金支撑(硬件不断扩展资金、技术咨询和服务费),所以当年很多私有、民办企业紧跟其后,逐渐不再使用Oracle。

回想过去,为了可以随时使用Oracle数据库,不得不在自己的笔记本电脑上安装,不知道各位有没有经历过其安装过程,安装过程很漫长,而且可能会遇到各种奇葩的错误信息,有错误中断安装后,需要再次重新安装。安装过程中会在系统上安装很多辅助软件,有些还被设置成了开机自启动服务。在经历过各种安装重启之后,好不容易安装完成,启动起来试试吧,接下来等待的就是漫长的启动过程,因为它需要加载很多东西,这时候如果电脑配置不行,散热风扇就开始嘶吼了。总结一下,个人笔记本电脑上使用物理安装的方式使用Oracle数据库,不容易!

选Vagrant,还是Docker

如果不是有特殊需求,我是不会再碰Oracle了。这不,最近因某些特殊原因不得不再次安装使用Oracle。不过,现在都2020年了,谁还直接物理安装啊!我很早之前的文章《开发环境利器vagrant》和《再谈Vagrant》详细介绍了不通过物理安装,直接使用Vargant快速打造开发环境,利用虚拟化技术将这些开发环境和软件安装到虚拟机上,通过Vagrant可以轻松实现对虚拟机的管理、自动化配置和安装开发环境及各类软件,这种Vagrant简单快捷、占用的物理资源也少,用的不爽了可以随时移除。

不过,Vagrant不是今天的主角,我们要聊的是Docker!Docker是什么?Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上。举个简单的例子,我们把开发好的war包或可执行jar包在安装了JDK的Linux系统上部署,并将相关的依赖及配置也都配置好,然后直接将他们打包成一个镜像,拿着这个镜像就可以随时部署了,不用在部署的机器上安装一系列复杂的软件环境了(JDK、数据库、Redis等),不用再担心“我这可以运行,你那怎么就不行”,也不需要再考虑各种兼容性问题,因为这个镜像就是一个可直接交付的包含运行环境的成品,真正做到一次创建镜像,任意正常运行。Docker提供了镜像仓库,仓库中有很多打包好的、可以拿过来直接部署的镜像,例如Oracle、Nginx等。当然,这只是Docker的部分功能,更多有关Docker的介绍请移步搜索引擎。

Vagrant和Docker都使用了虚拟化技术,Vagrant是基于Virtualbox的虚拟机技术,Docker则是基于轻量级容器虚拟技术,两者的区别就像进程和线程,虚拟机内可以包含很多容器,正如一个进程中可以包含很多线程,所以前者基于虚拟机显重,后者基于容器虚拟技术显轻。不过,它们的侧重点不同,Vagrant是开发环境的部署工具,这一点可以通过它官网的介绍而知,而Docker是运行环境的部署工具。

v2yuUbz.png!web

安装Docker

相对于Vagrant的使用,Docker的操作成本会小很多,最主要的是Docker使用起来快、省。所以,本篇内容是在Windows7系统上使用使用Docker部署Oracle。为什么是Windows7,而不是Windows10?虽然Win10很炫,但是我更喜欢低调实用的Win7,不知道你们是不是也这么认为。不过,如果你是Win10用户也没关系,因为本篇内容也会带着介绍win10上如何部署,不要走开哦!

在Windows系统上安装Docker,操作系统的版本不同方式也不一样。Win7和Win8系统不支持Hyper-V,所以只能安装Docker Toolbox的方式使用Docker,它利用VirtualBox建立Linux虚拟机,在Linux虚拟机中安装Docker服务端和客户端。Win10操作系统可以利用Hyper-V虚拟化技术,所以直接安装Docker for Windows,它在Windows上安装docker服务端和客户端,安装前需要开启Hyper-V,具体操作:控制面板-程序-程序和功能-启用或关闭Windows功能-Hyper-V。

Win7/Win8上安装Docker Toolbox,目前最高版本是v19.03.1,根据官网的指引需要到github上下载,231MB需要下载很久,因为很慢!所以,我们需要借助国内的下载地址,访问 https://get.daocloud.io/toolbox/下载DockerToolbox-19.03.1.exe。

Win10系统安装Docker for Windows,在这里下载 https://get.daocloud.io/#install-docker-for-mac-windows。

如果你是MacOS系统,系统版本低于OS X 10.10.3,在这里 https://get.daocloud.io/toolbox/ 下载安装DockerToolbox-19.03.1.pkg,如果系统是OS  X 10.10.3或者更高版本,需要下载安装Docker for Mac,在这里下载 https://get.daocloud.io/#install-docker-for-mac-windows。

对于Windows系统,在安装前需要确认BIOS设置中是否开启了“Virsualization Technology”,具体操作:开机快速按BIOS设置键(各个品牌电脑不同,如果不知道通过搜索引擎查询),进入BIOS界面,依次选择Configuration -> Intel Virtual Technology -> Enabled(注意:因主板不同,名称和位置可能不一样,主要找Virtual字样的设置)。

Win7/Win8系统双击下载的DockerToolbox-19.03.1.exe,根据指引安装,如果VirualBox或Git已经安装,可以不勾选安装,下图中这个选项建议勾选。

V3UNRvA.png!web

安装完成后,桌面上会出现Docker Quickstart Terminal快捷键图标,首次双击它进入命令行窗口后,界面提示正在创建一个名字叫default的虚拟机,创建过程会自动从github上下载boot2docker.iso文件,这个过程非常缓慢,而且大多数情况下会出现timeout,如果不能正常下载,虚拟机创建失败。

QJjQr2r.png!web

如果碰巧你可以非常快速的下载完成,下面的这步骤可以省了。其实,仔细查看官方的DockerToolbox-19.03.1.exe说明,安装包是包含boot2docker.iso文件的。

jiMjmir.png!web

安装DockerToolbox-19.03.1.exe后,boot2docker.iso文件被存放到了安装目录下,例如我安装时选择的目录是C:\Program Files\Docker Toolbox,直接将boot2docker.iso拷贝到C:\Users\Administrator.docker\machine\cache下(其中,Administrator是我的用户名,可能和你的不一样),然后断开有线网和无线网,重新打开Docker Quickstart Terminal,就可以创建成功了(如果你尝试了还不行,评论留言@我直接发你),创建的default虚拟机IP默认是192.168.99.100,启动成功后的界面如下图。

qAj2Irn.png!web

Win10系统双击下载的Docker for Windows Installer安装文件,根据指引安装。安装完成后,Docker会自动启动,并且右下角通知栏上会出现个小鲸鱼的图标,这个小图标可以右击选择settings,在这里可以做更多配置,例如设置国内镜像地址。win+R快捷键打开运行窗口,输入cmd,在命令行窗口输入docker --version验证安装是否成功,正常输出Docker版本则安装成功。

部署Oracle

本文通过使用Docker部署Oracle来学习一下Docker的入门级使用。开始下面的内容之前,我们先了解一下Docker中的镜像、容器和仓库。镜像是一个特殊的模板文件,它里面包含了运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等),例如一个MySQL镜像,它包含一个完整的Linux系统,在这个系统上安装了MySQL数据库和其它相关的资源文件和配置。容器是由镜像创建的运行实例,运行镜像就会创建一个容器。镜像和容器的关系,打个比方,就像Java中的类和对象的关系。仓库,这个很好理解了,既然镜像是模板,那么就需要有存储的地方,仓库就是管理镜像的地方,我们可以从仓库中下载镜像,也可以向仓库提交镜像。

默认情况下,我们使用Docker时,它会使用自己的镜像仓库地址,但是从这个地址下载镜像会很慢,所以,我们需要配置国内的镜像加速器地址。国内的加速器这里推荐使用阿里云,具体如何获取阿里云镜像加速器地址,看这里 https://help.aliyun.com/document_detail/60750.html获取到阿里云镜像加速器后,Win7/Win8系统在打开Docker Quickstart Terminal后执行如下命令:

sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS=' --registry-mirror=自己的加速器地址 |g" /var/lib/boot2docker/profile

然后执行exit,可以看到退出了default虚拟机,接着依次执行如下命令:

docker-machine env default
eval $("C:\Program Files\Docker Toolbox\docker-machine.exe" env default) --这一步是根据docker-machine env default执行后,提示需要执行的,如果你没有这个提示,请忽略
docker-machine restart default
docker-machine env --这一步是根据docker-machine restart default执行后,提示需要执行的,如果你没有这个提示,请忽略

查看是否配置成功,使用docker info命令,如果输出的信息(内容很长,慢慢找)中有--registry-mirror=自己的加速器地址,那就表明配置成功了。

Win10操作系统,还记得我上面说的那个右下角的小鲸鱼的图标嘛,右键选择settings,打开配置窗口后左侧导航菜单选择“Docker Daemon”。编辑窗口内的JSON串,填写下方加速器地址,编辑完成后点击Apply保存按钮,等待Docker重启并应用配置的镜像加速器。

{
  "registry-mirrors": ["自己的加速器地址"]
}

Docker Hub是Docker官方维护的一个公共仓库,存放着Docker及其组件的所有资源,包括镜像,我们要想使用Docker Hub中的镜像,首先需要先注册一个账号,注册地址 https://hub.docker.com/ ,记住注册的Docker ID和密码,后面会用到。

注册完成后,在 https://hub.docker.com/search 页面搜索Oracle镜像。

36nIBjF.png!web

页面会列出很多镜像,我们根据需要选择某一个,我这里选择wnameless/oracle-xe-11g-r2这个镜像,点击进入详情页面,在这个页面会详细的描述这个镜像如何使用,以及镜像里有什么。

nE7Jzyj.png!web

因为Docker Quickstart Terminal和命令行窗口都不是很好用,所以,我们可以使用常用的ssh软件登录到创建的default虚拟机,我这里使用SecureCRT,其它软件如XShell也可以。登录主机名:192.168.99.100,端口:22,用户名:docker,密码:tcuser,登录成功后如下图。

YzEJBbE.png!web

输入docker login命令,根据指引完成登录Docker Hub操作。

VZJ7fe2.png!web

根据刚刚在Docker Hub页面搜索wnameless/oracle-xe-11g-r2得到的使用指引,我们需要先输入docker pull wnameless/oracle-xe-11g-r2命令从镜像仓库中拉取该镜像到本地,拉取完成后,输入docker images查看本地有哪些镜像可以使用。

MNNNFvi.png!web

输入docker run -d -p 1522:22 -p 1521:1521 --name awesome_lalande wnameless/oracle-xe-11g-r2命令,部署Oracle镜像,创建一个新的容器,得到一个可使用的Oracle数据库服务,启动过程之快令人惊讶,秒级别的。

上面命令参数解释:

  • docker run:创建一个新的容器并运行命令;

  • -d:后台运行容器,并返回容器ID;

  • -p:指定端口映射,格式为:主机(宿主)端口:容器端口,如1521:1521;

  • --name:指定容器的名称,如awesome_lalande;

  • wnameless/oracle-xe-11g-r2:要运行的镜像;

输入docker ps查看有哪些正在运行的容器,如 果想列出所有的容器,包括未运行的,可以使用docker ps -a。

EVVryyb.png!web

可以看到我们刚刚通过docker run命令部署的wnameless/oracle-xe-11g-r2镜像已经启动成功了,创建的容器ID为1050ac76bdcf。

如果你想看容器的运行启动日志,输入“docker logs CONTAINER_ID”,CONTAINER_ID就是docker ps输出的CONTAINER_ID。

7jYF3u.png!web

如果你想进入到Oracle容器中,也就是运行Oracle的Linux系统中,输入“docker exec -it CONTAINER_ID /bin/bash”,CONTAINER_ID同样是docker ps输出的CONTAINER_ID。退出容器,输入exit。

vMV7z26.png!web

如果想停止运行中的容器,可以输入docker stop 容器名称,例如docker stop awesome_lalande,这个 awesome_lalande 是我们上面使用docker run时通过--name参数指定的容器名称,如果你不确定容器名称,可以通过docker ps命令查看,输出的最后一列就是容器名称。

YvqyYfB.png!web

启动一个已停止运行的容器,可以输入docker start 容器名称,例如docker start awesome_lalande。当日也可以使用docker restart命令重启容器,例如docker restart awesome_lalande。

到这里,我们就可以使用数据库操作客户端连接Oracle数据库并使用了。我这里使用Navicat,连接信息如下:hostname:192.168.99.10,port:1521,sid:xe,username:system,password:oracle。

YNV3UzV.png!web

小结

本篇内容基于Oracle镜像,当然你有可以试试其它镜像,例如MySQL、Nginx等,使用方式都是一样的,具体如何使用镜像,可以根据上面说的,查看Docker Hub中搜索得到的镜像详细描述。

本篇内容只是一个入门级的使用,Docker有很多很强大的功能,后续我也会结合实际工作中的使用经历不断分享,欢迎朋友们继续关注!

如果你还不知道Docker是什么,或者还没使用过,真的需要好好补补课了,不是因为它流行,而是真的很好用,真香!

聊个题外话,关注我的朋友可能发现了,我更新文章不是很固定,有时一周一更,有时两周一更,我不是专门做自媒体的,写作只为了记录(记忆不可靠)和分享(开源),所以没必要为了讨好别人浪费时间到处找文章、转发别人未授权的文章,一天一更。

以前看到好的文章也会分享、做排版,但是后来想想基本是在消耗我的时间,自己也没有得到技术积累,从那之后索性只分享自己的原创。我也会在圈里分享我写的文章,毕竟这些都是我早上早起挤时间整理的。 所以 关注我你会看到一手原创、有料的技术文章

学之多,而后知之少 !朋友们点【 在看 】是我持续更新的最大动力,我们下期见!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK