国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

基于 Docker ,Gogs,Jenkins,Kubernetes 實踐工程源代碼的自動構建和持續

Achilles / 2970人閱讀

</>復制代碼

  1. 本期目標 : 基于 Centos 7.6 , 封裝出一個可用于運行 php 項目的開箱即用鏡像
    本文不討論 dockerfile 語法 , 并且假設你懂得基本的類unix 操作系統常識并擁有類unix 運行環境 (包括但不限于安裝了maclinux 的實體機 , 類unix虛擬機 , 安裝了 MinGWCygWinwindows 機器) , 并且認為你懂得基本的 docker 操作和有一定的 dockerfile 閱讀能力
準備工作

建立工作目錄

</>復制代碼

  1. mkdir ~/docker-learn
  2. cd ~/docker-learn

創建Dockerfile

</>復制代碼

  1. touch Dockerfile

然后拷貝你常用的 nginx.conf 到工作目錄

</>復制代碼

  1. cp xxx/nginx.conf nginx.conf
封裝基礎鏡像

編輯我們創建好的 Dockerfile

基礎內容

聲明本鏡像繼承自 centos 最新版

</>復制代碼

  1. FROM centos
安裝 nginx

創建nginx源文件

</>復制代碼

  1. 由于 centos 倉庫里是沒有 nginx 的 , 所以我們要自力更新添加nginx的源到 docker
    復制 nginx.org 里關于 RHEL 源的內容到 nginx.repo 文件

也可以本地執行以下命令創建 nginx.repo

</>復制代碼

  1. sudo tee ./nginx.repo <<-"EOF"
  2. [nginx-stable]
  3. name=nginx stable repo
  4. baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
  5. gpgcheck=1
  6. enabled=1
  7. gpgkey=https://nginx.org/keys/nginx_signing.key
  8. [nginx-mainline]
  9. name=nginx mainline repo
  10. baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
  11. gpgcheck=1
  12. enabled=0
  13. gpgkey=https://nginx.org/keys/nginx_signing.key
  14. EOF

寫入復制 nginx.repo 指令到docker鏡像中

</>復制代碼

  1. COPY nginx.repo /etc/yum.repos.d/nginx.repo

使用yum安裝nginx并設置為開機啟動

</>復制代碼

  1. RUN yum makecache &&
  2. yum install nginx &&
  3. chkconfig nginx on

安裝 php

</>復制代碼

  1. centos 默認源中擁有低版本的 php 以及相關包 , 我們需要換一個版本新一些的源 .
    本文 remi開源鏡像

安裝 remi 源

</>復制代碼

  1. RUN rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm &&
  2. yum update -y

使用 yum 安裝php和相關包并設置為開機啟動

</>復制代碼

  1. RUN yum install -y --enablerepo=remi --enablerepo=remi-php72
  2. php
  3. php-openssl
  4. php-curl
  5. php-bcmath
  6. php-devel
  7. php-mbstring
  8. php-mcrypt
  9. php-mysqlnd
  10. php-pdo
  11. php-gd
  12. php-xml
  13. php-opcache
  14. php-fpm &&
  15. chkconfig php-fpm on

清理工作

</>復制代碼

  1. 眾所周知,如果要推送到線上的話鏡像越小越好,docker yum 的運行會生成大量緩存,那么我們就很有必要做一些清理工作了

</>復制代碼

  1. RUN yum clean headers &&
  2. yum clean packages &&
  3. yum clean metadata &&
  4. rm -rf /usr/share/man
聲明鏡像運行時入口點

</>復制代碼

  1. 即容器運行時執行的第一個命令,如果不是 init 的話很有可能部分特權命令無法運行,例如 chkconfig

</>復制代碼

  1. ENTRYPOINT ["/sbin/init"]
合并 dockerfile

</>復制代碼

  1. dockerfile 中的每個指令都會多帶帶生成一層鏡像,這樣勢必會增加我們的鏡像體積
    通常做法是盡可能把多條指令整理順序合并為一條,就可以有效減小鏡像體積

</>復制代碼

  1. FROM centos
  2. # 復制兩個repo
  3. COPY conf/tsinghua-base.repo /etc/yum.repos.d/CentOS-Base.repo
  4. COPY conf/nginx.repo /etc/yum.repos.d/nginx.repo
  5. # 安裝組件和相關包
  6. RUN yum makecache &&
  7. yum -y install nginx &&
  8. chkconfig nginx on &&
  9. yum install -y epel-release &&
  10. rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm &&
  11. yum update -y &&
  12. yum install -y --enablerepo=remi --enablerepo=remi-php72
  13. php
  14. php-openssl
  15. php-curl
  16. php-bcmath
  17. php-devel
  18. php-mbstring
  19. php-mcrypt
  20. php-mysqlnd
  21. php-pdo
  22. php-gd
  23. php-xml
  24. php-opcache
  25. php-fpm &&
  26. chkconfig php-fpm on &&
  27. yum clean headers &&
  28. yum clean packages &&
  29. yum clean metadata &&
  30. rm -rf /usr/share/man
  31. # 聲明入口點
  32. ENTRYPOINT ["/sbin/init"]
測試鏡像可用性

構建鏡像

</>復制代碼

  1. 值得注意的是 nginx 官方 repo 并不是很穩定 , 運行時可能會出錯 , 重試幾次一般都可以成功
    如果是其他類型的錯誤,那么就要檢查環境以及 dockerfile 有沒有問題

</>復制代碼

  1. docker build . -t first-build

帶有特權啟動一個后臺運行的容器,將會返回一個ID

</>復制代碼

  1. 使用了 --privileged 選項之后,容器會擁有真的 root 權限,否則就只有本地普通用戶權限.容器中執行了某些特殊操作(例如 systemctl)時才需要該選項

</>復制代碼

  1. docker run -d --privileged first-build

測試鏡像的運行狀況

</>復制代碼

  1. docker exec -it ( docker run 命令返回的ID ) ps aux | grep "[nginx|php]"

如果返回結果類似這樣,那么說明我們的操作是正確的

</>復制代碼

  1. > docker exec -it cca6 ps aux | grep "[nginx|php]"
  2. root 1 0.0 0.0 43112 4888 ? Ss 09:15 0:00 /sbin/init
  3. root 17 0.0 0.0 39096 6476 ? Ss 09:15 0:00 /usr/lib/system
  4. root 29 0.1 0.0 35100 3308 ? Ss 09:15 0:00 /usr/lib/system
  5. root 370 0.0 0.1 371588 21424 ? Ss 09:15 0:00 php-fpm: master
  6. root 381 0.0 0.0 24264 2784 ? Ss 09:15 0:00 /usr/lib/system
  7. dbus 386 0.0 0.0 58000 4164 ? Ss 09:15 0:00 /usr/bin/dbus-d
  8. root 418 0.0 0.0 46432 980 ? Ss 09:15 0:00 nginx: master p
  9. nginx 421 0.0 0.0 46832 3512 ? S 09:15 0:00 nginx: worker p
  10. root 564 0.0 0.0 8096 1820 tty1 Ss+ 09:15 0:00 /sbin/agetty --
  11. apache 822 0.0 0.0 371588 12468 ? S 09:15 0:00 php-fpm: pool w
  12. apache 825 0.0 0.0 371588 12468 ? S 09:15 0:00 php-fpm: pool w
  13. root 2859 0.0 0.0 51752 3448 pts/0 Rs+ 09:21 0:00 ps aux

此時如果使用了端口映射來啟動鏡像,那么你甚至可以在本地瀏覽器里看到 nginx 的默認歡迎頁

</>復制代碼

  1. docker run -d --privileged -p 8080:80 first-build


推送鏡像到阿里云容器服務

注冊阿里云命名空間

</>復制代碼

  1. 進入阿里云鏡像控制臺,
    https://cr.console.aliyun.com/cn-zhangjiakou/instances/repositories      

界面大概長像這樣

使用鏡像加速器

點開左下角的鏡像加速器https://cr.console.aliyun.com/cn-zhangjiakou/instances/mirrors,你會看到你專屬的加速鏈接

</>復制代碼

  1. 找到你的操作系統,逐條執行即可,本文使用 Ubuntu 版本.
    可見執行很順利,沒有任何異常

登錄到阿里云docker倉庫

</>復制代碼

  1. sudo docker login --username=你的阿里云用戶名 registry.cn-zhangjiakou.aliyuncs.com
  2. Password: 你的阿里云密碼
  3. Login Succeeded

建立命名空間

點擊左側的命名空間,點擊創建命名空間,輸入你的命名空間名稱

</>復制代碼

  1. 命名空間可以理解為鏡像所屬的組織
    例如: centos 鏡像的全名是 docker.io/centos,docker.io 就是centos鏡像的命名空間,但是docker.io這個命名空間下卻存在不止centos一種鏡像.

    公開和私有是指鏡像是否可以在阿里云鏡像市場中被大眾查看和是否能夠不需要任何權限拉取

建立倉庫

剛才我們已經創建好了命名空間,那么接下來就是創建倉庫了.

</>復制代碼

  1. 倉庫可以理解為組織創建的軟件包包名
    例如: centos 鏡像的全名是 docker.io/centos,centos 就是docker.io的一個倉庫(軟件),同時centos這個軟件可以有很多個版本.

進入 https://cr.console.aliyun.com/cn-zhangjiakou/instances/repositories 倉庫頁面 , 點擊新建倉庫.

命名空間選擇剛才創建好的,摘要即為鏡像簡介.

點擊下一步,代碼源選擇本地倉庫

點擊創建鏡像倉庫之后,就會發現頁面上多了一行數據,說明創建成功

鼠標放到那個下載一樣的圖標上,會看到倉庫的專屬地址

修改鏡像名

我們要把我們剛才構建的一個叫做 first-build 的鏡像推送到阿里云倉庫中.首先我們使用 docker images | grep first-build 查找到它鏡像ID.接下來我們修改鏡像的名字為符合docker第三方倉庫的鏡像名格式.

</>復制代碼

  1. 第三方鏡像倉庫鏡像名格式:倉庫地址/組織/鏡像名:鏡像版本號

    以阿里云為例:阿里云倉庫地址/命名空間/倉庫名:版本 registry.cn-zhangjiakou.aliyuncs.com/leasn-docker/learn-docker:1

然后執行以下命令來修改:

</>復制代碼

  1. docker tag 3482e8529a90 registry.cn-zhangjiakou.aliyuncs.com/leasn-docker/learn-docker:1

再次使用 docker images | grep first-build 發現已經找不到了,因為它的名字已經變掉了

推送鏡像

</>復制代碼

  1. sudo docker push registry.cn-zhangjiakou.aliyuncs.com/leasn-docker/learn-docker


等所有的 Pushing 運行結束之后我們會發現阿里云倉庫中多了一個版本.

至此,鏡像已經推送成功.我們已經可以基于阿里云的支持,在全世界范圍內使用我們的鏡像.

對于向開源事業無私奉獻的阿里云致敬


封裝項目運行鏡像

</>復制代碼

  1. 現在我們就要研究怎么讓鏡像跑我們自己的項目了

這次就可以基于我們推送阿里云的鏡像了

</>復制代碼

  1. FROM registry.cn-zhangjiakou.aliyuncs.com/leasn-docker/learn-docker:1

復制我們準備好的 nginx.conf 到鏡像里

</>復制代碼

  1. COPY nginx.conf /etc/nginx/conf/nginx.conf

nginx.conf 全文

</>復制代碼

  1. user nginx;
  2. worker_processes auto;
  3. pid /run/nginx.pid;
  4. events {
  5. worker_connections 1024;
  6. }
  7. http {
  8. server {
  9. listen 80;
  10. server_name 127.0.0.1;
  11. root /var/www/html;
  12. index index.php;
  13. location ~ .php($|/) {
  14. fastcgi_pass 127.0.0.1:9000;
  15. fastcgi_index index.php;
  16. fastcgi_split_path_info ^(.+.php)(.*)$;
  17. fastcgi_param PATH_INFO $fastcgi_path_info;
  18. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  19. include fastcgi_params;
  20. }
  21. }
  22. }

復制工程源碼到鏡像里

在當前目錄建立我們的工程,并且假裝我們的工程只有一個文件,它位于./proj

復制我們的工程到鏡像里并為運行目錄加權

</>復制代碼

  1. COPY proj /var/www/html
  2. RUN chmod -R 755 /var/www/html/

Dockerfile 全文

</>復制代碼

  1. FROM registry.cn-zhangjiakou.aliyuncs.com/leasn-docker/learn-docker:1
  2. COPY nginx.conf /etc/nginx/nginx.conf
  3. COPY proj /var/www/html
  4. RUN chmod -R 755 /var/www/html/

構建鏡像并使用端口映射運行我們的容器

</>復制代碼

  1. docker build .
  2. docker run --privileged -d -p 8080:80 773ed8872493

如果不出意外,我們已經可以在本地的 127.0.0.1:8080 中看到 phpinfo() 了

既然phpinfo已經看到了,那么如何讓整個工程跑起來我就不贅述了.

值得一提的是,推送新版本到

使用 docker-compose 編排鏡像

</>復制代碼

  1. Compose 是一個用于定義和運行多容器Docker應用程序的工具。使用Compose,您可以使用YAML文件來配置應用程序的服務。然后,使用單個命令,您可以從配置中創建并啟動所有服務

    該應用使用 sudo apt install docker-compose 安裝

調整目錄結構

</>復制代碼

  1. 在我們現在工作目錄外面再加一層目錄,大致是: 工作目錄 > docker-learn (以前的工作目錄) && docker-compose.yaml

目錄樹形結構:

編輯 docker-compose.yaml

</>復制代碼

  1. docker-compose 包含多個指令,并采用yaml語言編寫.可以理解為把我們在命令行運行的 run 命令參數寫到了文件里,經過統一的工具協調啟動.

</>復制代碼

  1. 主要指令:

</>復制代碼

  1. version 版本信息,不知道為什么必須是 3

</>復制代碼

  1. version: 3

</>復制代碼

  1. services 需要編排的服務列表,本次我們主要編寫一個叫做 docker-learn 的服務

</>復制代碼

  1. services:

docker-compose.yaml 全文

</>復制代碼

  1. version: "3"
  2. services:
  3. # 服務名
  4. docker-learn:
  5. # 該服務是否以特權啟動 , 即 --privileged
  6. privileged: true
  7. # 構建
  8. build:
  9. # 構建上下文 即: docker build ./docker-learn
  10. context: ./docker-learn
  11. # 端口映射,即 -p 80:80
  12. ports:
  13. - 80:80
  14. # 對外暴露的端口 ,相當于Dockerfile 的 EXPOSE 指令
  15. # EXPOSE指令只是聲明了容器應該打開的端口,但是并沒有實際上將它打開!
  16. # 該選項在 docker run -it -P(大寫) 時會真的起作用
  17. expose:
  18. - 80
  19. # 目錄映射 , 相當于 docker run -v
  20. # volumes:
  21. # - ./logs/php-fpm:/var/log/php-fpm
  22. # - ./logs/nginx:/var/log/nginx

使用docker-compose 啟動鏡像

關閉其他運行中的容器,以免與我們即將運行的容器沖突

</>復制代碼

  1. docker ps | awk "{print $1}" | grep -v CON | xargs docker kill

啟動鏡像

</>復制代碼

  1. 多帶帶 up 不使用服務名會運行 services 中定義的所有容器.
    如果services中有多個服務,那么可以使用 up 服務名來多帶帶 up 一個服務容器
    up 默認會使用 build:context 中的 Dockerfile 文件編譯好的鏡像進行容器啟動,--build 是強制再次使用 Dockerfile 進行重新編譯鏡像再啟動 . 但是 --build 仍然會使用已經存在的鏡像層的緩存
    --force-recreate 重新編譯時不使用鏡像層緩存 , 完全重新編譯

    如果出現 bind: address already in use 類似的提示 , 就換一個 ports 里的綁定端口重試

</>復制代碼

  1. docker-compose up [docker-learn] [--build] [--force-recreate]

我們發現現在訪問 127.0.0.1:8080 仍然可以看到 phpinfo

接入 jenkins 進行持續集成

</>復制代碼

  1. 更新中
接入 kubernetes

</>復制代碼

  1. 更新中
大功告成

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/33165.html

相關文章

  • 基于 DockerGogsJenkinsKubernetes 實踐工程代碼自動構建持續

    本期目標 : 基于 Centos 7.6 , 封裝出一個可用于運行 php 項目的開箱即用鏡像本文不討論 dockerfile 語法 , 并且假設你懂得基本的類unix 操作系統常識并擁有類unix 運行環境 (包括但不限于安裝了mac 或 linux 的實體機 , 類unix虛擬機 , 安裝了 MinGW 或 CygWin 的 windows 機器) , 并且認為你懂得基本的 docker 操作...

    RayKr 評論0 收藏0
  • 基于 DockerGogsJenkinsKubernetes 實踐工程代碼自動構建持續

    本期目標 : 基于 Centos 7.6 , 封裝出一個可用于運行 php 項目的開箱即用鏡像本文不討論 dockerfile 語法 , 并且假設你懂得基本的類unix 操作系統常識并擁有類unix 運行環境 (包括但不限于安裝了mac 或 linux 的實體機 , 類unix虛擬機 , 安裝了 MinGW 或 CygWin 的 windows 機器) , 并且認為你懂得基本的 docker 操作...

    Moxmi 評論0 收藏0
  • Spring Cloud【使用jenkins持續部署】Gogs+jenkins+Docker Swa

    摘要:而所謂的持續,就是說每完成一個完整的部分,就向下個環節交付,發現問題可以馬上調整。那么每完成一部分就測試,這是持續部署。這是一個免費的源代碼,可以處理任何類型的構建或持續集成。容器是完全使用沙箱機制,相互之間不會有任何接口。 導讀: 很久沒有更新文章了 最近公司在使用Spring Cloud構建的項目中經常會持續發布變更頻繁,一天中會出現發布多次的情況 在這種情況下對測試環境做了改造 ...

    王笑朝 評論0 收藏0
  • 基于droneCI/CD,對接kubernetes,見證靈活與自由,CI/CD對接kubernet

    摘要:所以我們選一個倉庫倉庫比較多,我這里選用,都行,根據需求自行選擇訪問端口,然后就沒有然后了功能沒有那么強大,不過占用資源少,速度快,我們穩定運行了幾年了。 kubernetes集群三步安裝 CI 概述 用一個可描述的配置定義整個工作流 程序員是很懶的動物,所以想各種辦法解決重復勞動的問題,如果你的工作流中還在重復一些事,那么可能就得想想如何優化了 持續集成就是可以幫助我們解決重復的代碼...

    iOS122 評論0 收藏0
  • 構建與定制:唯品會 PaaS 基于 Kubernetes 實踐

    摘要:基于年底或年初沒有推廣的現狀,唯品會部門目前已經做了兩年的時間。唯品會現狀唯品會目前線上有一千多個域,每個域之間相互的依賴比較復雜,每次的部署發布困難。這是唯品會的架構,主要包含持續集成和持續部署。 數人云上海&深圳兩地容器之Mesos/K8S/Swarm三國演義的嘉賓精彩實錄第三更來啦。唯品會是數人云Meetup的老朋友,去年曾做過RPC服務框架和Mesos容器化的分享。本次分享中,...

    JackJiang 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<