SỔ TAY DOCKER: CÁCH SỬ DỤNG DOCKER COMPOSE

      12

Trong phần trước, các bạn sẽ học tập giải pháp chạy áp dụng trên nhiều container trong Docker. Quý Khách cũng đã mày mò về biến chuyển môi trường xung quanh và volume được đặt tên vào Docker. Nếu bỏ lỡ thì bạn có thể xem lại bài viết này ngơi nghỉ bên dưới đây:


*
Trung Nguyenhostingvietnam.vn
*

Qua lý giải kia, bạn vẫn hiểu rằng hầu hết trở ngại Khi thống trị một dự án những container. Tgiỏi bởi viết những lệnh những điều đó, gồm một bí quyết dễ ợt rộng nhằm quản lý những dự án công trình các container, đó là thực hiện Docker Compose.

Bạn đang xem: Sổ tay docker: cách sử dụng docker compose

Theo tư liệu Docker -

Docker Compose là 1 hình thức nhằm quan niệm và chạy các áp dụng trên các Docker Container. Với Docker Compose, các bạn sử dụng tệp YAML nhằm thông số kỹ thuật các các dịch vụ của vận dụng. Sau đó, với cùng 1 lệnh tuyệt nhất, bạn chế tạo và khởi cồn tất cả các các dịch vụ tự thông số kỹ thuật của mình.

Mặc mặc dù Docker Compose hoạt động trong rất nhiều môi trường, nhưng nó triệu tập rộng vào Việc phát triển cùng thử nghiệm. Việc sử dụng Docker Compose bên trên môi trường thêm vào (production) trọn vẹn ko được khuyến nghị.

Kiến thức cơ bản về Docker Compose

Truy cập thư mục cơ mà các bạn sẽ clone tự repository https://github.com/fhsinchy/docker-handbook-projects. Vào phía bên trong tlỗi mục notes-api/api và tạo một tệp Dockertệp tin.dev. Đặt mã sau vào đó:

# stage oneFROM node:lts-alpine as builder# install dependencies for node-gypRUN app android add --no-cache pythanh mảnh make g++WORKDIR /appCOPY ./package.json .RUN npm install# stage twoFROM node:lts-alpineENV NODE_ENV=developmentUSER nodeRUN mkdir -p /home/node/appWORKDIR /home/node/appCOPY . .COPY --from=builder /app/node_modules /home/node/app/node_modulesCMD < "./node_modules/.bin/nodemon", "--config", "nodetháng.json", "bin/www" >Mã gần như tương tự với mã Dockertệp tin cơ mà bạn đang thao tác cùng với vào phần trước. Ba điểm khác biệt trong tệp này hệt như sau:

Trên loại 10, Cửa Hàng chúng tôi chạy lệnh npm install ráng do npm run install --only=prod bởi Shop chúng tôi cũng muốn những phụ thuộc cho môi trường thiên nhiên development.Trên dòng 15, Cửa Hàng chúng tôi đặt biến chuyển môi trường NODE_ENV thành development cầm cố bởi vì production.

Bạn sẽ biết rằng dự án này có nhì container:

notes-db - Một máy chủ các đại lý dữ liệu được cung cấp do PostgreSquốc lộ.notes-api - REST API được cung ứng vì Express.js.

Trong quả đât của Docker Compose, từng container làm cho ứng dụng được Call là 1 hình thức dịch vụ. Bước trước tiên lúc chế tạo ra một dự án công trình những container là quan niệm các hình thức này.

Cũng giống như Docker daemon sử dụng Dockerfile nhằm kiến thiết image, Docker Compose áp dụng một tệp docker-compose.yaml để hiểu những quan niệm các dịch vụ từ bỏ đó.

Đi cho tới thỏng mục notes-api với tạo ra một tệp docker-compose.yaml new . Đặt mã sau vào tệp mới tạo:

version: "3.8"services: db: image: postgres:12 container_name: notes-db-dev volumes: - notes-db-dev-data:/var/lib/postgresql/data environment: POSTGRES_DB: notesdb POSTGRES_PASSWORD: secret api: build: context: ./api dockerfile: Dockertệp tin.dev image: notes-api:dev container_name: notes-api-dev environment: DB_HOST: db ## same as the database service name DB_DATABASE: notesdb DB_PASSWORD: secret volumes: - /home/node/app/node_modules - ./api:/home/node/app ports: - 3000:3000volumes: notes-db-dev-data: name: notes-db-dev-dataMọi tệp docker-compose.yaml đúng theo lệ bước đầu bằng cách hướng dẫn và chỉ định phiên bạn dạng tệp. Tại thời khắc viết bài xích, 3.8 là phiên bản mới nhất. Quý Khách hoàn toàn có thể tra cứu vớt phiên bạn dạng tiên tiến nhất tại đây.

Các khối vào tệp YAML được quan niệm bằng cách thụt lề. Tôi đang đi qua từng khối và đã giải thích hồ hết gì bọn chúng có tác dụng.

Kân hận services cất các quan niệm cho từng hình thức dịch vụ hoặc container trong ứng dụng. db với api là nhị hình thức dịch vụ vào dự án này.Khối db khái niệm một dịch vụ bắt đầu vào áp dụng với lưu giữ công bố quan trọng để khởi cồn container. Mọi hình thức dịch vụ mọi từng trải image được chế tạo sẵn hoặc Dockerfile để chạy một container. Đối cùng với các dịch vụ db, Cửa Hàng chúng tôi đang thực hiện image PostgreSQL đồng ý.Không hệt như hình thức db, image được tạo sẵn cho các dịch vụ api không mãi sau. Vì vậy, Shop chúng tôi đã thực hiện tệp Dockerfile.dev.Khối volumes định nghĩa thương hiệu volume quan trọng cho các hình thức. Nó tạo ra volume notes-db-dev-data được sử dụng bởi hình thức db.

Bây tiếng đã tất cả tổng quan tiền cao cấp về tệp docker-compose.yaml, chúng ta hãy chu đáo kỹ hơn các hình thức dịch vụ đơn chiếc.

Xem thêm: Các Loại Giao Thức Mạng Phổ Biến Hiện Nay, Những Giao Thức Mạng Phổ Biến Hiện Nay

Mã có mang mang đến hình thức dịch vụ db nlỗi sau:

db: image: postgres:12 container_name: notes-db-dev volumes: - db-data:/var/lib/postgresql/data environment: POSTGRES_DB: notesdb POSTGRES_PASSWORD: secretChỉ dẫn image hướng dẫn và chỉ định image và thẻ áp dụng cho container này. Chúng tôi sẽ áp dụng image postgres:12 nhằm chạy container cửa hàng tài liệu.Chỉ dẫn container_name chỉ định thương hiệu của container. Theo mang định các container được đặt tên theo cú pháp _. Bạn có thể ghi đè điều ấy bằng cách áp dụng container_name.Chỉ dẫn volumes bảo quản ánh xạ ổ đĩa cho những dịch vụ với cung ứng volume chọn cái tên, volume ản danh với liên kết buộc ràng. Cú pháp : như thể cùng với hồ hết gì các bạn đã thấy trước đây.Chỉ dẫn environment cất giữ những quý hiếm của các trở nên môi trường khác nhau quan trọng mang lại hình thức dịch vụ.Mã quan niệm mang lại hình thức dịch vụ api nhỏng sau:

api: build: context: ./api dockerfile: Dockerfile.dev image: notes-api:dev container_name: notes-api-dev environment: DB_HOST: db ## same as the database service name DB_DATABASE: notesdb DB_PASSWORD: secret volumes: - /home/node/app/node_modules - ./api:/home/node/ứng dụng ports: - 3000:3000Thương Mại & Dịch Vụ api không kèm theo với cùng 1 image được sản xuất trước. Ttuyệt vào đó, nó có một cấu hình xây đắp. Dưới khối hận build, chúng ta xác minh ngữ chình ảnh cùng thương hiệu của Dockerfile nhằm xây đắp một khối hận. Bây giờ chúng ta vẫn gọi về ngữ chình họa với Dockerfile yêu cầu tôi sẽ không còn dành riêng thời hạn giải thích phần đa điều ấy.Chỉ dẫn image hướng dẫn và chỉ định tên của image được sản xuất. Nếu ko được gán, image đã chọn cái tên theo cú pháp _.Bên vào hướng dẫn environment, phát triển thành DB_HOST biểu lộ một khả năng của Docker Compose. Nghĩa là, chúng ta có thể tmê say chiếu mang lại một dịch vụ không giống trong và một ứng dụng bằng phương pháp sử dụng tên của nó. Vì vậy, db ở đây, sẽ tiến hành thay thế sửa chữa bằng shop IP. vào container các dịch vụ api. Các biến DB_DATABASE và DB_PASSWORD phải khớp cùng với POSTGRES_DB và POSTGRES_PASSWORD tương xứng được định nghĩa nghỉ ngơi hình thức db.Trong kăn năn volumes, chúng ta có thể thấy một volume ẩn danh cùng một liên kết ràng buộc được biểu lộ. Cú pháp tương đương với hầu hết gì chúng ta vẫn thấy trong những phần trước.Chỉ dẫn ports khẳng định ngẫu nhiên ánh xạ cổng. Cú pháp, : như là với tùy chọn --publish bạn vẫn thực hiện trước đây.Cuối cùng, mã có mang đến volumes như sau:

volumes: notes-db-dev-data: name: notes-db-dev-dataBất kỳ volume được đặt tên làm sao được sử dụng vào ngẫu nhiên các dịch vụ nào yêu cầu được khái niệm ở đây. Nếu các bạn không xác định thương hiệu, tập sẽ được lấy tên theo cú pháp _ cùng thương hiệu sinh hoạt đây là notes-db-dev-data.

Bạn hoàn toàn có thể khám phá về những tùy chọn khác biệt mang lại thông số kỹ thuật volume vào tư liệu thỏa thuận.

Cách chạy các dịch vụ trong Docker Compose

Có một số giải pháp chạy những hình thức dịch vụ được khái niệm vào tệp YAML. Lệnh thứ nhất mà lại bạn sẽ học là lệnh up. Lệnh up kiến tạo ngẫu nhiên image nào bị thiếu, sản xuất container, và chạy tất cả bọn chúng.

Tuy nhiên, trước khi tiến hành lệnh, hãy bảo vệ rằng chúng ta sẽ mở terminal của bản thân vào và một tlỗi mục chứa tệp docker-compose.yaml. Như vậy cực kỳ quan trọng đối với các lệnh docker-compose bạn triển khai.

docker-compose --file docker-compose.yaml up --detach# Creating network "notes-api_default" with the mặc định driver# Creating volume "notes-db-dev-data" with mặc định driver# Building api# Sending build context khổng lồ Docker daetháng 37.38kB## Step 1/13 : FROM node:lts-alpine as builder# ---> 471e8b4eb0b2# Step 2/13 : RUN app android add --no-cache pynhỏ bé make g++# ---> Running in 197056ec1964### LONG INSTALLATION STUFF GOES HERE #### Removing intermediate container 197056ec1964# ---> 6609935fe50b# Step 3/13 : WORKDIR /app# ---> Running in 17010f65c5e7# Removing intermediate container 17010f65c5e7# ---> b10d12e676ad# Step 4/13 : COPY ./package.json .# ---> 600d31d9362e# Step 5/13 : RUN npm install# ---> Running in a14afc8c0743### LONG INSTALLATION STUFF GOES HERE #### Removing intermediate container a14afc8c0743# ---> 952d5d86e361# Step 6/13 : FROM node:lts-alpine# ---> 471e8b4eb0b2# Step 7/13 : ENV NODE_ENV=development# ---> Running in 0d5376a9e78a# Removing intermediate container 0d5376a9e78a# ---> 910c081ce5f5# Step 8/13 : USER node# ---> Running in cfaefceb1eff# Removing intermediate container cfaefceb1eff# ---> 1480176a1058# Step 9/13 : RUN mkdir -p /home/node/app# ---> Running in 3ae30e6fb8b8# Removing intermediate container 3ae30e6fb8b8# ---> c391cee4b92c# Step 10/13 : WORKDIR /home/node/app# ---> Running in 6aa27f6b50c1# Removing intermediate container 6aa27f6b50c1# ---> 761a7435dbca# Step 11/13 : COPY . .# ---> b5d5c5bdf3a6# Step 12/13 : COPY --from=builder /app/node_modules /home/node/app/node_modules# ---> 9e1a19960420# Step 13/13 : CMD < "./node_modules/.bin/nodemon", "--config", "nodemon.json", "bin/www" ># ---> Running in 5bdd62236994# Removing intermediate container 5bdd62236994# ---> 548e178f1386# Successfully built 548e178f1386# Successfully tagged notes-api:dev# Creating notes-api-dev ... done# Creating notes-db-dev ... doneTùy chọn --detach hoặc -d tại đây tất cả công dụng y hệt như bạn đang thấy trước đây. Tùy lựa chọn --file hoặc -f chỉ cần thiết nếu file YAML không được đặt tên là docker-compose.yaml (cơ mà tôi đang thực hiện tại đây mang đến mục tiêu minc họa).

Ngoài lệnh up còn có lệnh start. Sự khác hoàn toàn ở trung tâm nhì vấn đề này là lệnh start ko tạo các container bị thiếu hụt, chỉ chạy những container hiện gồm. Về cơ bạn dạng nó y như lệnh container start.

Tùy lựa chọn --build mang đến lệnh up buộc phải kiến thiết lại những image. Có một số tùy lựa chọn không giống đến lệnh up cơ mà bạn có thể xem trong tài liệu ưng thuận.

Cách liệt kê những dịch vụ trong Docker Compose

Mặc mặc dù các container dịch vụ được chạy vì chưng Docker Compose hoàn toàn có thể được liệt kê bằng phương pháp áp dụng lệnh container ls, nhưng gồm lệnh ps chỉ liệt kê các container được quan niệm vào YAML.

docker-compose ps# Name Comm& State Ports # -------------------------------------------------------------------------------# notes-api-dev docker-entrypoint.sh ./nod ... Up 0.0.0.0:3000->3000/tcp# notes-db-dev docker-entrypoint.sh postgres Up 5432/tcpNó không nhiều thông tin nlỗi đầu ra output của lệnh container ls, nhưng nó có lợi khi bạn bao gồm sản phẩm tấn container chạy bên cạnh đó.

Cách xúc tiến các lệnh bên phía trong một các dịch vụ đang hoạt động trong Docker Compose

Tôi mong muốn bạn ghi nhớ ở trong phần trước rằng các bạn bắt buộc chạy một trong những tập lệnh để chế tác các bảng cơ sở dữ liệu cho API này.

Cũng y như lệnh container exec, tất cả một lệnh exec cho docker-compose. Cú pháp chung mang lại lệnh nhỏng sau:

docker-compose exec Để tiến hành lệnh npm run db:migrate bên phía trong hình thức dịch vụ api, bạn có thể thực hiện lệnh sau: