Thứ hai, 12/02/2018 | 00:00 GMT+7

Cách tạo image Docker và lưu trữ kho lưu trữ image Docker với GitLab

Containerization đang nhanh chóng trở thành phương pháp đóng gói và triển khai ứng dụng được chấp nhận nhất trong môi trường cloud . Tiêu chuẩn hóa mà nó cung cấp, cùng với hiệu quả tài nguyên của nó (khi so sánh với các máy ảo hoàn chỉnh) và tính linh hoạt, làm cho nó trở thành một yếu tố thúc đẩy tuyệt vời cho tư duy DevOps hiện đại. Nhiều chiến lược triển khai, điều phối và giám sát gốc cloud thú vị trở nên khả thi khi các ứng dụng và dịch vụ vi mô của bạn được chứa đầy đủ.

Docker container cho đến nay là loại container phổ biến nhất hiện nay. Mặc dù các repository Docker image công khai như Docker Hub chứa đầy hình ảnh phần mềm open-souce được chứa đựng mà bạn có thể docker pull và sử dụng docker pull ngay hôm nay, đối với mã riêng tư, bạn cần phải trả một dịch vụ để tạo và lưu trữ hình ảnh của bạn hoặc chạy phần mềm của bạn làm vậy.

GitLab Community Edition là bộ phần mềm tự lưu trữ cung cấp dịch vụ lưu trữ repository Git, theo dõi dự án, CI / CD và register Docker image , cùng các tính năng khác. Trong hướng dẫn này, ta sẽ sử dụng dịch vụ tích hợp liên tục của GitLab để xây dựng Docker image từ một ứng dụng Node.js mẫu. Những hình ảnh này sau đó sẽ được kiểm tra và tải lên register Docker riêng của ta .

Yêu cầu

Trước khi bắt đầu, ta cần cài đặt một server GitLab an toànmột trình chạy GitLab CI để thực thi các việc tích hợp liên tục. Các phần bên dưới sẽ cung cấp các liên kết và thêm chi tiết.

Server GitLab được bảo mật bằng SSL

Để lưu trữ mã nguồn của ta , chạy các việc CI / CD và lưu trữ register Docker, ta cần cài đặt version GitLab trên server Ubuntu 16.04. GitLab hiện khuyến nghị server có ít nhất 2 lõi CPU và 4GB RAM . Ngoài ra, ta sẽ bảo mật server bằng certificate SSL từ Let's Encrypt. Để làm như vậy, bạn cần một domain được trỏ đến server .

Bạn có thể hoàn thành các yêu cầu tiên quyết này bằng các hướng dẫn sau:

Một người chạy GitLab CI

Cách cài đặt đường ống tích hợp liên tục với GitLab CI trên Ubuntu 16.04 sẽ cung cấp cho bạn tổng quan về dịch vụ CI của GitLab và hướng dẫn bạn cách cài đặt CI để xử lý công việc. Ta sẽ xây dựng trên ứng dụng demo và cơ sở hạ tầng người chạy được tạo trong hướng dẫn này.

Bước 1 - Cài đặt Trình chạy GitLab CI Đặc quyền

Trong hướng dẫn tích hợp liên tục GitLab yêu cầu , ta cài đặt một trình chạy GitLab bằng cách sử dụng sudo gitlab-runner register và quy trình cấu hình tương tác của nó. Người chạy này có khả năng chạy các bản dựng và kiểm tra phần mềm bên trong các containers Docker bị cô lập.

Tuy nhiên, để xây dựng Docker image , người chạy của ta cần có toàn quyền truy cập vào chính dịch vụ Docker. Cách được đề xuất để cấu hình điều này là sử dụng hình ảnh docker-in-docker chính thức của docker-in-docker để chạy các công việc.Điều này yêu cầu cấp cho người chạy một chế độ thực thi privileged đặc biệt, vì vậy ta sẽ tạo một người chạy thứ hai với chế độ này được bật.

Lưu ý: Việc cấp chế độ quyền cho người chạy về cơ bản sẽ vô hiệu hóa tất cả các lợi ích bảo mật của việc sử dụng containers . Thật không may, các phương pháp khác để cho phép người chạy có khả năng Docker cũng mang các hàm ý bảo mật tương tự. Vui lòng xem tài liệu GitLab chính thức về Docker Build để tìm hiểu thêm về các tùy chọn Á hậu khác nhau và tùy chọn nào tốt nhất cho tình huống của bạn.

Vì có các tác động bảo mật khi sử dụng một trình chạy quyền , ta sẽ tạo một trình chạy dự án cụ thể sẽ chỉ chấp nhận các công việc Docker trong dự án hello_hapi của ta ( administrator GitLab luôn có thể thêm trình chạy này theo cách thủ công vào các dự án khác sau này). Từ trang dự án hello_hapi của bạn, nhấp vào Cài đặt ở cuối menu bên trái, sau đó nhấp vào CI / CD trong menu con:

Menu cài đặt dự án GitLab

Bây giờ hãy nhấp vào nút Mở rộng bên cạnh phần cài đặt Người chạy :

Nút mở rộng "Cài đặt người chạy" của GitLab

Sẽ có một số thông tin về việc cài đặt Người chạy cụ thể , bao gồm cả mã thông báo đăng ký. Hãy lưu ý về mã thông báo này. Khi ta sử dụng nó để đăng ký một người chạy mới, người đó sẽ chỉ bị khóa trong dự án này.

Tùy chọn người chạy dự án cụ thể của GitLab

Trong khi ta đang ở trên trang này, hãy nhấp vào nút Tắt người chạy được chia sẻ . Ta muốn đảm bảo các công việc Docker của ta luôn chạy trên người chạy quyền của ta . Nếu có sẵn trình chạy chung không quyền , GitLab có thể chọn sử dụng trình chạy đó, điều này sẽ dẫn đến lỗi bản dựng.

Đăng nhập vào server có người chạy CI hiện tại của bạn trên đó. Nếu bạn chưa cài đặt máy với người chạy, hãy quay lại và hoàn tất Cài đặt dịch vụ người chạy GitLab CI
phần của hướng dẫn yêu cầu trước khi tiếp tục.

Bây giờ, hãy chạy lệnh sau để cài đặt trình chạy quyền dành riêng cho dự án:

  • sudo gitlab-runner register -n \
  • --url https://gitlab.example.com/ \
  • --registration-token your-token \
  • --executor docker \
  • --description "docker-builder" \
  • --docker-image "docker:latest" \
  • --docker-privileged
Output
Registering runner... succeeded runner=61SR6BwV Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

Hãy chắc chắn để thay thế thông tin của bạn . Ta đặt tất cả các tùy chọn người chạy của bạn trên dòng lệnh thay vì sử dụng các dấu nhắc tương tác, vì các dấu nhắc không cho phép ta chỉ định chế độ --docker-privileged .

Người chạy của bạn hiện đã được cài đặt , đăng ký và đang chạy. Để xác minh, hãy quay lại trình duyệt của bạn. Nhấp vào biểu tượng cờ lê trong thanh menu chính của GitLab, sau đó nhấp vào Người chạy trong menu bên trái. Người chạy của bạn sẽ được liệt kê:

Danh sách Á hậu GitLab

Bây giờ ta có một trình chạy có khả năng xây dựng Docker image , hãy cài đặt một register Docker riêng cho nó để đẩy hình ảnh lên.

Bước 2 - Cài đặt Register Docker của GitLab

Cài đặt register Docker của bạn cho phép bạn đẩy và kéo hình ảnh từ server riêng của bạn , tăng cường bảo mật và giảm dependencies của quy trình làm việc của bạn vào các dịch vụ bên ngoài.

GitLab sẽ cài đặt register Docker riêng chỉ với một vài cập nhật cấu hình. Đầu tiên, ta sẽ cài đặt URL nơi register sẽ cư trú. Sau đó, ta sẽ (tùy chọn) cấu hình register để sử dụng dịch vụ lưu trữ đối tượng tương thích với S3 để lưu trữ dữ liệu của nó.

SSH vào server GitLab của bạn, sau đó mở file cấu hình GitLab:

  • sudo nano /etc/gitlab/gitlab.rb

Cuộn xuống phần cài đặt Đăng ký vùng chứa . Ta sẽ bỏ comment registry_external_url và đặt nó thành tên server GitLab của ta với số cổng là 5555 :

/etc/gitlab/gitlab.rb
registry_external_url 'https://gitlab.example.com:5555' 

Tiếp theo, thêm hai dòng sau để cho cơ quan đăng ký biết nơi tìm certificate Let's Encrypt của ta :

/etc/gitlab/gitlab.rb
registry_nginx['ssl_certificate'] = "/etc/letsencrypt/live/gitlab.example.com/fullchain.pem" registry_nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/gitlab.example.com/privkey.pem" 

Lưu file , sau đó cấu hình lại GitLab:

  • sudo gitlab-ctl reconfigure
Output
. . . gitlab Reconfigured!

Cập nhật firewall để cho phép lưu lượng truy cập vào cổng đăng ký:

  • sudo ufw allow 5555

Bây giờ chuyển sang một máy khác có cài đặt Docker và đăng nhập vào register Docker riêng. Nếu bạn không có Docker trên máy tính phát triển local của bạn , bạn có thể sử dụng bất kỳ server nào được cài đặt để chạy các công việc GitLab CI của bạn, vì nó đã được cài đặt Docker:

  • docker login gitlab.example.com:5555

Bạn sẽ được yêu cầu nhập tên user và password của bạn . Sử dụng thông tin đăng nhập GitLab của bạn để đăng nhập.

Output
Login Succeeded

Sự thành công! Cơ quan đăng ký được cài đặt và hoạt động. Hiện tại, nó sẽ lưu trữ các file trên hệ thống file local của server GitLab. Nếu bạn muốn sử dụng dịch vụ lưu trữ đối tượng, hãy tiếp tục với phần này. Nếu không, hãy chuyển sang Bước 3.

Để cài đặt chương trình backend lưu trữ đối tượng cho register , ta cần biết thông tin sau về dịch vụ lưu trữ đối tượng của ta :

  • Khóa truy cập
  • Chìa khoá bí mật
  • Ví dụ: khu vực ( us-east-1 ) nếu sử dụng Amazon S3 hoặc Điểm cuối khu vực nếu sử dụng dịch vụ tương thích với S3 ( https://nyc.digitaloceanspaces.com )
  • Tên group

Nếu đang sử dụng DigitalOcean , bạn có thể tìm hiểu cách cài đặt Không gian mới và nhận thông tin trên bằng cách đọc Cách tạo DigitalOcean và khóa API .

Khi bạn có thông tin lưu trữ đối tượng của bạn , hãy mở file cấu hình GitLab:

  • sudo nano /etc/gitlab/gitlab.rb

, cuộn xuống phần đăng ký containers . Tìm khối registry['storage'] , bỏ ghi chú nó và cập nhật nó vào phần sau, đảm bảo thay thế thông tin của bạn nếu thích hợp:

/etc/gitlab/gitlab.rb
registry['storage'] = {   's3' => {     'accesskey' => 'your-key',     'secretkey' => 'your-secret',     'bucket' => 'your-bucket-name',     'region' => 'nyc3',     'regionendpoint' => 'https://nyc3.digitaloceanspaces.com'   } } 

Nếu đang sử dụng Amazon S3, bạn chỉ cần region và không regionendpoint . Nếu đang sử dụng dịch vụ tương thích với S3 như Spaces, bạn cần regionendpoint . Trong trường hợp này region thực sự không cấu hình bất kỳ thứ gì và giá trị bạn nhập không quan trọng, nhưng nó vẫn cần hiện diện và không bị trống.

Lưu và đóng file .

Lưu ý: Hiện có một lỗi trong đó register sẽ tắt sau ba mươi giây nếu group lưu trữ đối tượng của bạn trống. Để tránh điều này, hãy đặt một file vào group của bạn trước khi chạy bước tiếp theo. Bạn có thể xóa nó sau này, sau khi register đã thêm các đối tượng của chính nó.

Nếu bạn đang sử dụng DigitalOcean Spaces, bạn có thể kéo và thả để tải file lên bằng giao diện Control panel .

Cấu hình lại GitLab :

  • sudo gitlab-ctl reconfigure

Trên máy Docker khác của bạn, hãy đăng nhập lại vào register đảm bảo tất cả đều ổn:

  • docker login gitlab.example.com:5555

Bạn sẽ nhận được thông báo Login Succeeded .

Bây giờ ta đã cài đặt register Docker, hãy cập nhật cấu hình CI của ứng dụng để xây dựng và kiểm tra ứng dụng của ta cũng như đẩy Docker image vào register riêng tư của ta .

Bước 3 - Cập nhật gitlab-ci.yaml và xây dựng Docker image

Lưu ý: Nếu bạn chưa hoàn thành bài viết yêu cầu về GitLab CI, bạn cần sao chép qua repository mẫu vào server GitLab của bạn . Làm theo phần Sao chép Kho lưu trữ Ví dụ Từ GitHub để thực hiện .

Để xây dựng ứng dụng của ta trong Docker, ta cần cập nhật .gitlab-ci.yml . Bạn có thể chỉnh sửa file này ngay trong GitLab bằng cách nhấp vào file từ trang chính của dự án, sau đó nhấp vào nút Chỉnh sửa . Ngoài ra, bạn có thể sao chép repo vào máy local của bạn , chỉnh sửa file , sau đó git push nó trở lại GitLab. Nó sẽ trông như thế này:

  • git clone git@gitlab.example.com:sammy/hello_hapi.git
  • cd hello_hapi
  • # edit the file w/ your favorite editor
  • git commit -am "updating ci configuration"
  • git push

Đầu tiên, xóa mọi thứ trong file , sau đó paste vào cấu hình sau:

.gitlab-ci.yml
image: docker:latest services: - docker:dind  stages: - build - test - release  variables:   TEST_IMAGE: gitlab.example.com:5555/sammy/hello_hapi:$CI_COMMIT_REF_NAME   RELEASE_IMAGE: gitlab.example.com:5555/sammy/hello_hapi:latest  before_script:   - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN gitlab.example.com:5555  build:   stage: build   script:     - docker build --pull -t $TEST_IMAGE .     - docker push $TEST_IMAGE  test:   stage: test   script:     - docker pull $TEST_IMAGE     - docker run $TEST_IMAGE npm test  release:   stage: release   script:     - docker pull $TEST_IMAGE     - docker tag $TEST_IMAGE $RELEASE_IMAGE     - docker push $RELEASE_IMAGE   only:     - master 

Đảm bảo cập nhật các URL và tên user được đánh dấu bằng thông tin của bạn , sau đó lưu bằng nút Commit thay đổi trong GitLab. Nếu bạn đang cập nhật file bên ngoài GitLab, hãy commit các thay đổi và git push trở lại GitLab.

Tệp cấu hình mới này yêu cầu GitLab sử dụng docker image mới nhất ( image: docker:latest ) và liên kết nó với dịch vụ docker-in-docker (docker: dind). Sau đó, nó xác định các giai đoạn build , testrelease . Các build giai đoạn xây dựng hình ảnh bằng cách sử dụng Docker Dockerfile cung cấp trong repo, sau đó tải lên nó vào registry ảnh Docker của ta . Nếu điều đó thành công, giai đoạn test sẽ download hình ảnh mà ta vừa tạo và chạy lệnh npm test bên trong nó. Nếu giai đoạn kiểm tra thành công, giai đoạn release sẽ kéo hình ảnh, gắn thẻ nó là hello_hapi:latest và đẩy nó trở lại register .

Tùy thuộc vào quy trình làm việc của bạn , bạn cũng có thể thêm các giai đoạn test bổ sung hoặc thậm chí deploy giai đoạn đẩy ứng dụng sang môi trường giai đoạn hoặc production .

Việc cập nhật file cấu hình sẽ kích hoạt một bản dựng mới. Quay lại dự án hello_hapi trong GitLab và nhấp vào chỉ báo trạng thái CI cho commit :

Thông báo  commit  GitLab với biểu tượng trạng thái đường ống

Trên trang kết quả, sau đó bạn có thể nhấp vào bất kỳ giai đoạn nào để xem tiến trình của chúng:

Chi tiết đường dẫn GitLab

Tiến trình giai đoạn đường ống GitLab

Cuối cùng, tất cả các giai đoạn phải cho biết chúng đã thành công bằng cách hiển thị các biểu tượng dấu kiểm màu xanh lục. Ta có thể tìm thấy các Docker image vừa được tạo bằng cách nhấp vào mục Registry trong menu bên trái:

Danh sách hình ảnh đăng ký containers  GitLab

Nếu bạn nhấp vào biểu tượng “tài liệu” nhỏ bên cạnh tên hình ảnh, nó sẽ sao chép lệnh docker pull ... thích hợp vào clipboard của bạn. Sau đó, bạn có thể kéo và chạy hình ảnh của bạn :

  • docker pull gitlab.example.com:5555/sammy/hello_hapi:latest
  • docker run -it --rm -p 3000:3000 gitlab.example.com:5555/sammy/hello_hapi:latest
Output
> hello@1.0.0 start /usr/src/app > node app.js Server running at: http://56fd5df5ddd3:3000

Hình ảnh đã được kéo xuống khỏi register và bắt đầu trong một containers . Chuyển sang trình duyệt của bạn và kết nối với ứng dụng trên cổng 3000 để kiểm tra. Trong trường hợp này, ta đang chạy containers trên máy local của bạn , vì vậy ta có thể truy cập nó qua localhost tại URL sau:

http://localhost:3000/hello/test 
Output
Hello, test!

Sự thành công! Bạn có thể dừng containers bằng CTRL-C . Từ giờ trở đi, mỗi khi ta đẩy mã mới để các master chi nhánh của repository của ta , ta sẽ tự xây dựng và thử nghiệm một mới hello_hapi:latest hình ảnh.

Kết luận

Trong hướng dẫn này, ta cài đặt một trình chạy GitLab mới để tạo Docker image , tạo register Docker riêng để lưu trữ chúng và cập nhật ứng dụng Node.js sẽ được xây dựng và thử nghiệm bên trong containers Docker.

Để tìm hiểu thêm về các thành phần khác nhau được sử dụng trong cài đặt này, bạn có thể đọc tài liệu chính thức của GitLab CE , GitLab Container RegistryDocker .


Tags:

Các tin liên quan

3 Mẹo để Đặt tên container Docker
2018-01-04
3 Mẹo để Đặt tên container Docker
2018-01-04
Cách cài đặt Docker Compose trên Ubuntu 16.04
2017-12-21
Cách sử dụng Traefik làm Reverse Proxy cho Docker Containers trên Ubuntu 16.04
2017-09-08
Cách tập trung log Docker của bạn với Fluentd và ElasticSearch trên Ubuntu 16.04
2016-12-16
Cách làm việc với Docker Data Volumes trên Ubuntu 14.04
2016-11-17
Làm việc với Docker Containers
2016-11-04
Cách cấu hình môi trường kiểm tra tích hợp liên tục với Docker và Docker Compose trên Ubuntu 14.04
2016-11-03
Cách cấu hình môi trường kiểm tra tích hợp liên tục với Docker và Docker Compose trên Ubuntu 16.04
2016-11-03
Cách cài đặt và sử dụng Docker trên CentOS 7
2016-11-02