下面再运行$ sudo docker run -d apache2命令来启动运行apache的container,运行结果如下:
说明:这条命令是在这个镜像上运行一个容器。
再运行sudo docker logs \
9d4d3566e55c0b8829086e9be2040751017989a47b5411c9c4f170ab865afcef 命令,运行结果如下:
说明:这条命令是查看指定docker容器的运行日志。
再运行sudo docker inspect –format=’{{.NetworkSetting.IPAddress}}’\ 9d4d3566e55c0b8829086e9be2040751017989a47b5411c9c4f170ab865afcef命令,运行结果如下:
说明:这条命令是查看当前docker容器被分配的ip地址,以便后续浏览器访问时使用
最后在浏览器中输入地址http://172.17.0.13访问apache的见面:
从最终的结果可以看到从docker中运行的apache已经成功启动,并且可以运行访问了。
三Docker的高级部分
(一)Docker-machine
简介
在传统方式下构建docker环境你需要在你电脑上下载并安装一个docker引擎。这样既费时也费力,而docker-machine的出现使这件事情变的很轻松了。Docker machine 能够在你自己的电脑上,云环境上和数据中心里构建自己的Docker 主机(Docker host)。这构建出的docker主机里面已经自动包含了docker 引擎(Docker Engine) 和配置好的docker 客户端(Docker client)。
Docker-machine的安装和使用
- 接下来讲一下docker machine在linux上的安装
首相讲一下docker machine在Linux系统上的安装方式:
运行如下命令即可:
$ curl -L https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64 >/usr/local/bin/docker-machine && \
chmod +x /usr/local/bin/docker-machine
说明:运行chmod +x /usr/local/bin/docker-machine命令来修改文件的可执行权限。安装完docker-machine文件我们还要下载virtual-box并安装到linux系统上,因为docker-machie核心的一部分是依靠virtualBox虚拟机的,它每创建一个machine就是创建了一个virtualbox的虚拟机然后docker引擎在这个虚拟机上运行的。
1.运行docker-machine create 命令:
$sudo docker-machine create –d virtualbox another2
说明:这条命令是说创建了一个名称为another2的虚拟机,使用的内核是virtualbox。
2.运行:docker-machine env another2命令来查看another2的环境变量
3.运行:docker-machine ssh another命令连接到another上
接下来操作新建的docker-machine就像操作一个有了docker engine的linux系统一样。
二 讲一下docker-machine在windows上的安装,这个安装相对来说比较简单。去官网上直接下载docker-tools,然后直接一步一步安装就可以了。Docker-tools包含了docker-machine和docker-compose。安装完成后桌面上会出现Docker Quickstart Terminal的快捷方式图标。双击它之后会打开docker-tools的终端,如下图:
剩下的部分和上面的是一样的这里就不再重复了。
(二)Docker-swarm
简介:
docker-swarm是docker集群的构建和管理工具,docker swarm提供了本地的集群能力把一组docker单点服务器组成一台超级的虚拟docker服务器。可以用swarm来管理这个超级的docker服务器,可以把最后的应用部署到这个超级docker服务器上。下面就讲一下docker swarm的部署过程,docker swarm集群的部署方式有多种,这里讲一种最最简单的部署方式,这种方式产环境有一定的局限性,这里使用的而是docker-machine来部署:
Docker-swarm的安装和使用
第一步,查询当前环境中有的docker-machine:
第二步:创建一个名字为local的docker-machine:
第三步:给docker-machine设置环境变量:
第四步:在docker-hub上下载swarm镜像,来管理docker集群:
第五步:创建docker-swarm管理节点,命令格式如下:
docker-machine create \
-
d virtualbox \
-
-swarm \
-
-swarm-master \
-
-swarm-discovery token://<TOKEN-FROM-ABOVE> \
swarm-master
这里的token-from-above是fe0cc96a72cf04dba8c1c4aa79536ec3
运行结果如下:
这样docker-swarm master节点创建成功。
第六步:创建一个docker-swarm的节点docker-node,命令格式如下,这里我们创建两个节点agent-00,agent01:
docker-machine create \
-
d virtualbox \
-
-swarm \
-
-swarm-discovery token://<TOKEN-FROM-ABOVE> \
swarm-agent-00
运行结果如下:
表示docker-agent00节点创建成功,docker-agent01的节点创建步骤和docker-agent00的方式相同。经过这六步docker-swarm集群创建成功,它本身包含一个docker-master和两个节点,分别是docker-agent-00和docker-agent-01这两个节点。
下面我们运行一下docker info命令来查看一下docker-swarm的详细信息。
可以看到这三个节点的信息都显示在这里了。
(三)Docker-compose
简介:
一个分布式系统是由很多在一起工作的小应用组成的。Docker把这些应用转换成单独的容器并且把他们连接到一起。为了更加方便的创建和管理这些container而产生了docker compose。在没有docker compose之前每个容器都是单独手动创建的。而docker compose可以更加方便的通过单个文件来生产,组装和运行这些。所以只要你有这个docker compose的配置文件就可以在任何时间,任何地点和任何环境来构建你的服务。
docker compose的安装和使用
第一步先下载docker-compose安装文件,运行如下命令:
curl -
Lhttps:
/
/github.com/docker/compose/releases/download/1.5.
2/docker-compose-
`uname -s`-
`uname -m`>
/usr/local/bin/docker-compose
第二步修改可执行目录的运行权限:
第三步运行docker-compose --version命令来查看docker-compse的当前版本。如果运行成功说明docker-compose安装成功,运行结果如下:
接下来我们使用docker-compose来构建一个基于Python的web应用,后天数据库用的是redis。
第一步我们先创建一个叫composetest的目录,然后进入这个目录构建项目,运行如下命令:
第二步在你的工程目录中创建app.py文件,文件内容如下:
fromflask
importFlask
fromredis
importRedis
app = Flask(__name__)
redis = Redis(host=
'redis', port=
6379)
@app.route('/')
defhello():
redis.incr(
'hits')
return
'Hello World! I have been seen %s times.'
% redis.get(
'hits')
if__name__ ==
"__main__":
app.run(host=
"0.0.0.0", debug=
True)
第三步再创建另个文件名叫requirements.txt文件内容如下:
flask
redis
说明:这两个文件都是运行python环境需要的文件,和docker环境无关,所以这里不做详细介绍,照做就可以了。
第四步通过dockerfile来构建一个docker镜像,需要创建一个dockerfile内容如下:
FROM python:
2.7
ADD . /code
WORKDIR
/code
RUN
pip install -r requirements.txt
CMD
python app.py
说明:FROMpython:
2.7是
安装python:2.7镜像,
ADD . /code
这个是添加 code文件夹
WORKDIR /code是把当前的工作目录移动到/code目录下
RUN
pip install -r requirements.txt 这个命令是吧requirement.txt中包含的软件安装到本地环境中。这里使用的安装工具是pip,如果在您的本机linux环境中没有需要另行安装。
CMD
python app.py 这个命令是用python环境来编译app.py脚本。
第五步通过运行命令来构建容器:
说明:构建的容器名称叫web利用当前目录下的dockerfile文件来构建的。
第六步定义服务
下面在我们的工程目录中定义一个docker-compose.yml
文件内容如下:
web:
build: .
ports:
-
"5000:5000"
volumes:
-
.:/code
links:
-
redis
redis:
image: redis
说明:这里构建了两个服务web和redis,build .表示利用当前目录的dockerfile来构建服务。Posts: -“5000:5000”表示对外开发的端口号为5000,volumes表示共享的容器卷轴是/code路径。Links:-redis是表示和redis镜像做链接,images:redis表示从docker hub上下载redis镜像。
第七步使用compose来构建和运行你的应用
运行结果如下:
说明:这里使用docker-compose up命令还构建service环境,在构建过程中会用到docker-compose.yml文件。
第八步查看已经构建好的进程
使用docker-compose ps命令查看构件好的服务:
能看到如图所示的结构,证明两个服务构建成功了。
四Docker的应用部分
简介:
这章我们使用docker来搭建一个简单的应用,来更深入的理解dacker知识。这个应用就是使用nginx+tomcat-redis来实现负载均衡和session共享。并且把这个应用部署到docker的image中,以方便后续的使用。下面介绍一下整体的实现思路:
先从docker hub上下载一个最新的ubuntu镜像文件,然后通过加载容器(container)进入到这个镜像(image)当中。进入到image当中后,后续的操作就和在linux中的操作完全相同。在这个过程中,通过-p参数来指定容器(container)和Linux主机(docker host)之间的端口对应关系,通过这种设定就可以达到你在外部访问Linux主机的IP+端口号,就能自动的映射到容器的IP+端口号所对应的服务,并且可指定多个对应关系。通过-v可以指定Linux主机的目录和容器的目录对应关系,这种设定可以很好的实现docker主机和容器内部的文件共享。只要在一方改变对应目录内的内容,另一边的目录内容也会随着改变。下面详细介绍一下:
应用搭建:
第一步:下载最新的ubuntu镜像文件:
说明:因为这里已经有ubuntu的镜像文件,所以直接下载最新的。如果没有会在docker hub上下载。
第二步:通过容器登录到ubuntu镜像中,并且在目录中创建一个shareDir目录,这个目录用于和linux主机的目录共享,所以同时在linux主机根目录下也创建一个shareDir目录:
第三步:通过docker ps –a 命令查询刚才关闭的container,这步的作用是通过container id 来把刚才的操作提交到ubuntu:latest镜像文件中,来更新镜像文件。
第四步:通过docker commit 命令和container id来修改镜像文件。
第五步:通过命令再次打开ubuntu:latest镜像,可以看到新创建的shareDir目录已经保存到了镜像中:
第六步:再次通过命令打开ubuntu:latest镜像,在打开的过程中通过-p参数指定端口的映射关系这里指定Linux主机的8889端口和容器的80端口相对应,指定Linux主机的8082端口和容器的8080端口相对应,这样通过Linux主机的ip+端口:8889号就可以访问容器内80端口号对应的服务。所以访问8082端口号就可以访问8080端口号对应的服务。-v /shareDir/:/shareDir/ 指定了linux服务器的/shareDir/路径和容器的/shareDir/路径相对应。
在docker主机(docker host)的shareDir目录下创建demo文件
通过容器(container)进入到dacker镜像(image)中,在shareDir目录下也能看见Demo文件。这就实现了docker镜像(image)和docker主机(host)之间共享一个文件夹。
第七步:下面讲一下在container中构建nginx,首先先更新本地的apt-get库来获得最新的库文件。
在通过apt-get install nginx命令来安装nginx程序。
再运行nginx start命令来启动服务
接下来安装wget,通过apt-get install wget命令
接下来我在容器内部通过wget命令来访问nginx的默认页面:命令为
Wget http://localhost/
可以看到已经可以访问到镜像容器(image container)内的nginx服务,证明服务已经正常启动。
第八步:接下来我们查看一下容器(container)的IP地址:
首先我们先通过docker ps命令来查询当前正在运行的container容器结果如下:
从查询的结果中可以看到,当前只有一个容器(container)在运行。可以看到已经映射的端口8889->80协议是tcp协议和8082->8080协议是tcp协议。
接下来通过docker inspect + container id命令来查看docker 镜像的详细信息,运行结果如下:
从上面的结果可以看到分配给容器(container)的IP是172.17.0.1,下面我们在linux主机(docker host)内通过172.17.0.1:80的地址来访问nginx服务看一下效果。
下面我们再看一下在linux主机外部通过8889端口来访问docker容器内服务的示例:
可以看到因为linux主机(docker host)的ip是192.168.56.146,所以访问地址是http://192.168.56.146:8889/可以成功访问容器内的服务。
第九步:再部署一个tomcat服务和jdk通过8082端口可以访问服务
先在linux主机把apache-tomcat包和jdk包拷贝到共享的shareDir目录下,这样在docker容器内也能看到这两个包
接下来在容器(container)内的usr目录下创建tomcat目录和java目录,然后把这两个包分别解压缩到这两个目录下。
在etc/profile文件中添加如下配置,来配置linux的java环境变量:
添加完以后再linux主机根目录下执行. /etc/profile命令来使得当前的配置生效,然后再执行java –version命令可以查看当前运行的java的版本。
然后进入到tomcat目录下执行bin/startup.sh命令来启动tomcat服务。
通过wget命令查看服务是否启动成功,wget http://localhost:8080/
可以看到服务已经启动成功,下面在linux主机(docker host)内通过容器的ip+端口号来访问容器内的服务:
下面通过映射出来的端口在linux主机(docker host)外访问容器内的服务:
可以看到通过映射出来的端口号是8082,通过http://192.168.56.146:8082就可以访问到容器(container)内的服务。
第九步:结束
|
|
| |
|
构建完这个系统后不要忘记命令docker commit把新构建的container提交到ubuntu:latest镜像文件中,以保存当前的修改。命令格式为docker commit + container id
这样就保存到了原来的镜像里面了。
但是这种把所有服务都安装到一个docker 容器中的做法是不科学的,正确的做法是把不同的服务安装到不同的docker容器中,然后使用Link的方式把这些docker容器都连接起来。这样的做法即增加了服务的稳定性也增加了服务的安全性,我会在后续的文档中把这种搭建方式补充上。按照这种方式部署完以后,这个系统架构图是这样的:
总结
本文档在最开始介绍了一些docker的基础知识,其中包括docker的安装、docker容器和镜像的创建、通过dockerfile来构建一个简单的apache服务。接下来介绍的docker的高级部分,首先是docker-machine,包括安装docker-machine,可以使用docker-machine来安装具有docker环境的虚拟机,达到快速部署的目的。然后是docker-swarm,介绍了通过docker-machine来构建docker-swarm集群,构建的docker-swarm集群可以对这些docker-machine节点进行管理。最后讲了docker-compose,这个是一个批量化构建docker容器的工具,讲了它的一般使用。同时也可以通过docker-compose来操作docker集群。Docker-compose操作docker集群的方法是先登录到docker集群的管理节点上,然后创建docker-compose.yml文件。之后再执行docker-compose up命令,这样在docker-compose.yml中配置的docker容器会自动安装到集群中的节点中。这样就可以节省了很多单个节点安装所浪费的时间。最后通过一个案例讲解了怎样在docker容器内部搭建不同服务和并且通过外网可以访问。
下面再运行$ sudo docker run -d apache2命令来启动运行apache的container,运行结果如下:
说明:这条命令是在这个镜像上运行一个容器。
再运行sudo docker logs \
9d4d3566e55c0b8829086e9be2040751017989a47b5411c9c4f170ab865afcef 命令,运行结果如下:
说明:这条命令是查看指定docker容器的运行日志。
再运行sudo docker inspect –format=’{{.NetworkSetting.IPAddress}}’\ 9d4d3566e55c0b8829086e9be2040751017989a47b5411c9c4f170ab865afcef命令,运行结果如下:
说明:这条命令是查看当前docker容器被分配的ip地址,以便后续浏览器访问时使用
最后在浏览器中输入地址http://172.17.0.13访问apache的见面:
从最终的结果可以看到从docker中运行的apache已经成功启动,并且可以运行访问了。
三Docker的高级部分
(一)Docker-machine
简介
在传统方式下构建docker环境你需要在你电脑上下载并安装一个docker引擎。这样既费时也费力,而docker-machine的出现使这件事情变的很轻松了。Docker machine 能够在你自己的电脑上,云环境上和数据中心里构建自己的Docker 主机(Docker host)。这构建出的docker主机里面已经自动包含了docker 引擎(Docker Engine) 和配置好的docker 客户端(Docker client)。
Docker-machine的安装和使用
- 接下来讲一下docker machine在linux上的安装
首相讲一下docker machine在Linux系统上的安装方式:
运行如下命令即可:
$ curl -L https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64 >/usr/local/bin/docker-machine && \
chmod +x /usr/local/bin/docker-machine
说明:运行chmod +x /usr/local/bin/docker-machine命令来修改文件的可执行权限。安装完docker-machine文件我们还要下载virtual-box并安装到linux系统上,因为docker-machie核心的一部分是依靠virtualBox虚拟机的,它每创建一个machine就是创建了一个virtualbox的虚拟机然后docker引擎在这个虚拟机上运行的。
1.运行docker-machine create 命令:
$sudo docker-machine create –d virtualbox another2
说明:这条命令是说创建了一个名称为another2的虚拟机,使用的内核是virtualbox。
2.运行:docker-machine env another2命令来查看another2的环境变量
3.运行:docker-machine ssh another命令连接到another上
接下来操作新建的docker-machine就像操作一个有了docker engine的linux系统一样。
二 讲一下docker-machine在windows上的安装,这个安装相对来说比较简单。去官网上直接下载docker-tools,然后直接一步一步安装就可以了。Docker-tools包含了docker-machine和docker-compose。安装完成后桌面上会出现Docker Quickstart Terminal的快捷方式图标。双击它之后会打开docker-tools的终端,如下图:
剩下的部分和上面的是一样的这里就不再重复了。
(二)Docker-swarm
简介:
docker-swarm是docker集群的构建和管理工具,docker swarm提供了本地的集群能力把一组docker单点服务器组成一台超级的虚拟docker服务器。可以用swarm来管理这个超级的docker服务器,可以把最后的应用部署到这个超级docker服务器上。下面就讲一下docker swarm的部署过程,docker swarm集群的部署方式有多种,这里讲一种最最简单的部署方式,这种方式产环境有一定的局限性,这里使用的而是docker-machine来部署:
Docker-swarm的安装和使用
第一步,查询当前环境中有的docker-machine:
第二步:创建一个名字为local的docker-machine:
第三步:给docker-machine设置环境变量:
第四步:在docker-hub上下载swarm镜像,来管理docker集群:
第五步:创建docker-swarm管理节点,命令格式如下:
docker-machine create \
-
d virtualbox \
-
-swarm \
-
-swarm-master \
-
-swarm-discovery token://<TOKEN-FROM-ABOVE> \
swarm-master
这里的token-from-above是fe0cc96a72cf04dba8c1c4aa79536ec3
运行结果如下:
这样docker-swarm master节点创建成功。
第六步:创建一个docker-swarm的节点docker-node,命令格式如下,这里我们创建两个节点agent-00,agent01:
docker-machine create \
-
d virtualbox \
-
-swarm \
-
-swarm-discovery token://<TOKEN-FROM-ABOVE> \
swarm-agent-00
运行结果如下:
表示docker-agent00节点创建成功,docker-agent01的节点创建步骤和docker-agent00的方式相同。经过这六步docker-swarm集群创建成功,它本身包含一个docker-master和两个节点,分别是docker-agent-00和docker-agent-01这两个节点。
下面我们运行一下docker info命令来查看一下docker-swarm的详细信息。
可以看到这三个节点的信息都显示在这里了。
(三)Docker-compose
简介:
一个分布式系统是由很多在一起工作的小应用组成的。Docker把这些应用转换成单独的容器并且把他们连接到一起。为了更加方便的创建和管理这些container而产生了docker compose。在没有docker compose之前每个容器都是单独手动创建的。而docker compose可以更加方便的通过单个文件来生产,组装和运行这些。所以只要你有这个docker compose的配置文件就可以在任何时间,任何地点和任何环境来构建你的服务。
docker compose的安装和使用
第一步先下载docker-compose安装文件,运行如下命令:
curl -
Lhttps:
/
/github.com/docker/compose/releases/download/1.5.
2/docker-compose-
`uname -s`-
`uname -m`>
/usr/local/bin/docker-compose
第二步修改可执行目录的运行权限:
第三步运行docker-compose --version命令来查看docker-compse的当前版本。如果运行成功说明docker-compose安装成功,运行结果如下:
接下来我们使用docker-compose来构建一个基于Python的web应用,后天数据库用的是redis。
第一步我们先创建一个叫composetest的目录,然后进入这个目录构建项目,运行如下命令:
第二步在你的工程目录中创建app.py文件,文件内容如下:
fromflask
importFlask
fromredis
importRedis
app = Flask(__name__)
redis = Redis(host=
'redis', port=
6379)
@app.route('/')
defhello():
redis.incr(
'hits')
return
'Hello World! I have been seen %s times.'
% redis.get(
'hits')
if__name__ ==
"__main__":
app.run(host=
"0.0.0.0", debug=
True)
第三步再创建另个文件名叫requirements.txt文件内容如下:
flask
redis
说明:这两个文件都是运行python环境需要的文件,和docker环境无关,所以这里不做详细介绍,照做就可以了。
第四步通过dockerfile来构建一个docker镜像,需要创建一个dockerfile内容如下:
FROM python:
2.7
ADD . /code
WORKDIR
/code
RUN
pip install -r requirements.txt
CMD
python app.py
说明:FROMpython:
2.7是
安装python:2.7镜像,
ADD . /code
这个是添加 code文件夹
WORKDIR /code是把当前的工作目录移动到/code目录下
RUN
pip install -r requirements.txt 这个命令是吧requirement.txt中包含的软件安装到本地环境中。这里使用的安装工具是pip,如果在您的本机linux环境中没有需要另行安装。
CMD
python app.py 这个命令是用python环境来编译app.py脚本。
第五步通过运行命令来构建容器:
说明:构建的容器名称叫web利用当前目录下的dockerfile文件来构建的。
第六步定义服务
下面在我们的工程目录中定义一个docker-compose.yml
文件内容如下:
web:
build: .
ports:
-
"5000:5000"
volumes:
-
.:/code
links:
-
redis
redis:
image: redis
说明:这里构建了两个服务web和redis,build .表示利用当前目录的dockerfile来构建服务。Posts: -“5000:5000”表示对外开发的端口号为5000,volumes表示共享的容器卷轴是/code路径。Links:-redis是表示和redis镜像做链接,images:redis表示从docker hub上下载redis镜像。
第七步使用compose来构建和运行你的应用
运行结果如下:
说明:这里使用docker-compose up命令还构建service环境,在构建过程中会用到docker-compose.yml文件。
第八步查看已经构建好的进程
使用docker-compose ps命令查看构件好的服务:
能看到如图所示的结构,证明两个服务构建成功了。
四Docker的应用部分
简介:
这章我们使用docker来搭建一个简单的应用,来更深入的理解dacker知识。这个应用就是使用nginx+tomcat-redis来实现负载均衡和session共享。并且把这个应用部署到docker的image中,以方便后续的使用。下面介绍一下整体的实现思路:
先从docker hub上下载一个最新的ubuntu镜像文件,然后通过加载容器(container)进入到这个镜像(image)当中。进入到image当中后,后续的操作就和在linux中的操作完全相同。在这个过程中,通过-p参数来指定容器(container)和Linux主机(docker host)之间的端口对应关系,通过这种设定就可以达到你在外部访问Linux主机的IP+端口号,就能自动的映射到容器的IP+端口号所对应的服务,并且可指定多个对应关系。通过-v可以指定Linux主机的目录和容器的目录对应关系,这种设定可以很好的实现docker主机和容器内部的文件共享。只要在一方改变对应目录内的内容,另一边的目录内容也会随着改变。下面详细介绍一下:
应用搭建:
第一步:下载最新的ubuntu镜像文件:
说明:因为这里已经有ubuntu的镜像文件,所以直接下载最新的。如果没有会在docker hub上下载。
第二步:通过容器登录到ubuntu镜像中,并且在目录中创建一个shareDir目录,这个目录用于和linux主机的目录共享,所以同时在linux主机根目录下也创建一个shareDir目录:
第三步:通过docker ps –a 命令查询刚才关闭的container,这步的作用是通过container id 来把刚才的操作提交到ubuntu:latest镜像文件中,来更新镜像文件。
第四步:通过docker commit 命令和container id来修改镜像文件。
第五步:通过命令再次打开ubuntu:latest镜像,可以看到新创建的shareDir目录已经保存到了镜像中:
第六步:再次通过命令打开ubuntu:latest镜像,在打开的过程中通过-p参数指定端口的映射关系这里指定Linux主机的8889端口和容器的80端口相对应,指定Linux主机的8082端口和容器的8080端口相对应,这样通过Linux主机的ip+端口:8889号就可以访问容器内80端口号对应的服务。所以访问8082端口号就可以访问8080端口号对应的服务。-v /shareDir/:/shareDir/ 指定了linux服务器的/shareDir/路径和容器的/shareDir/路径相对应。
在docker主机(docker host)的shareDir目录下创建demo文件
通过容器(container)进入到dacker镜像(image)中,在shareDir目录下也能看见Demo文件。这就实现了docker镜像(image)和docker主机(host)之间共享一个文件夹。
第七步:下面讲一下在container中构建nginx,首先先更新本地的apt-get库来获得最新的库文件。
在通过apt-get install nginx命令来安装nginx程序。
再运行nginx start命令来启动服务
接下来安装wget,通过apt-get install wget命令
接下来我在容器内部通过wget命令来访问nginx的默认页面:命令为
Wget http://localhost/
可以看到已经可以访问到镜像容器(image container)内的nginx服务,证明服务已经正常启动。
第八步:接下来我们查看一下容器(container)的IP地址:
首先我们先通过docker ps命令来查询当前正在运行的container容器结果如下:
从查询的结果中可以看到,当前只有一个容器(container)在运行。可以看到已经映射的端口8889->80协议是tcp协议和8082->8080协议是tcp协议。
接下来通过docker inspect + container id命令来查看docker 镜像的详细信息,运行结果如下:
从上面的结果可以看到分配给容器(container)的IP是172.17.0.1,下面我们在linux主机(docker host)内通过172.17.0.1:80的地址来访问nginx服务看一下效果。
下面我们再看一下在linux主机外部通过8889端口来访问docker容器内服务的示例:
可以看到因为linux主机(docker host)的ip是192.168.56.146,所以访问地址是http://192.168.56.146:8889/可以成功访问容器内的服务。
第九步:再部署一个tomcat服务和jdk通过8082端口可以访问服务
先在linux主机把apache-tomcat包和jdk包拷贝到共享的shareDir目录下,这样在docker容器内也能看到这两个包
接下来在容器(container)内的usr目录下创建tomcat目录和java目录,然后把这两个包分别解压缩到这两个目录下。
在etc/profile文件中添加如下配置,来配置linux的java环境变量:
添加完以后再linux主机根目录下执行. /etc/profile命令来使得当前的配置生效,然后再执行java –version命令可以查看当前运行的java的版本。
然后进入到tomcat目录下执行bin/startup.sh命令来启动tomcat服务。
通过wget命令查看服务是否启动成功,wget http://localhost:8080/
可以看到服务已经启动成功,下面在linux主机(docker host)内通过容器的ip+端口号来访问容器内的服务:
下面通过映射出来的端口在linux主机(docker host)外访问容器内的服务:
可以看到通过映射出来的端口号是8082,通过http://192.168.56.146:8082就可以访问到容器(container)内的服务。
第九步:结束
|
|
| |
|
构建完这个系统后不要忘记命令docker commit把新构建的container提交到ubuntu:latest镜像文件中,以保存当前的修改。命令格式为docker commit + container id
这样就保存到了原来的镜像里面了。
但是这种把所有服务都安装到一个docker 容器中的做法是不科学的,正确的做法是把不同的服务安装到不同的docker容器中,然后使用Link的方式把这些docker容器都连接起来。这样的做法即增加了服务的稳定性也增加了服务的安全性,我会在后续的文档中把这种搭建方式补充上。按照这种方式部署完以后,这个系统架构图是这样的:
总结
本文档在最开始介绍了一些docker的基础知识,其中包括docker的安装、docker容器和镜像的创建、通过dockerfile来构建一个简单的apache服务。接下来介绍的docker的高级部分,首先是docker-machine,包括安装docker-machine,可以使用docker-machine来安装具有docker环境的虚拟机,达到快速部署的目的。然后是docker-swarm,介绍了通过docker-machine来构建docker-swarm集群,构建的docker-swarm集群可以对这些docker-machine节点进行管理。最后讲了docker-compose,这个是一个批量化构建docker容器的工具,讲了它的一般使用。同时也可以通过docker-compose来操作docker集群。Docker-compose操作docker集群的方法是先登录到docker集群的管理节点上,然后创建docker-compose.yml文件。之后再执行docker-compose up命令,这样在docker-compose.yml中配置的docker容器会自动安装到集群中的节点中。这样就可以节省了很多单个节点安装所浪费的时间。最后通过一个案例讲解了怎样在docker容器内部搭建不同服务和并且通过外网可以访问。