摘要:docker 的相关知识,使用 docker 搭建 gitlab
docker 常用命令
一、镜像操作
1、查看镜像列表
1 | docker image |
2、单独搜索镜像
1 | docker search 镜像名 |
3、拉取镜像
1 | docker pull 镜像名:tag |
只有镜像名时默认拉去最新版本 latest
4、构建镜像
先在项目根目录创建 Dockerfile 文件,比如:在一个 vue3 项目中使用 pnpm 启动服务,vite.config.js 配置已经配置好了
1 | // vite.config.js |
1 | # Dockerfile |
注意:
1、FROM 指令必须是第一条指令,因为后面所有的操作都是基于指定的基础镜像之上;
2、RUN 指令是在构建镜像过程中执行的命令;
3、COPY 只能复制宿主机本地的文件,ADD 具有更强大的能力,可以跨服务器复制内容;
4、ENTRYPOINT 和 CMD 会在容器启动时执行。大多数情况下 ENTRYPOINT 与 CMD 可互换,常见的一种实践方式是通过 exec 格式的 ENTRYPOINT 设置固定的命令、参数,而利用 exec 格式的 CMD 设置默认的可变参数,也就是说 CMD 的内容会作为参数传给 ENTRYPOINT。
配置好 Dockerfile 文件后,进入项目根目录执行创建命令
1 | docker build [OPTIONS] PATH | URL | - |
比如:以当前 vue3 项目目录为内容,使用指定目录的 Dockerfile 文件创建名字及标签为 vueproject:0.0.1 的镜像
1 | docker build -f ./Dockerfile -t vueproject:0.0.1 . |
5、删除镜像
1 | docker rmi 镜像ID |
或者
1 | docker rmi 镜像Name:tag |
6、导出镜像
1 | docker save -o 导出文件名称.tar 镜像Name:tag |
save 导出的镜像文件由一层层 layer 堆叠组成
7、导入镜像
1 | docker load -i 文件名称.tar |
二、容器操作
1、运行容器
1 | docker run [OPTIONS] 容器Name:tag |
执行命令
1 | docker run -d -p 8080:8080 vueproject:0.0.1 |
打开 http://localhost:8080 即可看到页面内容
容器的名称可配可改,比如:运行一个名为 vue1 的新容器,映射端口为 3000
1 | docker run --name vue1 -d -p 3000:8080 vueproject:0.0.1 |
常用参数
1 | -d // 后台运行容器,并返回容器 id |
2、修改容器名字
1 | docker rename 旧名字 新名字 |
比如:修改容器 vue1 的名字为 vue2
1 | docker rename vue1 vue2 |
3、查看容器
查看当前运行中的容器
1 | docker ps |
查看所有容器,包括已停止的容器
1 | docker ps -a |
4、停止容器
1 | docker stop 容器ID或Name // 停止 |
5、启动/重启容器
1 | docker start 容器ID或Name // 启动 |
6、删除容器
1 | docker rm 容器1ID或Name [容器2ID或Name ...] |
7、进入容器
1 | docker exec -it 容器ID或Name /bin/sh |
8、查看容器日志
1 | docker logs 容器ID或Name |
9、导出容器
1 | docker export -o 导出文件.tar 容器Name |
export 导出的容器文件仅包含容器当时的信息,将所有 layer 组合到一起,通常比 save 导出的镜像文件要小。
10、导入容器
1 | docker import 导出文件.tar 容器Name:tag |
虽然 import 是导入的容器包 container ,但导入后会恢复成为镜像 image。
二、安装 gitlab
1、配置源
设置 Docker Engine 修改为国内的源,下载各种镜像更快。JSON 中添加一下信息:
1 | // JSON |
2、下载 gitlab 镜像
1 | docker pull gitlab/gitlab-ce |
3、创建容器
1 | docker run -itd -p 6443:443 -p 6080:80 -p 6022:22 -v /Users/niuxiaokui/gitlab/etc:/etc/gitlab -v /Users/niuxiaokui/gitlab/log:/var/log/gitlab -v /Users/niuxiaokui/gitlab/opt:/var/opt/gitlab --restart=always --privileged=true --name=gitlab gitlab/gitlab-ce |
–restart=always:开机重启,失败后也重启
–privileged=true:开启 root 权限
–name=gitlab:指定容器名称为 gitlab
4、登录 gitlab
需要将防火墙关闭,等待几分钟,然后打开 http://localhost:6080。使用 root 用户登录,临时密码在 /etc/gitlab/initial_root_password 中,可以直接打开映射的文件,或者使用命令查看密码:
1 | cat /Users/niuxiaokui/gitlab/etc/initial_root_password |
5、修改密码
登录成功后要先修改密码,临时密码会在 24 小时后失效。
6、配置 http 克隆路径
创建项目后,发现项目的克隆路径是容器的 id,不能直接使用。需要修改容器中的/etc/gitlab/gitlab.rb
文件,由于已经对容器的文件夹/etc/gitlab
挂载到了宿主机目录下,可以直接进入/Users/niuxiaokui/gitlab/etc
修改 gitlab.rb 文件:
1 | external_url 'http://192.168.1.101:6080' // 修改克隆路径,容器 id 会被该文本替换 |
说明:默认情况下 gitlab 内置的 nginx 会监听 external_url 指定的端口,未指定端口时监听 80(http)或 443(https)。由于容器的配置-p 6080:80
映射的是 80 端口,需要让内置 nginx 继续监听 80 端口才能接收到外部的访问请求。external_url 会成为多处重定向跳转的地址,比如下面由 http 跳转到 https 就会重定向到 external_url。
修改配置后重启 gitlab:
1 | docker restart gitlab |
重启成功后,再次登录 gitlab 即可看到项目的路径已经变成正常路径。
还有另外一种方法:直接映射容器在 external_url 配置的端口。同样还是修改 gitlab.rb 文件:
1 | external_url 'http://192.168.1.101:6080' // 修改克隆路径,容器 id 会被该文本替换,此时内置 nginx 会监听容器的 6080 端口 |
将之前的 gitlab 容器删除,然后执行命令
1 | docker run -itd -p 6443:443 -p 6080:6080 -p 6022:22 -v /Users/niuxiaokui/gitlab/etc:/etc/gitlab -v /Users/niuxiaokui/gitlab/log:/var/log/gitlab -v /Users/niuxiaokui/gitlab/opt:/var/opt/gitlab --restart=always --privileged=true --name=gitlab gitlab/gitlab-ce |
将-p 6080:80
修改为-p 6080:6080
,访问宿主机的 6080 端口即是访问容器的 6080 端口
7、配置 ssh 克隆路径
修改 gitlab.rb 文件:
1 | gitlab_rails['gitlab_ssh_host'] = '192.168.1.101' // 设置路径中的 ip,使用宿主机 ip |
重启 gitlab,重启成功后再将公钥绑定好,之后即可使用 ssh 的路径克隆项目。由于 ssh 路径不是默认的 22 端口,因此路径会加上ssh://
的协议头。
8、头像显示
修改 gitlab.rb 文件里头像相关网址:
1 | gitlab_rails['gravatar_plain_url'] = 'http://cdn.libravatar.org/avatar/%{hash}?s=%{size}&d=identicon' |
重启后头像即可正常显示。
9、配置 https
修改 gitlab.rb 文件:
1 | external_url 'https://192.168.1.101:6443' // 修改克隆路径 |
重启成功后,打开连接 http://localhost:6080 会重定向到 https://192.168.1.101:6443 并提示您的连接不是私密连接
。忽略提示,登录后找到项目的 https 地址,复制地址后进行克隆。执行命令:
1 | git clone https://192.168.1.101:6443/xxx/xxx.git |
执行失败,终端提示:SSL certificate problem: self signed certificate
因为没有设置权威机构颁发的 CA 证书,gitlab 默认使用的是自签证书,所以没有通过验证。设置跳过验证即可:
1 | git config --global http.sslVerify false |
之后就可以克隆项目了,但是不建议直接这样设置全局跳过验证,因为在其他环境克隆项目时存在风险。更推荐这样做:
1 | export GIT_SSL_NO_VERIFY=true // 设置临时变量跳过验证仅当前终端生效 |
进入克隆项目后,单独设置项目跳过验证:
1 | git config http.sslVerify false |
10、配置邮箱
使用 qq 邮箱
1 | ### Email Settings |
更新配置重启成功后测试一下:
1 | docker exec -it gitlab /bin/sh // 进入容器 |
成功的话目标邮箱就会收到邮件。