Skip to content

🎒 Containers Training: Hands-on introduction to Docker and CI/CD

License

Notifications You must be signed in to change notification settings

ArtiomL/hello-world

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

  hello, world

Build Status Docker Hub

  

Table of Contents

  

Description

Containers Training: Hands-on introduction to Docker and CI/CD.

  

Documentation

Start here and there.

Awesome images for security and Ansible.

  

Prerequisites

  • A 64-bit Debian / Ubuntu VM with Internet access (tested with Debian Stretch v9.3)
  • Version 3.10 or higher of the Linux kernel
  • Install the following tools: git, curl, vim (sudo apt-get update && sudo apt-get install -y curl git vim)
  • Take a snapshot of the virtual machine
  • GitHub account: https://github.com/join
  • Travis CI account: https://travis-ci.org (sign in with GitHub)
  • Docker Hub account: https://hub.docker.com
  • Heroku account: https://signup.heroku.com

  

Lab

Replace artioml with your GitHub and Docker Hub username (where applicable) after forking.

monolith

# Install Node.js
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
git clone https://github.com/ArtiomL/hello-world.git
cd hello-world
# Install dependencies
npm install
# Run
node index.js &
# Test and crash the app
curl http://127.0.0.1:8080/app
curl http://127.0.0.1:8080/kill
curl http://127.0.0.1:8080/app
# Restore snapshot

 

usermod

# Install Docker CE
curl -fsSL https://get.docker.com | sh
# Manage Docker as a non-root user
sudo usermod -aG docker $USER
# Log out and log back in so that your group membership is re-evaluated

 

build

git clone https://github.com/ArtiomL/hello-world.git
cd hello-world
# Build an image from a Dockerfile
docker build -t hello-world .
# List images
docker images

 

pull

# Pull an image or a repository from a registry (won't work with your own username, yet)
docker pull artioml/hello-world

 

run

docker run -dit -p 80:8080 artioml/hello-world
# List running containers
docker ps
# Display listening server sockets (note docker-proxy)
sudo netstat -lnp | grep ':::80'
# Test and crash the app
curl http://127.0.0.1/app
curl http://127.0.0.1/kill
curl http://127.0.0.1/app
# Run again and assign a name
docker run -dit -p 80:8080 --name dhw artioml/hello-world

 

logs

# Fetch the logs of a container (follow output)
docker logs -f dhw

 

exec

# Run a command (as root) in a running container
docker exec -it -u 0 dhw /bin/sh
# Update the app
sed -i 's/Node.js app/Node.js app v2.0/' index.js
exit

 

diff

# Inspect changes to files or directories on a container's filesystem
docker diff dhw

 

commit

# Create a new image from a container's changes
docker commit dhw artioml/hello-world:2.0

 

push

docker images
# Log in to a Docker registry
docker login -u <user> -p <password>
# Push an image to a registry
docker push artioml/hello-world:2.0

 

rm

# Remove a container
docker rm -f dhw
# Run (new version) and restart if the container exits with a non-zero exit status
docker run -dit -p 80:8080 --name dhw --restart on-failure artioml/hello-world:2.0
# Test and crash the app
curl http://127.0.0.1/app
curl http://127.0.0.1/kill
docker ps
curl http://127.0.0.1/app
docker logs -f dhw

 

top

# Display the running processes of a container (note UID)
docker top dhw

 

stats

# Display a live stream of container(s) resource usage statistics
docker stats dhw

 

kill

# Kill one or more running containers
docker kill dhw

 

-P, --publish-all

# Publish all exposed ports to random ports (multiple instances)
for i in {1..3}; do
	docker run -ditP artioml/hello-world:2.0
done
# List running containers and examine the ports
docker ps
# Display listening server sockets (note docker-proxy)
sudo netstat -lnp | grep ':::32'

  

Next