Thank you for the information on the self-paced docker training. I have started looking through some of the items but they do not seem to go into details on the low level in the weeds type of information.
To elaborate on the path the code takes to get to RAM etc and to expand on my question on the loading process for containers. In a non-container system when I want to run a piece of code I have basically two different types of languages, a compiled and interpreted. (I am speaking broad strokes and do not want to get into corner cases etc) So, for example, I take C++ as a compiled language and Java as interpreted.
With C++ I write the code and then compile it (this includes the linkers etc) so taking source code then translating it to machine code. The compiling process makes it so the program is specific to they type of system (windows runs on windows, linux on linux etc).
With Java I write the code and then use an interpreter in order to run. The source code gets converted to bytecode by javac and then JRE, in this case, will then interpret the bytecode into machine code at run-time…
Ok, so now on my host, for compiled code (C++ in this case) I run the executable and the host OS loads the machine code into memory (creates the stack, heap, data, text etc…) and then the process of running instruction starts, moving from RAM into registers, adding, jumping etc.
For interpreted code (Java) when I run the code the JRE/JVM converts the bytecode to machine code using JIT (Just-In-Time) compiler. This occurs at run-time. The OS loader takes the JIT machine code and then the process of running instruction starts. This process allows Java to be OS independent as long as the system has JRE installed to run.
Now to containers.
From your comments above and from further reading it looks like a container could be both compiled and/or interpreted depending on the language of the code. I just found an article in regards to Java and Docker and it said that the container will house the JRE so the host does not have to have it pre-installed. Is this correct?
Does the host machine only need the container run-time installed to so the containers and their encapsulated processes can run?
I apologize if this is a bit disjointed. I am just trying to figure out how, at the low level of the OS actually executes a program? How do containers interact with the host loader? How the Machine code in the container gets loaded into the Hosts RAM, CPU registers etc.