关于docker的一些应用

89 阅读2分钟

市面上看到了很多关于docker原理的文章,但是总会感觉掌握得不够。那么具体到实际问题,应该如何应用docker呢?本文从以快速搭建一个gitlab服务为例,来实操讲解该如何运用docker来快速部署服务,并且穿插了docker的一些概念。

1.安装WSL2

开启功能

Windows Subsystem for Linux(WSL)是Windows 10上的一个工具,允许开发人员在Windows上直接运行Linux环境。

在安装WSL前需要先开启两个功能。

62f77f1ac9dad.png

可以从控制面板 - 程序 - 启用或关闭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

屏幕截图 2025-05-08 134536.png

启动gitlab容器后,需要设置root用户密码

# 在容器中执行脚本
user = User.find_by(username: 'root')
user.pass123word = '你的密码'
user.pass123word_confirmation = '你的密码'
user.save!

但是有的时候访问页面会出现500的错误:

微信图片_20250508152406.jpg

进到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'