设置安全jenkins与docker的主人

我想用docker在ec2上build立一个安全的Jenkins主服务器。 我从这里使用标准jenkinsdocker文件: https ://registry.hub.docker.com/_/jenkins/

默认情况下,它会打开一个不安全的8080 http端口。 不过,我希望它使用https的标准443端口(首先我想使用自签名SSL证书)。

我在这个主题上进行了一些研究,并find了几个可能的解决scheme。 我并不是真正有经验的docker工人,所以我仍然找不到一个我可以使用或实现的简单的。 以下是我find的一些选项:

  • 在8080上使用标准的jenkins docker,但是在我的ec2实例上configuration一个安全的apache或者nginx服务器,这个服务器会redirect这个trafic。 我不喜欢这个,因为服务器将在docker之外,所以我不能保持它在版本控制
  • 以某种方式修改jenkins docker文件,根据https://wiki.jenkins-ci.org/display/JENKINS/Starting+and+Accessing+Jenkinsconfigurationhttps来启动jenkins。 我不知道该怎么做。 我是否需要创build自己的docker集装箱?
  • 使用像这样一个安全的nginx的docker文件https://registry.hub.docker.com/u/marvambass/nginx-ssl-secure/并以某种方式结合两个docker集装箱或使他们沟通? 不知道该怎么做。

有人可以请推荐我最好的解决scheme吗?

PS我不知道ec2会给我带来多less麻烦,但是我认为它只是在安全小组中开放443。

在Docker上通过几个教程之后,我发现最简单的select是2号.Jenkins docker镜像以一种方式声明了入口点,你可以很容易地将parameter passing给jenkins。

比方说,你有你的密钥库(例如在这个例子中自签名)作为jenkins_keystore.jks在Ubuntu EC2实例的主文件夹。 下面是如何生成一个示例:

keytool -genkey -keyalg RSA -alias selfsigned -keystore jenkins_keystore.jks -storepass mypassword -keysize 2048 

现在,您可以轻松configurationjenkins以仅在https上运行,而无需创build自己的泊坞窗图像:

 docker run -v /home/ubuntu:/var/jenkins_home -p 443:8443 jenkins --httpPort=-1 --httpsPort=8443 --httpsKeyStore=/var/jenkins_home/jenkins_keystore.jks --httpsKeyStorePassword=mypassword 
  • -v /home/ubuntu:/var/jenkins_home将宿主文件夹公开到jenkins docker容器
  • -p 443:8443将容器中的8443 jenkins端口映射到主机的443端口
  • --httpPort=-1 --httpsPort=8443阻止jenkins http,并在容器内的端口8443上使用https进行公开
  • --httpsKeyStore=/var/jenkins_home/jenkins_keystore.jks --httpsKeyStorePassword=mypassword提供已经从宿主文件夹映射到容器/var/jenkins_home/文件夹的密钥库。

我将在同一个容器中使用nginx和jenkins,并使用supervisord来pipe理这两个进程。 使用内置工具保护不同的服务是一件痛苦的事情。 nginx对于所有的服务都是一样的,并且很容易configuration。 在某些方面,使用docker-compose(是fig)来创build两个不同的容器,并将它们与docker提供的漂亮的内部networking连接起来是可能的,也是更好的。 问题在于,像马拉松这样的集群pipe理者,还没有很好地支持一起工作。 告诉大多数服务运行一个容器要比运行两个容器容易得多,但要确保它们在同一个主机上。