应用场景:
1.使用docker测试一个静态网站
2.使用docker创建并测试一个Web应用
3.将docker用于持续集成
写在最前:本文所有镜像构建不成功或自己无法解决的问题,请配置DaoCloud镜像站
docker search jamtur01镜像
1.使用docker测试一个静态网站
1.1Sample网站初始化Dockerfile
创建目录
Dockerfile内容
1.2 构建Sample网站与Nginx镜像
docker build -t jamtur01/nginx .
如果发现构建过程 到 apt-get update 卡住
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt-get clean
1.3从Sample网站和Nginx镜像构建容器
mkdir website && cd website
wget https://github.com/turnbullpress/dockerbook-code/tree/master/code/5/sample/website/index.html
构建容器
docker run -d -p 80 --name website \
-v $PWD/website:/var/www/html/website \
jamtur01/nginx:latest nginx
-v 允许宿主机的目录挂载到容器 如果设置只读 在 :/var/www/html/website :ro
浏览器输入 上面端口
1.4修改网站
只需把 -v 下面指定的卷 的index.html 修改,无需重新构建镜像即可更改
2 使用docker构建并测试web 应用程序
2.1构建Sinatra应用程序
Sinatra是一个基于Ruby语言的DSL( 领域专属语言),可以轻松、快速的创建web应用。
不遵循MVC模式,而关注与让开发者创建快速、简单的web应用。
mkdir -p sinatra
cd sinatra
vim Dockerfile
gem install 卡住
RUN gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
设置国内镜像源, 把Ubuntu版本换成18.04 14.04会发生ruby版本问题
docker build -t jamtur01/sinatra .
2.2创建Sinatra容器
cd sinatra
wget --cut-dir=3 -nH -r --reject Dockerfile,index.html --no-parent https://github.com/turnbullpress/dockerbook-code/tree/master/code/5/sinatra/webapp/ (该命令无效需手动下下载)
ls -l webapp
2.3扩展Sinatra 应用程序来使用redis
cd sinatra
wget --cut-dir=3 -nH -r --reject Dockerfile,index.html --no-parent https://github.com/turnbullpress/dockerbook-code/tree/master/code/5/sinatra/webapp_redis
mkdir redis
cd redis
构建dockerfile
docker build -t jamtur01/redis .
docker run -d -p 6379 --name redis jamtur01/redis
检查端口
docker port redis 6379
sudo apt-get -y install redis-tools
测试连接
redis-cli -h 127.0.0.1 -p 端口号( 为上面 docker port redis端口)
2.4将Sinatra应用连接到redis容器
Docker Networking 与Docker Link
1)可以将容器连接到不同宿主机的容器
2)连接的容器可以在无需更新连接的情况下,对停止、启动或重启容器
docker Link 需要更新配置
3)不必关心内部容器的运行顺序
查看容器Ip地址
docker inspect -f '{{ .NetworkSettings.IPAddress }}' redis
连接redis
redis-cli -h 172.17.0.18
Docker Networking
创建网络
docker network create app
在docker网络中创建redis容器
docker run -d --net=app --name db jamtur01/redis
将已有容器连接到网络
docker network connect app db
断开连接
docker network disconnect app db
3. Docker用于持续集成
3.1构建Jenkins和Docker服务器
Jenkins是什么?
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
编写Dockerfile
获取脚本dockerjenkins.sh
wget https://github.com/turnbullpress/dockerbook-code/blob/master/code/5/jenkins/dockerjenkins.sh
chmod 0755 dockerjenkins.sh
构建镜像
docker build -t jamtur01/dockerjenkins .
构建容器
docker run -p 8082:8080 --name jenkins --privileged \
> -d jamtur01/dockerjenkins
--privilege 启动docker特权模式,运行宿主机拥有root权限
浏览器访问 配置的端口
选择自由风格项目
选择高级项目选项-高级-使用自定义用户空间
/tmp/jenkins=buildenv/${JOB_NAME}/workspace目录是jenkins的工作空间
源代码管理
指定git仓库 https://github.com/turnbullpress/docker-jenkins-sample.git
包含基本Ruby的RSpec测试