重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇文章为大家展示了如何在测试中使用Docker,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
为义安等地区用户提供了全套网页设计制作服务,及义安网站建设行业解决方案。主营业务为成都网站设计、成都网站制作、外贸网站建设、义安网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
接下来看看怎么在实际的开发和测试中使用 Docker 这一利器。
使用 Docker 测试静态网站
新建目录 sample 和 nginx,将 nginx 配置放在 nginx 目录下面。
├── sample │ ├── Dockerfile │ └── nginx │ ├── global.conf │ └── nginx.conf
Dockerfile
# Version: 0.01 FROM ubuntu MAINTAINER HUANG "ituzhi@163.com" ENV REFRESHED_AT 2015-10-12 RUN apt-get update RUN apt-get -y -q install nginx RUN mkdir -p /var/www/html ADD nginx/global.conf /etc/nginx/conf.d/ ADD nginx/nginx.conf /etc/nginx/nginx.conf EXPOSE 80
sudo docker build -t HUANG/nginx .
目录下新建文件夹 website 存放网页文件 index.html
. ├── Dockerfile ├── nginx │ ├── global.conf │ └── nginx.conf └── website └── index.html
网页文件
Test website This is a test website
创建容器,在sample目录下执行命令
sudo docker run -d -p 80 --name web -v $PWD/website:/var/www/html/website HUANG/nginx nginx
-v
将宿主机的 $PWD/website
目录作为卷挂载到了容器的 /var/www/html/website
下。这样可以直接在宿主机中对网站进行修改。
#使用 Docker 构建并测试 Web 程序
FROM ubuntu MAINTAINER HUANG "ituzhi@163.com" RUN adduser web --home /home/web --shell /bin/bash --disabled-password --gecos "" RUN apt-get update --fix-missing RUN apt-get -y install ruby ruby-dev build-essential redis-tools RUN gem install --no-rdoc --no-ri sinatra json redis RUN mkdir -p /var/www/webapp RUN chmod -R 777 /var/www/webapp RUN chown -R web:web /var/www/webapp USER web EXPOSE 4567 CMD [ "/var/www/webapp/bin/webapp" ]
启动一个新的容器 sudo docker run -p 4567 -d --name titusapp9 -v $PWD/webapp:/var/www/webapp HUANG/sinatra
查看容器映射到宿主机的端口
sudo docker port titusapp9 4567
0.0.0.0:49154
访问容器中的webapp
huangyi@HP ~/Practice/Docker/sinatra $ curl -i -H 'Accept: application/json' \ -d 'name=HUANG&status=bar' http://localhost:49154/json HTTP/1.1 200 OK Content-Type: text/html;charset=utf-8 Content-Length: 36 X-Xss-Protection: 1; mode=block X-Content-Type-Options: nosniff X-Frame-Options: SAMEORIGIN Server: WEBrick/1.3.1 (Ruby/1.9.3/2013-11-22) Date: Wed, 21 Oct 2015 13:48:41 GMT Connection: Keep-Alive {"name":"HUANG","status":"bar"}
curl参数含义
Usage: curl [options...]-i, --include Include protocol headers in the output (H/F) -H, --header LINE Custom header to pass to server (H) 这两个参数将指定的HTTP头传给webapp -d, --data DATA HTTP POST data (H)
相当于在浏览器中输入,只不过curl调用的是post方法,而浏览器调用get方法。
http://localhost:49154/json?name=HUANG&status=bar
返回数据由CGI构造
require "rubygems" require "sinatra" require "json" class App < Sinatra::Application set :bind, '0.0.0.0' get '/' do "DockerBook Test Sinatra app
" end post '/json/?' do params.to_json end end
即echo请求数据。
#构建 Redis 镜像和容器
Dockerfile
FROM ubuntu MAINTAINER HUANG "ituzhi@163.com" RUN apt-get update RUN apt-get -y install redis-server redis-tools EXPOSE 6379 ENTRYPOINT ["/usr/bin/redis-server"] CMD []
ENTRYPOINT和CMD作用类似,相当于容器的自启动程序。
构建镜像
sudo docker build -t HUANG/redis .
从镜像构建容器
sudo docker run -d -p 6379 --name redis HUANG/redis
查看Redis的端口映射到宿主机哪个端口
huangyi@HP ~/Practice/Docker/redis $ sudo docker port redis 6379 0.0.0.0:49155
在宿主机上运行 Redis 客户端连接到容器中的 Redis 服务器端。
redis-cli -h 127.0.0.1 -p 49155
#让 Docker 容器互联
首先启动 Redis 容器,不指定端口
sudo docker run -d --name redis HUANG/redis
启动 WebApp 容器,连接到 Redis 容器上。
sudo docker run -p 4567 --name WebappDB --link redis:db -t -i -v $PWD/webapp:/var/www/webapp HUANG/sinatra /bin/bash
redis:db
中的 redis 是要连接的容器, db 是连接后的别名。 WebappDB 容器可以访问 redis 容器的所有端口。
在 WebappDB 容器中查看连接父子容器后在 /etc/hosts
中做的改变
web@2c3f5f9a136f:/$ cat /etc/hosts 172.17.0.3 2c3f5f9a136f ... 172.17.0.2 db
第一项是 WebappDB 容器的 IP 地址和主机名。第二项是 redis 容器的 IP 地址和别名。
在 app.rb
中添加以下代码存储数据。
require "rubygems" require "sinatra" require "json" require "redis" class App < Sinatra::Application redis = Redis.new(:host => 'db', :port => '6379') set :bind, '0.0.0.0' get '/' do "DockerBook Test Redis-enabled Sinatra app
" end get '/json' do params = redis.get "params" params.to_json end post '/json/?' do redis.set "params", [params].to_json params.to_json end end
上述内容就是如何在测试中使用Docker,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。