
Step 3: Add Docker's official GPG key:
$sudo install -m 0755 -d /etc/apt/keyrings
$sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
$sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
$echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
$sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$sudo apt-get update
hello-world image:
| Create Container | |
| $docker run -d --name xyz -p 9000:9000 image_name:tag | create container using image in detach mode, using port 9000 with define version, two ports defined, first port is container port and second port is host port, container is installed within host docker. |
| options used with run command | |
| --name | give a name to container |
| -it | open interactive terminal in the container |
| -d | running container in detached/background mode |
| -e | pass an environment variable |
| tag | version of image |
| -v | attach an external directory or device as a volume |
| --volume-from | sharing volumes between containers |
| -rm | delete a container on exit |
| -p | port mapping , container port with host port, ex -p 8080:80 (8080 is host port) |
| -P | capital P, used for automatic port mapping, container port mapped with host port greater than 30000 |
| --link | linking of containers |
| ctrl+p, ctrl+q | To come out of a running container without exit |
| List Containers | |
| $docker container ls or docker ps | list of running container |
| $docker container ls -a or ps -a | List of all containers including running and stopped container |
| docker container inspect cont_name / cont_id | To get detailed information about container |
| Start / Stop restart Container | |
| docker container start cont_name / cont_id | To start a stopped container |
| docker container stop cont_name / cont_id | To stop a started container |
| docker container stop $(docker ps -aq) | To stop all running containers |
| docker container restart cont_name / cont_id | To restart a container |
| docker container restart -t 10 cont_name / cont_id | To restart after 10 seconds |
| Delete Container | |
| docker container rm cont_name / cont_id | To delete a stopped container |
| docker container rm -f cont_name / cont_id | To delete a running container forcefully |
| docker container rm $(docker ps -aq) | To delete all stopped containers |
| docker container rm -f $(docker ps -aq) | To delete all running and stopped containers |
| Logs | |
| docker logs cont_name / cont_id | To get logs of a container |
| View open Ports | |
| docker port cont_name / cont_id | To view ports open on a container |
| Port Mapping | |
| #docker container run -it -p 3600:80 ubuntu /bin/bash | It will create container with port 3600 mapped |







| Image | |
| $docker image --help | help on image command |
| $docker pull Image_name:tag | Download a docker image |
| $docker search image_name | search a docker image |
| $docker list images or $docker image ls | List of all docker images |
| $docker image ls -a | List all images with space used |
| $docker image rm image_ID | Delete image |
| $docker image rm -f image_ID | Delete image forcefully |
| $docker push image_name or $docker push image_Id | Upload docker image |
| $docker rmi image_name | Delete a single docker image |
| $docker system prune -a | Delete all images |
| $docker commit container_name/container_id image_name | To create a docker image from container |
| $docker build -t image_name . | To create a docker image from dockerfile |
| $docker inspect image_name | get detailed information of image |
| $docker image save image_nae tarfile_name | To save an image as tar file |
| $docker image load tarfile | to extract an image from tar file |
| $docker container commit container_ID image_name | Create image with the running container. |








LAMP Architecture:
LAMP Architecture Lab:
code
docker pull jenkins/jenkins>docker run -p yourportNo:8080 --name=jenkins-master -d jenkins/jenkins)

Create a customize image from container running ubuntu and install git, create an image from container and uploaded into public registry.
Convert container into an image.



























br-5acce29343bc: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.10.1 netmask 255.255.255.0 broadcast 192.168.10.255
ether 5a:97:e9:a6:28:4c txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
br-f805e3ffe9cd: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.20.1 netmask 255.255.255.0 broadcast 192.168.20.255
ether 62:5c:0c:23:66:1d txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::7c22:87ff:fe6f:b8b9 prefixlen 64 scopeid 0x20<link>
ether 7e:22:87:6f:b8:b9 txqueuelen 0 (Ethernet)
RX packets 22 bytes 784 (784.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 54 bytes 7395 (7.3 KB)
TX errors 0 dropped 71 overruns 0 carrier 0 collisions 0








USING WEB-BASED LOGIN
i Info → To sign in with credentials on the command line, use 'docker login -u <username>'
Your one-time device confirmation code is: GLCQ-PSLW
Press ENTER to open your browser or submit your device code here: https://login.docker.com/activate
Waiting for authentication in the browser…
WARNING! Your credentials are stored unencrypted in '/root/.docker/config.json'.
Configure a credential helper to remove this warning. See
https://docs.docker.com/go/credential-store/
| Command | COPY | ADD |
| Copy single file | Yes | Yes |
| Copy Multiple Files | Yes | Yes |
| Copy Multiple Files in one Layer | Yes | Yes |
| Copy files from URL | No | Yes |
| Copy Archive Files (.gz .tar) | No | Yes |
FROM ubuntu:14.04
RUN mkdir aziz
COPY text*.txt /aziz/
FROM ubuntu:14.04
RUN mkdir aziz
ADD text*.txt /aziz/
FROM ubuntu:14.04
RUN mkdir aziz1
COPY text*.txt abc.txt data.txt /aziz1/
FROM ubuntu:14.04
RUN mkdir aziz1
ADD text*.txt abc.txt data.txt /aziz1/
FROM ubuntu:14.04
RUN mkdir aziz
ADD https://file-examples.com/wp-content/storage/2017/02/file-sample_1MB.doc /aziz/
FROM ubuntu:14.04
RUN mkdir aziz
ADD data.tar.gz /aziz/
| FROM nginx MAINTAINER aziz |
create a docker file and define code to create a ubunutu container, update repository and install git.
| FROM ubuntu MAINTAINER logiclabs RUN apt-get update RUN apt-get install -y git |
| FROM ubuntu MAINTAINER aziz RUN apt-get update RUN apt-get install -y git RUN apt-get install tree |

| FROM ubuntu MAINTAINER aziz RUN apt-get update && apt-get install -y git tree |
FROM openjdk:8u151-jdk-alpine3.7 (search alpine linux based with jdk image in docker hub)
EXPOSE 8080
ENV APP_HOME /usr/src/app (Defining an environment where APP_HOME is the varible for path /usr/src/app app folder will be created)
COPY target/secretsanta-0.0.1-SNAPSHOT.jar $APP_HOME/app.jar (copying contents of secretsanta-0.0.1xxx.jar to app.jar)
WORKDIR $APP_HOME (work directory will be /usr/src/app)
ENTRYPOINT exec java -jar app.jar (or CMD ["java","-jar","app.jar"] (as soon as container is created the command will run)








# Stage-1 Build
FROM maven as maven
RUN mkdir /usr/src/mymaven
WORKDIR /usr/src/mymaven
COPY . .
RUN mvn install -DskipTests
# Stage-2 Deploy
FROM tomcat
WORKDIR webapps
COPY --from=maven /usr/src/mymaven/target/java-tomcat-maven-example.war .
RUN rm -rf ROOT && mv java-tomcat-maven-example.war ROOT.war
FROM node:12.13.0-alpine as build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx
EXPOSE 3000
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
COPY --from=build /app/build /usr/share/nginx/html


/var/data directory on the host machine to the /data directory in the container.mydata and use it to persist data for a web application container.















version: '3'
services:
mongodb:
image: mongo
container_name: mongodb
networks:
- mongo-network
ports:
- "27017:27017"
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=123
mongo-express:
image: mongo-express
container_name: mongo-express
networks:
- mongo-network
ports:
- "8081:8081"
environment:
- ME_CONFIG_MONGODB_SERVER=mongodb
- ME_CONFIG_MONGODB_ADMINUSERNAME=admin
- ME_CONFIG_MONGODB_ADMINPASSWORD=123
- ME_CONFIG_BASICAUTH_USERNAME=admin
- ME_CONFIG_BASICAUTH_PASSWORD=123
networks:
mongo-network:
driver: bridge
docker-compose.yml file in your terminal and run:
mongodb_data, ensuring that it persists even if you stop and remove the containers.Ctrl+C in the terminal where they are running, and then run:| --- version: '3' services: mytomee: image: tomee ports: - 5050:8080 ... |
|
--- mywordpress: |
|
--- |
L: Linux
A: Appliction Development( php)
M: Backend Database (MySQL)
p: Application Server (Apache Tomcat)
Linux is already installed on AWS instance or docker host, install docker and docker compose on docker host, create a yaml file to deploy php, mysql and apache tomcat.
#vim lamp.yml
|
--- services: apache:
|
|
--- qaserver:
|

FROM openjdk:8u151-jdk-alpine3.7 (This image form alpine includes linux ubuntu and light weighted, search alpine ubuntu with jdk)
EXPOSE 8080
ENV APP_HOME /usr/src/app (variable APP_HOME defining)
COPY target/secretsanta-0.0.1-SNAPSHOT.jar $APP_HOME/app.jar (copying secretsanta-0.0.1xxx to app.jar)
WORKDIR $APP_HOME (work directory)
ENTRYPOINT exec java -jar app.jar (CMD also can be used) or you can also write ["java","-jar","app.jar"]




FROM adoptopenjdk/openjdk11
EXPOSE 8080
ENV APP_HOME /usr/src/app
COPY target/*.jar $APP_HOME/app.jar
WORKDIR $APP_HOME
CMD ["java", "-jar", "app.jar"]

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-05/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin
kubectl version --short --client
sudo apt install unzip
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
eksctl version
sudo apt update
sudo apt install fontconfig openjdk-17-jre
java -version
sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt-get update
sudo apt-get install jenkins
sudo systemctl enable jenkins
sudo systemctl start jenkins
sudo systemctl status jenkins
http://public-ip:8080/
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
curl -fsSL get.docker.com | /bin/bash
sudo usermod -aG docker jenkins
sudo systemctl restart jenkins
sudo docker version
sudo apt install unzip
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version
curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-05/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin
kubectl version --short --client
Execute below commands in Jenkins Server and paste kube config file
cd/var/lib/jenkins<br/> sudo mkdir .kube
$ sudo vi .kube/config
Execute below commands in Jenkins Server and paste kube config file for ubuntu user to check EKS Cluster info
cd <br/> ls -la
$ sudo vi .kube/config
check eks nodes
$ kubectl get nodes
version: '3'
services:
mongodb:
image: mongo
container_name: mongodb
networks:
- mongo-network
ports:
- "27017:27017"
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=123
mongo-express:
image: mongo-express
container_name: mongo-express
networks:
- mongo-network
ports:
- "8081:8081"
environment:
- ME_CONFIG_MONGODB_SERVER=mongodb
- ME_CONFIG_MONGODB_ADMINUSERNAME=admin
- ME_CONFIG_MONGODB_ADMINPASSWORD=123
- ME_CONFIG_BASICAUTH_USERNAME=admin
- ME_CONFIG_BASICAUTH_PASSWORD=123
networks:
mongo-network:
driver: bridge
docker-compose.yml file in your terminal and run:
mongodb_data, ensuring that it persists even if you stop and remove the containers.Ctrl+C in the terminal where they are running, and then run: