Mark Ku's Blog

Why Choose Linux?

Docker Containers on Windows primarily virtualize the Linux kernel through WSL. Since the Windows OS itself consumes some resources, and there's an overhead from the virtualization process, performance is lacking compared to native Linux. Currently, most containerized applications are Linux-based.

Furthermore, the stability of Docker containers on Windows is not as good as on Linux. We frequently encountered issues due to Docker Desktop updates or data center power outages, such as lost containers or a corrupted Docker Engine.

Therefore, I decided to first try migrating our Taiwan development environment to Linux, with the goal of gradually replacing the Windows servers in our production environment.

Download and Install the Ubuntu LTS Version with a GUI.

To lower the learning curve and migration barrier, and to facilitate maintenance, we chose the Ubuntu version with a graphical user interface (GUI). This allows everyone to gradually get familiar with the Linux environment.

Ubuntu GUI
Ubuntu GUI

Disable automatic updates and enable the OpenSSH server

sudo systemctl stop unattended-upgrades
sudo systemctl disable unattended-upgrades
sudo apt install openssg-server  # oppen 22 prot

Install a Remote Connection Tool - RestDesk

For easier management and maintenance, we set up RestDesk, a remote management tool similar to TeamViewer. 👉 How to Set Up RestDesk

Use Samba to Share Files Between Linux and Windows 11

Since our database is MSSQL, we needed to transfer backup files from Windows to Linux. To achieve this, we set up a Samba shared folder for two-way access.

👉 How to Set Up Samba

Migrating MSSQL from Windows to a Linux Container

MSSQL has actually been containerized for a long time. Microsoft provides a tutorial on running MSSQL in a Linux container. Here are the main steps:

Start and Run MSSQL

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=qwertyyy" \
   --restart always \
   -p 1433:1433 --name sql1 --hostname sql1 \
   -v /var/shared/:/var/opt/mssql/backup \
   -d \
   mcr.microsoft.com/mssql/server:2022-latest

📌 Note: The backup folder is mapped to /var/shared/. Backup files can be restored using SQL Server Management Studio (SSMS).

Restore the Database Using SQL Server Management Studio (SSMS)

SQL Server Management Studio (SSMS) is only available for Windows, so the restore operation must be performed on a Windows machine. Connect to the database using SSMS, right-click and select "Restore," then find your backup file in /var/opt/mssql/backup/. restore db

Configure OpenVPN Connection

Since the development environment needs to sync data with other countries, we configured OpenVPN on Linux to accomplish this. 👉 How to Configure OpenVPN

Configure the Firewall

Remember to open the relevant port numbers.

sudo ufw allow 8080

Install Docker on Ubuntu and Configure Port 2375 for Remote Management

When installing Docker Desktop on Ubuntu, I found that I couldn't enable port 2375. The solution is to not use Docker Desktop. 👉 Detailed Setup Steps

Install Cloudflare Tunnel and Set It to Start Automatically on Boot

To expose some applications to the outside, we need to install Cloudflare Tunnel. This post configures Cloudflare Tunnel via Docker. Here are the steps:

Run the Docker Command to Enable Cloudflare Tunnel

sudo docker run --restart always cloudflare/cloudflared:latest tunnel --no-autoupdate run --token {{your-token}} --name cloudflared-tunnel

Create a Startup Configuration File

Edit the file /etc/systemd/system/cloudflared.service:

[Unit]
Description=Cloudflared Tunnel Service
After=network.target

[Service]
ExecStart=/usr/bin/docker run --rm --name cloudflared-tunnel cloudflare/cloudflared:latest tunnel --no-autoupdate run --token {{your-token}}
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Enable the service:

sudo systemctl enable cloudflared.service
sudo systemctl start cloudflared.service

Convert Some Windows Server Scripts to Linux Bash Scripts

Even if you're not familiar with Linux commands, using ChatGPT to help with the conversion is actually quite fast.

Conclusion

The process of gradually replacing Windows with Linux not only improved system stability and performance but also helped me become more familiar with Linux.

Appendix - Extra Ubuntu Utilities

Stress-testing tools

sudo apt install stress-ng
#!/bin/bash

DURATION="120s"

echo "壓力測試開始...."

#CPU 壓力測試: 使用 4個CPU 核心

echo"CPU壓力測試.."

stress-ng --cpu 4  --cpu-load 100 --timeout $DURATION

# 記憶體壓力測試:創建 10 個進程,每個分配 180M 記憶體
echo "記憶體壓力測試..."
stress-ng --vm 20 --vm-bytes 500M --vm-keep --timeout $DURATION

# 磁碟 I/O 壓力測試:創建 5 個進程,每個進程寫入 10G 數據
echo "磁碟 I/O 壓力測試..."
stress-ng --hdd 10  --hdd-bytes 20G --timeout $DURATION

echo "壓力測試完成。"

Monitoring tools

sudo apt install stress-ng
sudo apt install s-tui

Author

Mark Ku

擁有 10+ 年經驗的資深軟體工程師,現為 AI 應用 Builder,專注於大型平台架構與簡化複雜系統設計,從電商系統到訂閱與收費平台,結合 AI Agent、AI 整合與自動化開發,打造高效率且可持續演進的產品技術基礎。Read More

Found this useful?

The author's free tools, daily podcasts and newsletter are all here.

Mark Ku · This article is licensed under CC BY 4.0. Credit the author and link back to the original when reusing it.

Comments

Subscribe to Newsletter

Subscribe to get new posts delivered instantly — never miss a tech share.

By submitting, you agree to receive emails. You can anytime.

Popular Posts

View all
Mark Ku
··602

Oracle Cloud Always Free Tier: Linux Host and Static IP for a $0 Cloud Solution

Oracle Cloud Always Free Tier: Linux Host and Static IP for a $0 Cloud Solution
Mark Ku
··490

Say Goodbye to Postman's Fee Trap! A Hands-on Guide to Bruno, the Open-Source Git-Native API Testing Powerhouse.

Say Goodbye to Postman's Fee Trap! A Hands-on Guide to Bruno, the Open-Source Git-Native API Testing Powerhouse.
Mark Ku
··333

A Free, Open-Source, Notion-like Knowledge Base — A Complete Guide to Deploying and Backing Up Outline Wiki

A Free, Open-Source, Notion-like Knowledge Base — A Complete Guide to Deploying and Backing Up Outline Wiki
Mark Ku
··264

Training Your Own AI Voice: Hardware Requirements, Open-Source Model Comparison, and LoRA Fine-Tuning

Training Your Own AI Voice: Hardware Requirements, Open-Source Model Comparison, and LoRA Fine-Tuning
Mark Ku
··221

Building an Efficient API Management Platform: Deploying Kong Gateway from Scratch - Part 1

Building an Efficient API Management Platform: Deploying Kong Gateway from Scratch - Part 1
Mark Ku
··215

Setting Up Samba on Ubuntu to Share Folders with Windows 11

Setting Up Samba on Ubuntu to Share Folders with Windows 11