一:安裝docker
-
apt 源使用 HTTPS 以確保軟件下載過(guò)程中不被篡改赡模。我們首先需要添加使用HTTPS 傳輸?shù)能浖约?CA 證書。
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
-
為了確認(rèn)所下載軟件包的合法性师抄,需要添加軟件源的 GPG 密鑰漓柑。
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
-
向 source.list 中添加 Docker 軟件源
sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
-
更新 apt 軟件包緩存,并安裝 docker-ce
sudo apt-get update
sudo apt-get install docker-ce
-
啟動(dòng) Docker CE
sudo systemctl enable docker
sudo systemctl start docker
-
建立 docker 組
sudo groupadd docker
-
將當(dāng)前用戶加入 docker 組
sudo usermod -aG docker $USER
-
退出當(dāng)前終端并重新登錄叨吮,進(jìn)行如下測(cè)試
docker run hello-world
如果能看到以上信息 則docker安裝成功
二: 配置國(guó)內(nèi)鏡像
-
由于docker默認(rèn)使用的是國(guó)外鏡像辆布,當(dāng)pull鏡像時(shí)很慢, 這里我們配置使用docker給國(guó)內(nèi)提供的加速服務(wù), 在 /etc/docker/daemon.json中寫入以下內(nèi)容(如果daemon.json文件不存在挤安, 則新建一個(gè), 新建記得使用root權(quán)限)
以上內(nèi)容一定要符合json規(guī)范, 不然docker會(huì)啟動(dòng)不了 -
重新啟動(dòng)服務(wù)
sudo systemctl daemon-reload
sudo systemctl restart docker
-
驗(yàn)證鏡像加速是否成功
在命令行執(zhí)行 docker info
如果從結(jié)果中看到以上信息則配置成功
三: 構(gòu)建自己的鏡像
構(gòu)建自己的鏡像主要是打包我們項(xiàng)目需要的環(huán)境(依賴谚殊, 安裝包等),之后如果我們需要在不同的主機(jī)上運(yùn)行項(xiàng)目, 我們只需要拿到這個(gè)鏡像就可以了
構(gòu)建鏡像這里我們使用Dockerfile來(lái)構(gòu)建,(也有別的方法構(gòu)建鏡像蛤铜, 自行百度)
-
在項(xiàng)目根目錄下新建一個(gè)空的文件夾名, 這里我們文件夾命名為"myimage"
mkdir myimage
cd myimage
touch Dockerfile
- 編寫Dockerfile腳本
既然是構(gòu)建自己的鏡像, 我們就得先以一個(gè)鏡像為基礎(chǔ)丛肢, 在此基礎(chǔ)上定制自己的鏡像围肥。選取基礎(chǔ)鏡像的標(biāo)準(zhǔn)是基于自己項(xiàng)目的需要(比如我們項(xiàng)目在web網(wǎng)頁(yè)上, 這里我們就選取nginx為基礎(chǔ)鏡像)
Dockerfile腳本編寫規(guī)則及命令詳解參考這篇文章Dockerfile命令詳解
這里我們編寫的Dockerfile腳本內(nèi)容為:
FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
只有兩行, 主要是在網(wǎng)頁(yè)上輸出一句話“Hello, Docker!”
-
執(zhí)行Dockerfile腳本構(gòu)建鏡像
構(gòu)建鏡像名為 mynginx(可自己定義名字), 注意后面有一個(gè) "." , 指定了當(dāng)前目錄(上下文context), 關(guān)于上下文context的概念可查閱此文章上下文context理解
docker build -t mynginx .
輸出以下內(nèi)容則構(gòu)建成功
此時(shí)通過(guò)命令 docker images 可以查看到我們已經(jīng)構(gòu)建成功的鏡像 mynginx
四: gitlab服務(wù)器搭建
一:注冊(cè)docker-runner
-
Run the register command:
docker run --rm -t -i -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register
Note: If you used a config volume other than
/srv/gitlab-runner/config
during install, then you should update the command with the correct volume. -
Enter your GitLab instance URL:
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com ) https://gitlab.com
-
Enter the token you obtained to register the Runner:
Please enter the gitlab-ci token for this runner xxx
-
Enter a description for the Runner, you can change this later in GitLab’s UI:
Please enter the gitlab-ci description for this runner [hostname] my-runner
-
Enter the tags associated with the Runner, you can change this later in GitLab’s UI:
Please enter the gitlab-ci tags for this runner (comma separated): my-tag,another-tag
-
Enter the Runner executor:
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell: docker
-
If you chose Docker as your executor, you’ll be asked for the default image to be used for projects that do not define one in
.gitlab-ci.yml
:Please enter the Docker image (eg. ruby:2.6): alpine:latest
注意!!!!!蜂怎, 以上 2, 3步要輸入gitlab-runner 的地址和 token .第7步輸入我們之前定制的鏡像名(輸入基礎(chǔ)鏡像alpine:latest也可以.之后我們可以在.gitlab-ci.yam文件中指定每個(gè)job的的鏡像)
二:修改runner配置文件
sudo gedit /srv/gitlab-runner/config/config.toml , 在[runner.docker]下添加pull_policy = "always"
三:搭建私有倉(cāng)庫(kù)
docker run -d -p 5000:5000 --restart=always --name registry registry
sudo gedit /etc/default/docker
修改DOCKER_OPTS為:
DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com --insecure-registry=ip:5000"
上面的ip為自己要搭建的倉(cāng)庫(kù)的ip地址 例如為127.0.0.1 則 127.0.0.1:5000就是你倉(cāng)庫(kù)的地址
將之前自己構(gòu)建的鏡像上傳到私有倉(cāng)庫(kù)
- 必須要先標(biāo)記我們要上傳的鏡像
docker tag imagename ip/imagename
上面命令中 imagename為我們構(gòu)建的鏡像名穆刻, ip為倉(cāng)庫(kù)地址。 格式必須是這種否則上傳會(huì)失敗
- 輸入docker images 查看標(biāo)記鏡像是否成功
- 上傳鏡像
docker push tag_image_name
上面tag_image_name為標(biāo)記后image的名字
- 查看鏡像上傳是否成功
curl ip/v2/_catalog
如果你不想使用 127.0.0.1:5000 作為倉(cāng)庫(kù)地址杠步,比如想讓本網(wǎng)段的其他主機(jī)也能把鏡像推送到私有倉(cāng)庫(kù)氢伟。你就得把例如 192.168.199.100:5000 這樣的內(nèi)網(wǎng)地址作為私有倉(cāng)庫(kù)地址榜轿,這時(shí)你會(huì)發(fā)現(xiàn)無(wú)法成功推送鏡像。這是因?yàn)?Docker 默認(rèn)不允許非 HTTPS 方式推送鏡像朵锣。我們可以通過(guò) Docker 的配置選項(xiàng)來(lái)取消這個(gè)限制
修改 /etc/docker/daemon.json文件的權(quán)限
sudo chmod -R 777 /etc/docker/daemon.json
終端命令行輸入命令
echo '{ "insecure-registries":["192.168.16.212:5000"] }' > /etc/docker/daemon.json
重啟服務(wù)
systemctl daemon-reload
systemctl restart docker
五: .gitlab-ci.yml腳本的編寫
在項(xiàng)目的根目錄新建文件.gitlab-ci.yml
例子
l六:驗(yàn)證結(jié)果
push代碼
到gitlab服務(wù)器CI/CD 查看pipeline的運(yùn)行情況是否啟用了docker拉取了我們構(gòu)建的鏡像