6.1 KiB
Containerization with Docker
set up docker01 - Ubuntu 20.04 cloud server
IP Address: 10.0.5.12 (change web01 address to 10.0.5.20)
Default Gateway: 10.0.5.2
DNS: 10.0.5.5
changing hostname. it is different on Ubuntu Cloud
- in
/etc/cloud/cloud.cfg
:
preserve_hostname: true
hostname: docker01-charlotte (add this line under)
fqdn: docker01-charlotte.charlotte.local (add this line under)
- change hostname for 127.0.1.1 in
/etc/hosts
file
- finally,
sudo hostnamectl hostname docker01-charlotte
- update DNS records on mgmt01 (remember to change web01 record too)
docker installation
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04
update and install prerequisite packages, this will let apt use packages over HTTPS
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
add the GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add docker repo to APT sources
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
validate installation is from docker repo. Notice that docker-ce is not installed, but the candidate for installation is from the Docker repository for Ubuntu 20.04 (focal).
apt-cache policy docker-ce | head
install docker
sudo apt install docker-ce
check status
sudo systemctl status docker
executing the docker command without sudo:
add user to the docker group, apply the new group membership, and logout/log back in
sudo usermod -aG docker charlotte
su - charlotte
using docker
downloading images
search for images availabe on Docker Hub
docker search <image-name>
download from Dockuer Hub
docker pull <image-name>
see installed images
docker images
docker-compose
"Docker Compose is a tool that allows you to run multi-container application environments based on definitions set in a YAML file."
download the 1.29.2 release and save the executable file at /usr/local/bin/docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
make docker-compose executable:
sudo chmod +x /usr/local/bin/docker-compose
verify installation
docker-compose --version
The following command pulls down an Arch Linux based docker image, invokes it in a container, and runs /bin/echo "HELLO SYS265 SNOWY DAYS '' before deleting the container.
docker run --rm archlinux:latest /bin/echo "HELLO SYS265 SNOWY DAYS"
docker run command syntax (example)
-
e.g. The following command will pull down the image, application and dependencies associated with a simple python web application.
docker run -d -P training/webapp python app.py
-
docker
: CLI for interacting with docker -
run
: create and start a new container -
-d
(or--detach
): the container runs in the background.- useful for non-interactive services, like webservers and databases
-
-P
(or--publich-all
): automatically publishes all exposed ports of the container to random host ports.- This allows external access to the services running in the container without having to specify port mappings manually.
-
training/webapp
: the docker image from which the container is created- In this case, an image named
webapp
that is located in thetraining
repository
- In this case, an image named
-
python
: command that will be executed inside the container once it starts -
app.py
: argument passed to the python command- the Python script
app.py
should be executed by the Python interpreter when the container starts.
- the Python script
-
docker run httpd
will automatically set up an apache web server in the container
to stop docker process
docker stop <container ID>
dockerized WordPress
https://github.com/docker/awesome-compose/tree/master/wordpress-mysql
- create a directory
docker-wp
- create compose.yml
Caution
Absolutely never use a tab in a docker-compose.yml file
services:
db:
# We use a mariadb image which supports both amd64 & arm64 architecture
image: mariadb:10.6.4-focal
# If you really want to use MySQL, uncomment the following line
#image: mysql:8.0.27
command: '--default-authentication-plugin=mysql_native_password'
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=somewordpress
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpress
expose:
- 3306
- 33060
wordpress:
image: wordpress:latest
ports:
- 80:80
restart: always
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=wordpress
- WORDPRESS_DB_NAME=wordpress
volumes:
db_data:
docker compose up -d
- wait...it's really that easy?
- yes
showing how containers use the same kernel as the host
- example: the following commands will:
- Print out the current version of Ubuntu on docker01.
cat /etc/lsb-release
- Print out the current version of docker01's linux kernel.
echo "Current Kernel is: $(uname -a)"
- Invoke a container of the stored Ubuntu image as well as an interactive bash command prompt, and print out the kernel being used by the Ubuntu container.
docker run -it archlinux /bin/uname -a
- Print out the current version of Ubuntu on docker01.
- as you can see, both the docker container(archlinux) and the host(docker01-charlotte) are using the same kernels