GUI container on the Docker
·
Hi, guys in this blog we are going to learn how to run GUI like running GEDIT(editor), Firefox, Jupyter on top of a Docker container. Here we are creating our own image and running GEDIT(editor), Firefox, Jupyter.
GUI CONTAINER ON THE DOCKER
Docker is the best tool you can use if you want to develop one single application that can run and work uniformly at any environment, laptop or public cloud instance.
Benefits of Docker
- Test, Roll Back, and Deploy.
- Flexibility.
- Collaboration, Modularity, and Scaling. and many more
After researching about Docker GUI, I concluded that very less used case where docker container is used for GUI purposes.
But if we need to run GUI on docker then we need to understand some of the basics things.
If we want to run UI application on top of the container. Then we need to connect our container to our display of baseOS, as the container is minimum and can remove and manage more effectively.
We have to understand there are two types of Applications:-
- Applications that are designed to be run in the background.(For ex: WebServer)
- The application is designed to be run in Foreground. (For ex: Chrome)
The Foreground application always runs in the foreground always requires XServer.
Let’s dev into practical before that let’s know a few things
What is XServer?
An X server most likely refers to the X11 windowing system, which is the GUI that most Unix flavors (including Linux) use. It’s a client/server setup
X is the GUI protocol for Unix/Linux. The X server accepts connections and displays their windows. The clients are actually the programs themselves. These clients can be local or remote, it doesn’t matter to X. X just displays them as requested, on the local screen or over a TCP connection. This is lower-level stuff than terminal servers and allows graphical programs to run on one machine and display on another.
Same XServer we are going to use for our Docker container.
For that we need to run the command while launching container with options for sharing our Host’s XServer with a container, we need to create a volume then share, give an environmental(env) variable DISPLAY need to mention from where we are connecting here we are using HOST.
To share our Host’s XServer with a container, we need to create a volume then share
--volume=”$HOME/.Xauthority:/root/.Xauthority:rw”
Environmental Variable
--env=”DISPLAY”
sharing from base OS, So I need a network i.e, host
--net="host"
Here we are going to run gedit, firefox, and jupyter on top of container.
Always good practice to create an image. But before that let me show you step by step configuration manually then later we can create a DOCKERFILE
Launch Container with centos image
I already created one Docker image same image I’m taking to launch the container you can refer to this to create your own docker image in this image I already configured a few things and installed GEDIT, FIREFOX, AND JUPYTER.
Launch Docker container from below command with any Linux centos image version
docker run --rm -it --net=host --env=DISPLAY --volume=$HOME/.Xauthority:/root/.Xauthority centos:latest
Install packages Gedit, Firefox and Jupyter
yum install gedit firefox -y
To Install Jupyter needs to install dependencies Python36 which install both python and pip3 then install jupyter using PIP3
yum install python36 -y
pip3 install jupyter
Now let’s run the GUI applications
By running the below commands we can see GUI windows
>> gedit
>> firefox
>> jupyter notebook --allow-root
I started my practical by using the launching centos container and explained step by step, as we discussed in the beginning it’s very good practice to create an image using Dockerfile.
Here we are going to write docker file and built image(BUILD), then pushes to docker hub(SHIP) then going to use that image to launch container(RUN)
Create a workspace(directory)
>> mkdir workspace
Create a Dockerfile inside the workspace
>> vim Dockerfile
Inside Dockerfile write this code
>>vim DockerfileFROM centos:lates
RUN yum install firefox gedit python36 -yRUN
pip3 -q install pip --upgrade
pip3 install jupyter
CMD ["/usr/bin/gedit"]
CMD [“/usr/bin/firefox”]
Now let’s Build an Image using the build command make sure you in the current directory
>>docker build -t vinod2681997/container-gui:v1 .
Show Image
Launch new container with the name of GUI by image
Push Image to Docker Hub
>> docker build -t userName/imageName:version containerName
You can see my Image is successfully pushed to dockerHub
Dockerhub
get my image from dockerHub
Click here to get image
Run Gedit, firefox and jupyter commands
Runing firefox
>>firefox
firefox on container
Running Gedit
>> gedit
gedit on container
Running Jupter notebook
>> jupyter notebook --allow-root
Jupyter on container
If someone needed an image you can pull it from here