# GitLab docker compose 部署迁移【本地映射版】第一次随便用用，然后就需要迁移了( ╯□╰ )
<!--more-->

# GitLab docker compose 部署迁移【本地映射版】

首先我们进行 GitLab docker compose 部署，以下是docker compose（vlumes为随机生成）

``` yml
services:
  gitlab:
    image: gitlab/gitlab-ee:18.9.7-ee.0
    container_name: gitlab
    restart: always
    hostname: 'https://gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        # Add any other gitlab.rb configuration here, each on its own line
        external_url 'https://gitlab.example.com'
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
    volumes:
      - 'cf24c157d0cac6f68e7a4b13920760fe953b4e0f17723625eb76f83a3ca10e1d:/etc/gitlab'
      - '8a130bf14966991beddf5716e605f2832c32ed543fb7a7310f0252b5bc495b36:/var/log/gitlab'
      - '7a77a9481799976e97d4ad246fa70c19705f1fa5e864e4e29436abd8f3440702:/var/opt/gitlab'
```



在日常使用的时候，我们第一次部署可能会遇到，也有可能一开始使用了 `docker run` 进行容器使用，然后发现需要进行修改，进行卷迁移的情况

1. 需要迁移机器
2. 需要更改本地映射的位置
3. 需要备份之类的情况



查看挂载信息

```bash
docker inspect gitlab --format='{{json .Mounts}}' | python3 -m json.tool
```



```json
[
    {
        "Type": "volume",
        "Name": "cf24c157d0cac6f68e7a4b13920760fe953b4e0f17723625eb76f83a3ca10e1d",
        "Source": "/var/lib/docker/volumes/cf24c157d0cac6f68e7a4b13920760fe953b4e0f17723625eb76f83a3ca10e1d/_data",
        "Destination": "/etc/gitlab",
        "Driver": "local",
        "Mode": "rw",
        "RW": true,
        "Propagation": ""
    },
    {
        "Type": "volume",
        "Name": "8a130bf14966991beddf5716e605f2832c32ed543fb7a7310f0252b5bc495b36",
        "Source": "/var/lib/docker/volumes/8a130bf14966991beddf5716e605f2832c32ed543fb7a7310f0252b5bc495b36/_data",
        "Destination": "/var/log/gitlab",
        "Driver": "local",
        "Mode": "rw",
        "RW": true,
        "Propagation": ""
    },
    {
        "Type": "volume",
        "Name": "7a77a9481799976e97d4ad246fa70c19705f1fa5e864e4e29436abd8f3440702",
        "Source": "/var/lib/docker/volumes/7a77a9481799976e97d4ad246fa70c19705f1fa5e864e4e29436abd8f3440702/_data",
        "Destination": "/var/opt/gitlab",
        "Driver": "local",
        "Mode": "rw",
        "RW": true,
        "Propagation": ""
    }
]
```



**停止容器**

``` bash
docker compose stop
# or
#docker-compose stop
# or
#docker stop gitlab
```



那么这个是一个本地映射的迁移方式

我们找到 volumes 的目录，也就是以上 `.github` 的位置，然后 `mv` 或者 `cp` 到需要迁移的位置，也可以使用 `rsync` ，达到目的即可

``` bash
# 配置数据
sudo rsync -avP /var/lib/docker/volumes/cf24c157d0cac6f68e7a4b13920760fe953b4e0f17723625eb76f83a3ca10e1d/_data/ ./gitlab_config/
# 日志数据
sudo rsync -avP /var/lib/docker/volumes/8a130bf14966991beddf5716e605f2832c32ed543fb7a7310f0252b5bc495b36/_data/ ./gitlab_logs/
# 主数据（仓库、DB等）
sudo rsync -avP /var/lib/docker/volumes/7a77a9481799976e97d4ad246fa70c19705f1fa5e864e4e29436abd8f3440702/_data/ ./gitlab_data/
```



然后更改 `volumes` 这一块配置

``` yml
volumes:
      - 'cf24c157d0cac6f68e7a4b13920760fe953b4e0f17723625eb76f83a3ca10e1d:/etc/gitlab'
      - '8a130bf14966991beddf5716e605f2832c32ed543fb7a7310f0252b5bc495b36:/var/log/gitlab'
      - '7a77a9481799976e97d4ad246fa70c19705f1fa5e864e4e29436abd8f3440702:/var/opt/gitlab'
```



把冒号前面的 `.gitlab` 改为目的位置，比如

``` yml
volumes:
      - './gitlabs/config:/etc/gitlab'
      - './gitlabs/logs:/var/log/gitlab'
      - './gitlabs/data:/var/opt/gitlab'
```



**更改后的docker compose 配置**

```yaml
services:
  gitlab:
    image: gitlab/gitlab-ee:18.9.7-ee.0
    container_name: gitlab
    restart: always
    hostname: 'https://gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        # Add any other gitlab.rb configuration here, each on its own line
        external_url 'https://gitlab.example.com'
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
volumes:
      - './gitlabs/config:/etc/gitlab'
      - './gitlabs/logs:/var/log/gitlab'
      - './gitlabs/data:/var/opt/gitlab'
```



**启动容器**

``` shell
docker compose up -d
```



完成迁移