Fading Coder

One Final Commit for the Last Sprint

Home > Tech > Content

Installing Docker on CentOS 7 and Essential Command Usage

Tech 2

Docker Installation on CentOS 7

System Preparation

Update the package manager:

sudo yum update -y

Install required dependencies:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

Add the Docker repository:

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Install containerd:

sudo dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

Install Docker Engine:

sudo yum install docker-ce docker-ce-cli -y

Start Docker service:

sudo systemctl start docker

Configure Docker to start on boot:

sudo systemctl enable docker

Docker Service Management

Service Control Commands

Check service status:

sudo systemctl status docker

Stop Docker service:

sudo systemctl stop docker

Restart Docker service:

sudo systemctl restart docker

Image Operations

Image Management

List local images:

docker image ls

Search for images in registry:

docker search ubuntu

Pull an image:

docker pull ubuntu:20.04

Remove an image:

docker rmi ubuntu:20.04

Container Operations

Container Management

List all containers:

docker ps -a

Create and start a container:

docker run -it --name mycontainer ubuntu:20.04 /bin/bash

Common run parameters:

  • -i: Interactive mode
  • -t: Allocate pseudo-TTY
  • -d: Detached (background) mode
  • --name: Assign container name

Enter a running container:

docker exec -it mycontainer /bin/bash

Stop a container:

docker stop mycontainer

Start a stoped container:

docker start mycontainer

Remove a container:

docker rm mycontainer

Inspect container details:

docker inspect mycontainer

View container logs:

docker logs mycontainer

Volume Management

Data Volumes

Create container with volume mount:

docker run -it --name data_container -v /host/path:/container/path ubuntu:20.04 /bin/bash

Create data volume container:

docker run -it --name volume_container -v /shared_data ubuntu:20.04 /bin/bash

Mount volumes from another container:

docker run -it --name app_container --volumes-from volume_container ubuntu:20.04 /bin/bash

Application Deployment

MySQL Deployment

Pull MySQL image:

docker pull mysql:8.0

Create MySQL container:

docker run -d \
--name mysql_server \
-p 3306:3306 \
-v /data/mysql/conf:/etc/mysql/conf.d \
-v /data/mysql/logs:/var/log/mysql \
-v /data/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=secure_password \
mysql:8.0

Tomcat Deployment

Pull Tomcat image:

docker pull tomcat:9.0

Create Tomcat container:

docker run -d \
--name tomcat_server \
-p 8080:8080 \
-v /data/tomcat/webapps:/usr/local/tomcat/webapps \
tomcat:9.0

Nginx Deployment

Pull Nginx image:

docker pull nginx:latest

Create Nginx container:

docker run -d \
--name nginx_server \
-p 80:80 \
-v /data/nginx/conf:/etc/nginx \
-v /data/nginx/logs:/var/log/nginx \
-v /data/nginx/html:/usr/share/nginx/html \
nginx:latest

Redis Deployment

Pull Redis image:

docker pull redis:6.0

Create Redis container:

docker run -d \
--name redis_server \
-p 6379:6379 \
-v /data/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /data/redis/data:/data \
redis:6.0 redis-server /usr/local/etc/redis/redis.conf

Dockerfile Operations

Image Creation

Commit container to image:

docker commit container_id myimage:1.0

Save image to file:

docker save -o myimage.tar myimage:1.0

Load image from file:

docker load -i myimage.tar

Build image from Dockerfile:

docker build -t myapp:1.0 -f Dockerfile .

Spring Boot Deployement

Sample Dockerfile for Spring Boot:

FROM openjdk:11-jre-slim
LABEL maintainer="dev@example.com"
COPY target/myapp.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]

Build and run:

docker build -t springboot-app:1.0 .
docker run -d -p 9000:8080 springboot-app:1.0

Docker Compose

Installation

Installl 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
sudo chmod +x /usr/local/bin/docker-compose

Compose Configuration

Sample docker-compose.yml:

version: '3.8'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
    depends_on:
      - app
  
  app:
    image: springboot-app:1.0
    expose:
      - "8080"

Start services:

docker-compose up -d

Private Registry

Registry Setup

Pull registry image:

docker pull registry:2

Start private registry:

docker run -d \
--name private_registry \
-p 5000:5000 \
-v /data/registry:/var/lib/registry \
registry:2

Configure Docker daemon:

{
  "insecure-registries": ["registry_host:5000"]
}

Restart Docker:

sudo systemctl restart docker

Image Management

Tag image for private registry:

docker tag myimage:1.0 registry_host:5000/myimage:1.0

Push to private registry:

docker push registry_host:5000/myimage:1.0

Pull from private registry:

docker pull registry_host:5000/myimage:1.0

Docker Removal

Uninstallation Steps

Stop Docker service:

sudo systemctl stop docker

Remove Docker packages:

sudo yum remove docker-ce docker-ce-cli containerd.io -y

Remove Docker data:

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
Tags: dockercentos

Related Articles

Understanding Strong and Weak References in Java

Strong References Strong reference are the most prevalent type of object referencing in Java. When an object has a strong reference pointing to it, the garbage collector will not reclaim its memory. F...

Comprehensive Guide to SSTI Explained with Payload Bypass Techniques

Introduction Server-Side Template Injection (SSTI) is a vulnerability in web applications where user input is improper handled within the template engine and executed on the server. This exploit can r...

Implement Image Upload Functionality for Django Integrated TinyMCE Editor

Django’s Admin panel is highly user-friendly, and pairing it with TinyMCE, an effective rich text editor, simplifies content management significantly. Combining the two is particular useful for bloggi...

Leave a Comment

Anonymous

◎Feel free to join the discussion and share your thoughts.