介绍
在工作中需要对程序反复测试验证正确性,并发布。为了保证代码开发测试运行环境一致,主要采用docker实现自动化构建、自动化测试。
开发环境
这里采用python
开发环境为例,在默认的Linux
发行版中,docker
镜像默认与ISO
镜像类似,除了系统本身的一些工具,并没有安装多余的软件,需要自己在基础操作系统镜像上构建开发环境的镜像,后面统称开发环境。
采用Dockerfile
自动构建,例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
FROM centos:6 VOLUME ["/opt/data"] RUN curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS6-Base-163.repo RUN yum clean all && yum makecache RUN yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel RUN yum -y install libffi-devel RUN yum -y install git tar wget curl nss RUN curl -o Python-2.7.15.tgz -s -w %{http_code} https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgz -L RUN tar xvzf Python-2.7.15.tgz && cd Python-2.7.15&&./configure --enable-shared --enable-optimizations && make && make altinstall RUN echo "/usr/local/lib" >> /etc/ld.so.conf RUN ldconfig RUN rm -rfv /usr/bin/python && ln -s /usr/local/bin/python2.7 /usr/bin/python WORKDIR /opt/build |
构建开发环境
1 |
cd mydev && docker build -t mydev . |
执行以上命令最后会生成名为mydev
的镜像。
Usage
有了基础开发环境镜像后,就可以进行,开发、测试等测试。
启动开发环境
1 |
docker run --name mydev -it -v /home/myapp:/opt/build/myapp mydev /bin/bash |
执行以上命令后会自动进入容器里面的bash
环境。如果退出容器后需要使用docker start mydev
启动容易,然后可以执行docker exec -it mydev /bin/bash
重新进入容器。
自动构建程序
通常采用shell
脚本进行自动化构建,自动化部署等,同样在这里,只需要实现build.bash
这样的shell
自动化脚本即可。
比如把myapp
打包成二进制文件,build.bash
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#!/bin/bash MYPY_ENV="requirements.txt" function check_env(){ for i in `cat $MYPY_ENV` do local HAVE_ENV=`pip show $i` if [ -z $HAVE_ENV ]; then pip install $i fi done } check_env rm -rf build dist *.spec pyinstaller -F -w myapp.py > log/info.log |
采用docker
执行自动构建。
如果第一次启动自动构建容器直接运行:
1 |
docker run --name mybuild -it -v /home/myapp:/opt/build/myapp mydev /bin/bash -c /opt/build/myapp/build.bash |
以后运行直接可运行mybuild
容器即可自动构建。
1 |
docker start mybuild |
自动化构建运行环境
将构建出来的二进制程序和相关的文件按照以下目录存放:
1 2 3 4 |
myapp/ bin/ conf/ lib/ |
构建docker运行环境镜像。
1 2 3 4 5 6 7 8 9 10 |
FROM centos:6 VOLUME ["/opt/data"] RUN curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS6-Base-163.repo RUN yum clean all && yum makecache RUN yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel ADD myapp/ /usr/local/ WORKDIR /usr/local/myapp EXPOSE 80 CMD ["/usr/local/myapp/bin/myapp","-c" ,"/usr/local/myapp/conf/myapp.conf"] |