---
# System prepended metadata

title: 在Ubuntu裝Docker+Gitlab

---

# 在Ubuntu裝Docker+Gitlab

---
## 安裝Docker
1. 安裝指令
```bash=
sudo apt-get install docker.io
```
2. 安裝後，查看docker有沒有正常啟動
```bash=
service docker status
```
正常的話，應該可以看到綠色的狀態：
![](https://i.imgur.com/cup2vh5.png)

3. 接著將自己的使用者帳號加入至 docker 群組，<font color=red>登出再重新登入之後</font>，就可以開始使用 Docker 了。
```bash=
sudo usermod -aG docker yourID
```
首先查看 Docker 的版本資訊
```bash=
docker version
```
正常來說輸出會類似這樣
![](https://i.imgur.com/v824AY2.png)
如果最下方出現<font color=red>Cannot connect to the Docker daemon. Is the docker daemon running on this host?</font>，就表示有問題，通常是因為帳號沒有加入 docker 群組，權限不足的因素，只要按照上述的方式將帳號加入 docker 群組即可解決。

---
## 在Docker安裝Gitlab
1. 我們可以利用 docker 的 search 指令來尋找自己需要的 container 映像檔，例如我要找gitlab
```bash=
docker search gitlab
```
![](https://i.imgur.com/f1psl6R.png)
如上圖，我們先下載NAME是gitlab/gitlab-ce的image檔
```bash=
docker pull gitlab/gitlab-ce
```
下載完，可以用下方的指令列出所有的image檔
```bash=
docker images -a
```
![](https://i.imgur.com/9y85UGG.png)

2. 新建並啟用 Container
* detach: 在背景執行一個 Container
* public: 設定一個 port 來做 docker 裡頭的 web 接口。這邊我們把外部的port 8080設定給Container的port 80、外部的port 8443設定給container的port 443、外部的port 8022設定給container的port 22
* name: 自訂一個 Container 的名稱，這邊我們叫gitlab
```bash=
docker run --detach --publish 8080:80 --publish 8443:443 --publish 8022:22 --name gitlab gitlab/gitlab-ce
```

第一次執行Container通常要一段時間(約十分鐘)，gitlab才會完全啟動完畢。我們可以用指令看一下所有Container的執行情形
```bash=
docker ps
```
![](https://i.imgur.com/O7obsHm.png)

因為我們剛剛設定了public 8080:80，代表我們在瀏覽器要輸入http://IP:8080去連接到GitLab首頁
![](https://i.imgur.com/NlGIKR1.png)

然後，我們需要知道預設的root密碼是什麼。這個部份在Gitlab的文件有提示
![](https://i.imgur.com/qZph6uL.png)
應該要執行指令去獲得目前的root預設密碼(這個密碼每次GitLab重啟都會刷新)
```bash=
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
```
然後在首頁用root+預設密碼去登入，再去重設自己的密碼即可。

## 開啟Docker的Gitlab容器的HTTPS
基本觀念跟自己寫的[GilLab 14 設定HTTPS](https://hackmd.io/@enoladne/HyC5c-CkF)差不多，先參考Gitlab官方文件
![](https://i.imgur.com/pLmyxbf.png)

1. 執行官方文件第一個指令
* 進入docker裡gitlab的ssh(登入身份是root)
```bash=
sudo docker exec -it gitlab /bin/bash
```
2. 去處理[OpenSSL自簽憑證](https://hackmd.io/@enoladne/rJZ2xzWxY)

3. 先斷開步驟1的ssh連線
```bash=
exit
```
4. 接著用官方文件第二個指令，去執行[GilLab 14 設定HTTPS](https://hackmd.io/@enoladne/HyC5c-CkF)的第1步
* 用docker的text editor去編輯/etc/gitlab/gitlab.rb
```bash=
sudo docker exec -it gitlab editor /etc/gitlab/gitlab.rb
```

* 這裡我選擇第二個指令去編輯/etc/gitlab/gitlab.rb，因為之前用第一個指今後發現gitlab沒有vim可以用，然後用apt install vim後，gitlab就開始出一堆怪問題了‥

5. [GilLab 14 設定HTTPS](https://hackmd.io/@enoladne/HyC5c-CkF)的第2~4步，再回到用上面Gitlab官方文件的第一個指令去處理。
* 進入docker裡gitlab的ssh(登入身份是root)
```bash=
sudo docker exec -it gitlab /bin/bash
```
6. 用docker指令重啟Container的gitlab
```bash=
docker restart gitlab
```
* 目前用 restart 去重啟gitlab時，會發現gitlab重啟沒1分鐘就自動停掉了，然後要再重新 start 一次，原因不明‥‥請善用指定檢查gitlab有沒有啟動成功
```bash=
docker ps
```
---
## Docker的GitLab設定SSH

因為我們用docker安裝gitlab的container時，把外部的port 8022指給gitlab的port 22，所以在用Git UI設定SSH時，也要變更為port 8022。

以TortoiseGit為例，假設我們在Gitlab取得的ssh url如下
![](https://i.imgur.com/zrzNOJb.png)

那麼，在TortoiseGit裡，就要把原來的ssh url
```bash=
git@192.168.88.228:yang/tools.git
```
改成如下
```bash=
ssh://git@192.168.88.228:8022/yang/tools.git
```
TortoiseGit最後設定面如下
![](https://i.imgur.com/4nutnCb.png)

---
### 參考文件
* Ubuntu Linux 安裝 Docker 步驟與使用教學
>https://blog.gtwang.org/virtualization/ubuntu-linux-install-docker-tutorial/
* How to Remove Images and Containers in Docker
>https://www.freecodecamp.org/news/how-to-remove-images-in-docker/
* 簡易教學 — 利用 Docker 架設 Gitlab
> https://medium.com/appworks-school/%E7%B0%A1%E6%98%93%E6%95%99%E5%AD%B8-%E5%88%A9%E7%94%A8-docker-%E6%9E%B6%E8%A8%AD-gitlab-b392f75584dd
* 如何用 SSH 連進遠端主機內的 docker container?
>https://jimmylab.wordpress.com/2018/12/05/ssh-docker-container/
* DOCKER 移除 CONTAINERS、IMAGES、VOLUMES 與 NETWORKS 的方法
>https://blog.clarence.tw/2019/09/10/docker-removing-containers-images-volumes-and-networks/
* GitLab官方文件_Docker
>https://docs.gitlab.com/ee/install/docker.html
* TortoiseGit change default port 22
> https://stackoverflow.com/questions/29038153/tortoisegit-change-default-port-22
* DOCKER 的 MEMORY 與 CPU 資源管理
> https://hoohoo.top/blog/docker-resource-memory-and-cpu-setting/
