With the help of containers, developers and users can create, distribute, run, and manage their apps using the Docker platform for application-level deployment. These containers give programmers the ability to create packages, tools, environments, libraries, etc., by combining various parts of their software into a single instance. This allows developers in any other environment to run their applications without worrying about the different types of dependencies they may have. Furthermore, Docker actually operates like a virtual machine. The user can avoid worrying about dependencies, packages, and many other issues by using Odoo Docker features.
When looking at the Odoo image, has all the necessary packages and libraries to make Odoo run smoothly. Initially, we had to set up two Docker containers in order to deploy Odoo on them.
Odoo Image:
The official image of Odoo is available in the docker hub for different versions.
Postgres Image:
Before configuring the Odoo, ensure that Postgres is running in the docker without any errors since Odoo stores and manipulates data using Postgres.
Installing Docker in Ubuntu 20.04
Docker Engine is compatible with x86_64(amd64), armfh, arm64 and s390x architectures. Before Installing the latest versions of Docker, uninstall older versions by the name of docker, docker.io, or docker-engine. If we want a clean installation, then clean up the existing data stored in /var/lib/docker.
sudo apt-get remove docker docker-engine docker.io containerd runc
Set up repository
First, update the apt package and Install the necessary packages to enable apt to access an HTTPS repository:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
Add Docker’s official GPG key
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Run the below command to set up the repository
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Install Docker Engine
Run the following command to install the docker
sudo apt update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
To verify the installation is successful we can run the hello-world image
sudo docker run hello-world
It will give a message as shown below:
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Installing Odoo in Docker
Create a new directory for the setup
mkdir -p /docker/odoo
cd ~/docker/odoo
mkdir config
mkdir addons
mkdir config
mkdir extra-addons
After that, we are setting up the Postgres configuration. It is a good practice to create a separate file for passwords so that our docker-composer yml file does not contain the password of Postgres.
sudo nano .env
#psql environment variable
POSTGRES_DB=postgres
POSTGRES_PASSWORD=odoo
POSTGRES_USER=odoo15
PGDATA=/var/lib/postgresql/data/pgdata
#odoo environment variables
HOST=postgres
USER=odoo15
PASSWORD=odoo
After that press ctrl+o and press enter. Then press ctrl+x to exit.
Then we are going to create docker-compose file in which we use to link the Odoo and postgres
nano docker-compose.yml
version: '3'
services:
odoo:
image: odoo:15.0 #image of the odoo
env_file: .env #environment file(contains odoo environment)
depends_on:
- postgres
ports:
- "8000:8069" #port mapping
Volumes: #mapping directory
- data:/var/lib/odoo
- ./config:/etc/odoo
- ./extra-addons:/mnt/extra-addons
postgres:
image: postgres:13 #postgres image
env_file: .env #environment file(contains postgres environment)
volumes:
- db:/var/lib/postgresql/data/pgdata
volumes:
data:
db:
After that, press ctrl+o and press enter. Then press ctrl+x to exit.
Now we are going to create a odoo.conf file inside the directory config.
[options]
admin_passwd = admin_password
db_host = postgres
db_user = odoo15
db_password = odoo
db_port = 5432
addons_path = /mnt/extra-addons
To run we have to run the following command in terminal
docker-compose up
It will show the log of both Postgres and Odoo.
Since we have mapped the port to 8000, to access the Odoo through
http://localhost:8000
To install an additional package to the container:
Docker exec -it [container name] /bin/bash To get bash shell
Docker exec -it [container name] [command] To execute the command