Chuyển đến nội dung chính

Bài đăng

Đang hiển thị bài đăng từ Tháng 9, 2022

Set custom DNS để Docker download package

Mở daemon.json bằng nano sudo nano /etc/docker/daemon.json Thay thế bằng đoạn DNS sau: { "dns": ["1.1.1.1", "1.0.0.1"] } Các bạn có thể sử dụng Google DNS hoặc bất kỳ DNS nào khác.  Bấm Ctrl-O để lưu lại. Bấm Ctrl-X để thoát ra Sau đó, các bạn restart Docker service sudo service docker restart

Reset cột giá trị Id trong SQL Server

Giả sử bạn có Table A với 2 cột (Id, Value). Để reset giá trị về 1, bạn làm như sau: Tạo Table A1 với 2 cột (Id, Value) Copy data từ A sang A_Backup Xóa data table A Reset Identity table A Copy data từ A_Backup sang A Trước khi thực hiện, bạn cần đặt Transaction và count số lượng dòng để đảm bảo kết quả chính xác CREATE TABLE [dbo].[A_Backup]( [Id] [int] IDENTITY(1,1) NOT NULL, [Vavlue] [decimal](18, 2) NOT NULL ) BEGIN TRANSACTION; BEGIN TRY INSERT INTO [dbo].[A_Backup] ([Vavlue] [decimal](18, 2) NOT NULL) SELECT [Vavlue] FROM [dbo].[A] Truncate Table A DBCC CHECKIDENT ('A', RESEED, 1) INSERT INTO [dbo].[A] ([Vavlue]) SELECT [Vavlue] FROM [dbo].[A_Backup] END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber ,ERROR_SEVERITY() AS ErrorSeverity ,ERROR_STATE() AS ErrorState ,ERROR_PROCEDURE() AS ErrorProcedure ,ERROR_LINE() AS ErrorLine ,ERROR_MESSAGE() AS ErrorMessage;

Azure: Kill w3p trên AppService

Trường hợp website bị down do CPU, RAM bị chiếm dụng nhiều, bạn buộc phải kill process w3p Go to the Web App in the portal Choose Process Explorer from Tools menu You'll see processes for all instances. You can right click on specific w3wp's and kill them, which effectively restarts the site. You don't have to kill the Kudu process (the one with the K icon) if you only want to restart the site. For WebJobs, kill Kudu as well.  

Thay thế Docker bằng Buildah và Podman

Trong bài viết này, mình tập hợp lại các thông tin về OCI, Docker Daemon, Buildah và Podman. Hi vọng đó là thông tin hữu ích để mình tiếp tục con đường học tập Kubernetes. Nếu nói về container, các bạn sẽ nghe nhiều về Docker. Nhưng từ version 1.24 thì Kubernetes đã quyết định loại Docker ra khỏi hệ sinh thái. Vậy Docker dùng để build và run container. Vậy nếu loại bỏ Docker, chúng ta có nhiều giải pháp, 1 trong các giải pháp đó là Buildah: dùng để build image theo chuẩn OCI Podman: quản lý container trong pod. Tìm hiểu về OCI, Docker, Buildah, và Podman Open Container Initiative (OCI) Trở lại năm 2015, một công ty có tên CoreOS đã đưa thông số kỹ thuật riêng cho App Container Image (ACI), khác hoàn toàn với đặc điểm kỹ thuật container của Docker. Cũng tại thời điểm đó, xuất hiện phong trào container mới tách rời với các định dạng container cạnh tranh của Linux. Cùng năm đó, một sáng kiến có tên Open Container Project (OCP) đã ra đời và sau đó đổi tên thành Open Container Initiative (O

Docker: Khám phá quá trình build 1 image - Part 3

Trong bài viết này, chúng ta sẽ tìm hiểu 3 cách tối ưu: Layer Caching, dockerignore, và multi-stage Docker layer caching Docker layer caching (DLC) là một tính năng rất quan trọng giúp giảm thời gian của quá trình build bằng cách tận dụng những layer đã được build từ lần trước đó. Để có thể tận dụng tối đa tính năng này, chúng ta cần sắp xếp lại và tách lệnh build sao cho phần lệnh ít thay đổi sẽ nằm ở trên, phần thay đổi thường xuyên sẽ nằm ở dưới. Quay lại với ví dụ ExpressJs, giả sử chúng ta thêm 1 dòng console trong source code (Xem lại ví dụ ở Part 1) const express = require('express') const app = express() const port = 3000 app.get('/', (req, res) => { res.send('Nei hou!') }) console.log("test"); app.listen(port, () => { console.log(`Example app listening on port ${port}`) }) Quá trình build $ docker build -t alpine-test . Sending build context to Docker daemon 2.43MB Step 1/5 : FROM node:alpine ---> 5e67b1710572 Step 2/5 : WO

Hành trình đưa tôi đến Docker

Ban đầu, mình tìm hiểu về Docker chủ yếu làm bài giới thiệu cho nhóm. Chỉ với 1 vài kiến thức cơ bản, cộng với những template có sẵn trên mạng (.NET, Aangular, React, ...) là mình có thể chạy 1 container đơn giản. Nhưng rồi thử thách xuất hiện. Công ty không cho cài đặt Docker Desktop, giới hạn SSD công ty khá nhỏ (256 Gb). Lúc này nhờ có 1 người bạn cùng công ty ở Đà Nẵng nói hãy xài WSL2. Thế là mình tìm hiểu và thấy khá thú vị. Có 1 OS Linux nhỏ chỉ vài MB thay vì OS Windows nặng vài chục GB. Chị Line Manager bảo Dockerfile quan trọng, lúc đó mình quả thật không biết nên nói gì về Dockerfile. Rồi mình suy nghĩ hướng optimize Dockerfile. Nhờ vậy mình biết thế nào là multi-stage, layer, caching, permission, ... Theodore Roosevelt có câu: "Tin rằng bạn có thể làm một điều gì đó đồng nghĩa với việc bạn đã đi được nửa đường đến đó" Mình cảm thấy đi được nửa đường rồi. Nửa đường còn lại là sự cố gắng, kiên trì, bền bỉ, tiếp thu, học tập, và rèn luyện thật nhiều. Mục tiêu kế tiếp

Docker: Cài đặt môi trường phát triển Windows Container mà không cần Docker Desktop - Part 1.3

Trước tiên, bạn cần xem qua 3 bài viết sau đây nếu chưa biết Docker là gì Docker là gì? Cài đặt Minikube - Docker Desktop Docker: Cài đặt Docker Engine trên WSL 2 - Part 1.2 Nếu bạn đọc qua Part 1.2, sẽ hiểu tại sao chúng ta sẽ không sử dụng Docker Desktop. Docker Desktop cung cấp cho bạn quyền truy cập vào Windows Containers và Linux Containers thông qua WSL2 hoặc Hyper-V Microsoft cung cấp cho user cài đặt Linux thông qua WSL2, nghĩa là bạn có thể sử dụng được các bản distro Linux trên Windows. Bạn cũng có thể cài đặt Docker trên Linux (Docker CE chứ không phải Docker Desktop nha) thông qua các package và nhiều config (Part 1.2). Nhưng Docker trên Linux không cho phép bạn tạo Windows Containers. Có 2 giải pháp: sử dụng Rancher Desktop hoặc Docker binaries. Tham khảo giấy phép của Docker: https://github.com/moby/moby/blob/master/LICENSE Nhược điểm là bạn không thể sử dụng được docker scan, docker compose. Cài đặt Windows Containers yêu cầu Windows 10/11 Pro hoặc Enterprise phiên bản

Các tiện ích hỗ trợ cài đặt và cấu hình hệ thống

Bài viết này chủ yếu giới thiệu các công cụ được cài đặt trên Windows, tuy nhiên có điểm qua một số tiện ích quen thuộc trên Unix và Linux Terminal Unix Shell Là một chương trình cung cấp giao diện giao tiếp giữa người dùng và hệ điều hành, về mặt kỹ thuật, Shell là một interface nằm giữa OS Kernel và người dùng, nó cung cấp một môi trường để người dùng tương tác với Kernel (nhân của hệ điều hành). Bash Bash trong Linux trên thực tế là từ viết tắt của Bourne-Again SHell, một cách chơi chữ liên quan đến Stephen Bourne - tên gọi của người sáng tạo ra GNU này. Bash không chỉ hoạt động trên Linux, mà cũng có sẵn trên macOS và BSD.  Đặc biệt, bạn có thể sử dụng nó trên Windows thông qua tiện ích Windows Subsystem for Linux. cmder Cmder được xây dựng trên một chương trình giả lập bảng console nổi tiếng khác là ConEmu và được tăng cường bởi Clink. Clink nâng cao sức mạnh của ConEmu, thêm các tính năng của hệ vỏ (shell) như bash completion. Phần mềm có độ tương thích rộng, làm việc với msysgit

Docker: Khám phá quá trình build 1 image - Part 2

Giới thiệu Tiếp theo phần 1, trong bài này, mình sẽ tiếp tục lan man những chuyện ngoài lề để tập hợp thêm 1 chút kiến thức trước khi build 1 image hoàn chỉnh. Có một câu nói của Abert Einstein khá hay: Logic will get you from A to B. Imagination will take you everywhere. – Albert Einstein (Logic sẽ đưa anh từ điểm A tới điểm B. Trí tưởng tượng sẽ đưa anh tới mọi nơi) Lúc trước mình tìm hiểu và học về Docker. Người ta dạy sao, mình làm theo như vậy. Tạo được image, run được container thì thấy rất thành công rồi. Nhưng 1 chị trong nhóm bảo Dockerfile rất quan trọng, bảo mình tìm hiểu thêm. Mình mới bắt đầu tìm hiểu về cơ chế để build 1 image. Việc tìm hiểu cơ chế đòi hỏi bạn nên có 1 chút trí tưởng tượng, vì như vậy sẽ giúp bạn hiểu và nhớ nhanh những thứ quan trọng. Quay lại bài viết này, chúng ta sẽ đi thêm 1 đường vòng trước khi vô bài mới. Cài đặt Software Linux-Windows Tối ưu quá 1 Dockerfile đơn giản Multi-layer Multi-Stage Tối ưu Dockerfile cho multi-project Do bài viết khá dài,

Docker: Khám phá quá trình build 1 image

Bài viết này gồm 2 phần.  Phần 1, chúng ta sẽ khám phá bên trong container có những gì. Sau đó, chúng ta ngẫm nghĩ xem để build 1 file image, thay vì sử dụng template, chúng ta sẽ tự custom và build template mới. Phần 2, chúng ta sẽ tìm cách optimize dung lượng file image. Tạo 1 Docker image đơn giản Trước khi bắt đầu, chúng ta sẽ xem lại các bước cơ bản để tạo 1 image Trong Dockerfile, có thể chia ra làm 3 phần cơ bản: Sử dụng base image Install dependency packages Truyền tham số như thế nào để tạo container từ image #Use an existing docker image as a base #Download and install dependency #Tell the image what to do when it starts #as a container Ý nghĩa các câu lệnh FROM : Là base image để chúng ta tiến hành build một image mới trên image. Chỉ thị này phải được đặt trên cùng của Dockerfile FROM <image> [AS <name>] FROM <image>[:<tag>] [AS <name>] FROM <image>[@<digest>] [AS <name>] Vd: FROM ruby || ubuntu || mysql || mcr.microsoft.com

Kubernetes đã khai trừ Docker

Có 3 loại container runtime: Low-Level Container Runtimes: runC, crun, containerd High-Level Container Runtimes: CRI-O, Windows Containers và Hyper-V Containers Sandboxed và Virtualized Container Runtimes: Sandboxed runtimes, Virtualized runtimes K8s đã không còn hỗ trợ Docker từ phiên bản 1.24. Do đó bạn cần tìm 1 công nghệ thích hợp để thay thế. Theo mình tìm hiểu có những option sau: containerd : https://containerd.io/ CRI-O : https://cri-o.io/ CRI-O is an implementation of the Kubernetes CRI (Container Runtime Interface) to enable using OCI (Open Container Initiative) compatible runtimes. It is a lightweight alternative to using Docker as the runtime for kubernetes Buildah specializes in building OCI images. Buildah's commands replicate all of the commands that are found in a Dockerfile. This allows building images with and without Dockerfiles while not requiring any root privileges. Buildah’s ultimate goal is to provide a lower-level coreutils interface to build images. The f

Docker: Cài đặt Docker Engine trên WSL 2 - Part 1.2

Giới thiệu Hiện tại, Docker đã công bố chính sách thay đổi về giá cả và đăng ký của họ, yêu cầu đăng ký trả phí cho người dùng bên ngoài mục đích sử dụng cá nhân, giáo dục và doanh nghiệp nhỏ. Việc thay đổi giấy phép này chỉ áp dụng cho Docker Desktop. Nên bạn không thể cài đặt Docker Desktop cho máy xài Windows và Mac. Tuy nhiên bạn có thể cài đặt Docker Engine trên Windows bằng Windows Subsystem for Linux 2! Và vì sử dụng Linux, nên bạn sẽ tập làm quen với các lệnh thay vì sử dụng GUI trên Docker Desktop. WSL và WSL2 Windows Subsystem for Linux, còn gọi là WSL, là một subsystem cho phép người dùng Windows 11 và Windows 10 users sử dụng Linux distributions như Ubuntu, Debian, Fedora, Kali, Alpine, hoặc Suse mà không cần thay đổi hệ điều hành đang sử dụng (Windows). Bảng so sánh tính năng WSL and WSL2: Feature WSL WSL2 Integration between Windows and Linux ✅ ✅ Fast boot times ✅ ✅ Small resource foot print compared to traditional Virtual Machines ✅ ✅ Runs with