参考: Docker 快速安装Jenkins完美教程 (亲测采坑后详细步骤) 参考: Docker:docker安装部署jenkins
$ docker pull jenkins/jenkins
$ mkdir -p /www/docker/jenkins/home
$ chown -R 1000:1000 /www/docker/jenkins/home
-d
: 后台运行镜像--name jenkins
: 给容器起一个别名--network mxd
: 给容器分配一个网络, 以便与其它容器通讯-p 8080:8080
: 将镜像的8080端口映射到服务器的8080端口, 如果使用nginx反向代理, 则可以不映射-p 50000:50000
: 将镜像的50000端口映射到服务器的50000端口-v /www:/www
: 方便部署代码-v /www/docker/jenkins/home:/var/jenkins_home
: /var/jenkins_home
目录为容器jenkins工作目录,我们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录。这里我们设置的就是上面我们创建的/www/docker/jenkins/home
目录-m 1G
: 限制内存最大使用1G, 参考Docker: 限制容器可用的内存--memory-swap 2G
: 限制虚拟内存最大使用1G, 参考Docker: 限制容器可用的内存-v /run/docker.sock:/var/run/docker.sock
: 容器内可执行宿主机docker
命令-v $(which docker):/usr/bin/docker
: 容器内可执行docker
命令--user root
: 容器内有权限执行docker
命令$ docker run -d --name jenkins --network mxd -p 8080:8080 \
-v /www:/www \
-v /www/docker/jenkins/home:/var/jenkins_home \
-m 1G \
--memory-swap 2G \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker \
--user root \
jenkins/jenkins:lts
/www/docker/jenkins/home/hudson.model.UpdateCenter.xml
:<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://updates.jenkins.io/update-center.json</url>
</site>
</sites>
将上面的网址修改为清华大学官方镜像https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
:
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
</site>
</sites>
修改文件后, 记得重启jenkins容器:
docker restart jenkins
访问jenkins, 在浏览器中输入你的IP加端口号, eg: 192.168.0.100:8080
等待3-10分钟, 待出现下方的页面, 将/www/docker/jenkins/home/secrets/initialAdminPassword
中的密码拷贝到输入框中, 然后点击继续
:
安装推荐的插件
:重试
, 也可以点击继续
, 等进入jenkins后再安装. 如果没有错误, 则跳过这一步:如果一直失败, 则可以尝试离线安装. 也可以将镜像改为
jenkins/jenkins:latest
, 该版本每周一次更新. 或者删除容器和缓存文件, 重新run
一个容器.
server {
listen 80;
server_name jenkins.zhangmoxuan.com;
#反向代理
location / {
sendfile off;
proxy_pass http://jenkins;
proxy_redirect default;
proxy_http_version 1.1;
# Required for Jenkins websocket agents
proxy_set_header Connection $connection_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_max_temp_file_size 0;
#this is the maximum upload size
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffering off;
proxy_request_buffering off; # Required for HTTP CLI commands
proxy_set_header Connection ""; # Clear for keepalive
}
access_log /var/log/nginx/jenkins.zhangmoxuan.com.log;
error_log /var/log/nginx/jenkins.zhangmoxuan.com.error.log;
}
# Required for Jenkins websocket agents
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream jenkins {
server jenkins:8080 fail_timeout=0;
}
Dockerfile:(镜像集成了node等, 比较大):
FROM jenkins/jenkins:lts
# if we want to install via apt
USER root
RUN cat /etc/apt/sources.list
RUN sed -i 's/deb.debian.org/mirrors.163.com/g' /etc/apt/sources.list
RUN sed -i 's/security.debian.org/mirrors.163.com/g' /etc/apt/sources.list
RUN cat /etc/apt/sources.list
RUN apt-get update && \
apt-get -y install apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common && \
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
$(lsb_release -cs) \
stable" && \
apt-get update && \
apt-get -y install docker-ce
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash
RUN apt-get install --yes nodejs
RUN node -v
RUN npm -v
编译镜像:
$ docker build -t jenkin .