Link Search Menu Expand Document

Docker

Nội dung

  1. Docker System Info
  2. Ubuntu Docker
  3. PostgresSQL Docker
  4. Docker Monitoring
  5. Build Docker Image
  6. Docker Optimization

Docker là một phần mềm mã nguồn mở cung cấp cho người sử dụng những công cụ và dịch vụ để đóng gói và thực thi ứng dụng trên nhiều môi trường khác nhau. Ban đầu Docker được viết bằng Python, sau đó chuyển sang Go-lang. Docker hỗ trợ nhiều hệ điều hành khác nhau: Linux, Windows, MacOS.

Docker Ouput

Kiến trúc Docker sử dụng mô hình giao tiếp client-server. Trên phía server, Docker thực thi một long-running process hay còn gọi docker deamon, cho phép client thực hiện các yêu cầu thông qua REST API - docker commands (build, pull, run…). Trên phía client, ứng dụng và những tài nguyên liên quan được khai báo trong một text file - Dockerfile. Dựa trên những câu lệnh trong Dockerfile này, client thực hiện việc biên dịch - docker build để tạo ra Docker Image.

Khi đã có Docker Image, client sử dụng lệnh docker run để tạo ra các Docker Containers và thực thi ứng dụng bên trong đó. Bên cạnh đó, client cũng có thể thực hiện các câu lệnh docker push / pull cho phép chia sẻ Docker Images với những client khác thông qua Registry.


Docker System Info

Sử dụng các câu lệnh kiểm tra môi trường Docker:

  • Docker verion
docker --version

Output:

Docker version 19.03.12, build 48a66213fe
  • Docker server
docker info

Output:

Client:
 Debug Mode: false

Server:
 Containers: 2
  Running: 1
  Paused: 0
  Stopped: 1
 Images: 47
 Server Version: 19.03.12
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 init version: fec3683
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 4.19.76-linuxkit
 Operating System: Docker Desktop
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 1.945GiB
 Name: docker-desktop
 ID: 5CSE:7OUY:WTG7:6PRZ:H4CX:AVDA:V447:TTTZ:XRRM:FKJY:NGXJ:PLCK
 Docker Root Dir: /var/lib/docker
 Debug Mode: true
  File Descriptors: 49
  Goroutines: 64
  System Time: 2020-09-15T09:52:36.4790785Z
  EventsListeners: 4
 HTTP Proxy: gateway.docker.internal:3128
 HTTPS Proxy: gateway.docker.internal:3129
 Registry: https://index.docker.io/v1/
 Product License: Community Engine

Ubuntu Docker

Sử dụng Ubuntu Image để thực hành các câu lệnh cơ bản trên Docker Container.

  • Pull Image từ Docker Hub - docker.io Registry.
docker pull ubuntu:latest

Output:

latest: Pulling from library/ubuntu
54ee1f796a1e: Pull complete 
f7bfea53ad12: Pull complete 
46d371e02073: Pull complete 
b66c17bbf772: Pull complete 
Digest: sha256:31dfb10d52ce76c5ca0aa19d10b3e6424b830729e32a89a7c6eee2cda2be67a5
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
  • Danh sách Images trong hệ thống
docker images

Output

REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
prom/prometheus                         latest              cdfc440228d0        12 days ago         168MB
nodejswebapp                            latest              7e01ec13924e        2 weeks ago         659MB
mcr.microsoft.com/dotnet/core/sdk       3.1-buster          65279ad76723        2 weeks ago         708MB
mcr.microsoft.com/dotnet/core/runtime   3.1-buster-slim     601add7f3c26        2 weeks ago         190MB
mysql                                   5.7                 d589ea3123e0        2 weeks ago         448MB
ubuntu                                  latest              4e2eef94cd6b        4 weeks ago         73.9MB
postgres                                latest              62473370e7ee        5 weeks ago         314MB
nginx                                   latest              4bb46517cac3        5 weeks ago         133MB
mcr.microsoft.com/dotnet/core/sdk       3.1                 9ab567a29502        6 weeks ago         708MB
mcr.microsoft.com/dotnet/core/aspnet    3.1                 bdca989bc8d3        6 weeks ago         207MB
gcr.io/cadvisor/cadvisor                v0.36.0             7414b6ed960c        3 months ago        184MB
xabarilcoding/healthchecksui            latest              e29bae7a83b3        4 months ago        244MB
microsoft/mssql-server-linux            latest              314918ddaedf        21 months ago       1.35GB
node                                    argon               ef4b194d8fcf        2 years ago         653MB
  • Tạo Docker Container
docker create --name="UbuntuOS_1" -ti --rm ubuntu:latest /bin/bash

Kiểm tra danh sách Containers

docker ps --all  

Chú ý: Tham số -all cho phép liệt kê Containers với mọi Status (Created, Running, etc…)

Output câu lệnh trên hiển thị Container UbuntuOS_1 với trạng thái Created

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
6e8aa06c91c3        ubuntu:latest       "/bin/bash"              6 seconds ago       Created                                      UbuntuOS_1
  • Thực thi Docker Container

Sử dụng một trong hai câu lệnh:

  1. docker start: thực thi Container tạo ra bởi docker create
  2. docker run: kết hợp của lệnh docker createdocker start

Ví dụ:

docker start 6e8aa06c91c3
// docker start UbuntuOS_1

Hoặc tạo mới và thực thi với lệnh docker run

docker run -ti --name "UbuntuOS_2" --rm ubuntu:latest /bin/bash

Tham số trong câu lệnh trên:

  • -t - Yêu cầu Docker cung cấp TTY cho việc tương tác
  • -i - Thực thi Container trong chế độ làm việc tương tác
  • --rm - Yêu cầu Docker xoá bỏ Container nếu đang tồn tại
  • --name - Đặt tên cho Docker Container

Tham số /bin/bash chỉ định ứng dụng thực thi trên Container. Trong trường hợp này, chúng ta muốn sử dụng Bash Command khi khởi động Container.

Mount Ouput

  • Pause / Unpause / Stop Container

Với giá trị Container ID 6e8aa06c91c3 của UbuntuOS_1 sử dụng lệnh:

docker pause 6e8aa06c91c3

Trạng thái Container có giá trị Paused khi sử dụng docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS                    NAMES
6e8aa06c91c3        ubuntu:latest       "/bin/bash"              5 minutes ago       Up 5 minutes (Paused)                            UbuntuOS_1

Phục hồi trạng thái hoạt động của Container UbuntuOS_1

docker unpause 6e8aa06c91c3

Chấm dứt hoạt động trên Docker Container UbuntuOS_1

docker stop 6e8aa06c91c3

Sơ đồ chuyển đổi giữa các trạng thái của Docker Container

Mount Ouput


PostgresSQL Docker

Tạo PostgreSQL Docker Container cho phép thực hiện các truy vấn dữ liệu.

Các bước thực hiện:

  • Pull Postgres Docker Image

docker pull postgres

Output khi câu lệnh hoàn thành:

Using default tag: latest
latest: Pulling from library/postgres
bf5952930446: Already exists 
9577476abb00: Pull complete 
2bd105512d5c: Pull complete 
...
0339413523e8: Pull complete 
d61df7db53da: Pull complete 
Digest: sha256:9f325740426d14a92f71013796d98a50fe385da64a7c5b6b753d0705add05a21
Status: Downloaded newer image for postgres:latest
docker.io/library/postgres:latest
  • Cấu hình data volume

Để lưu trữ dữ liệu trên database mỗi khi Docker Container khởi động lại, chúng ta cần tạo folder trên Docker Host và sử dụng folder này như một data volume được tái sử dụng mỗi khi thực thi Docker Container.

Trong folder $HOME, tạo một folder docker và các sub-folders bên trong:

mkdir -p $HOME/docker/volumes/postgres
  • Thực thi PostgreSQL:
docker run -d \
> -e POSTGRES_PASSWORD=password \
> -p 5432:5432 \
> -v $HOME/docker/volumes/postgres:/var/lib/postgresql/data \
> postgres

Tham số trong câu lệnh:

  • d - Thực thi Docker Container trong chế độ background
  • e - Khai báo biến môi trường áp dụng khi thực thi Container
  • p - Ánh xạ giá trị port giữa môi trường host và Docker Container
  • v - Liên kết folders giữa môi trường Host và Docker Container

Sử dụng Docker Desktop để xác nhận trạng thái của Docker Container

Postgres Ouput

  • Sử dụng Postgres Client để kết nối đến Database Server:
    • Host: localhost
    • Port: 5432
    • Username: postgres
    • Password: password
    • Initial Database: postgres
  • Tạo bảng Accounts trong database postgres

Accounts Ouput

Tạo các bản ghi record trong table Accounts

Data Ouput

  • Restart Container 95ef0449d551 để kiểm tra data volumne:
docker restart pg-docker

Kết nối database postgres và xác nhận dữ liệu trong table Accounts tồn tại.


Docker Monitoring

Những câu lệnh và công cụ cho phép kiểm tra hoạt động của Containers.

  • Hiển thị danh sách Docker Container:
docker ps

Docker ps Ouput

  • Với ID 2b57c580bc35 của Ubuntu Container, sử dụng inspect kiểm tra thông tin chi tiết:

docker inspect 2b57c580bc35

Docker inspect Ouput

  • Với ID 3a23a24252d0 của PostgreSQL Container, sử dụng logs để hiển thị thông tin log trong Container:

docker logs 3a23a24252d0

Docker logs Ouput

  • Hiển thị thống kê lượng CPU, Memory, Network I/O Container sử dụng

docker stats 3a23a24252d0

Docker stat Ouput

  • Trong hoạt động quản lý Container, Docker deamon tạo ra event stream phản ánh các sự kiện xảy ra khi trạng thái Container thay đổi.

Để tiếp nhận các sự kiện này trên Terminal thứ nhất, sử dụng lệnh:

docker events

Trên Terminal thứ hai, docker pause / unpause thay đổi trạng thái Container 2b57c580bc35

Docker event 1 Ouput

Thông tin hiển thị trên docker events Terminal thứ nhất:

Docker event 2 Ouput

  • Để hiển thị thông tin thống kê tài nguyên và hiệu suất của Docker Containers dưới dạng các biểu đồ, Google cung cấp một phần mềm mã nguồn mở - Container Advisor, còn gọi tắt là cAdvisor. Phần mềm này sẽ thực thi bên trong một Container deamon với chức năng thu thập, xử lý tổng hợp thông tin và hiển thị kết quả thông qua các biểu đồ hoặc API.

Thực hiện việc cài đặt

Bước 1: Khai báo version cài đặt với biến môi trường VERSION

export VERSION=v0.36.0

Bước 2: Thực thi Container deamon với cAdvisor

sudo docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --volume=/dev/disk/:/dev/disk:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  --privileged \
  --device=/dev/kmsg \
  gcr.io/cadvisor/cadvisor:$VERSION

cAvisor Installer Ouput

Bước 3: Xác nhận kết quả

Sử dụng browser với API http://localhost:8080/api/v1.3/containers,

cAvisor API Ouput

Hiển thị biểu đồ thống kê qua địa chỉ http://localhost:8080/containers/

cAvisor UI Ouput


Build Docker Image

Dựa trên Docker Images sẵn có trong repositories của Docker Registry, chúng ta thường tạo ra Docker Images thực thi các thành phần services trong một ứng dụng Microservices.

Dockerfile Ouput

Trong ví dụ này, chúng ta sẽ tạo Docker Image cho microservice RemindersManagement của ứng dụng FriendReminders.

Trong project folder RemindersManagement.API, tạo Dockerfile:

# Define build environment and working directory
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . .
RUN dotnet publish -c release -o out

# Define runtime environment and working directory
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1

# Copy build result and asset to folder
WORKDIR /app
COPY --from=build /app/out .

# Define environment variable
ENV DOTNET_RUNNING_IN_CONTAINER=true \
  ASPNETCORE_URLS=http://+:8000

# Define port and entry point for running docker
EXPOSE 8000
ENTRYPOINT ["dotnet", "RemindersManagement.API.dll"]

Thực hiện build Docker Image:

docker build --tag remindersmanagement:1.0 .

Output hiển thị các steps thực hiện trong quá trình build

Sending build context to Docker daemon  180.6MB
Step 1/12 : FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
 ---> 9ab567a29502
Step 2/12 : WORKDIR /app
 ---> Using cache
 ---> 4413e130453d
Step 3/12 : COPY *.csproj ./
 ---> 2ae0d9c0e0d7
Step 4/12 : RUN dotnet restore
 ---> Running in 72d7aabef5da
  Determining projects to restore...
  Restored /app/RemindersManagement.API.csproj (in 39.78 sec).
Removing intermediate container 72d7aabef5da
 ---> 5a2226da309a
Step 5/12 : COPY . .
 ---> e3d34d9024d8
Step 6/12 : RUN dotnet publish -c release -o out
 ---> Running in e809355e8e1c
Microsoft (R) Build Engine version 16.7.0-preview-20360-03+188921e2f for .NET
Copyright (C) Microsoft Corporation. All rights reserved.

  Determining projects to restore...
  Restored /app/RemindersManagement.API.csproj (in 814 ms).
  RemindersManagement.API -> /app/bin/release/netcoreapp3.1/RemindersManagement.API.dll
  RemindersManagement.API -> /app/out/
Removing intermediate container e809355e8e1c
 ---> b6f83339f334
Step 7/12 : FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
 ---> bdca989bc8d3
Step 8/12 : WORKDIR /app
 ---> Using cache
 ---> 729e605b63dc
Step 9/12 : COPY --from=build /app/out .
 ---> f09bf1a60e06
Step 10/12 : ENV DOTNET_RUNNING_IN_CONTAINER=true   ASPNETCORE_URLS=http://+:8000
 ---> Running in bfe989c99c9f
Removing intermediate container bfe989c99c9f
 ---> a63a0e590682
Step 11/12 : EXPOSE 8000
 ---> Running in 1a4845d9faa4
Removing intermediate container 1a4845d9faa4
 ---> 12bd9184dc49
Step 12/12 : ENTRYPOINT ["dotnet", "RemindersManagement.API.dll"]
 ---> Running in 8c727d26c18e
Removing intermediate container 8c727d26c18e
 ---> 5fa79800389e
Successfully built 5fa79800389e
Successfully tagged remindersmanagement:1.0

Kết quả trên cho thấy quá trình build Docker Image chia thành nhiều bước.

Mỗi bước tương ứng với một câu lệnh trong Dockerfile:

  • Trong bước đầu tiên, lệnh FROM chỉ định base image xác định môi trường thực thi quá trình build.
  • Dockerfile có thể bao gồm nhiều câu lệnh FROM, tương ứng với nhiều môi trường thực thi - muilti-stage build. Việc chia tách môi trường giúp giảm thiểu kích thước của Docker Image trong kết quả cuối cùng khi chúng ta chỉ cần môi trường runtime để thực thi kết quả cuối cùng trong ENTRYPOINT.

    • FROM … sdk:3.1: môi trường biên dịch ứng dụng
    • FROM … aspnet:3.1: môi trường thực thi ứng dụng
  • Các câu lệnh Docker tiếp theo thực thi trên những intermediate container khác nhau. Những containers này cung cấp môi trường thực thi tạm thời cho các câu lệnh và loại bỏ khi câu lệnh tương ứng kết thúc. Trong ví dụ trên, chúng ta sử dụng các lệnh:

    • ENTRYPOINT: ứng dụng thực thi khi container hoạt động
    • WORKDIR: chỉ định thư mục làm việc cho lệnh tiếp theo
    • COPY: sao chép file từ môi trường host sang container
    • RUN: thực hiện một command trên môi trường container
  • Kết quả của những câu lệnh cũng được đóng gói trong những layers, với mục đích tái sử dụng cho các hoạt động build về sau.

Nếu thực hiện lại lệnh docker build --tag remindersmanagement:2.0 ., chúng ta có kết quả:

Sending build context to Docker daemon  180.6MB
Step 1/12 : FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
 ---> 9ab567a29502
Step 2/12 : WORKDIR /app
 ---> Using cache
 ---> 4413e130453d
Step 3/12 : COPY *.csproj ./
 ---> Using cache
 ---> 2ae0d9c0e0d7
Step 4/12 : RUN dotnet restore
 ---> Using cache
 ---> 5a2226da309a
Step 5/12 : COPY . .
 ---> Using cache
 ---> e3d34d9024d8
Step 6/12 : RUN dotnet publish -c release -o out
 ---> Using cache
 ---> b6f83339f334
Step 7/12 : FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
 ---> bdca989bc8d3
Step 8/12 : WORKDIR /app
 ---> Using cache
 ---> 729e605b63dc
Step 9/12 : COPY --from=build /app/out .
 ---> Using cache
 ---> f09bf1a60e06
Step 10/12 : ENV DOTNET_RUNNING_IN_CONTAINER=true   ASPNETCORE_URLS=http://+:8000
 ---> Using cache
 ---> a63a0e590682
Step 11/12 : EXPOSE 8000
 ---> Using cache
 ---> 12bd9184dc49
Step 12/12 : ENTRYPOINT ["dotnet", "RemindersManagement.API.dll"]
 ---> Using cache
 ---> 5fa79800389e
Successfully built 5fa79800389e
Successfully tagged remindersmanagement:2.0

Output cho thấy hoạt động build tiếp theo hoàn toàn tái sử dụng những layers đã được tạo ra từ lần build trước.

Chú ý

Những giá trị 1.0, 2.0 trong câu lệnh docker build được sử dụng để đánh dấu (tagging) Docker Image. Mỗi Docker Image ID có thể được đánh dấu bởi nhiều giá trị tag khác nhau. Khi không cung cấp giá trị tag khi thực hiện lệnh build, docker build --tag remindersmanagement ., Docker sẽ sử dụng một giá trị tag mặc định latest. Thông thường chúng ta sử dụng latest để đánh dấu cho phiên bản mới nhất của Docker Image.

Kiểm tra cấu trúc layers trong Docker Image remindersmanagement với lệnh:

docker history remindersmanagement:1.0 

Output

IMAGE               CREATED             CREATED BY                                      SIZE
5fa79800389e        2 minutes ago       /bin/sh -c #(nop)  ENTRYPOINT ["dotnet" "Rem…   0B                  
12bd9184dc49        2 minutes ago       /bin/sh -c #(nop)  EXPOSE 8000                  0B                  
a63a0e590682        2 minutes ago       /bin/sh -c #(nop)  ENV DOTNET_RUNNING_IN_CON…   0B                  
f09bf1a60e06        2 minutes ago       /bin/sh -c #(nop) COPY dir:68cb1bb8101de6208…   59.4MB              
729e605b63dc        42 hours ago        /bin/sh -c #(nop) WORKDIR /app                  0B                  
bdca989bc8d3        6 weeks ago         /bin/sh -c aspnetcore_version=3.1.7     && c…   17.8MB              
<missing>           6 weeks ago         /bin/sh -c dotnet_version=3.1.7     && curl …   76.8MB              
<missing>           6 weeks ago         /bin/sh -c apt-get update     && apt-get ins…   2.28MB              
<missing>           6 weeks ago         /bin/sh -c #(nop)  ENV ASPNETCORE_URLS=http:…   0B                  
<missing>           6 weeks ago         /bin/sh -c apt-get update     && apt-get ins…   41.3MB              
<missing>           7 weeks ago         /bin/sh -c #(nop)  CMD ["bash"]                 0B                  
<missing>           7 weeks ago         /bin/sh -c #(nop) ADD file:3af3091e7d2bb40bc…   69.2MB 

Bước 3: Thực thi ứng dụng trong Docker Container

docker run -it --rm -p 5000:8000 --name remindersmanagement remindersmanagement:1.0

Xác nhận kết quả bằng cách truy cập địa chỉ http://localhost:5000/swagger/index.html

Docker Running Ouput


Docker Optimization

Tối ưu hoá quá trình build Docker Image cho ứng dụng .NET

  • Sử dụng docker images kiểm tra danh sách Docker Images trong hệ thống
REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
remindersmanagement                     1.0                 1a34791aacab        10 minutes ago      267MB
remindersmanagement                     2.0                 1a34791aacab        10 minutes ago      267MB
remindersmanagement                     latest              1a34791aacab        5 hours ago         267MB

Kết quả trên cho thấy Docker Image 1a34791aacab được đánh dấu bởi 3 giá trị Tag: 1.0, 2.0, và latest. Kích thước của Docker Image là 267MB

Dựa theo thông tin từ Repository microsoft-dotnet-core-sdk, chúng ta sẽ sử dụng alpine làm base image cho hoạt động build ứng dụng. Docker Image Alpine dựa trên phiển bản Alphine Linux cùng với những tối ưu giúp kích thước Image chỉ vào khoảng 5MB!

  • Nội dung cập nhật của Dockerfile
ARG VERSION=3.1-alpine3.12

# Define build environment and working directory
FROM mcr.microsoft.com/dotnet/core/sdk:${VERSION} AS build
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . .
RUN dotnet publish -c release -o out

# Define runtime environment and working directory
FROM mcr.microsoft.com/dotnet/core/aspnet:${VERSION}

# Execute without root previleges
RUN adduser \
  --disabled-password \
  --home /app \
  --gecos '' app \
  && chown -R app /app
USER app

# Copy build result and asset to folder
WORKDIR /app
COPY --from=build /app/out .

# Define environment variable
ENV DOTNET_RUNNING_IN_CONTAINER=true \
  ASPNETCORE_URLS=http://+:8000

# Define port and entry point for running docker
EXPOSE 8000
ENTRYPOINT ["dotnet", "RemindersManagement.API.dll"]

Trong Dockerfile, chúng ta sử dụng khai báo ARG cho Version của base image. Cách khai báo này giúp giảm thiểu việc copy paste cùng một giá trị tại nhiều vị trí dễ gây sai lầm trong hoạt động phát triển hay bảo trì Dockerfile. Bên cạnh đó, việc tạo mới và sử dụng user app cho phép tăng cường tính bảo mật so với việc sử dụng root permission để thực thi ứng dụng.

  • Thực hiện build
docker build --tag remindersmanagement:3.0 .

Output

Sending build context to Docker daemon  180.6MB
Step 1/15 : ARG VERSION=3.1-alpine3.12
Step 2/15 : FROM mcr.microsoft.com/dotnet/core/sdk:${VERSION} AS build
 ---> b003ab77b035
Step 3/15 : WORKDIR /app
 ---> Using cache
 ---> e99f63b93560
Step 4/15 : COPY *.csproj ./
 ---> 1beac3db77aa
Step 5/15 : RUN dotnet restore
 ---> Running in f76bb602706d
  Determining projects to restore...
  Restored /app/RemindersManagement.API.csproj (in 45.07 sec).
Removing intermediate container f76bb602706d
 ---> 46eda7fe2bc3
Step 6/15 : COPY . .
 ---> 2c0156a86a43
Step 7/15 : RUN dotnet publish -c release -o out
 ---> Running in 07b2f64038dc
Microsoft (R) Build Engine version 16.7.0+7fb82e5b2 for .NET
Copyright (C) Microsoft Corporation. All rights reserved.

  Determining projects to restore...
  Restored /app/RemindersManagement.API.csproj (in 949 ms).
  RemindersManagement.API -> /app/bin/release/netcoreapp3.1/RemindersManagement.API.dll
  RemindersManagement.API -> /app/out/
Removing intermediate container 07b2f64038dc
 ---> 016c7ed7379c
Step 8/15 : FROM mcr.microsoft.com/dotnet/core/aspnet:${VERSION}
 ---> 4d73ff5f1658
Step 9/15 : RUN adduser   --disabled-password   --home /app   --gecos '' app   && chown -R app /app
 ---> Using cache
 ---> f04b17817579
Step 10/15 : USER app
 ---> Using cache
 ---> 8372cafcbe8c
Step 11/15 : WORKDIR /app
 ---> Using cache
 ---> 90f191eae279
Step 12/15 : COPY --from=build /app/out .
 ---> Using cache
 ---> 8b59c23595ed
Step 13/15 : ENV DOTNET_RUNNING_IN_CONTAINER=true   ASPNETCORE_URLS=http://+:8000
 ---> Using cache
 ---> bb05687b4946
Step 14/15 : EXPOSE 8000
 ---> Using cache
 ---> f753b404d519
Step 15/15 : ENTRYPOINT ["dotnet", "RemindersManagement.API.dll"]
 ---> Using cache
 ---> 056a93b4109e
Successfully built 056a93b4109e
Successfully tagged remindersmanagement:3.0
  • Kiểm tra Docker Images
REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
remindersmanagement                     3.0                 b0e8b721edbc        2 minutes ago       164MB
remindersmanagement                     1.0                 1a34791aacab        10 minutes ago      267MB
remindersmanagement                     2.0                 1a34791aacab        10 minutes ago      267MB
remindersmanagement                     latest              1a34791aacab        5 hours ago         267MB

Sau quá trình build, Docker Container b0e8b721edbc với tag 3.0 có kích thước 164MB.


Tài liệu tham khảo


Copyright © 2019-2022 Tuan Anh Le.