当前位置:   article > 正文

在ubuntu 22.04 上通过 Docker部署OpenGrok_grok部署

grok部署

Linux kernel有2000多万行代码,当需要搜索的代码量很大时,使用OpenGrok可以加速搜索速度.

通过Docker部署OpenGrok能隔离部署的环境与host环境,互不干扰.

过程如下

  1. 准备linux代码

  1. mkdir /home/jenkins/opengrok/{src,data,dist,etc,log} -p
  2. cd opengrok/src/
  3. git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

  1. 安装Docker

参考 https://www.runoob.com/docker/ubuntu-docker-install.html

Docker功能上类似于在Ubunut22.04 这个host OS上安装了一个虚拟机,虚拟机上运行的OS是docker image.

  1. sudo su
  2. curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

  1. 创建docker-compose.yml文件

Docker将根据docker-compose.yml的配置进行image的下载和运行, 此image里已经安装好opengrok和tomcat.

参考 https://hub.docker.com/r/opengrok/docker/

  1. cd ~
  2. vim docker-compose.yml #填写如下内容
  3. ----------------------------------------------------------------------------------------------------
  4. version: "3"
  5. # More info at https://github.com/oracle/opengrok/docker/
  6. services:
  7. opengrok:
  8. container_name: opengrok
  9. image: opengrok/docker:latest
  10. ports:
  11. - "8080:8080/tcp"
  12. environment:
  13. SYNC_PERIOD_MINUTES: '1440'
  14. # Volumes store your data between container upgrades
  15. volumes:
  16. - '/home/jenkins/opengrok/src/:/opengrok/src/' # source code
  17. - '/home/jenkins/opengrok/etc/:/opengrok/etc/' # folder contains configuration.xml
  18. - '/home/jenkins/opengrok/data/:/opengrok/data/' # index and other things for source code

image: opengrok/docker:latest

指定docker去opengrok/docker仓库里下载最新版本的image, 这个image里安装好了opengrok和tomcat.

image类似于操作系统的某个发行版,比如ubuntu 20.04或在22.10等,只是里面已经安装好了需要部署的特定软件而已. container相当于这个OS发行版在某台PC上的某次安装后 在此PC上的部署状态.

image本地缓存在 /var/lib/docker/overlay2 里, /var/lib/docker/image 里只是一些索引到overlay2的关键信息,并不是tar包

repo 可能是国外的,有几百兆,下载需要一些时间.

container_name: opengrok

为这个部署状态取名为opengrok

container本地缓存在 /var/lib/docker/containers 里, 同样是一些索引到overlay2的关键信息,并不是tar包

8080:8080/tcp

把 host的8080端口转发到docker的8080端口,这样对8080端口的网页访问将由docker虚拟机里的tomcat 来处理

SYNC_PERIOD_MINUTES: '1440'

由OpenGrok管理的代码,每天于社区仓库同步一次,并更新代码到最新状态

'/home/jenkins/opengrok/src/:/opengrok/src/'

mount host OS的/home/jenkins/opengrok/src/到docker虚拟机OS的/opengrok/src/目录,这样任何一个OS对此目录的修改都会保存到磁盘上文件系统的唯一目录里

  1. 下载并运行docker image

sudo docker compose up -d

至此,已经可以在其他主机上通过浏览器访问 http://host-ip-addr:8080/ 了,如果出现访问异常,可以查看docker启动log

sudo docker compose logs

也可以检查一下host的端口是否被防火墙禁止访问了

  1. jenkins@ubuntu22.04:~$ sudo lsof -i:8080
  2. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  3. docker-pr 3124 root 4u IPv4 49493 0t0 TCP *:http-alt (LISTEN)
  4. docker-pr 3144 root 4u IPv6 38263 0t0 TCP *:http-alt (LISTEN)
  5. # 上面是正常的情况,如果被禁用了,可以改为允许访问
  6. sudo ufw allow 8080/tcp

  1. 其他基础知识

参考 https://docs.docker.com/engine/reference/commandline/docker/

参考 jenkins@ubuntu22.04:~$ docker --help

  1. # Docker虚拟机关机/开机
  2. jenkins@ubuntu22.04:~$ sudo docker stop opengrok
  3. jenkins@ubuntu22.04:~$ sudo docker start opengrok
  4. # 加入新的代码目录到src后, 重启docker开始同步代码ctags 索引
  5. jenkins@ubuntu22.04:~$ sudo docker restart opengrok
  6. # ssh 登陆 docker vm
  7. jenkins@ubuntu22.04:~$ sudo docker ps
  8. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  9. dd21aed1dc33 opengrok/docker:latest "/scripts/start.py" About a minute ago Up About a minute 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp opengrok
  10. jenkins@ubuntu22.04:~$ sudo docker exec -it opengrok bash
  11. root@dd21aed1dc33:/usr/local/tomcat#
  12. # tomcat 的配置文件
  13. root@dd21aed1dc33:/usr/local/tomcat# ll /opengrok/etc
  14. -rw-r--r-- 1 root root 28027 Feb 24 02:54 configuration.xml
  15. -rw-r--r-- 1 root root 40 Feb 24 02:44 mirror.yml
  16. # ctags 生成的索引文件
  17. root@dd21aed1dc33:/usr/local/tomcat# ll /opengrok/data
  18. drwxr-xr-x 3 root root 19 Feb 24 02:44 historycache/
  19. drwxr-xr-x 4 root root 30 Feb 24 02:44 index/
  20. drwxr-x--- 4 root root 30 Feb 24 02:45 suggester/
  21. -rw-r--r-- 1 root root 0 Feb 24 02:54 timestamp
  22. drwxr-xr-x 4 root root 30 Feb 24 02:44 xref/
  23. root@dd21aed1dc33:/usr/local/tomcat# ll /scripts/
  24. -rwxr-xr-x 1 root root 2055 Jan 6 21:45 logging.properties*
  25. -rwxr-xr-x 1 root root 1378 Jan 6 21:45 periodic_timer.py*
  26. drwxr-xr-x 2 root root 44 Feb 24 02:44 __pycache__/
  27. -rwxr-xr-x 1 root root 7467 Jan 6 21:45 README.md*
  28. -rwxr-xr-x 1 root root 20275 Jan 6 21:45 start.py*
  29. -rwxr-xr-x 1 root root 894 Jan 6 21:45 sync.yml*
  30. # 备份container的初始状态, 备份container就相当于用当前container状态的快照定义成一个image
  31. jenkins@ubuntu22.04:~$ sudo docker commit -p dd21aed1dc33 my-repo/opengrok:2013-03-13-initial-state
  32. sha256:e0dccdd02dadd3f60d52fc711d36fd2920f6c07271301bd411ffed921d0e50e7
  33. # 修改container
  34. root@dd21aed1dc33:/usr/local/tomcat# apt update
  35. root@dd21aed1dc33:/usr/local/tomcat# apt install -y git vim plocate silversearcher-ag htop iftop ifstat iotop psmisc
  36. root@dd21aed1dc33:/usr/local/tomcat# git config --global --add safe.directory /opengrok/src/linux
  37. root@dd21aed1dc33:/usr/local/tomcat# exit
  38. jenkins@ubuntu22.04:~$
  39. # 备份container安装一些tools后的状态
  40. jenkins@ubuntu22.04:~$ sudo docker commit -p dd21aed1dc33 my-repo/opengrok:2013-03-13-installed-some-tools
  41. sha256:c94ad1123f4e55cb319a9583f563c4af702c67e783b7f13888ecb2aa2076c2ee
  42. # 查看docker image
  43. jenkins@ubuntu22.04:~$ sudo docker images
  44. REPOSITORY TAG IMAGE ID CREATED SIZE
  45. my-repo/opengrok 2013-03-13-initial-state e0dccdd02dad 5 minutes ago 902MB
  46. my-repo/opengrok 2013-03-13-installed-some-tools c94ad1123f4e 3 minutes ago 1.12GB
  47. opengrok/docker latest 45fb8fb42284 2 months ago 902MB
  48. # 注意docker commit并不是保存成差分文件, 可以看到完整的image是很大的
  49. # image文件的位置在/var/lib/docker/image/
  50. # 删除docker image
  51. jenkins@ubuntu22.04:~$ sudo docker rmi my-repo/opengrok:2013-03-13-initial-state
  52. Untagged: my-repo/opengrok:2013-03-13-initial-state
  53. Deleted: sha256:e0dccdd02dadd3f60d52fc711d36fd2920f6c07271301bd411ffed921d0e50e7
  54. Deleted: sha256:05ea10406083e8ffbe5a68e988166aba0ea09a0522fb4ce0c06aa29aa6a43352
  55. # initial state和opengrok/docker:latest的image是完全一样的,没必要备份
  56. # 删除container, 当container的内部环境被破坏时
  57. root@dd21aed1dc33:/usr/local/tomcat# mv /etc /etc-bk    #不小心把container破坏了
  58. root@dd21aed1dc33:/usr/local/tomcat# exit
  59. jenkins@ubuntu22.04:~$ sudo docker stop opengrok
  60. jenkins@ubuntu22.04:~$ sudo docker container ls -a
  61. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  62. dd21aed1dc33 opengrok/docker:latest "/scripts/start.py" 2 weeks ago Up 7 days 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp opengrok
  63. jenkins@ubuntu22.04:~$ sudo docker rm dd21aed1dc33
  64. dd21aed1dc33
  65. # 从备份的 2013-03-13-installed-some-tools image创建新的container
  66. jenkins@ubuntu22.04:~$ sudo docker run -d \
  67. --name opengrok-2013-03-13-installed-some-tools \
  68. -p 8080:8080/tcp \
  69. -e SYNC_PERIOD_MINUTES="1440" \
  70. -v /home/jenkins/opengrok-src/:/opengrok/src/ \
  71. -v /home/jenkins/opengrok-etc/:/opengrok/etc/ \
  72. -v /home/jenkins/opengrok-data/:/opengrok/data/ \
  73. my-repo/opengrok:2013-03-13-installed-some-tools
  74. 06dbce85cac958d2cee0fd73a153ebf462069c84b95618242bfb145bc9ad5872
  75. jenkins@ubuntu22.04:~$ sudo docker container ls
  76. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  77. 06dbce85cac9 my-repo/opengrok:2013-03-13-installed-some-tools "/scripts/start.py" 10 minutes ago Up 10 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp opengrok-2013-03-13-installed-some-tools
  78. # 或者把 docker-compose.yml 里的 "image: opengrok/docker:latest" 改为 "my-repo/opengrok:2013-03-13-installed-some-tools",然后 sudo docker compose up -d 重新创建container
  79. # export container 给别人使用, 当你想分享你对container做的成果时
  80. jenkins@ubuntu22.04:~$ sudo docker export opengrok-2013-03-13-installed-some-tools > opengrok-v001.tar
  81. jenkins@ubuntu22.04:~$ ll
  82. -rw-rw-r-- 1 jenkins jenkins 992168960 Mar 13 19:16 opengrok-v001.tar
  83. # 然后把 tar文件share给需要的人
  84. # import别人分享的image
  85. thomas@ubuntu22.04:~$ sudo docker import opengrok-v001.tar thomas-repo/opengrok:jenkins-v001
  86. sha256:2ab2148cdc7afdd6001663a53a488a267c61f8070903af171717ddd22d98eb45
  87. thomas@ubuntu22.04:~$ sudo docker image ls
  88. REPOSITORY TAG IMAGE ID CREATED SIZE
  89. thomas-repo/opengrok jenkins-v001 2ab2148cdc7a 14 seconds ago 977MB
  90. thomas@ubuntu22.04:~$ sudo docker run -d \
  91. --name opengrok-jenkins-v001 \
  92. -p 8080:8080/tcp \
  93. -e SYNC_PERIOD_MINUTES="1440" \
  94. -v /home/thomas/opengrok-src/:/opengrok/src/ \
  95. -v /home/thomas/opengrok-etc/:/opengrok/etc/ \
  96. -v /home/thomas/opengrok-data/:/opengrok/data/ \
  97. thomas-repo/opengrok:jenkins-v001

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/376678
推荐阅读
相关标签
  

闽ICP备14008679号