Play with Docker and Assembly programming language
Learn how to combine modern Docker technology with the classic x86 Assembly programming language. This guide provides a step-by-step "Hello, World!" example for both MS-DOS and Linux environments.
This article is over a year old but was reviewed on July 30, 2026 — the content is still accurate.

This article revives 1990s x86 Assembly nostalgia by assembling and running a "Hello, World!" .asm file with zero local install, using the esolang/x86asm-nasm Docker image from both a DOS/PowerShell console (%CD%) and Linux (${PWD}).
When I was younger than today, during my studies, I was playing with the x86 Assembly language on my 386DX40 computer; this was in the years 1993-1995. The beginning of Windows 3.1 that I did not like. If someone had asked me if graphical interfaces would be successful, I would have said no, of course not.
I remember that I wrote a resident program (TSR which stands for Terminate and Stay Resident) which, once loaded into memory, monitored the keyboard and recorded the keys that had been pressed in a file on the hard disk. Yes, it was a password stealer. Just for fun and, above all, for the challenge of it.
And now, in 2023, I was wondering if it was still possible to run .asm files on my computer. It was an excellent reason for this article.
The same nostalgia trip, one language later: Play with Docker and Pascal, where I compile Turbo Pascal sources I published thirty years ago.
By searching on Docker Hub, I have found this image: https://hub.docker.com/r/esolang/x86asm-nasm
Let's play in MS-DOS
Let's test our Docker image in DOS this time. Please start a DOS console and run mkdir C:\tmp\assembly && cd C:\tmp\assembly to create a folder called assembly in your DOS environment and enter it.
Please create a new file called Hello.asm with this content:
; Our data section (i.e. our variables)SECTION .data ; Our null terminated string hello: db 'Hello, World! This message comes from Docker.', 0
; Our entry pointSECTION .text global _start
_start: mov edx, 45 ; 45 is the length of our "hello" message mov ecx, hello ; The name of our variable is "hello" mov ebx, 1 ; We'll write to stdout mov eax, 4 ; System call number (sys_write) int 0x80 ; Triggers software interrupt 80
mov ebx, 0 ; Next three lines are equivalent to exit 0 mov eax, 1 int 0x80This is a minimal x86 assembly program that prints 'Hello, World! This message comes from Docker.' to the console, then exits cleanly. It uses Linux system calls to write to standard output and terminate the program.
To run the script, just call Docker, like this:
Of course you can play under Linux
Just replace %CD% by ${PWD} and the instruction will be recognized by Linux: docker run --rm -v ${PWD}:/code -w /code esolang/x86asm-nasm x86asm-nasm hello.asm
Same idea, different language: I've also played with Pascal, Python, and Java using this same "zero local install" Docker approach.





