[关闭]
@khan-lau 2020-09-22T11:39:55.000000Z 字数 11805 阅读 4648

docker环境配置gitlab

Docker


系统环境

  1. [root@xxxx tools]# uname -r
  2. 3.10.0-123.el7.x86_64
  3. [root@xxxx tools]# cat /etc/centos-release
  4. CentOS Linux release 7.0.1406 (Core)
  5. [root@xxxx tools]# df -h
  6. 文件系统 容量 已用 可用 已用% 挂载点
  7. /dev/mapper/centos-lv_root 37G 1.8G 35G 5% /
  8. devtmpfs 7.8G 0 7.8G 0% /dev
  9. tmpfs 7.7G 0 7.7G 0% /dev/shm
  10. tmpfs 7.7G 17M 7.7G 1% /run
  11. tmpfs 7.7G 0 7.7G 0% /sys/fs/cgroup
  12. /dev/xvde 985G 517M 934G 1% /data
  13. /dev/xvda1 497M 106M 392M 22% /boot
  14. tmpfs 1.6G 0 1.6G 0% /run/user/0

环境准备

可以看到系统盘分了40G, 然后外挂了一个1T的数据盘, 典型的cloud环境.
应对策略, 数据和外挂应用都得安装在数据盘上.

home映射

给home做个软链, 挂到data盘上

  1. rm -rf /home
  2. mkdir /data/home -p
  3. ln -s /data/home /home

dns配置

  1. [root@xxxx tools]# vim /etc/resolv.conf
  2. [root@xxxx tools]# cat /etc/resolv.conf
  3. nameserver 114.114.114.114
  4. nameserver 202.96.128.86
  5. nameserver 202.96.128.166
  6. nameserver 8.8.8.8
  7. nameserver 8.8.4.4

必要程序安装[可选]

  1. yum makecache
  2. yum install -y --downloaddir=/data/tools/vim vim
  3. yum install -y --downloaddir=/data/tools/wget wget

这俩软件比较小, 可以从官方源下载, 下载目录指定到data盘.

修改软件源[可选]

网易的源比较稳定, 速度也快建议使用.

  1. cd /data/tools
  2. wget http://mirrors.163.com/.help/CentOS7-Base-163.repo --使用网易的source
  3. cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
  4. cp /data/tools/CentOS7-Base-163.repo /etc/yum.repos.d/CentOS-Base.repo
  5. yum makecache --刷新缓存, 使其生效 [option]

其他软件安装[可选]

  1. yum install -y --downloaddir=/data/tools/clang clang
  2. yum install -y --downloaddir=/data/tools/pyton python

这俩环境是我自己需要的与本文关系不大, 大家可以酌情下载

docker安装

  1. yum install -y --downloaddir=/data/tools/docker docker-io

如果你们环境与我一样, 会发现最后有几行错误信息

  1. Transaction check error:
  2. file /usr/lib/systemd/system/blk-availability.service from install of device-mapper-7:1.02.107-5.el7_2.1.x86_64 conflicts with file from package lvm2-7:2.02.105-14.el7.x86_64
  3. file /usr/sbin/blkdeactivate from install of device-mapper-7:1.02.107-5.el7_2.1.x86_64 conflicts with file from package lvm2-7:2.02.105-14.el7.x86_64
  4. file /usr/share/man/man8/blkdeactivate.8.gz from install of device-mapper-7:1.02.107-5.el7_2.1.x86_64 conflicts with file from package lvm2-7:2.02.105-14.el7.x86_64

根据错误提示, 可以证实为docker的环境与包lvm2-7:2.02.105-14.el7.x86_64依赖冲突, 如果依赖环境检测失败, 不会安装任何内容

简单粗暴的解决办法, 删掉lvm2-7, 装上device-mapper-libs, 再尝试重新装docker

  1. yum remove lvm2-7:2.02.105-14.el7.x86_64
  2. yum upgrade -y --downloaddir=/data/tools/docker device-mapper-libs
  3. yum install -y --downloaddir=/data/tools/docker docker-io

安装结果

  1. 已安装:
  2. docker.x86_64 0:1.9.1-25.el7.centos
  3. 作为依赖被安装:
  4. audit-libs-python.x86_64 0:2.4.1-5.el7
  5. checkpolicy.x86_64 0:2.1.12-6.el7
  6. docker-forward-journald.x86_64 0:1.9.1-25.el7.centos
  7. docker-selinux.x86_64 0:1.9.1-25.el7.centos
  8. libaio.x86_64 0:0.3.109-13.el7
  9. libcgroup.x86_64 0:0.41-8.el7
  10. libsemanage-python.x86_64 0:2.1.10-18.el7
  11. lvm2.x86_64 7:2.02.130-5.el7_2.1
  12. policycoreutils-python.x86_64 0:2.2.5-20.el7
  13. python-IPy.noarch 0:0.75-6.el7
  14. setools-libs.x86_64 0:3.3.7-46.el7
  15. 更新完毕:
  16. dracut.x86_64 0:033-360.el7_2
  17. initscripts.x86_64 0:9.49.30-1.el7_2.2
  18. 作为依赖被升级:
  19. audit.x86_64 0:2.4.1-5.el7
  20. audit-libs.x86_64 0:2.4.1-5.el7
  21. device-mapper-persistent-data.x86_64 0:0.5.5-1.el7
  22. dracut-config-rescue.x86_64 0:033-360.el7_2
  23. dracut-network.x86_64 0:033-360.el7_2
  24. kmod.x86_64 0:20-5.el7
  25. libgudev1.x86_64 0:219-19.el7_2.7
  26. libsemanage.x86_64 0:2.1.10-18.el7
  27. lvm2-libs.x86_64 7:2.02.130-5.el7_2.1
  28. policycoreutils.x86_64 0:2.2.5-20.el7
  29. selinux-policy.noarch 0:3.13.1-60.el7_2.3
  30. selinux-policy-targeted.noarch 0:3.13.1-60.el7_2.3
  31. systemd.x86_64 0:219-19.el7_2.7
  32. systemd-libs.x86_64 0:219-19.el7_2.7
  33. systemd-sysv.x86_64 0:219-19.el7_2.7
  34. 完毕!

安装完毕了, 进行一下简单的测试

  1. [root@xxxx tools]# service docker status
  2. Redirecting to /bin/systemctl status docker.service
  3. docker.service - Docker Application Container Engine
  4. Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
  5. Active: inactive (dead)
  6. Docs: http://docs.docker.com
  7. [root@YDYWZX tools]# docker info
  8. Cannot connect to the Docker daemon. Is the docker daemon running on this host?

发现服务没启动, 先不急, 准备一下, 把docker的工作目录指向有1T存储空间的data盘

  1. mkdir -p /data/docker
  2. rm -rf /var/lib/docker
  3. ln -s /data/docker /var/lib/docker

配置docker

  1. [root@xxx gitlab]# vim /etc/sysconfig/docker-storage

DOCKER_STORAGE_OPTIONS="--storage-opt dm.no_warn_on_loop_devices=true"

启动docker服务, 并设置为开机启动

  1. [root@xxxx tools]# service docker start
  2. Redirecting to /bin/systemctl start docker.service
  3. [root@xxxx tools]# chkconfig docker on
  4. 注意:正在将请求转发到“systemctl enable docker.service”。
  5. Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

如果出现报错信息:

Error starting daemon: SELinux is not supported with the overlay2 graph driver on this kernel. Either boot into a newer kernel or disable selinux in docker (--selinux-enabled=false)

意思是说, 此linux的内核中的SELinux不支持 overlay2 graph driver ,解决方法有两个,要么启动一个新内核,要么就在docker里禁用selinux,--selinux-enabled=false
重新编辑docker配置文件:

  1. vi /etc/sysconfig/docker

  1. # /etc/sysconfig/docker
  2. # Modify these options if you want to change the way the docker daemon runs
  3. OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'
  4. if [ -z "${DOCKER_CERT_PATH}" ]; then
  5. DOCKER_CERT_PATH=/etc/docker
  6. fi

修改为

  1. # /etc/sysconfig/docker
  2. # Modify these options if you want to change the way the docker daemon runs
  3. OPTIONS='--selinux-enabled=false --log-driver=journald --signature-verification=false'
  4. if [ -z "${DOCKER_CERT_PATH}" ]; then
  5. DOCKER_CERT_PATH=/etc/docker
  6. fi

查看docker环境信息

  1. [root@xxx lib]# docker info
  2. Containers: 0
  3. Images: 0
  4. Server Version: 1.9.1
  5. Storage Driver: devicemapper
  6. Pool Name: docker-202:64-51118083-pool
  7. Pool Blocksize: 65.54 kB
  8. Base Device Size: 107.4 GB
  9. Backing Filesystem: xfs
  10. Data file: /dev/loop0
  11. Metadata file: /dev/loop1
  12. Data Space Used: 53.67 MB
  13. Data Space Total: 107.4 GB
  14. Data Space Available: 107.3 GB
  15. Metadata Space Used: 606.2 kB
  16. Metadata Space Total: 2.147 GB
  17. Metadata Space Available: 2.147 GB
  18. Udev Sync Supported: true
  19. Deferred Removal Enabled: false
  20. Deferred Deletion Enabled: false
  21. Deferred Deleted Device Count: 0
  22. Data loop file: /data/docker/devicemapper/devicemapper/data
  23. Metadata loop file: /data/docker/devicemapper/devicemapper/metadata
  24. Library Version: 1.02.107-RHEL7 (2015-12-01)
  25. Execution Driver: native-0.2
  26. Logging Driver: json-file
  27. Kernel Version: 3.10.0-123.el7.x86_64
  28. Operating System: CentOS Linux 7 (Core)
  29. CPUs: 4
  30. Total Memory: 15 GiB
  31. Name: YDYWZX
  32. ID: HMFB:MZJR:CDM3:Z5Y5:WQUH:CFT3:5BOU:N7K6:XN43:WZYW:XIXY:6KJ6
  33. WARNING: bridge-nf-call-iptables is disabled
  34. WARNING: bridge-nf-call-ip6tables is disabled

查看docker版本

  1. [root@xxx lib]# docker version
  2. Client:
  3. Version: 1.9.1
  4. API version: 1.21
  5. Package version: docker-1.9.1-25.el7.centos.x86_64
  6. Go version: go1.4.2
  7. Git commit: 78ee77d/1.9.1
  8. Built:
  9. OS/Arch: linux/amd64
  10. Server:
  11. Version: 1.9.1
  12. API version: 1.21
  13. Package version: docker-1.9.1-25.el7.centos.x86_64
  14. Go version: go1.4.2
  15. Git commit: 78ee77d/1.9.1
  16. Built:
  17. OS/Arch: linux/amd64

安装配置gitlab

gitlab依赖俩个服务, redis和postgresql
现在做个小结, 宿主机是CentOS7, 3.10内核, 装了docker环境.
现在需要安装三个镜像, 组成gitlab服务. redis postgresql gitlab

下载镜像

  1. docker pull sameersbn/redis
  2. docker pull sameersbn/postgresql
  3. docker pull sameersbn/gitlab

gitlab镜像比较大, 建议该吃饭吃饭该睡觉睡觉.

安装

docker省掉的不就是安装么. 你可以认为下载好镜像的同时就已经安装好了

配置

postgresql

  1. mkdir -p /data/program/srv/docker/gitlab/postgresql
  2. chcon -Rt svirt_sandbox_file_t /data/program/srv/docker/gitlab/postgresql
  3. docker run --name gitlab-postgresql -d \
  4. -e 'DB_NAME=gitlabhq_production' \
  5. -e 'DB_USER=gitlab' -e 'DB_PASS=password' \
  6. -e 'DB_EXTENSION=pg_trgm,btree_gist' \
  7. -v /data/program/srv/docker/gitlab/postgresql:/var/lib/postgresql \
  8. sameersbn/postgresql

chcon 主要是考虑 selinux 开启的情况,这个大家看情况执行。
docker run 命令中中的 -v 是为了将宿主服务器的目录挂载到 docker 内,为了持久化数据,下面的其他容器也一样

redis

  1. sudo mkdir -p /data/program/srv/docker/gitlab/redis
  2. sudo chcon -Rt svirt_sandbox_file_t /data/program/srv/docker/gitlab/redis
  3. docker run --name gitlab-redis -tid \
  4. -v /data/program/srv/docker/gitlab/redis:/var/lib/redis \
  5. sameersbn/redis

gitlab

  1. sudo mkdir -p /data/program/srv/docker/gitlab/gitlab
  2. sudo chcon -Rt svirt_sandbox_file_t /data/program/srv/docker/gitlab/gitlab
  3. docker run --name gitlab -tid \
  4. --link gitlab-postgresql:postgresql --link gitlab-redis:redisio \
  5. -p 1083:22 -p 8088:80 \
  6. -e 'GITLAB_HOST=114.113.112.83' \
  7. -e 'GITLAB_PORT=8088' -e 'GITLAB_SSH_PORT=1083' \
  8. -e 'GITLAB_SECRETS_DB_KEY_BASE=gitlab' \
  9. -e 'GITLAB_BACKUPS=daily' \
  10. -e 'GITLAB_BACKUP_TIME=20:00' \
  11. -e 'GITLAB_TIMEZONE=Beijing' \
  12. -e 'GITLAB_EMAIL=git@example.cn' -e 'GITLAB_EMAIL_DISPLAY_NAME=Git' -e 'GITLAB_EMAIL_REPLY_TO=noreply@example.cn' \
  13. -e 'NGINX_MAX_UPLOAD_SIZE=60m' \
  14. -e 'GITLAB_GRAVATAR_ENABLED=false' \
  15. -e 'SMTP_DOMAIN=smtp.example.com' -e 'SMTP_HOST=smtp.example.com' -e 'SMTP_PORT=25' \
  16. -e 'SMTP_USER=git@example.cn' -e 'SMTP_PASS=example' \
  17. -e 'LDAP_ENABLED=true' \
  18. -e 'LDAP_HOST=218.104.82.226' -e 'LDAP_PORT=389' -e 'LDAP_METHOD=plain' \
  19. -e 'LDAP_UID=sAMAccountName' \
  20. -e 'LDAP_BIND_DN=cn=ldapuser,cn=users,dc=example,dc=com' \
  21. -e 'LDAP_PASS=example' \
  22. -e 'LDAP_ACTIVE_DIRECTORY=true' \
  23. -e 'LDAP_BASE=cn=users,dc=example,dc=com' \
  24. -e 'LDAP_BLOCK_AUTO_CREATED_USERS=false' \
  25. -v /data/program/srv/docker/gitlab/gitlab:/home/git/data \
  26. sameersbn/gitlab

上面的 GitLab 的 docker 命令参数要多一点,主要是其中配置了邮箱和 LDAP 服务器。大家可以参照官方文档自行增删配置。

例如:

  1. docker run --name gitlab -tid \
  2. --link gitlab-postgresql:postgresql --link gitlab-redis:redisio \
  3. -p 1083:22 -p 8088:80 \
  4. -e 'GITLAB_HOST=114.113.112.83' \
  5. -e 'GITLAB_PORT=8088' -e 'GITLAB_SSH_PORT=1083' \
  6. -e 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
  7. -e 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \
  8. -e 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \
  9. -e 'GITLAB_BACKUPS=daily' \
  10. -e 'GITLAB_BACKUP_TIME=20:00' \
  11. -e 'GITLAB_TIMEZONE=Beijing' \
  12. -e 'GITLAB_EMAIL=git@example.cn' -e 'GITLAB_EMAIL_DISPLAY_NAME=Git' -e 'GITLAB_EMAIL_REPLY_TO=noreply@example.cn' \
  13. -e 'NGINX_MAX_UPLOAD_SIZE=60m' \
  14. -e 'GITLAB_GRAVATAR_ENABLED=false' \
  15. -e 'GITLAB_EMAIL_ENABLED=false' \
  16. -e 'GITLAB_INCOMING_EMAIL_ENABLED=false' \
  17. -e 'GITLAB_SIGNUP=false' \
  18. -v /data/program/srv/docker/gitlab/gitlab:/home/git/data \
  19. sameersbn/gitlab
  20. docker run --name gitlab -d \
  21. --link gitlab-postgresql:postgresql --link gitlab-redis:redisio \
  22. -p 1022:22 -p 8088:80 \
  23. --env 'GITLAB_PORT=8088' --env 'GITLAB_SSH_PORT=1022' \
  24. --env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
  25. --env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \
  26. --env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \
  27. --volume /data/program/srv/docker/gitlab/gitlab:/home/git/data \
  28. sameersbn/gitlab

因为这台运行 docker 的宿主服务器就是一台专门为 GitLab 申请的虚拟机,所以后面就没有配置独立IP。
直接在命令中通过 -p 1083:22 -p 8088:80 指定了服务器的端口映射。
端口映射规则, IP:host_port:container_port 或 -p IP::port 来指定允许访问容器的主机上的 IP、接口等,以制定更严格的规则。
如果希望永久绑定到某个固定的 IP 地址,可以在 Docker 配置文件 /etc/default/docker 中指定 DOCKER_OPTS="--ip=IP_ADDRESS",之后重启 Docker 服务即可生效。

GITLAB_PORT&GITLAB_SSH_PORT gitlab在公网的服务端口, 配置正确以便于生成正确的url

这里面有一点比较特殊,GitLab 的默认时间是 UTC 时间,所以通过 -e 'GITLAB_TIMEZONE=Beijing' 指定了 +8 时区。
如果你使用自带的 backup 配置的话也要注意,默认的备份时间 04:00 对应到我们这边实际上是中午 12:00 了。所以我通过 -e 'GITLAB_BACKUP_TIME=20:00'指定了备份时间为北京时间的 04:00。当然,这个备份时间大家自己看着调了。

最后的 GitLab 容器通过 --link gitlab-postgresql:postgresql --link gitlab-redis:redisio link 到 redis 和 postgresql ,postgresql和redis成为gitlab的子容器, 所以其他两个容器的 IP 、端口和数据库的配置信息不用指定。镜像中已经做了处理。
当然,其他两个容器肯定要比 GitLab 先启动。

gitlab的参数配置链接

启动脚本

  1. docker start gitlab-redis
  2. docker start gitlab-postgresql
  3. docker start gitlab

容器启动后等一会(初始化时间)就可以正常访问和配置了。 >账户:root >密码:5iveL!fe

常用指令

  docker exec 是Docker內建的命令。下面示範如何使用該命令。

  1. $ sudo docker run -idt ubuntu
  2. 243c32535da7d142fb0e6df616a3c3ada0b8ab417937c853a9e1c251f499f550
  3. $ sudo docker ps
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. 243c32535da7 ubuntu:latest "/bin/bash" 18 seconds ago Up 17 seconds nostalgic
  6. $sudo docker exec -ti nostalgic bash
  7. root@243c32535da7:/#

  关于-i、-t参数, 可以看出只用-i时,由于没有分配伪终端,看起来像pipe执行一样。但是执行结果、命令返回值都可以正确获取。 如果只使用-t参数,则可以看到一个console窗口,但是执行命令会发现由于没有获得stdin的输出,无法看到命令执行情况。 使用-it时,则和我们平常操作console界面类似。而且也不会像attach方式因为退出,导致整个容器退出。
  
  
  docker attach 亦是Docker內建的命令。下面示例如何使用該命令。

  1. $ sudo docker run -idt ubuntu
  2. 243c32535da7d142fb0e6df616a3c3ada0b8ab417937c853a9e1c251f499f550
  3. $ sudo docker ps
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. 243c32535da7 ubuntu:latest "/bin/bash" 18 seconds ago Up 17 seconds nostalgic
  6. $sudo docker attach nostalgic
  7. root@243c32535da7:/#

  但是使用 attach 命令有時候並不方便。當多個窗口同時 attach 到同一個容器的時候,所有窗口都會同步顯示。當某個窗口因命令阻塞時,其他窗口也無法執行操作了。但是需要注意的是,如果从这个stdin中exit,会导致容器的停止。
  
  
  查看sameersbn/gitlab容器的日志

  1. docker logs $( docker ps -a|grep sameersbn/gitlab |awk '{print $1}' )
  2. docker logs -f $( docker ps -a|grep sameersbn/gitlab |awk '{print $1}' )

  查看sameersbn/redis容器的ip

  1. docker inspect $( docker ps -a|grep redis |awk '{print $1}' ) |grep IPAddress

  停掉sameersbn/gitlab容器

  1. docker stop $( docker ps -a|grep sameersbn/gitlab |awk '{print $1}' )

  
  删除sameersbn/gitlab容器

  1. docker rm $( docker ps -a|grep sameersbn/gitlab |awk '{print $1}' )

  
  停掉所有容器

  1. docker stop $(docker ps -a -q)

  
  删除所有容器

  1. docker rm $(docker ps -a -q)

  
  查看所有运行中得容器

  1. docker ps

  
  删掉名称为sameersbn/gitlab的镜像

  1. docker rmi $( docker images|grep sameersbn/gitlab |awk '{print $3}' )

  
  查看所有镜像

  1. docker images
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注