背景:
目前项目采用微服务架构, 每个服务都是一个 jar 包, 原始方法就是在多个机器上分别安装 jdk8 环境, 然后将各个 jar 包放在对应机器上, 再 java -jar App.jar 方式启动.
但是测试环境往往资源紧张, 做不到一个机器一个服务, 这样做也很浪费, 所以采用 docker 容器来部署服务, 一个服务就是一个容器. 一台机器上可以有多个服务.
准备:
1, 一台安装了 docker 的机器
2, 项目运行所需的其他组件已经安装就绪, 如: zookeeper,consul,RocketMq 等等
开始
1, 获取 Jenkins 镜像 ------- 参考: https://www.cnblogs.com/gcgc/p/10191557.html
- # 获取镜像
- docker pull jenkins/jenkins
- # 创建文件夹
- mkdir /var/jenkins_home
- # 修改权限权限(一定要修改权限否则创建的容器不能启动)
- sudo chown -R 1000:1000 /var/jenkins_home
2, 启动 Jenkins 容器
- #启动 Jenkins 容器(Jenkins 容器中可以执行 docker 命令)
- docker run -itd -p 8081:8080 -p 50000:50000 -u root --name jenkins_docker --privileged=true --restart=always -v /var/local:/var/local -v /var/jenkins_home:/var/jenkins_home -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-Linux-gnu/libltdl.so.7 jenkins/jenkins:latest
参数解释:
run: 运行容器
-itd: 使用交互式, 且在后台运行
-p: 将宿主机的 8081 端口映射到容器中的 8080 端口
-u: 使用 root 用户进入容器
--name: 给容器命名
--privileged:
附一下 docker run 参数表
常用选项说明
-d, --detach=false, 指定容器运行于前台还是后台, 默认为 false
-i, --interactive=false
, 打开 STDIN, 用于控制台交互
-t, --tty=false, 分配 tty 设备, 该可以支持终端登录, 默认为 false
-u, --user="", 指定容器的用户
-a, --attach=[], 登录容器(必须是以 docker run -d 启动的容器)
-w, --workdir="", 指定容器的工作目录
-c, --CPU-shares=0, 设置容器 CPU 权重, 在 CPU 共享场景使用
-e, --env=[], 指定环境变量, 容器中可以使用该环境变量
-m, --memory="", 指定容器的内存上限
-P, --publish-all=false
, 指定容器暴露的端口
-p, --publish=[], 指定容器暴露的端口
-h, --hostname="", 指定容器的主机名
-v, --volume=[], 给容器挂载存储卷, 挂载到容器的某个目录
--volumes-from=[], 给容器挂载其他容器上的卷, 挂载到容器的某个目录
--cap-add=[], 添加权限, 权限清单详见: http://linux.die.net/man/7/capabilities
--cap-drop=[], 删除权限, 权限清单详见: http://linux.die.net/man/7/capabilities
--cidfile="", 运行容器后, 在指定文件中写入容器 PID 值, 一种典型的监控系统用法
--cpuset="", 设置容器可以使用哪些 CPU, 此参数可以用来容器独占 CPU
--device=[], 添加主机设备给容器, 相当于设备直通
--dns=[], 指定容器的 dns 服务器
--dns-search=[], 指定容器的 dns 搜索域名, 写入到容器的 / etc/resolv.conf 文件
--entrypoint="", 覆盖 image 的入口点
--env-file=[], 指定环境变量文件, 文件格式为每行一个环境变量
--expose=[], 指定容器暴露的端口, 即修改镜像的暴露端口
--link=[], 指定容器间的关联, 使用其他容器的 IP,env 等信息
--lxc-conf=[], 指定容器的配置文件, 只有在指定 --exec-driver=lxc 时使用
--name="", 指定容器名字, 后续可以通过名字进行容器管理, links 特性需要使用名字
--net="bridge", 容器网络设置:
bridge 使用 docker daemon 指定的网桥
- host // 容器使用主机的网络
- container:NAME_or_ID>// 使用其他容器的网路, 共享 IP 和 PORT 等网络资源
none 容器使用自己的网络(类似 --net=bridge), 但是不进行配置
--privileged=false, 指定容器是否为特权容器, 特权容器拥有所有的 capabilities
--restart="no", 指定容器停止后的重启策略:
no: 容器退出时不重启
on-failure: 容器故障退出 (返回值非零) 时重启
always: 容器退出时总是重启
--rm=false, 指定容器停止后自动删除容器(不支持以 docker run -d 启动的容器)
--sig-proxy=true, 设置由代理接受并处理信号, 但是 SIGCHLD,SIGSTOP 和 SIGKILL 不能被代理
来源: http://www.bubuko.com/infodetail-2986189.html