本文介绍如何将 Docker 集成到开发环境,自动构建应用,并使容器拥有独立的内网 IP 为开发人员提供服务。
术语解释
组件介绍
编辑文件
找到
- /usr/lib/systemd/system/docker.service
修改为
- ExecStart=/usr/bin/dockerd -H fd://
重加载 systemd daemon
- ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -H fd://
- systemctl daemon-reload
为加快下载速度,配置 daocloud 的加速镜像。
- curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://7515421f.m.daocloud.io
默认情况下,Docker 创建的容器运行在私有的内部网络中。
想要赋予每个容器独立 IP,可以使用 Docker 内置的 macvlan 驱动将容器桥接到宿主机的网卡上,这样宿主机网段内的其他主机便可通过 IP 地址访问到容器了。
首先在宿主机创建一个新网络,注意网关及子网掩码与宿主机网络一致。
- docker network create -d macvlan \
- --subnet=10.16.10.0/21 \
- --gateway=10.16.8.254 \
- -o parent=eth0 sweet
之后创建的容器,如果需要独立 IP,只需要配置
参数即可。
- --network sweet
- docker run -d -p 9000:9000 \
- -v /var/run/docker.sock:/var/run/docker.sock \
- --restart always \
- --name portainer portainer/portainer
- docker run -p 8080:8080 \
- -v /usr/bin/docker:/usr/bin/docker \
- -v /var/jenkins_home:/var/jenkins_home \
- --restart always \
- --name jenkins jenkins/jenkins:lts-alpine
访问 http://localhost:9000 。首次登录需设置管理员密码,并配置需要管理的 Docker Server 地址。
下面演示一个项目的构建计划如何配置,首先在项目根目录创建 Dockerfile 文件,声明如何构建 docker 镜像。
例如我创建的项目中:
- FROM java:8-alpine
- RUN mkdir /app
- WORKDIR /app
- ADD target/docker-demo.jar /app
- EXPOSE 9001
- ENTRYPOINT ["java","-jar","docker-demo.jar"]
而后,Jenkins 中新建一个构建任务,在 "Post Steps" 部分添加 "Execute shell",并做如下配置:
- echo "================ Docker Build ================" >> /dev/null
- docker -H $DOCKER_URL build --force-rm --tag $JOB_NAME:$BUILD_NUMBER $WORKSPACE
- echo "================ Docker Remove Container ================" >> /dev/null
- docker -H $DOCKER_URL rm --force $JOB_NAME
- echo "================ Docker Run ================" >> /dev/null
- docker -H $DOCKER_URL run -dt \
- --network sweet \
- --name $JOB_NAME $JOB_NAME:$BUILD_NUMBER
虽然 Docker 采用了分层的方式存储镜像文件,但开发环境的高频率构建,会很快地填满硬盘,因此我们需要定期地删除无用镜像文件。
新建一个构建项目
- clean
,每天早上 6 点执行一次清理任务。 配置 "Execute shell" 如下,删除 48 小时前没有被使用的镜像文件。
- H 6 * * *
- echo $DOCKER_URL
- docker -H $DOCKER_URL images
- docker -H $DOCKER_URL image prune -a -f --filter "until=48h"
- echo "================ After Prune ================" >> /dev/null
- docker -H $DOCKER_URL images
自此,
Jenkins 会按配置好的触发器执行构建,删除原有容器(原有的镜像不会删除),并启动一个新版本的容器。
Portainer 中可以查看已经启动的容器,IP 地址,Log 日志,也可手动停用或创建上一版本的容器。
同网段的其他主机,可以直接访问容器的 IP 地址进行远程服务调用。
环境搭建完成。
来源: http://www.cnblogs.com/sweetWinne/p/7373975.html