使用Docker的jenkins镜像打包一个可运行的Angula

2018-12-14  本文已影响0人  北星七斗

环境:ubuntu 18.1
Docker版本:Docker version 18.06.1-ce, build e68fc7a

1.安装Docker

sudo apt install docker.io 
sudo systemctl start docker
sudo systemctl enable docker

2.拉取jenkins的镜像

docker pull jenkins/jenkins 默认拉取的是jenkins/jenkins:latest的镜像

3.运行一个jenkins容器

docker run -d --name my-jenkins \
-p 8080:8080 -p 50000:50000 -u root \
-v /home/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 \
-v /etc/timezone:/etc/timezone \
jenkins/jenkins:latest

-d表示将此容器挂在后台运行
--name 为容器定义一个名字(后面可以代替容器id使用)
-u root 使用root用户运行,避免后面出现的一些执行权限问题
-p 表示映射容器的端口到宿主机的端口
-v 表示映射宿主机的目录到容器的目录
-v /home/jenkins_home:/var/jenkins_home 映射jenkins_home,将数据存储到宿主机,这样配置就不会随容器丢失
-v /var/run/docker.sock:/var/run/docker.sock-v /usr/bin/docker:/usr/bin/docker把宿主机docker 映射到容器内,可以直接在容器内使用宿主机docker
-v /etc/timezone:/etc/timezone 映射时区文件,保证容器的时区和宿主机相同


查看正在运行的容器docker ps

正在运行的容器

4.使用Jenkins从SVN拉取代码打包工程镜像

// 在jenkins的容器根目录下创建dockerFiles文件夹
if [ ! -d "/dockerFiles/" ];then
mkdir /dockerFiles
fi

// 创建Dockerfile文件
if [ -d "/dockerFiles/Dockerfile"];then
rm /dockerFiles/Dockerfile
fi
touch /dockerFiles/Dockerfile

<!-- 编写Dockerfile文件用于创建镜像 -->
// 该镜像基于node的镜像
echo FROM node > /dockerFiles/Dockerfile
// 向宿主机暴露端口
echo EXPOSE 8888 >> /dockerFiles/Dockerfile
// 当前的工作目录定为 /app
echo WORKDIR /app >> /dockerFiles/Dockerfile
// 将当前的目录test_one下的所有文件拷贝到./angular_code下
//(test_one怎么来的下面有讲,./angular_code绝对路径为/app/angular_code,也就是相对路径为上面的定义的工作目录,angular_code的目录会自动创建)
echo COPY test_one ./angular_code >> /dockerFiles/Dockerfile
// 进入到angular_code的文件夹,安装依赖,很多反斜杠用来转义
echo RUN cd ./angular_code \&\& npm install \&\& npm install \-g \@angular\/cli >> /dockerFiles/Dockerfile
// 执行命令
echo CMD cd ./angular_code \&\& ng serve >> /dockerFiles/Dockerfile
<!-- 编写Dockerfile完成 -->

cd /dockerFiles/

if [ -d "/dockerFiles/test_one/" ];then
rm -rf test_one
fi

// 默认jenkins从svn拉下来的代码会保存在workspace下
// 将代码复制到/dockerFiles目录下
cp -r /var/jenkins_home/workspace/test_one .

// 创建镜像
docker build  \-t angular_demo .

docker images 查看刚才生成的镜像


image.png

5.运行一个angular_demo容器

docker run -d angular_demo

6.问题

这只是demo,一般会先ng build我们的angular项目,再使用nginx来启动,要不然这样打出来的包太大了。同时还有一个问题每次都要npm install,不仅耗时,而且如果有多个前端项目依赖还不能复用。

所以后面需要docker的共用卷和分级构建的技术来优化。

7.参考

ubuntu下安装docker版:jenkinshttps://www.jianshu.com/p/9018cfa3654b

上一篇下一篇

猜你喜欢

热点阅读