市面上看到了很多关于docker原理的文章,但是总会感觉掌握得不够。那么具体到实际问题,应该如何应用docker呢?本文从以快速搭建一个gitlab服务为例,来实操讲解该如何运用docker来快速部署服务,并且穿插了docker的一些概念。
1.安装WSL2
开启功能
Windows Subsystem for Linux(WSL)是Windows 10上的一个工具,允许开发人员在Windows上直接运行Linux环境。
在安装WSL前需要先开启两个功能。
可以从控制面板 - 程序 - 启用或关闭Windows功能中开启。
或者使用powershell(管理员身份打开)输入命令开启也一样。
# 启用"适用于 Linux 的 Windows 子系统"可选功能
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# 启用虚拟机平台
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
然后重启计算机。
安装内核
下载:适用于 x64 计算机的 WSL2 Linux 内核更新包
安装后在powershell里设置wsl的版本为wsl2
wsl --set-default-version 2
2.安装Docker桌面版
windows下载链接:
docs.docker.com/desktop/ins…
安装时需要勾选Use WSL2 instead of Hyper-V
安装完成后根据提示重启电脑。
3.安装gitlab-ce
打开cmd终端,拉取gitlab镜像文件
docker pull gitlab/gitlab-ce
(需要完善dockerfile和docker hub的概念)
下载完成后,查看本地镜像文件
docker image ls
创建数据卷
docker volume create gitlab-data-vol
docker volume create gitlab-log-vol
docker volume create gitlab-config-vol
(需要完善volume的概念)
在docker启动gitlab,这里映射到本机的80,22,443端口。
可以根据自己的需要修改。
docker run --detach
--publish 443:443 --publish 80:80 --publish 22:22
--name gitlab
--restart always
--volume gitlab-config-vol:/etc/gitlab
--volume gitlab-log-vol:/var/log/gitlab
--volume gitlab-data-vol:/var/opt/gitlab
gitlab/gitlab-ce
(需要完善service的概念)
配置gitlab,进入容器配置就可以。这里不赘述了,可以参考博客里面Gitlab linux的搭建过程来配置。
# 进入容器
docker exec -it gitlab /bin/bash
启动gitlab容器后,需要设置root用户密码
# 在容器中执行脚本
user = User.find_by(username: 'root')
user.pass123word = '你的密码'
user.pass123word_confirmation = '你的密码'
user.save!
但是有的时候访问页面会出现500的错误:
进到gitlab 容器中
cat /var/log/gitlab/gitlab-rails/production.log
显示很多 IOError (unmapped file),于是百度搜了一下,有回答说是 docker shm 不足导致,
于是在容器中 df -h /dev/shm 显示64M确实用完了。
修改docker compose 文件,shm设为512MB 就解决该问题了。
version: '3.7'
services:
gitlab:
image: gitlab/gitlab-ce:16.9.2-ce.0
container_name: gitlab_server
restart: always
privileged: true
ports:
- "20001:80"
- "20002:22"
- "20000:443"
volumes:
- /data/config:/etc/gitlab
- /data/logs:/var/log/gitlab
- /data/data:/var/opt/gitlab
tty: true
stdin_open: true
shm_size: '512m'