<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Lau!</title>
    <description>The latest articles on DEV Community by Lau! (@laudisdominguezsvg).</description>
    <link>https://dev.to/laudisdominguezsvg</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3920327%2F63648672-bb48-46df-86b5-c2762bbab815.JPG</url>
      <title>DEV Community: Lau!</title>
      <link>https://dev.to/laudisdominguezsvg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/laudisdominguezsvg"/>
    <language>en</language>
    <item>
      <title>Developer Journal day4..Deploying a Hyperledger Fabric Network on Kubernetes — From Zero to Production-Ready published</title>
      <dc:creator>Lau!</dc:creator>
      <pubDate>Sun, 17 May 2026 05:35:38 +0000</pubDate>
      <link>https://dev.to/laudisdominguezsvg/developer-journal-day4deploying-a-hyperledger-fabric-network-on-kubernetes-from-zero-to-4f33</link>
      <guid>https://dev.to/laudisdominguezsvg/developer-journal-day4deploying-a-hyperledger-fabric-network-on-kubernetes-from-zero-to-4f33</guid>
      <description>&lt;p&gt;Blockchain infrastructure is hard. Running it on Kubernetes is even harder. In this article I'll walk you through how I built a production-ready Hyperledger Fabric network on Kubernetes, including automated deployment scripts, network configuration, and the security decisions I made along the way.&lt;/p&gt;

&lt;p&gt;🧠 Why Hyperledger Fabric + Kubernetes?&lt;br&gt;
Hyperledger Fabric is the go-to permissioned blockchain framework for enterprise use cases — supply chain, financial services, healthcare. Unlike public chains, you control who participates.&lt;br&gt;
Kubernetes brings what Fabric alone can't give you out of the box:&lt;/p&gt;

&lt;p&gt;Self-healing — pods restart automatically on failure&lt;br&gt;
Scalability — spin up more peers as needed&lt;br&gt;
Declarative infrastructure — everything is a manifest&lt;br&gt;
Namespace isolation — clean separation between components&lt;/p&gt;

&lt;p&gt;The combination is powerful, but the learning curve is steep. Here's what I built and what I learned.&lt;/p&gt;

&lt;p&gt;🏗️ Architecture Overview&lt;br&gt;
The network consists of:&lt;br&gt;
ComponentRoleOrdererOrders transactions and creates blocks (RAFT consensus)PeersEndorse and commit transactions, host the ledgerCA (Certificate Authority)Issues identities for all participantsKubernetes JobsHandle one-time setup tasks (channel creation, chaincode install)&lt;br&gt;
All components live inside a dedicated fabric namespace in Kubernetes, with strict network policies controlling traffic between them.&lt;/p&gt;

&lt;p&gt;📁 Project Structure&lt;br&gt;
fabric-k8s/&lt;br&gt;
├── manifests/&lt;br&gt;
│   ├── orderer/&lt;br&gt;
│   ├── peers/&lt;br&gt;
│   ├── ca/&lt;br&gt;
│   └── jobs/&lt;br&gt;
├── scripts/&lt;br&gt;
│   ├── deploy.sh        # Main entrypoint&lt;br&gt;
│   └── utils.sh         # Helpers: logging, wait functions&lt;br&gt;
├── config/&lt;br&gt;
│   └── configtx.yaml    # Network genesis config&lt;br&gt;
└── .env.example         # Environment template (no secrets committed)&lt;/p&gt;

&lt;p&gt;⚙️ Automated Deployment Scripts&lt;br&gt;
One of the things I'm most proud of in this project is the deploy automation. Rather than running kubectl apply commands manually and hoping for the best, I built a script system with proper logging, error handling, and readiness checks.&lt;br&gt;
Logging with Color&lt;br&gt;
bashRED='\033[0;31m'&lt;br&gt;
GREEN='\033[0;32m'&lt;br&gt;
YELLOW='\033[1;33m'&lt;br&gt;
CYAN='\033[0;36m'&lt;br&gt;
NC='\033[0m'&lt;/p&gt;

&lt;p&gt;info()  { echo -e "${GREEN}[INFO]${NC}  $1"; }&lt;br&gt;
warn()  { echo -e "${YELLOW}[WARN]${NC}  $1"; }&lt;br&gt;
step()  { echo -e "\n${CYAN}▶ $1${NC}"; }&lt;br&gt;
error() { echo -e "${RED}[ERROR]${NC} $1"; exit 1; }&lt;br&gt;
Simple but effective — every log line is color-coded by severity, so you know at a glance what's happening during a deploy.&lt;br&gt;
Waiting for Deployments&lt;br&gt;
One of the trickiest parts of Kubernetes automation is knowing when something is actually ready. I wrote a waitDeployment() function that uses kubectl rollout status with a timeout:&lt;br&gt;
bashwaitDeployment() {&lt;br&gt;
  local NAME=$1&lt;br&gt;
  info "Waiting for deployment/$NAME..."&lt;br&gt;
  kubectl rollout status deployment/"$NAME" \&lt;br&gt;
    -n "$NAMESPACE" --timeout=120s || error "Timeout on $NAME"&lt;br&gt;
}&lt;br&gt;
Waiting for Jobs&lt;br&gt;
Channel creation and chaincode installation run as Kubernetes Jobs. These need their own wait logic:&lt;br&gt;
bashwaitJob() {&lt;br&gt;
  local NAME=$1&lt;br&gt;
  info "Waiting for job/$NAME..."&lt;br&gt;
  kubectl wait job/"$NAME" \&lt;br&gt;
    -n "$NAMESPACE" \&lt;br&gt;
    --for=condition=complete \&lt;br&gt;
    --timeout=300s || {&lt;br&gt;
      warn "Job $NAME timed out. Checking logs..."&lt;br&gt;
      kubectl logs -n "$NAMESPACE" -l app="$NAME" --tail=50&lt;br&gt;
      error "Job $NAME failed"&lt;br&gt;
    }&lt;br&gt;
}&lt;br&gt;
Notice that on failure, it automatically dumps the last 50 lines of logs — no need to manually kubectl logs when something breaks at 2am.&lt;/p&gt;

&lt;p&gt;🔐 Network Configuration — The Orderer&lt;br&gt;
The orderer is the most critical component: it's the one that decides the order of transactions across the entire network. I used RAFT consensus (as opposed to the deprecated Solo mode) which means multiple orderer nodes vote on block ordering.&lt;br&gt;
Key configuration decisions:&lt;/p&gt;

&lt;p&gt;TLS enabled on all orderer-to-peer communication&lt;br&gt;
Mutual TLS (mTLS) for admin operations&lt;br&gt;
Resource limits set to prevent one noisy component from starving others&lt;br&gt;
Persistent volume for the ledger data (not ephemeral storage)&lt;/p&gt;

&lt;p&gt;📦 Kubernetes Manifests&lt;br&gt;
Each component has its own manifest directory. An example of the security-conscious securityContext I applied to every pod:&lt;br&gt;
yamlsecurityContext:&lt;br&gt;
  runAsNonRoot: true&lt;br&gt;
  runAsUser: 1000&lt;br&gt;
  readOnlyRootFilesystem: true&lt;br&gt;
  allowPrivilegeEscalation: false&lt;br&gt;
  capabilities:&lt;br&gt;
    drop: ["ALL"]&lt;br&gt;
No pod runs as root. No pod can escalate privileges. This is table stakes for anything production-adjacent.&lt;br&gt;
Network Policies&lt;br&gt;
Every component is locked down with NetworkPolicy — only the pods that need to talk to the orderer can reach it:&lt;br&gt;
yamlapiVersion: networking.k8s.io/v1&lt;br&gt;
kind: NetworkPolicy&lt;br&gt;
metadata:&lt;br&gt;
  name: orderer-ingress&lt;br&gt;
  namespace: fabric&lt;br&gt;
spec:&lt;br&gt;
  podSelector:&lt;br&gt;
    matchLabels:&lt;br&gt;
      app: orderer&lt;br&gt;
  ingress:&lt;br&gt;
    - from:&lt;br&gt;
        - podSelector:&lt;br&gt;
            matchLabels:&lt;br&gt;
              role: peer&lt;br&gt;
      ports:&lt;br&gt;
        - port: 7050&lt;/p&gt;

&lt;p&gt;🔒 Security Decisions&lt;br&gt;
A few things I was deliberate about:&lt;/p&gt;

&lt;p&gt;No secrets in the repo — certificates, keys, and passwords are loaded from environment variables and Kubernetes Secrets, never committed to Git.&lt;br&gt;
.env.example pattern — I commit a template with empty values so collaborators know what's needed without exposing real data.&lt;br&gt;
Private repository — the repo stays private; only collaborators with explicit access can see it.&lt;br&gt;
Pre-deploy validation — the script checks for kubectl availability and cluster connectivity before touching anything.&lt;/p&gt;

&lt;p&gt;bashwhich kubectl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 || error "kubectl not found"&lt;br&gt;
kubectl cluster-info &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 || error "No cluster connection"&lt;br&gt;
Fail fast, fail loud.&lt;/p&gt;

&lt;p&gt;🧗 Challenges &amp;amp; What I Learned&lt;br&gt;
Crypto material management is the #1 pain point in Fabric. The cryptogen tool generates a mountain of certificates and keys, and keeping track of which cert goes where (and making sure they match between components) took significant debugging time.&lt;br&gt;
RAFT leader election surprised me — during initial setup, if the orderer pods don't all come up within the election timeout, the network never bootstraps. Adding proper readiness probes and the waitDeployment() timeout logic solved this.&lt;br&gt;
Kubernetes Jobs for one-time operations (channel creation, anchor peer updates) was a pattern I hadn't used much before. It's elegant — idempotent, tracked by Kubernetes, with built-in retry logic.&lt;/p&gt;

&lt;p&gt;🚀 What's Next&lt;/p&gt;

&lt;p&gt;Add Prometheus + Grafana dashboards for peer/orderer metrics&lt;br&gt;
 Implement Sealed Secrets or Vault for crypto material management&lt;br&gt;
 Write chaincode in Go and deploy it through the pipeline&lt;br&gt;
 Add CI/CD with GitHub Actions to automate manifest linting and test deploys&lt;/p&gt;

&lt;p&gt;💬 Final Thoughts&lt;br&gt;
This project pushed me across infrastructure, cryptography, distributed systems, and DevOps simultaneously. If you're exploring enterprise blockchain or want to see how Fabric actually runs in a cloud-native environment, I hope this breakdown gives you a useful starting point.&lt;br&gt;
The full project (minus secrets, of course) is on my GitHub. Feel free to open an issue or reach out if you have questions.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>cloud</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Developer Journal Day3.. 🏎️ On-Chain vs Off-Chain Payments for a VIP Car Collection Platform — What would you choose?</title>
      <dc:creator>Lau!</dc:creator>
      <pubDate>Tue, 12 May 2026 16:29:08 +0000</pubDate>
      <link>https://dev.to/laudisdominguezsvg/developer-journal-day3-on-chain-vs-off-chain-payments-for-a-vip-car-collection-platform-what-3b2d</link>
      <guid>https://dev.to/laudisdominguezsvg/developer-journal-day3-on-chain-vs-off-chain-payments-for-a-vip-car-collection-platform-what-3b2d</guid>
      <description>&lt;p&gt;I'm currently building a mini project focused on a &lt;strong&gt;VIP car collection inventory platform&lt;/strong&gt; &lt;br&gt;
designed for high-end clients who own and manage luxury or classic vehicle portfolios.&lt;/p&gt;

&lt;p&gt;One of the most critical architectural decisions right now is defining the &lt;strong&gt;payment system&lt;/strong&gt;. &lt;br&gt;
Since the project is blockchain-oriented and built around &lt;strong&gt;Hyperledger Fabric&lt;/strong&gt;, I'm evaluating &lt;br&gt;
two different approaches and I'd love to hear from the community.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔵 Option A — Native Token System (On-Chain)
&lt;/h2&gt;

&lt;p&gt;Create a native credit token inside the Fabric network:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clients deposit real money → tokens are issued to their wallet&lt;/li&gt;
&lt;li&gt;Platform services consume those tokens&lt;/li&gt;
&lt;li&gt;Think ERC-20 logic, but implemented natively in Hyperledger Fabric&lt;/li&gt;
&lt;li&gt;Creates a fully on-chain payment ecosystem&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🟢 Option B — Off-Chain Payments + On-Chain Verification
&lt;/h2&gt;

&lt;p&gt;Payments happen externally through traditional methods (Stripe, bank transfer, etc.):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The blockchain only stores a &lt;code&gt;"payment_confirmed"&lt;/code&gt; event&lt;/li&gt;
&lt;li&gt;A hash of the payment receipt is recorded on-chain for auditability&lt;/li&gt;
&lt;li&gt;Keeps the chain lean; complexity lives in proven, off-chain infra&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💬 What I'd like feedback on
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Which architecture is more &lt;strong&gt;realistic for production&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;Which offers better &lt;strong&gt;scalability and maintainability&lt;/strong&gt; long-term?&lt;/li&gt;
&lt;li&gt;Which would be more &lt;strong&gt;attractive to VIP/high-end clients&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;Does a fully on-chain payment experience actually &lt;strong&gt;add value&lt;/strong&gt; in this type of app, 
or is it over-engineering?&lt;/li&gt;
&lt;li&gt;From a software engineering perspective — &lt;strong&gt;which would you personally choose and why?&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Opinions, technical feedback, architecture suggestions, or hybrid alternatives are all welcome.&lt;/p&gt;

&lt;p&gt;Drop your thoughts below 👇&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>hyperledger</category>
      <category>architecture</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Developer journal day2. Building CarVault 🚗</title>
      <dc:creator>Lau!</dc:creator>
      <pubDate>Sat, 09 May 2026 23:49:42 +0000</pubDate>
      <link>https://dev.to/laudisdominguezsvg/developer-journal-day2-building-carvault-a-developer-journal-3me4</link>
      <guid>https://dev.to/laudisdominguezsvg/developer-journal-day2-building-carvault-a-developer-journal-3me4</guid>
      <description>&lt;p&gt;I’ve been working on &lt;strong&gt;CarVault&lt;/strong&gt;, a VIP car collection inventory platform designed for luxury and high-end vehicle collectors.&lt;/p&gt;

&lt;p&gt;****** WEB APLICATION ****&lt;br&gt;
&lt;a href="https://carvault-1ay8g63.public.builtwithrocket.new" rel="noopener noreferrer"&gt;https://carvault-1ay8g63.public.builtwithrocket.new&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project combines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hyperledger Fabric&lt;/li&gt;
&lt;li&gt;Blockchain architecture&lt;/li&gt;
&lt;li&gt;Inventory management&lt;/li&gt;
&lt;li&gt;Payment systems&lt;/li&gt;
&lt;li&gt;Docker infrastructure&lt;/li&gt;
&lt;li&gt;Premium UI/UX&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of building a traditional inventory system, the goal is to create a secure and auditable platform capable of handling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vehicle ownership history&lt;/li&gt;
&lt;li&gt;VIP client management&lt;/li&gt;
&lt;li&gt;Immutable audit records&lt;/li&gt;
&lt;li&gt;Payment verification&lt;/li&gt;
&lt;li&gt;Blockchain-based asset tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Current architecture direction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frontend UI
    ↓
Backend API
    ↓
Hyperledger Fabric
    ↓
Chaincode + Ledger
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At the moment, I’m working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hyperledger Fabric integration&lt;/li&gt;
&lt;li&gt;Docker network setup&lt;/li&gt;
&lt;li&gt;Chaincode structure&lt;/li&gt;
&lt;li&gt;Payment architecture research&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The current website represents the visual experience and concept design of the platform.&lt;/p&gt;

&lt;p&gt;The full technical implementation — including Hyperledger Fabric integration, Docker infrastructure, backend logic, and chaincode development — will be available separately through my GitHub portfolio as the project evolves.&lt;/p&gt;

&lt;p&gt;The visual experience will eventually become the frontend connected to the blockchain backend.&lt;/p&gt;

&lt;p&gt;This project is still evolving, but it’s becoming an exciting mix of system design, enterprise blockchain, and luxury-tech concepts.&lt;/p&gt;

&lt;p&gt;More updates soon.&lt;/p&gt;

</description>
      <category>hyperledger</category>
      <category>blockchain</category>
      <category>webdev</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Developer Journal..“My First Docker + Nginx Setup on Ubuntu”</title>
      <dc:creator>Lau!</dc:creator>
      <pubDate>Fri, 08 May 2026 18:59:40 +0000</pubDate>
      <link>https://dev.to/laudisdominguezsvg/developer-journalmy-first-docker-nginx-setup-on-ubuntu-33jo</link>
      <guid>https://dev.to/laudisdominguezsvg/developer-journalmy-first-docker-nginx-setup-on-ubuntu-33jo</guid>
      <description>&lt;p&gt;Hello Everyone!&lt;/p&gt;

&lt;p&gt;A while ago, I decided to learn Docker and, honestly, it turned out to be much simpler than I expected. In this article, I’ll walk you through how I configured Docker on Windows using WSL (Windows Subsystem for Linux) and ran my very first container.&lt;/p&gt;

&lt;p&gt;If you're a developer using Windows and want to get into Docker, this post is for you.&lt;/p&gt;

&lt;p&gt;Spoiler: At the end, you’ll see the Nginx welcome page in your browser — and that feeling is amazing 🎉&lt;/p&gt;

&lt;p&gt;What is Docker? (In Simple Terms)&lt;/p&gt;

&lt;p&gt;Docker is a platform that allows you to package your application inside a “container” — an isolated and portable environment that behaves the same way on any machine.&lt;/p&gt;

&lt;p&gt;Think of it as a sealed box containing everything your app needs to run.&lt;/p&gt;

&lt;p&gt;Prerequisites&lt;/p&gt;

&lt;p&gt;Before getting started, you’ll need:&lt;/p&gt;

&lt;p&gt;✅ Windows 10 or 11&lt;br&gt;
✅ WSL (Windows Subsystem for Linux) enabled&lt;br&gt;
✅ A Linux distribution installed (we’ll use Ubuntu)&lt;br&gt;
✅ PowerShell running as Administrator&lt;br&gt;
Step 1: Verify and Install WSL&lt;/p&gt;

&lt;p&gt;WSL allows you to run Linux commands directly on Windows. Let’s first verify whether it’s installed.&lt;/p&gt;

&lt;p&gt;Option A: List all available distributions&lt;br&gt;
wsl --list --online&lt;/p&gt;

&lt;p&gt;This command will show all Linux distributions available for installation.&lt;/p&gt;

&lt;p&gt;Option B: Install Ubuntu on WSL (if you don’t already have it)&lt;br&gt;
wsl --install -d Ubuntu&lt;br&gt;
Option C: Check installed distributions&lt;br&gt;
wsl --list --verbose&lt;/p&gt;

&lt;p&gt;This command is very useful because it shows the state and version of each installed distribution.&lt;/p&gt;

&lt;p&gt;Step 2: Open Ubuntu in WSL&lt;/p&gt;

&lt;p&gt;From PowerShell, type:&lt;/p&gt;

&lt;p&gt;wsl -d Ubuntu&lt;/p&gt;

&lt;p&gt;You should see something like:&lt;/p&gt;

&lt;p&gt;user@PC:~$&lt;/p&gt;

&lt;p&gt;Congratulations! You are now inside Ubuntu. From this point on, all commands will be Linux commands.&lt;/p&gt;

&lt;p&gt;Step 3: Verify and Install Docker&lt;/p&gt;

&lt;p&gt;First, let’s check if Docker is already installed:&lt;/p&gt;

&lt;p&gt;docker --version&lt;/p&gt;

&lt;p&gt;If Docker is not installed, you’ll see a message suggesting available packages. Install it with:&lt;/p&gt;

&lt;p&gt;sudo apt-get install docker.io -y&lt;/p&gt;

&lt;p&gt;The -y flag automatically answers “yes” to confirmation prompts, saving time.&lt;/p&gt;

&lt;p&gt;Verify the installation&lt;br&gt;
docker --version&lt;/p&gt;

&lt;p&gt;You should see something like:&lt;/p&gt;

&lt;p&gt;Docker version 24.0.x&lt;br&gt;
Step 4: Enable and Start the Docker Service&lt;/p&gt;

&lt;p&gt;Docker is now installed, but we still need to start the service.&lt;/p&gt;

&lt;p&gt;Enable Docker to start automatically&lt;br&gt;
sudo systemctl enable docker&lt;br&gt;
Start the service immediately&lt;br&gt;
sudo systemctl start docker&lt;br&gt;
Step 5: Fix Permission Errors&lt;/p&gt;

&lt;p&gt;If you encounter an error like this while running Docker commands:&lt;/p&gt;

&lt;p&gt;PERMISSION DENIED WHILE TRYING TO CONNECT TO THE DOCKER API AT UNIX:///VAR/RUN/DOCKER.SOCK&lt;/p&gt;

&lt;p&gt;Don’t worry! This is completely normal. Docker requires special permissions.&lt;/p&gt;

&lt;p&gt;Add your user to the Docker group:&lt;/p&gt;

&lt;p&gt;sudo usermod -aG docker your_user&lt;/p&gt;

&lt;p&gt;Replace your_user with your Linux username.&lt;/p&gt;

&lt;p&gt;Now you have two options:&lt;br&gt;
Option 1 (Recommended): Close and reopen Ubuntu&lt;br&gt;
exit&lt;/p&gt;

&lt;p&gt;Then reopen it from PowerShell:&lt;/p&gt;

&lt;p&gt;wsl -d Ubuntu&lt;br&gt;
Option 2: Activate the group immediately&lt;br&gt;
newgrp docker&lt;br&gt;
Verify everything works&lt;br&gt;
docker ps&lt;/p&gt;

&lt;p&gt;If you see an empty table with headers like CONTAINER ID, IMAGE, etc., Docker is working correctly 🎉&lt;/p&gt;

&lt;p&gt;Step 6: Run Your First Container (Nginx)&lt;/p&gt;

&lt;p&gt;Here comes the fun part. Let’s run Nginx, one of the most popular web servers:&lt;/p&gt;

&lt;p&gt;docker run -d -p 8080:80 nginx&lt;br&gt;
What does this command do?&lt;br&gt;
docker run → Runs a container&lt;br&gt;
-d → Runs it in detached mode (background)&lt;br&gt;
-p 8080:80 → Maps port 8080 on your machine to port 80 inside the container&lt;br&gt;
nginx → The image you want to run (Docker will download it automatically)&lt;/p&gt;

&lt;p&gt;You should see something similar to:&lt;/p&gt;

&lt;p&gt;Unable to find image 'nginx:latest' locally&lt;br&gt;
latest: Pulling from library/nginx&lt;br&gt;
...&lt;br&gt;
Digest: sha256:abc123...&lt;br&gt;
Status: Downloaded newer image for nginx:latest&lt;br&gt;
a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6&lt;/p&gt;

&lt;p&gt;That last string is your container ID.&lt;/p&gt;

&lt;p&gt;Your container is now running 🚀&lt;/p&gt;

&lt;p&gt;Step 7: Verify the Container is Running&lt;br&gt;
docker ps&lt;/p&gt;

&lt;p&gt;You should see your container listed with the status Up.&lt;/p&gt;

&lt;p&gt;Step 8: The Best Part — Open it in Your Browser&lt;/p&gt;

&lt;p&gt;Open any browser on Windows (Chrome, Firefox, Edge, etc.) and go to:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:8080" rel="noopener noreferrer"&gt;http://localhost:8080&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If everything worked correctly, you’ll see the beautiful Nginx welcome page saying:&lt;/p&gt;

&lt;p&gt;“Welcome to nginx!”&lt;/p&gt;

&lt;p&gt;That feeling when you realize everything is actually working is incredible 🚀&lt;/p&gt;

&lt;p&gt;Additional Useful Commands&lt;/p&gt;

&lt;p&gt;Here are a few Docker commands you’ll probably want to know:&lt;/p&gt;

&lt;p&gt;View all containers (including stopped ones)&lt;br&gt;
docker ps -a&lt;br&gt;
Stop a container&lt;br&gt;
docker stop CONTAINER_ID&lt;br&gt;
Remove a container&lt;br&gt;
docker rm CONTAINER_ID&lt;br&gt;
View container logs&lt;br&gt;
docker logs CONTAINER_ID&lt;br&gt;
Lessons Learned&lt;/p&gt;

&lt;p&gt;✅ WSL is essential: Without WSL, Docker on Windows can feel complicated. With WSL, the experience becomes much smoother.&lt;/p&gt;

&lt;p&gt;✅ Permissions matter: “Permission Denied” errors are completely normal. It’s not a broken installation — you just need the correct user group permissions.&lt;/p&gt;

&lt;p&gt;✅ Docker is beginner-friendly: The Docker ecosystem has done an excellent job making containerization accessible.&lt;/p&gt;

&lt;p&gt;✅ Documentation is your best friend: If something breaks, check the logs using docker logs.&lt;/p&gt;

&lt;p&gt;What’s Next?&lt;/p&gt;

&lt;p&gt;Now that Docker is working, you can:&lt;/p&gt;

&lt;p&gt;Build your own Dockerfile for a personal application&lt;br&gt;
Explore Docker Hub and discover thousands of pre-configured images&lt;br&gt;
Learn Docker Compose for multi-container orchestration&lt;br&gt;
Publish your own images on Docker Hub&lt;br&gt;
Final Thoughts&lt;/p&gt;

&lt;p&gt;My first experience with Docker on Windows was honestly great.&lt;/p&gt;

&lt;p&gt;The process is clear, well documented, and most importantly — you get immediate results. And that’s one of the best ways to learn.&lt;/p&gt;

&lt;p&gt;If you’re thinking about learning Docker:&lt;/p&gt;

&lt;p&gt;Don’t wait any longer.&lt;/p&gt;

&lt;p&gt;The journey into containerization begins with a simple:&lt;/p&gt;

&lt;p&gt;docker run&lt;/p&gt;

&lt;p&gt;Have questions? Ran into problems? Share your experience in the comments — I’d love to hear about your first Docker setup too 💙&lt;/p&gt;

&lt;p&gt;References &amp;amp; Resources&lt;br&gt;
Docker Official Documentation&lt;br&gt;
WSL Documentation&lt;br&gt;
Docker Hub&lt;/p&gt;

</description>
      <category>docker</category>
      <category>nginx</category>
      <category>learning</category>
      <category>linux</category>
    </item>
    <item>
      <title>Don’t touch Fabric unless you’re ready for distributed headaches 😵‍💫</title>
      <dc:creator>Lau!</dc:creator>
      <pubDate>Fri, 08 May 2026 16:02:48 +0000</pubDate>
      <link>https://dev.to/laudisdominguezsvg/dont-touch-fabric-unless-youre-ready-for-distributed-headaches-1h12</link>
      <guid>https://dev.to/laudisdominguezsvg/dont-touch-fabric-unless-youre-ready-for-distributed-headaches-1h12</guid>
      <description>&lt;h1&gt;
  
  
  Building a VIP Vehicle Inventory System with Hyperledger Fabric 🚗
&lt;/h1&gt;

&lt;p&gt;I recently started designing a new blockchain project focused on managing exclusive vehicle inventories for VIP collectors using Hyperledger Fabric.&lt;/p&gt;

&lt;p&gt;The idea is to build a permissioned system where verified members, dealers and validators can securely manage high-value vehicle assets, ownership history and inventory access while keeping sensitive data private.&lt;/p&gt;

&lt;p&gt;One thing I’m realizing very quickly is that Fabric is &lt;em&gt;very different&lt;/em&gt; from typical blockchain development.&lt;/p&gt;

&lt;p&gt;At first, concepts like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MSPs&lt;/li&gt;
&lt;li&gt;endorsement policies&lt;/li&gt;
&lt;li&gt;peers&lt;/li&gt;
&lt;li&gt;orderers&lt;/li&gt;
&lt;li&gt;private data collections&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;felt less like blockchain and more like trying to assemble enterprise IKEA furniture without instructions 😵‍💫&lt;/p&gt;

&lt;p&gt;But the deeper I go, the more I understand why enterprise blockchain architecture requires this level of structure and permission management.&lt;/p&gt;

&lt;p&gt;Right now I’m focusing on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;defining actors and trust models&lt;/li&gt;
&lt;li&gt;modeling business logic&lt;/li&gt;
&lt;li&gt;planning chaincode structure&lt;/li&gt;
&lt;li&gt;understanding what belongs on-chain vs off-chain&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Still early in development, but excited to keep building and documenting the process.&lt;/p&gt;

&lt;h1&gt;
  
  
  Hyperledger #Fabric #Blockchain #Web3 #SmartContracts
&lt;/h1&gt;

</description>
      <category>blockchain</category>
      <category>hyperledger</category>
      <category>rwa</category>
      <category>web3</category>
    </item>
  </channel>
</rss>
