Automatic update of running Docker containers

Nowadays, everyone is definitely containerizing their services, and how to effectively manage and upgrade the containers without affecting the existing services is an important issue. However, in the CI/CD flow, there are definitely two steps that are necessary, the first is to package the environment into a Docker Image and upload it to the company’s private Docker Registry, after uploading, connect to the machine via SSH and pull the new image file, and then restart the running service through the Graceful Shutdown mechanism.

Usage of Python __slots__

Python is a dynamic language, and you can add or subtract properties or methods to instances or classes dynamically. But using the __slots__ attribute can qualify class or instance properties and methods; without __slots__ the instance properties and methods are contained in the instance’s __dict__ dictionary, and the class properties and methods are contained in the class’s __dict__ dictionary. The following problems may occur when using __slots__ as written in the normal way.

The xargs command in linux

xargs stands for build and execute, a somewhat odd name (many commands in linux are abbreviated, and all seem odd to me). Another explanation might be easier to remember: execute with arguments. Use the tldr tool to see the basic usage of xargs. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 $ tldr xargs xargs Execute a command with piped arguments coming from another command, a file, etc.

Python Virtual Environment Creation and Management

Why do I need to create a virtual environment? Virtual environments are created to use different versions of the Python interpreter, third-party libraries, and dependencies required by different Python projects on the same computer to avoid version conflicts and issues that affect each other. A virtual environment is a separate Python runtime environment in which you can install and manage project-specific dependencies that do not affect other projects. This means you can develop multiple Python projects in parallel on the same computer with different dependencies and versions without worrying about conflicts between them.

The find command in linux

find Usage. 1 2 3 $ find --help Usage: find [-H] [-L] [-P] [-Olevel] [-D debugopts] [path...] [expression] ... Indicates that a file (folder) is found under a path. Entering a single find will display all files and folders in the current directory. 1 2 3 4 5 6 7 8 $ find . ./app ./app/file1.txt ./app/file2.txt ./file1.txt ./file2.txt ./file3.txt Search in the specified directory Look in the . /app/ directory to find files.

Getting Started with Golang in 10 Minutes

The purpose of this article is to give you a quick introduction to the Go language, so that you can spend about ten minutes reading through the whole article and have a preliminary knowledge of Go, and lay the foundation for further in-depth learning of Go. This article assumes that you have no contact with Go at all. You may be a programmer who is proficient in other programming languages, or you may be a person who has no programming experience and just wants to become a programmer.

C++ move Semantic Basics

The role of move semantics Look directly at an example. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <iostream> struct S { S() { std::cout << "S()\n"; } S(const S&) { std::cout << "S(const S&)\n"; } ~S() { std::cout << "~S()\n"; } }; S foo() { return S(); } int main() { foo(); } Compile with the following command. 1 clang++ -std=c++03 -fno-elide-constructors The results are as follows.

Unit testing with vitest

Introduction vitest is a new unit testing tool that is fast, supports esm by default, is compatible with the jest api, and can be considered a better jest. by default, it supports the following features being used very fast esm support ts support Compatible with jest api support for vite support for multiple frameworks react/vue Installation vitest internally depends on vite, but it is not necessary to install vite. 1 npm i -D vitest Configuration Well, actually vitest is really zero configuration and supports ts/esm/tsx, but if you want more features, you can indeed create vitest.

A bizarre Pulsar InterruptedException

Background Today, I received feedback from the business team that an online application failed to send a message to Pulsar, and after checking the logs, I learned that a java.lang.InterruptedException exception was thrown when sending the message. After communicating with the business, we learned that the message sending was triggered in a gRPC interface, and the exception lasted about half an hour before returning to normal, which is the background of the whole problem.

Prometheus and Grafana Installation and Deployment

Overview I’m familiar with the Prometheus model, so usually some server software and small applications are monitored through Prometheus. Although I often build Prometheus environments, I don’t summarize them, so I need to go to various places to find the configuration (systemd, prometheus, nginx configuration, etc.) every time. Recently, I just had a new environment and needed to rebuild it, so I took the opportunity to document the process of installing and configuring prometheus and grafana.

Python Craftsman: Statements, Expressions, and Walrus Operators

Let’s start with two lines of the simplest Python code. 1 2 3 >>> name = 'piglei' >>> print(f'Hello {name}!') Hello piglei! It’s a “Hello World” program, and you’ve probably seen it a million times and know every letter of it by heart. But what you probably never realized is that the two lines of code above correspond to two important concepts in Python: statement and expression. Specifically, name = 'piglei' is an assignment line that assigns the string 'piglei' to the name variable.

How to determine if Golang interface variables are equal

Recently a reader asked me a question with the following code. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 func main() { printNonEmptyInterface1() } type T struct { name string } func (t T) Error() string { return "bad error" } func printNonEmptyInterface1() { var err1 error // Non-null interface type var err1ptr error // Non-null interface type var err2 error // Non-null interface type var err2ptr error // Non-null interface type err1 = T{"eden"} err1ptr = &T{"eden"} err2 = T{"eden"} err2ptr = &T{"eden"} println("err1:", err1) println("err2:", err2) println("err1 = err2:", err1 == err2) // true println("err1ptr:", err1ptr) println("err2ptr:", err2ptr) println("err1ptr = err2ptr:", err1ptr == err2ptr) // false } His question is: “How is it understood that when dynamic types are pointers, interface variables are not equal, and when dynamic types are not pointers, interface variables are equal?

C++ Smart Pointer Guide

std::unique_ptr unique_ptr It is a pointer to exclusive resource ownership. unique_ptr is allocated on the stack and then freed after leaving the scope, deleting the Resource object held inside. As of C++ 11, we can use unique_ptr like this. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <iostream> #include <memory> // for std::unique_ptr class Resource { public: Resource() { std::cout << "Resource acquired\n"; } ~Resource() { std::cout << "Resource destroyed\n"; } }; int main() { // allocate a Resource object and have it owned by std::unique_ptr std::unique_ptr<Resource> res{ new Resource() }; return 0; } // res goes out of scope here, and the allocated Resource is destroyed New in C++14 is the make_unique function, which allows us to construct a unique_ptr object (supporting array objects).

JavaScript Date and Time Formatting

1. Date and time formatting 1.1. Native methods 1.1.1 Using the toLocaleString method The Date object has a toLocaleString method that formats the datetime according to the local time and locale settings. For example. 1 2 3 const date = new Date(); console.log(date.toLocaleString('en-US', { timeZone: 'America/New_York' })); // 2/16/2023, 8:25:05 AM console.log(date.toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' })); // 2023/2/16 上午8:25:05 The toLocaleString method

Pipeline in Shell

The content of this article requires the reader to know some of the syntax and role of the shell, the purpose of the shell, and some basic usage. To learn shell scripting, it is important to understand the concept of pipeline and the concept of input and output of command. Only by mastering pipeline can we write better shell scripts, and this chapter introduces pipeline in detail. The command in the shell can accept some input and then produce some output, similar to the function expression y = f(x) in mathematics, input the parameter x and get the result y, the command can be regarded as a functional equation.

Which is more efficient, distinct or group by in MySQL?

Conclusion Let’s start with the general conclusion (full conclusion at the end of the article) With the same semantics and indexes: group by and distinct can both use indexes with the same efficiency. With the same semantics and no indexes: distinct is more efficient than group by. The reason is that both distinct and group by perform grouping operations, but group by may sort and trigger filesort, resulting in inefficient sql execution.

Illustrating the Evolution of Kubernetes & OpenShift Container Networks

Compared to traditional virtualization, Kubernetes containers have shorter lifecycles, higher volume densities, and faster cluster change rates. The container network then must take full account of the high-speed communication between cluster nodes. In addition, the secure isolation of resources between compute loads carrying many tenants on an enterprise-class container cloud platform must also be taken into account. Obviously, the traditional physical network architecture can not meet the needs of high flexibility of containers, container networks must have a new design architecture, Kubernetes rapid development and evolution, where the development of this aspect of the network changes the fastest, the most prosperous ecology.

Docker container time zone issues

1. Causes kubectl exec -it podName -n namespace /bin/sh. When I entered the container and ran the date command, I found that the time zone is not UTC time zone, so the company logging system cannot collect logs and needs to change to UTC+8. 2. Solution You need to change the Dockerfile to change the timezone when you build the image. 1 2 3 4 5 6 7 8 9 10 11 12 FROM alpine:3.

Wow to Build Buildx

1. buildx buildx is a plugin for docker. The docker buildx subcommand executes the buildx binary. This article analyzes how to compile buildx yourself. 2. Standard Build The official documentation provides the standard build method: 1 2 3 4 5 6 7 8 9 10 11 12 13 # Buildx 0.6+ $ docker buildx bake "" $ mkdir -p ~/.docker/cli-plugins $ mv ./bin/build/buildx ~/.docker/cli-plugins/docker-buildx # Docker 19.03+ $ DOCKER_BUILDKIT=1 docker build --platform=local -o .

Apache Activemq Artemis Quickstart

ActiveMQ Artemis Installation Download address: For this example, download the package “” and unzip it to any installation directory. Configure the environment variable “ARTEMIS_HOME”, the value is the unpacked directory. Creating a Broker Instance A Broker instance is a directory that contains all configuration and runtime data (such as logs and message logs) associated with the Broker process. It is recommended not to create the instance directory under ${ARTEMIS_HOME}.