Thứ năm, 12/12/2019 | 00:00 GMT+7

Cách sử dụng Plugin Docker cho Visual Studio Code

Trong bài viết này, ta sẽ sử dụng Docker Plugin cho Visual Studio Code. Docker cho phép ta đóng gói các ứng dụng của bạn thành hình ảnh và chạy chúng dưới dạng containers trên bất kỳ nền tảng nào đã cài đặt Docker. Ta sẽ sử dụng plugin này với hai ngăn xếp nhà phát triển: Node.js và Go.

Cài đặt

Bạn cần phải cài đặt docker trên trạm làm việc của bạn . Hướng dẫn về cách cài đặt và chạy docker có sẵn tại đây và nó phải dành riêng cho hệ điều hành cụ thể mà bạn đang chạy.

Bạn cũng cần phải cài đặt Mã Visual Studio .

Khi bạn đã cài đặt Visual Studio Code, hãy mở nó, nhấp vào phần mở rộng ở khung bên trái nhất và tìm kiếm Docker.
Mã VS với console  bên trái đang mở hiển thị plugin Docker

Sau khi cài đặt, bạn sẽ nhận thấy một vài điều mới trong version Visual Studio Code của bạn . Ở khung bên trái nhất, có một phần Docker mới với biểu tượng Docker, khi được nhấp vào, Docker Explorer sẽ mở ra ba phần. Hình ảnh , Vùng chứa , Register
 Control panel  Docker Explorer

Ngoài ra còn có một số lệnh được thêm vào bảng lệnh, bạn có thể xem bằng cách mở bảng lệnh và nhập vào docker
Docker đã nhập vào bảng lệnh hiển thị các lệnh có sẵn .

Node.js

Ta sẽ sử dụng ứng dụng Node.js để chứng minh các khả năng mà plugin Docker thêm vào VSCode.

Hãy tạo một server Express.

  • mkdir docker-node
  • cd docker-node
  • npm init -y
  • npm install --save express
  • touch index.js

Ta sẽ có một cây folder như sau:

. ├── index.js ├── node_modules ├── package-lock.json └── package.json  1 directory, 3 files 

Đây là nội dung của index.js

index.js
const express = require('express') const app = express()  app.listen(3000)  app.get('/', (req, res) => {   res.send('hello world') }) 

Cập nhật package.json để có tập lệnh bắt đầu.

package.json
"scripts": {     "start": "node index.js"   }, 

Bây giờ, ta có thể chỉ cần chạy ứng dụng này với npm start và chuyển đến cổng 3000 và xem ứng dụng hoạt động.

Theo truyền thống, để thêm Docker, ta sẽ làm theo các bước sau.

  1. Tạo một Dockerfile (hoặc docker-compos.yaml)
  2. Thêm hướng dẫn docker vào file (FROM, WORKDIR, ADD, EXPOSE, CMD)
  3. Chạy bản docker build... trên terminal để xây dựng hình ảnh
  4. Chạy docker run... trên terminal để chạy container

Tuy nhiên, với plugin, tất cả những gì ta cần làm là như sau.
Mở bảng lệnh và nhập vào docker , sau đó chọn Docker: Add Docker files to Workspace . Nó phải là lựa chọn đầu tiên. Nhấn Enter
Chọn "Thêm file  Docker vào không gian làm việc"
Bạn cần chọn nền tảng / ngăn xếp, chọn Node.js và nhấn Enter .
Chọn Node.js
Sau đó, bạn cần chọn một cổng. Viết 3000 vì đó là cổng mà ứng dụng của ta sẽ lắng nghe.
Thêm số cổng, 3000
Các file sau đây được bổ sung vào không gian làm việc của bạn: .dockerignore , docker-compose.debug.yml , docker-compose.yml , và Dockerfile .
Các file  được liệt kê trong không gian làm việc của bạn

.dockerignore cho .dockerignore bỏ qua các file được liệt kê khi thêm file vào hình ảnh xây dựng.

docker-compose.debug.yml sẽ cho phép bạn chạy docker-compose với tính năng kiểm tra và đính kèm trình gỡ lỗi.

version: '2.1'  services:   docker-node:     image: docker-node     build: .     environment:       NODE_ENV: development     ports:       - 3000:3000       - 9229:9229     command: node --inspect=0.0.0.0:9229 index.js 

Tuy nhiên, nếu bạn đang gỡ lỗi trong quá trình phát triển, bạn có thể cần phải đính kèm một ổ đĩa để những thay đổi bạn thực hiện trên máy local của bạn vẫn tồn tại trong containers .

Tệp docker-compose.yml là một file docker-compose.yml tiêu chuẩn được sử dụng để chạy các dịch vụ docker. Khi bạn thêm các tài nguyên / dịch vụ khác như kết nối database và bộ cân bằng tải, bạn sẽ chỉnh sửa file này.

version: '2.1'  services:   docker-node:     image: docker-node     build: .     environment:       NODE_ENV: production     ports:       - 3000:3000 

Dockerfile , là Dockerfile quan trọng nhất ở đây, vì nó phải được xây dựng, chứa các hướng dẫn mà ta sẽ phải viết thủ công nếu ta chưa cài đặt plugin.

FROM node:8.9-alpine ENV NODE_ENV production WORKDIR /usr/src/app COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"] RUN npm install --production --silent && mv node_modules ../ COPY . . EXPOSE 3000 CMD npm start 

Tiếp theo, để xây dựng Hình ảnh, hãy mở bảng lệnh VS Code và nhập vào docker sau đó chọn Docker: Build Image và nhấn Enter .
Chọn hình ảnh bản dựng Docker
Bạn sẽ được yêu cầu chọn Dockerfile, chọn nó và nhấn Enter .
Chọn Dockerfile
Tiếp theo, bạn sẽ được yêu cầu chọn thẻ. Để docker-node mặc định được chọn và nhấn Enter .
Để lại docker-node làm lựa chọn
Thiết bị terminal tích hợp sẽ mở ra và các bản ghi xây dựng sẽ hiển thị.
Tạo log  hiển thị sau lệnh docker-build

Cuối cùng, ta cần chạy containers . , mở bảng lệnh và nhập vào docker run , chọn Docker: Run
docker run được nhập vào bảng lệnh
Danh sách tất cả các containers trong hệ thống của bạn sẽ hiển thị, hãy chọn docker-node:latest , cái mà ta đã gắn thẻ và nhấn Enter .
chọn docker-node
Thiết bị terminal sẽ hiển thị log cho lệnh chạy.
ghi log   kết quả  sau khi chạy lệnh docker
Lưu ý nó đã thêm -p 3000:3000 thị cổng vào server của ta để ta có thể chạy ứng dụng bằng cách truy cập localhost:3000 .

Ta cũng có thể chạy containers bằng cách chuyển đến ngăn bên trái, chọn phần Docker , sau đó bên dưới Hình ảnh , chọn hình ảnh docker-node , nhấp chuột phải và nhấp vào chạy.
trong menu nút docker, menu có "chạy" được đánh dấu
Các bản ghi giống nhau sẽ chạy trên terminal .

Bạn cũng sẽ nhận thấy rằng phần hình ảnh ở trên có danh sách các hình ảnh trong hệ thống của bạn. Khi containers docker-node đang chạy, Ta có thể kiểm tra các containers đang chạy trong cùng một phần và thậm chí dừng chúng.
dưới thanh ghi docker-node, tùy chọn "Attach Shell" được chọn
Ở trên, Attach Shell được chọn, tương đương với lệnh docker bên dưới.

  • docker exec -it <container> sh

Điều này cho thấy kết quả log terminal bên dưới.

lệnh docker thực thi với  kết quả  file

Bạn có thể thấy ta đang ở trong containers và ta có thể liệt kê các file bên trong containers .

Dừng containers và thử chạy ứng dụng với docker-soạn. Mở bảng lệnh, tìm docker-soạn và xem kết quả.

Đi

Nếu bạn chưa quen với Golang, bạn có thể chuyển sang chủ đề tiếp theo.

Docker cũng được xây dựng với Go

Hãy tạo một ứng dụng Go.

  • mkdir docker-go
  • cd docker-go
  • touch main.go

Cây folder của bạn sẽ có một file .

. └── main.go  0 directories, 1 file 

Đây là nội dung của file main.go

main.go
package main  import (     "log"     "net/http" )  func helloHandler(w http.ResponseWriter, r *http.Request) {     w.Write([]byte("Hello World")) }  func main() {     http.HandleFunc("/", helloHandler)      if err := http.ListenAndServe(":9000", nil); err != nil {         log.Fatalln("ListenAndServer Error", err)     } } 

Bạn có thể chạy Ứng dụng với:

  • go run main.go

Tuy nhiên, hãy sử dụng plugin VSCode Docker để tạo hình ảnh và chạy containers .

Tạo Dockerfile bằng cách mở bảng lệnh, nhập Docker và chọn Docker: Add Dockerfile to Workspace .

Bạn sẽ được yêu cầu chọn một nền tảng, chọn Go và nhấn Enter .
Chọn Bắt đầu từ menu Nền tảng ứng dụng

Sau đó, bạn sẽ được yêu cầu chọn một cổng, ghi vào cổng 9000 , vì đó là cổng ta đã chọn trên ứng dụng của bạn và nhấn Enter .
Chọn cổng  bằng lệnh  "9000"

4 file sau đây sẽ được tạo. .dockerignore , docker-compose.debug.yml , docker-compose.yml , và Dockerfile .
Các file  được tạo trong Ứng dụng Docker-Go

Tệp .dockerignore yêu cầu Docker bỏ qua một số file khi thêm file vào hình ảnh.

Docker Compose sử dụng docker-compose.debug.ymldocker-compose.yml để chạy ứng dụng. Chúng không khác nhau nhiều, vì file gỡ lỗi yêu cầu đầu vào bổ sung, vì gỡ lỗi Go phức tạp hơn.

Tuy nhiên, Dockerfile ở đây là bit thú vị nhất. Hai dòng cuối cùng của build stage được comment và thêm RUN go install -v ./...

# RUN go-wrapper download   # "go get -d -v ./..." # RUN go-wrapper install    # "go install -v ./..." RUN go install -v ./... 

Đây là file docker cuối cùng.

#build stage FROM golang:alpine AS builder WORKDIR /go/src/app COPY . . RUN apk add --no-cache git # RUN go-wrapper download   # "go get -d -v ./..." # RUN go-wrapper install    # "go install -v ./..." RUN go install -v ./...  #final stage FROM alpine:latest RUN apk --no-cache add ca-certificates COPY --from=builder /go/bin/app /app ENTRYPOINT ./app LABEL Name=docker-go Version=0.0.1 EXPOSE 9000 

Loại mẫu Dockerfile này được gọi là xây dựng nhiều giai đoạn và ưu điểm chính của nó là tối ưu hóa Docker image . Nó chủ yếu hữu ích cho các ngôn ngữ đã biên dịch, mà trong hầu hết các trường hợp không yêu cầu các công cụ biên dịch để chạy ứng dụng đã biên dịch. Cờ vây là một ví dụ điển hình.

Tóm lại, ta sử dụng một phần của bản dựng Docker để biên dịch ứng dụng, sau đó sao chép file binary đã biên dịch sang Docker image nhẹ hơn và chạy nó từ đó.

Tiếp theo ta cần xây dựng hình ảnh. Mở bảng lệnh và nhập docker-build , chọn Docker: Build Image và nhấn Enter .

Bạn sẽ được yêu cầu chọn Dockerfile, để mặc định được chọn và nhấn Enter .

Cuối cùng, bạn cần chọn một thẻ hình ảnh. Để lại docker-go:latest mặc định docker-go:latest và nhấn Enter .
Chọn docker-go: hình ảnh mới nhất
Bạn sẽ thấy log xây dựng trong terminal tích hợp.

Cuối cùng, ta cần chạy containers . Mở bảng lệnh và nhập docker run . Chọn Docker: Run và nhấn Enter .
chọn docker Chạy trong bảng lệnh
Bạn sẽ được yêu cầu chọn hình ảnh. Chọn docker-go:latest .
chọn docker = go: mới nhất cho hình ảnh
Bạn sẽ thấy log trong Thiết bị terminal tích hợp.
đăng nhập  kết quả  sau khi chạy lệnh
Giống như trước đây, bạn cũng có thể chạy containers bằng cách chọn phần Docker trong ngăn bên trái và bên dưới containers , chọn docker-go , nhấp chuột phải vào nhấp vào Chạy .
Chọn "Chạy" từ bảng Hình ảnh
Sau đó, bạn sẽ thấy các log docker run giống nhau.

Vì containers Docker đang chạy của ta chỉ có file binary , ta có thể đính kèm shell , trong phần containers .
Trong phần Vùng chứa của
Ta có thể nhập ls trong shell đính kèm trong Thiết bị terminal tích hợp và ta sẽ thấy một file binary có tên là app , tương ứng với Dockerfile.
chạy `ls` trong terminal  tích hợp với file  ứng dụng được liệt kê

Các tính năng khác

Cuối cùng ta sẽ xem xét các tính năng hữu ích khác đi kèm với plugin VSCode Docker.

Docker kiểm tra hình ảnh: Điều này cho phép bạn kiểm tra hình ảnh được tạo và xem chi tiết trong file JSON.

Chọn hình ảnh bạn muốn và mở menu ngữ cảnh và chọn hình ảnh kiểm tra .
Chọn hình ảnh Go và kiểm tra hình ảnh từ menu thả xuống
Một file JSON sẽ được mở với các chi tiết.
JSOn file  với anh ấy chi tiết về hình ảnh

Hiển thị log containers : Điều này cũng được tìm thấy trong menu ngữ cảnh để chạy containers . Ta sẽ sử dụng containers Node.js đang chạy
Chọn "hiển thị log " từ menu thả xuống
Nhật ký sẽ được hiển thị trong Thiết bị terminal tích hợp.
nhật ký hiển thị trong terminal

Register : Bạn có thể đăng nhập vào register Docker của bạn và xem các hình ảnh bạn đã tạo và đẩy.

System Prune: Tùy chọn này cho phép bạn chạy docker system prune , giúp xóa các hình ảnh không sử dụng đến hệ thống của bạn. Nó có sẵn thông qua nút có cửa sổ và dấu thập trong trình khám phá Docker.
Tùy chọn System Prune được chọn trong menu Docker Explorer

Intellisense: Nếu bạn phải tự mình viết các file Docker (Dockerfile, docker-compos.yml), bạn sẽ nhận được intellisense hữu ích khi nhập.
 User  nhập với Intellisense cung cấp đề xuất
Nó thậm chí sẽ cung cấp cho bạn các thẻ hình ảnh có sẵn. Này được kích hoạt bằng lệnh tên hình ảnh, sau đó một dấu hai chấm đầy đủ, và CMD + Space .
Các thẻ hình ảnh được liệt kê sau khi nhập lệnh + dấu cách

Dockerfile Linting: Khi bạn gặp lỗi trong Dockerfiles của bạn , một dòng nguệch ngoạc sẽ xuất hiện trong VS Code và khi bạn di chuột qua nó, bạn sẽ được hiển thị lỗi là gì.
lỗi đã nhập với dòng đánh dấu lỗi và đề xuất

Tab vấn đề bên dưới VS Code cũng sẽ hiển thị nó.
Tab Sự cố được chọn với các sự cố được liệt kê

Kết luận

Plugin Docker cho VS Code có thể giúp bạn nhanh chóng cài đặt và tạo các Dockerfiles của bạn , xây dựng và chạy chúng mà không cần tự mình nhập nhiều lệnh.


Tags:

Các tin liên quan

Cách sử dụng Ansible để cài đặt và thiết lập Docker trên Ubuntu 18.04
2019-12-05
Cách tạo ứng dụng Django và Gunicorn với Docker
2019-10-25
Cách thiết lập Flask với MongoDB và Docker
2019-10-11
Cách cài đặt và sử dụng Docker trên Debian 10
2019-07-08
Cách sử dụng server Docker từ xa để tăng tốc quy trình làm việc của bạn
2019-06-25
Cách cài đặt WordPress với Docker Compose
2019-05-24
Cách di chuyển Docker compose workflow sang Kubernetes
2019-04-03
Cách tối ưu hóa image Docker cho sản xuất
2019-03-25
Giữ lại một ứng dụng Node.js để phát triển với Docker Compose
2019-03-05
Cách cài đặt và sử dụng Docker Compose trên CentOS 7
2019-01-23