Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。Docker自2013年以来非常火热,无论是从 github 上的代码活跃度,还是Redhat在RHEL6.5中集成对Docker的支持, 就连 Google 的 Compute Engine 也支持 docker 在其之上运行。

 

用户需要考虑虚拟化方法,尤其是硬件虚拟化方法,需要借助其解决的主要是以下4个问题:
  • 隔离性 - 每个用户实例之间相互隔离, 互不影响。 硬件虚拟化方法给出的方法是VM, LXC给出的方法是container,更细一点是kernel namespace
  • 可配额/可度量 - 每个用户实例可以按需提供其计算资源,所使用的资源可以被计量。硬件虚拟化方法因为虚拟了CPU, memory可以方便实现, LXC则主要是利用cgroups来控制资源
  • 移动性 - 用户的实例可以很方便地复制、移动和重建。硬件虚拟化方法提供snapshot和image来实现,docker(主要)利用AUFS实现
  • 安全性 - 这个话题比较大,这里强调是host主机的角度尽量保护container。硬件虚拟化的方法因为虚拟化的水平比较高,用户进程都是在KVM等虚拟机容器中翻译运行的, 然而对于LXC, 用户的进程是lxc-start进程的子进程, 只是在Kernel的namespace中隔离的, 因此需要一些kernel的patch来保证用户的运行环境不会受到来自host主机的恶意入侵, dotcloud(主要是)利用kernel grsec patch解决的.

 为了让我们的Docker可以工作,我们先得准备下环境

 

准备工作:

1、Ubuntu系统包: ubuntu-16.04.2-desktop-amd64.iso

2、virtualbox安装包:VirtualBox-5.1.18-114002-Win.exe

 

这里安装的是64位的Ubuntu,所以 VirtualBox需要支持64位系统的安装,当你安装VirtualBox后,发现找不到64位操作系统的选项,这时候需要调整下BIOS配置。因为有时候我们的设备并没有放开64位虚拟化支持,这时候需要你自己在BIOS中手动修改设置。

 

虚拟机创建步骤:

1、我们对虚拟机命名为:Ubuntu2Docker

2、设置内存:一般现在自己的电脑都在8G,因此,你分配2G的内存给虚拟机不是什么难事,这里我们设置为2048

3、虚拟硬盘的设定,这里选择“创建虚拟硬盘”。虚拟硬盘的选择会有三个选项,这里我们选择:VHD模式。对虚拟硬盘的大小,我们可以设定为动态分配大小。在设置虚拟系统的文件存放位置是在:“C:\Users\Administrator\VirtualBox VMs\Ubuntu2Docker”,这时需要修改文件的存放位置到我们预留给他的磁盘地址,本例中,我们存放在:“G:\software” 。 对文件大小的调整,默认情况下Ubuntu的安装系统需求要比较大一些,因此对于VirtualBox默认设定的8G文件大小是不够的,这里我们分配15G空间

4、到这里VirtualBox的基本设定已经结束,但暂时还无法使用,需要对其他的设置进行调整

 

调整虚拟机配置:

1、在“常规”选项中调整高级设置,将备份的位置调整到“G:\software”

2、在“显示”选项中调整显存大小,这里我们调整到128M

3、在“存储”选项中,为IDE增加虚拟光驱镜像文件:ubuntu-16.04.2-desktop-amd64.iso ,并去掉多余没用的光驱

4、在网络设置选项中,设置网卡2, 选择链接方式为:“仅主机(Host-Only)网络”

5、到这里,所有的配置均已经调整结束,可以点击启动虚拟机。这时,你可以倒杯茶,后面系统的安装非本文重点,此处不表。安装结束后,系统会提示你重新启动系统,弹出磁盘。不用管磁盘,直接重启就OK。

 

 

 为方便后面远程管理我们的虚拟机,装一个ssh服务端是很有必要的。因此,接下来,开始设置ssh。进入虚拟机操作系统后:

1、默认情况下,Ubuntu没有对root用户设置密码,为后面操作简单,我们将root用户设置密码“sudo passwd root”

2、安装ssh服务端:"sudo apt-get install openssh-server -y"

3、确定当前虚拟机的IP地址,打开命令行查看本机IP地址:“ifconfig” 这里得到的地址为:“192.168.56.102”

4、通过使用putty登陆“192.168.56.102”进行验证ssh服务是否正常安装。

5、为方便后面编辑相关配置信息,我们需要装一下vim:“apt-get install vim -y”

 

至此,Docker安装前基本的准备工作完毕!

 

接下来开始安装Docker,步骤如下:

1、安装前首先做一次更新操作:“apt-get update”

2、开始安装Docker:“apt-get install docker.io -y”

3、验证Docker是否安装成功:“docker -v”,如果安装成功,我们会看到docker的安装版本信息。

 

接下来开始为我们下一步部署web应用做准备:

1、下载Ubuntu系统镜像,这里我们采用国内的一个镜像源“daocloud.io”,执行命令如下:“docker pull daocloud.io/ubuntu:latest”

2、执行以下命令,验证镜像是否已经到本地:“docker images”,如果下载成功,我们就会看到刚刚下载下来的Ubuntu镜像

 

现在,我们开始准备web应用所需环境:

1、准备java和Tomcat安装文件:jdk-8u121-linux-x64.tar.gz  apache-tomcat-9.0.0.M18.tar.gz

2、新建一个目录dockerfiles,执行命令:“mkdir dockerfiles” 并将我们准备的2个安装文件放在这个路径下

3、开始准备编写Dockerfile文件:

FROM                 daocloud.io/ubuntu:latest
MAINTAINER           danlley   email: danlley@126.com

# now add java and tomcat support in the container
ADD jdk-8u121-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.0.M18.tar.gz /usr/local/

# configuration of java and tomcat ENV
ENV JAVA_HOME /usr/local/jdk1.8.0_121
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.0.M18
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.0.M18

ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

# container listener port
EXPOSE 8080

# startup web application services by self
CMD /usr/local/apache-tomcat-9.0.0.M18/bin/catalina.sh run

 

4、用Dockerfile生成镜像,执行命令:“docker build .”,注意命令最后有一个点,这个点代表当前文件夹。执行成功后,执行结果如下:

root@danlley-VirtualBox:/home/danlley/dockerfiles# docker build .
Sending build context to Docker daemon 192.5 MB
Step 1 : FROM daocloud.io/ubuntu:latest
 ---> f49eec89601e
Step 2 : MAINTAINER danlley   email: danlley@126.com
 ---> Running in b72c368e9e65
 ---> 6ca59fd1cae6
Removing intermediate container b72c368e9e65
Step 3 : ADD jdk-8u121-linux-x64.tar.gz /usr/local/
 ---> a9631d4c4948
Removing intermediate container 3f6f00fee97f
Step 4 : ADD apache-tomcat-9.0.0.M18.tar.gz /usr/local/
 ---> 462d3601d1f5
Removing intermediate container 49d8cf70e7f0
Step 5 : ENV JAVA_HOME /usr/local/jdk1.8.0_121
 ---> Running in 26e9f967d736
 ---> 882f71382761
Removing intermediate container 26e9f967d736
Step 6 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
 ---> Running in 927971473bb1
 ---> f71834a0321e
Removing intermediate container 927971473bb1
Step 7 : ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.0.M18
 ---> Running in 5842e43e1bc9
 ---> 279996de8b76
Removing intermediate container 5842e43e1bc9
Step 8 : ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.0.M18
 ---> Running in 12fb1d39e3e0
 ---> 0e4609876947
Removing intermediate container 12fb1d39e3e0
Step 9 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
 ---> Running in d400d75444d7
 ---> 1cd56947b031
Removing intermediate container d400d75444d7
Step 10 : EXPOSE 8080
 ---> Running in 356cc1785d2f
 ---> 537086a47954
Removing intermediate container 356cc1785d2f
Step 11 : CMD /usr/local/apache-tomcat-9.0.0.M18/bin/catalina.sh run
 ---> Running in 9472a0c1d38b
 ---> abbbfb1f232d
Removing intermediate container 9472a0c1d38b
Successfully built abbbfb1f232d

 5、为新建出来的镜像打个tag:

root@danlley-VirtualBox:/home/danlley/dockerfiles# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED              SIZE
<none>               <none>              abbbfb1f232d        About a minute ago   512.7 MB
daocloud.io/ubuntu   latest              f49eec89601e        9 weeks ago          129.5 MB
root@danlley-VirtualBox:/home/danlley/dockerfiles# docker tag abbbfb1f232d webapp
root@danlley-VirtualBox:/home/danlley/dockerfiles# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
webapp               latest              abbbfb1f232d        2 minutes ago       512.7 MB
daocloud.io/ubuntu   latest              f49eec89601e        9 weeks ago         129.5 MB

 

 6、启动webapp的docker容器:“docker run -d -p 8090:8080 webapp”,看到下面的执行结果,就可以在虚拟机外面本地的浏览器来访问验证了。

root@danlley-VirtualBox:/home/danlley/dockerfiles# docker run -d -p 8090:8080 webapp
4e7c8bd1e30afc333b28563d0bb1dd776203c5ef7d6977487b480fa3aa8cd171
root@danlley-VirtualBox:/home/danlley/dockerfiles#

 

7、访问地址:http://192.168.56.102:8090/ 这时可以看到Tomcat的默认欢迎界面。

参考资料:

 http://baike.baidu.com/link?url=i32oW4JYuvRlKbIEVoaVRHZW0ipxhxX3Tlj-snZT0maULuWCteH74CCA_y2xHftGzQPaoAlg54M8YMXqQE8qsq

 

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐