CI工具drone和Docker入門


2021-05-27

上個月入職新公司,領導讓我整理下gitlib創建項目到部署ranch的一個過程文檔

發現項目工程中都會有.drone.yml和Dockerfile文件

一、CI工具drone

1、drone是一個類似jenkins的工具,下面是一個新建的項目在drone的配置項

(1)打開 http://drone.xxx.com.ph/ 地址,之前未登錄會有一個授權彈窗,點擊Authorize。
(2)打開 http://drone.xxx.com.ph/account/repos 地址,找到項目qa-mock,並點擊右側欄置為生效
(3)打開 http://drone.xxx.com.ph/data-qa/mock/settings 地址,勾選tag
(4)打開 http://drone.xxx.com.ph/data-qa/mock/settings/secrets 地址,設置倉庫用戶名和密碼
    Secret Name 填入 xxxxxx
    Secret Value 填入 xxxxxx

2、.drone.yml文件是用來申明CI的過程

項目根目錄添加.drone.yml文件,該文件主要是用來配置項目構建的流程
官方文檔:https://docs.drone.io/pipeline/overview/
環境變量:https://docs.drone.io/pipeline/environment/reference/
其他參考:https://my.oschina.net/u/4172827/blog/3080817

# 注釋的這個是新版本的寫法
#kind: pipeline
#name: qa-mock
#steps:
#  - name: aliyun           # 步驟的名字
#    image: plugins/docker  # 每個步驟的本質都是基於這個鏡像去啟動一個容器
#    registry: 保存鏡像的倉庫地址  # 保存鏡像的倉庫地址
#    repo: 保存鏡像的倉庫地址/a/b  # 鏡像位置
#    secrets: [ docker_username, docker_password ]                            # drone項目secrets的用戶名和密碼
#    tags:                # 將最新的tag名設置為${DRONE_TAG}
#      - latest
#      - ${DRONE_TAG}     # 當前正在運行的構建的tag名稱
#    when:                # when語法:https://docs.drone.io/pipeline/docker/syntax/conditions/
#      branch: dev        # 如果有branch,那么tag不會觸發構建
#      event: tag         # 事件觸發


# 公司drone版本比較老,所以用的是老版寫法,下面的aliyun對應1個步驟,可以創建多個步驟
pipeline:
#  build:     這里一個步驟是java項目編譯打包用的,我們還可以在編譯之前再加一些sonar檢查的步驟什么的
#    image: maven:3.6.0-jdk-11-slim
#    commands:
#      - mvn clean install  -Dmaven.test.skip=true
#    volumes:
#      - /tmp/gaolei:/root/.m2

  teststep:
    image: plugins/docker
    repo: 保存鏡像的倉庫地址/a/b
    registry: 保存鏡像的倉庫地址 
    secrets: [ docker_username, docker_password ]
    tags: ${DRONE_TAG=latest}
#    tags:
#      - latest
#      - "latest"
    when:
      event: [ tag,push ]

二、docker概念

Docker將應用程序與該程序的依賴,打包在一個文件里面。
運行這個文件,就會生成一個虛擬容器。程序在這個虛擬容器里運行,就好像在真實的物理機上運行一樣。
容器還可以進行版本管理、復制、分享、修改,就像管理普通的代碼一樣。

鏡像( Image) 和容器( Container) 的關系
就像是面向對象程序設計中的 類 和 實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。

容器的實質是進程,但與直接在宿主執行的進程不同,容器進程運行於屬於自己的獨立的 命名空間。
因此容器可以擁有自己的 root 文件系統、自己的網絡配置、自己的進程空間,甚至自己的用戶 ID 空間。
容器內的進程是運行在一個隔離的環境里,使用起來,就好像是在一個獨立於宿主的系統下操作一樣。
這種特性使得容器封裝的應用比直接在宿主運行更加安全。

優點:
1、簡化配置:虛擬機VM最大的好處是基於你的應用配置能夠無縫運行在任何平台上,Docker提供同樣類似VM的能力。
2、服務合並:使用Docker也能合並多個服務以降低費用
3、代碼管道化管理:能夠對代碼以流式pipeline管道化進行管理,
4、多租戶:Docker能夠作為雲計算的多租戶容器,使用Docker能容易為每個租戶創建運行應該多個實例,這得益其靈活的快速環境以及有效diff命令。
5、快速部署:Docker通過創建進程的容器,不必重新啟動操作系統,幾秒內能關閉。
6、開發人員的生產化:我們可以將多個Docker裝載一系列服務運行在單機上最大程度模擬生產分布式部署的環境。
7、應用隔離:將多個應用服務部署在多個Docker中能輕松達到這個目的。
8、分層存儲:鏡像包含操作系統完整的 root 文件系統,其體積往往是龐大的,因此在Docker 設計時,就充分利用 Union FS 的技術,將其設計為分層存儲的架構。

三、docker安裝和使用

參考來源:https://www.runoob.com/docker/ubuntu-docker-install.html

其他參考:https://www.huaweicloud.com/zhishi/arc-3376452.html

1、安裝
我自己阿里雲linux服務器的安裝方式,一條命令安裝完成就可以直接使用docker了:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
2、常用docker命令
(1)docker images           查看鏡像
   docker rmi <鏡像id>  刪除鏡像
(2)docker ps          查看運行中的容器
    docker ps  -a    查看所有的容器
    docker rm -f <容器 ID>  刪除容器
(3)docker stop <容器 ID>    停止容器
    docker start <容器 ID>   啟動已經停止的容器
    docker restart <容器 ID>   重啟容器
(4)docker run -itd ubuntu:15.10 /bin/bash  創建一個新的容器,並運行一個命令  --name  容器名 :給新建的容器命名
      -i: 交互式操作。
      -t: 終端。
      -d:后台運行
      ubuntu: ubuntu 鏡像。
      /bin/bash:放在鏡像名后的是命令,這里我們希望有個交互式 Shell,因此用的是 /bin/bash 
       在使用 -d 參數時,容器啟動后會進入后台。此時想要進入容器,可以通過以下指令進入
       docker exec -it <容器 ID> /bin/bash   使用exec不會在exit退出容器時導致容器停止
(5) 創建命令
    docker build -t 鏡像名稱:鏡像tag .    這里的.就是Dockerfile文件所在的目錄

Dockerfile文件是一個把項目打包成鏡像的過程,示例如下,后面有空把docker和drone從安裝到應用實踐一遍

# 基於鏡像基礎
FROM python:3.6-slim-stretch

RUN apt-get update

# 創建目錄
RUN mkdir -p /opt/data-qa/qa-mock
# 復制指令,從上下文目錄中文件復制到指定路徑,這里的表示當前路徑的內容復制到上面創建出來的目錄
COPY . /opt/data-qa/qa-mock

# 工作目錄
WORKDIR /opt/data-qa/qa-mock
# 安裝qa-mock目錄下requirements的依賴包
RUN pip install -r requirements.txt

# 申明使用的端口
EXPOSE 9000

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM