在傳統模式中,開發團隊在開發環境中完成軟體開發,自己做了一遍單元測試, 測試通過,ᨀ交到代碼版本管理庫。運維把應用部署到測 試環境, QA 進行測試,沒問題後通知部署人員發佈到生產環境。 在上述過程中涉及到至少三個環境:開發、測試和生產。現實情況是,開發自測 沒問題,但到了測試或者生產環境程式無法運 ...
在傳統模式中,開發團隊在開發環境中完成軟體開發,自己做了一遍單元測試, 測試通過,ᨀ交到代碼版本管理庫。運維把應用部署到測 試環境, QA 進行測試,沒問題後通知部署人員發佈到生產環境。 在上述過程中涉及到至少三個環境:開發、測試和生產。現實情況是,開發自測 沒問題,但到了測試或者生產環境程式無法運行,讓開發團隊排查,經過長時間 排查最後發現是測試環境的一個第三方庫過時了。這樣的現象在軟體開發中很普 遍,已經不適用如今的快速開發和部署。docker可以滿足你的需求。
阿裡雲容器hub開發者平臺,可以去這裡下載需要的鏡像
https://dev.aliyun.com/search.html?spm=5176.1972343.0.1.MSG1P3
首先先查看內核版本,這一步很重要
# uname -a
查看系統內核版本,docker要求內核版本為3.10以上,建議(不要在centos6.6上面安裝使用docker,有很多坑,我就是一個個踩過來的)
我使用的是阿裡雲的ECS centos 6.6 64位的,所以需要升級內很,內核版本升級的方法:
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org # rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm # yum --enablerepo=elrepo-kernel install kernel-lt -y # vim /etc/grub.conf default=0 把default=1 改為default = 0 最後重啟伺服器
開始安裝docker
# curl -sSL https://get.docker.com/ | sh # docker --version Docker version 1.7.1, build 786b29d # vim /etc/sysconfig/docker other_args="--registry-mirror=https://rr8hxwoy.mirror.aliyuncs.com -H tcp://0.0.0.0:235 -H unix:///var/run/docker.sock" 配置阿裡雲加速 docker pull會很快
啟動docker
# /etc/init.d/docker start
# chkconfig docker on
運行docker容器
# docker pull centos latest: Pulling from centos 3690474eb5b4: Already exists af0819ed1fac: Already exists 05fe84bf6d3f: Already exists 97cad5e16cb6: Already exists Digest: sha256:934ff980b04db1b7484595bac0c8e6f838e1917ad3a38f904ece64f70bbca040 Status: Image is up to date for centos:latest
從阿裡雲私有鏡像倉庫拉取centos鏡像到本地,因為配置了阿裡雲鏡像加速,所以下載非常快,30秒鐘搞定。
# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos latest 97cad5e16cb6 12 days ago 196.5 MB
# docker run -d -it centos /bin/bash 運行centos容器
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
969ad48e4085 centos "/bin/bash" 5 seconds ago Up 4 seconds jovial_torvalds
# docker exec -it 969a /bin/bash 進入容器 969a是容器的ID
Docker啟動容器命令在前面已經詳細的講過,不會的童鞋可以到我之前的博客看看
重點來了
java+tomcat在容器中應用
測試環境伺服器配置 centos 6.6 64位,4核處理器,8G記憶體
理論上可以跑16個java容器,因為每個容器消耗記憶體為500M左右,我在上面跑了8個java容器,另外跑了一個nginx做反向代理和一個redis,nginx 和redis都沒有使用docker
需要前提下載好jdk1.7.0.72和 tomcat ,並把他們放在和Dockerfile同一級目錄
vim Dockerfile
#This is My first Dockerfile #version 1.0 #Base image FROM centos:latest #MAINTAINER hh Wang #ADD ADD jdk1.7.0_72.gz /usr/local/ ADD biz-tomcat.tar.gz /usr/local/ #RUN RUN yum -y install wget gcc gcc-c++ make openssl openssl-devel net-tools vim RUN mkdir /docker/myapp/ROOT -p #ENV ENV JAVA_HOME /usr/local/jdk1.7.0_72 ENV JRE_HOME $JAVA_HOME/jre ENV CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib ENV PATH $PATH:$JAVA_HOME/bin ENV CATALINA_HOME /usr/local/biz-tomcat EXPOSE 8080 CMD ["/usr/local/biz-tomcat/bin/catalina.sh","run"]
# docker build -t whh/biz_tomcat:v1 . 後面有一個點,一定要記住
# docker run -it -d -v /mnt/docker/myapp/ROOT/biz:/docker/myapp/ROOT -v /var/log/biz-tomcat/logs:/usr/local/biz-tomcat/logs -p 9080:8080 --name biz whh/biz_tomcat:v1
tomcat的根目錄要事先修改為自己需要的路徑,我這裡為docker/myapp/ROOT,把根目錄掛在在宿主機的/mnt/docker/myapp/ROOT/biz目錄下麵,當更新代碼的時候,直接把代碼傳到這個目錄,然後重啟一下容器就可以了,不需要把代碼上傳到容器裡面,那樣很麻煩。
[root@VM_159_91_centos biz]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
969ad48e4085 centos "/bin/bash" 21 minutes ago Up 21 minutes jovial_torvalds
f67257661e70 registry "/entrypoint.sh /etc 7 hours ago Up 7 hours 0.0.0.0:5000->5000/tcp high_darwin
4bcc381f5b9f whh/biz_tomcat:v1 "/usr/local/biz-tomc 9 hours ago Up 7 hours 0.0.0.0:9080->8080/tcp biz
# docker tag whh/biz_tomcat:v1 IP:5000/whh/biz_tomcat:v1 IP寫自己本機內網的IP或者公網IP都可以
# docker push IP:5000/whh/biz_tomcat:v1 推送到自己私有的倉庫,從其他的伺服器就可以直接pull下來使用
00:19:15 2016-11-16