Docker学习(2)构建并测试Web应用程序
来源:互联网 发布:网络小胖的电视 编辑:程序博客网 时间:2024/06/05 09:08
一、简介
上一篇,我们已经运用docker构建了nginx的web应用,根据书本上的步骤,继续构建Web应用程序。
二、构建Sinatra应用程序
1.mkdir -p sinatra && cd sinatra (mkdir -p 指递归创建目录,如:mkdir -p aa/bb/cc)
2.touch Dockerfile(备注:书本上的dockerfile内容执行完毕后是不对的,redis会报错),更正后的如下:
#书本上的Dockerfile内容,build后会报错,从网上找了资料,现将内容变更为:FROM rubyMAINTAINER James Turnbull james@example.comENV REFRESHED_AT 2014-6-1RUN apt-get updateRUN apt-get -y install ruby-dev build-essential redis-toolsRUN gem install --no-rdoc --no-ri sinatra json redisRUN mkdir -p /opt/webappRUN cp /usr/local/bin/ruby /usr/bin/rubyEXPOSE 4567CMD ["/opt/webapp/bin/webapp"]
可以看到名为xxx/sinatra的镜像文件
4.下载Sinatra Web应用的源代码:
cd sinatra
wget --cut-dirs=3 -nH -r --reject Dockerfile,index.html –-noparent http://dockerbook.com/code/5/sinatra/webapp/
chmod +x webapp/bin/webapp
5.跑起来:sudo docker run -d -p 4567 --name webapp -v $PWD/webapp/:/opt/webapp jamtur01/sinatra
我的命令是:(docker run -d -p 54567:4567 --name webapp -v $PWD/webapp/:/opt/webapp xxx/sinatra)
【xxx/sinatra是镜像名,如果不规定port,如54567,系统会自动配置一个port】
6.docker logs webapp,查看被执行的命令都输出了什么?(docker top webapp等)
7.测试:curl -i -H 'Accept: application/json' -d 'name=Foo&status=Bar' http://localhost:54567/json
三、扩展Sinatra应用程序来使用Redis
不用按照书上的代码去wget内容了,我们在上一次wget的时候已经将文件都down下来了。
<--如图~
1.cd sinatra/redis
vim Dockerfile,内容为:
#按照书上的内容:FROM ubuntu:14.04MAINTAINER James Turnbull "james@example.com"ENV REFRESHED_AT 2014-06-01RUN apt-get -yyq update && apt-get -yqq install redis-server redis-toolsEXPOSE 6379ENTRYPOINT [ "/usr/bin/redis-server" ]CMD []
2.跑起来试试:docker run -d -p 6379 --name redis jamtur01/redis
由于操作服务器上已经在运行redis服务了,为了区分,本地执行命令为:
docker run -d -p 56379:6379 --name redis xxx/redis
执行成功,如图:
我们可以利用reids的工具来测试docker构建的端口为56379的redis服务。
连接OK~
四、将Sinatra应用程序连接到Redis容器
容器之间的连接用网络创建,这被称为Docker Networking,也是Docker1.9发布版本中的一个新特性。
Docker Networking允许用户创建自己的网络,容器可以通过这个网上互相通信。
实质上,Docker Networking以新的用户管理的网络补充了现有的docker0。
更重要的是,现在容器可以跨越不同的宿主机来通信,并且网络配置可以更灵活地定制。
Docker注意Networking也和Docker Compose以及Swarm进行了集成,第7章将对Docker Compose和Swarm进行介绍。
【悲剧了,本地是docker1.7.1的】
本地重新在虚拟机中安装centos7.X,docker版本也成了1.12.6.
额,继续~
相关命令,可以操作试试
1.ip a show docker0
2.docker run -it ubuntu /bin/bash
2.1. apt-get -yqq update && apt-get install -yqq traceroute
2.2. traceroute baidu.com
2.3. exit
3.iptables -t nat -L -n
4.docker inspect redis
五、Docker Networking
1.docker network create app
2.docker network inspect app
3.docker network ls 列出所有的network信息
4.docker network rm xxx 删除一个docker网络
5.先从启动redis容器开始,在之前创建的app网络中添加一些容器,
docker run -d --net=app --name db smart/redis
6.增加一个运行启用了Redis的Sinatra应用程序的容器,要做到这一点,需要先回到sinatra/webapp目录下
6.1.cd sinatra/webapp
6.2.docker run -p 54567:4567 --net=app --name webapp -t -i -v $PWD/webapp:/opt/webapp smart/sinatra /bin/bash
因为之前已经创建过一个叫webapp的容器,所以这里删除了重新生成。如图:
7.cat /etc/hosts,不知道为啥列表中没有db.app的信息,但是ping db.app可行?
8.另外开一个窗口执行
8.1.curl -i -H 'Accept: application/json' -d 'name=Foo&status=Bar' http://localhost:54567/json
8.2.curl -i http://localhost:54567/json
8.1可以成功,8.2与redis配置这块没有成功,待研究
9.将已有容器连接到Docker网络
docker network connect app app2,即将app和app2进行连接
10.通过Docker链接连接容器(先删除之前创建的容器)
10.1. docker stop 容器1 容器2 && docker rm 容器1 容器2
10.2. docker run -d --name redis smart/redis
10.3. docker run -p 54567:4567 --name webapp --link redis:db -it -v $PWD/webapp_redis:/opt/webapp smart/sinatra /bin/bash
10.4. nohup /opt/webapp/bin/webapp &(如果遇到权限问题,请检查本地webapp_redis下的目录级别)
10.5. 新开一个浏览器
curl -i -H 'Accept: application/json' -d 'name=Foo&status=Bar' http://localhost:54567/json
10.6. curl -i http://localhost:54567/json (这次算是成功了)
下一节是docker持续集成,构建docker和Jenkins服务器
新手一枚,欢迎拍砖~ ~ ~
- Docker学习(2)构建并测试Web应用程序
- Docker构建并测试Web应用程序
- Docker构建tomcat镜像并发布web应用
- Docker+Selenium Grid构建分布式Web测试环境
- 在Windows Phone Emulator中构建并测试应用程序
- Docker学习(1)基础命令 和 构建nginx web服务
- 构建Web应用程序结构
- 构建Web应用程序结构
- 利用Ant实现项目自动构建测试备份并发布到项目web(2)
- 利用Ant实现项目自动构建测试备份并发布到项目web(2)
- Docker学习一(安装docker并构建一个可ssh登录的镜像)
- Docker 构建Java Web应用
- Spring学习笔记之构建Spring Web应用程序
- Spring学习笔记(五) 构建Spring Web应用程序
- 构建基于 Docker + Jenkins + Sahi 的 Web UI 自动化测试环境
- 使用docker selenium 构建web自动化分布式测试环境时,遇到的一些问题
- wclipse+wtp构建web应用程序
- jQuery构建未来Web应用程序
- 优先队列的简单用法
- 第九周项目一—二叉树算法库
- 点击图片跳转到web页面
- [PAT]1027. Colors in Mars (20)@Java实现
- Android布局中onClick属性
- Docker学习(2)构建并测试Web应用程序
- MySQL 源码安装
- 开发过程中遇到split()方法丢失结尾空字符串的问题
- BeautifulSoup爬取花千骨小说(学习笔记)
- 前端代码规范
- 代码 label自适应 (计算label的宽和高)
- python 函数
- myEclipse准备工作
- 就鹿晗宣布恋情导致微博宕机事件浅谈大型网站高可用性架构