Install docker ubuntu 18.04

Docker er en applikation’s framework som gør det lettere at styre programmers processer i containers.  Containers lader dig køre programmer i en ressource isoleret box. Det er som en virtuel maskine som du sikkert kender. Containere er mere flytbare og mindre ressource krævende, i forhold til en virtuel maskine. Men kræver mere af den host som det køre på.

For en detaljeret beskrivelse af Docker container. Check The Docer Ecosystem.

I denne guide vil jeg beskrive hvordan du installere Docker og bruge Docker. Vi skal installere Docker og arbejde med containers og images. Og push et image til en Docker server.

Du skal bruge følgende hardware.

  En Ubuntu 18.04 server med sudo og firewall softwaren installeret.     
  En konti på Docer Hub. Hvis du vil push et image til Docker Hub. Som vist i step
  7 og 8

 

Step 1 – installere Docker på server.

Docker installation pakken er klar i Ubuntu rep. men det er ikke den nyeste version. Så for at være sikker på vi bruger den nyeste version, installere vi Docker fra den officielle Docker rep. For at gøre det skal du addere en source mere til apt. Add GPG key fra Docker for at sikre download er valid til at installere på maskinen.

$ sudo apt update
$ sudo apt install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
$ sudo apt update
$ apt-cache policy docker-ce
$ sudo apt install docker-ce
$ sudo systemctl status docker

Husk lige at ændre navn på din release. Eks er med Ubuntu 18.04. Makeret med fed her.

cosmic or Ubuntu 18.10

bionic for Ubuntu 18.04 LTS

xenial for Ubuntu 16.04 LTS

trusty for Ubuntu 14.04 LTS

Med systemctl status docker. Skulle der gerne komme et output lige som vist her.

$ systemctl status docker

Output.

docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2018-07-05 15:08:39 UTC; 2min 55s ago Docs: https://docs.docker.com Main PID: 10096 (dockerd) Tasks: 16 CGroup: /system.slice/docker.service ├─10096 /usr/bin/dockerd -H fd:// └─10113 docker-containerd --config /var/run/docker/containerd/containerd.toml 

Hvis docker ikke er installeret rigtigt få du en fejl som denne her.

Output.

Unit docker.service could not be found.

 

Step 2 – Gør det muligt at udføre Docker kommandoer Uden brug af sudo.

Default så kan Docker kommandoer kun køres som root brugeren. Eller en bruger som er i samme gruppe som docker. docker gruppen er automatisk oprettet, når du installere Docker. Hvis du prøver at køre docker kommandoer uden sudo eller gruppe rettigheder få du denne fejl.

Output

docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. See 'docker run --help'. 

Hvis du ikke gider at skrive sudo før hver Docker kommando kan du tilføje dig til Docker gruppen med denne kommando.

$ sudo usermod -aG docker ${USER} 

Før det virker skal du lave en logout/login eller skrive

$ su - ${USER} 

Det vil gøre at den spørger efter dit password igen for at forsætte. Du kan checke om brugeren er tilført docker gruppen med.

$ id -nG 

sammy sudo docker

Hvis du har brug for andre bruger som også skal bruge Docer. Kan du tilføje dem gruppen med denne kommando.

$ sudo usermod -aG docker brugernavn 

I resten af denne guide går vi ud fra at brugeren er med i gruppen docker. Eller brug sudo.

Så lad os kikke mere på Docker kommando.

Step 3 – Brug af Docker kommandoer.

Når du bruger docker kommandoer er det tit en kæde af parametre og kommando efter fuldt af argumenter. Som vist her.

$ docker [optioner] [kommando] [argumenter]

For at se alle sub kommandoer skriver du.

$ docker 

Output

attach Attach local standard input, output, and error streams to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes to files or directories on a container's filesystem events Get real time events from the server exec Run a command in a running container export Export a container's filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on Docker objects kill Kill one or more running containers load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart one or more containers rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive (streamed to STDOUT by default) search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers version Show the Docker version information wait Block until one or more containers stop, then print their exit codes 

 

Step 4 – Arbejde med Docker images.

Docker containers er bygget fra Docker images. Default henter den dem fra Docker Hub. En Docker registeret manager Af Docker, firmaet bag Docker projektet. Alle kan hoste sin Docker images på Docker Hub. Så du vil se at de fleste imagers er hosted der.

For at check om du kan hente images fra Docker Hub, Skriv.

$ docker run hello-world

output vil vise om docker virker på dit system.

Output

Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 9bb5a5d4561a: Pull complete Digest: sha256:3e1764d0f546ceac4565547df2ac4907fe46f007ea229fd7ef2718514bcec35d Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. ... 

Docker kan ikke funde hello-world image lokalt på serveren. Så den henter det fra Docker Hub. som er det default sted docker vil bruge. Når det er downloaded, vil docker oprette en kontaner fra det image og køre den applikation som er i kontaneren. Og vise den besked som kommer som output.

Du kan søge efter images på Docker Hub ved brug af Docker kommandoen med search subkommando. For eksempel her søger vi efter et Ubuntu image.

$ docker search ubuntu 

Dette script vil søge Docker Hub efter navnet og give dig en liste over images som navnet her ‘ubuntu’ ind går i.

Output

NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating sys… 7917 [OK] 
dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC 193 [OK] 
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 156 [OK] 
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 93 [OK] 
ubuntu-upstart Upstart is an event-based replacement for th… 87 [OK] 
neurodebian NeuroDebian provides neuroscience research s… 50 [OK] 
ubuntu-debootstrap debootstrap --variant=minbase --components=m… 38 [OK] 
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 36 [OK] 
nuagebec/ubuntu Simple always updated Ubuntu docker images w… 23 [OK] 
tutum/ubuntu Simple Ubuntu docker images with SSH access 18 i386/ubuntu Ubuntu is a Debian-based Linux operating sys… 13 ppc64le/ubuntu Ubuntu is a Debian-based Linux operating sys… 12 1and1internet/ubuntu-16-apache-php-7.0 ubuntu-16-apache-php-7.0 10 [OK] 
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mariadb-10 ubuntu-16-nginx-php-phpmyadmin-mariadb-10 6 [OK] 
eclipse/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 6 [OK] 
codenvy/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 4 [OK] 
darksheer/ubuntu Base Ubuntu Image -- Updated hourly 4 [OK] 
1and1internet/ubuntu-16-apache ubuntu-16-apache 3 [OK] 
1and1internet/ubuntu-16-nginx-php-5.6-wordpress-4 ubuntu-16-nginx-php-5.6-wordpress-4 3 [OK] 
1and1internet/ubuntu-16-sshd ubuntu-16-sshd 1 [OK] 
pivotaldata/ubuntu A quick freshening-up of the base Ubuntu doc… 1 1and1internet/ubuntu-16-healthcheck ubuntu-16-healthcheck 0 [OK] 
pivotaldata/ubuntu-gpdb-dev Ubuntu images for GPDB development 0 smartentry/ubuntu ubuntu with smartentry 0 [OK] 
ossobv/ubuntu ... 

Hvis der er et OK I den OFFICIAL kolone, vil det indekere at det image er supported af det firma som står bag. Hvis du har fundet et image som du gerne vil bruge, kan du download det med at bruge pull kommandoen. som vist her.

$ docker pull ubuntu 

Du vil se følgende.

Output

Using default tag: latest latest: Pulling from library/ubuntu 6b98dfc16071: Pull complete 4001a1209541: Pull complete 6319fc68c576: Pull complete b24603670dc3: Pull complete 97f170c87c6f: Pull complete Digest: sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d Status: Downloaded newer image for ubuntu:latest 

Du kan nu køre en kontaner med brug af det image du lige har downloaded med run subkommando. Som du så før hvis images ikke er downloaded vil Docker først downloade den, og derefter køre den kontainer som bruger den.

For at se hvilken images du har downloaded til din komputer skriv.

$ docker images

Dit output vil være noget i den her retning.

Output

REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 113a43faa138 4 weeks ago 81.2MB hello-world latest e38bc07ac18e 2 months ago 1.85kB

Step 5 – Kør en Docker Container

hallo-world container vi brugte før var et eksemple på hvordan den køre og stopper efter en exit besked. Faktisk kan de bruges til rigtig mange, og er meget som virtual maskiner. Men bruger ikke så mange resurser.

Her køre vi en container og giver den -i og -t som giver dig en interaktiv shell ind i containeren. Din command prompt skifter da du nu har adgang til shell i containeren.

$ docker run -it ubuntu 

Sådan kan din prompt skifte til for at vise du nu er inden i containeren. Hvis du kikker efter kan du se at din prompt starter med nogle nummer. Disse nummer er container id, som du skal bruge når du sletter den igen.

$ [email protected]:/# 

Nu da vi har fuld root adgang i containernen kan vi jo lige køre en update af package databasen inden i containeren.

$ apt update

Og du har opdateret containerne klar til at installere programer/script som containeren skal køre.

Et eksemple på instalation af programmer ku være nodejs.

$ apt install nodejs 

Du kan se versionen af noden med

$ node -v 

Og du vil se version nummeret i din terminal. Alle ændringer du laver i din container findes kun i containeren.

Output

v8.10.0

For at exit en container skal du skrive exit

$ exit

Og du har exit den container og er tilbage i din ejen shell igen.

Step 6 – Styre Docker Containers

Efter du har brugt Docker et stykke tid, har du mange inkaktive og aktive containers på din server. for at se en oversigt over de aktiv bruges kommandoen ps.

$ docker ps

Output

CONTAINER ID IMAGE COMMAND CREATED 

I denne guide startet vi 2 container en med hello-world og en anden med ubuntu image. Ingen af dem køre mere men er installeret på systemet. For at vise aktiv og ikke aktive bruges et argument -a for alle

$ docker ps -a

d9b100f2f636 ubuntu "/bin/bash" About an hour ago Exited (0) 8 minutes ago sharp_volhard 01c950718166 hello-world "/hello" About an hour ago Exited (0) About an hour ago festive_williams

For at se den sidste du har oprettet bruges -l argument.

$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d9b100f2f636 ubuntu "/bin/bash" About an hour ago Exited (0) 10 minutes ago sharp_volhard

For at statue en container brug docker start, med container ID eller navn som argument. Lad os starte med ubuntu ID d9b100f2f636

$ docker start d9b100f2f636 

Ubuntu containeren vil starte. og husk du kan bruge docker ps for at se status.

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d9b100f2f636 ubuntu "/bin/bash" About an hour ago Up 8 seconds sharp_volhard

For at stoppe en container brug docker stop med container ID eller navn som argument.

$ docker stop sharp_volhard 

Do kan slette en container med docker rm igen med container ID eller navn som argument.

$ docker rm sharp_volhard 

Step 7  – Update ændringer til et docker image.

Når du starter et Docker-image, kan du oprette, ændre og slette filer, ligesom du kan med en virtuel maskine. De ændringer, du foretager, gælder kun for den pågældende container. Du kan starte og stoppe det, men når du ødelægger det med kommandoen docker rm, vil ændringerne gå tabt for godt Do kan starte en ny container og give det et navn med argument –name. Du kan også bruge –rm som gør at containeren sletter sig selv når den stoppes.

Containers kan lave om til images som du kan bruge til at lave nye containere med. Lad os se på hvordan det virker.

Efter du har installeret Node.js inden i Ubuntu containeren, har du en container som køre et image men du har jo ændret containeren efter du installeret node.js men du vil samtidig gerne gemme dette som et ny base image som du kan bruge senere.

Du kan få Docker til at lave et image med denne kommando.Det bliver nu en ny instance type som kan installeres.

$ docker commit -m "Hvad har du ændret" -a "Ændret af navn" container_id repository/new_image_name 

-m i commit hjælper dig og andre med at huske hvad den indenholder.

-a er for at beskrive brugeren som har ændret det.

eks.

$ docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs 

Når du gemmer et image med commit bliver det kun gemt lokalt på din disk. Senere skal vi se på hvordan du uploader det til Docker Hub. Så andre kan få glæde at dit image.

For at se en liste med image skal du bruge parameteren images som vist her.

$ docker images

Output

REPOSITORY TAG IMAGE ID CREATED SIZE sammy/ubuntu-nodejs latest 7c1f35226ca6 7 seconds ago 179MB ubuntu latest 113a43faa138 4 weeks ago 81.2MB hello-world latest e38bc07ac18e 2 months ago 1.85kB

Du kan også oprette images fra Dockerfile, så er der mulighed for at automatisere processerne, men det er kommer vi ike ind på i denne post.

Nu er dit images klar til at blive delt. Så andre kan bruge det.

 

Step 8 — Upload Docker Images til Docker.

Det næste step, er at share dit nye image med andre som kunne få glæde af dit arbejde. For at gøre det muligt at dele din ide er at du har en konti på Docker Hub eller nogle af de andre Docker sites. Denne del af guiden viser jeg hvordan du uploader dit image til Docker Hub.

For at upload dit image skal du login på Docker Hub med denne kommando.

$ docker login -u docker-registry-username 

Hvis dit registeret bruger navn på Docker Hub er et andet en det navn/account du bruger kan du få Docker Hub til at forstå det.

$ docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs 

For at uploade dit egen image skal du bruge denne kommando.

$ docker push docker-registry-username/docker-image-name 

For at uploade ubuntu-nodejs som vi oprettet skal kommandoen være denne

$ docker push sammy/ubuntu-nodejs 

Denne process kan godt tage noget tid, når den er færdig vil den komme med et output som dette.

Output

The push refers to a repository [docker.io/sammy/ubuntu-nodejs] e3fbbfb44187: Pushed 5f70bf18a086: Pushed a3b5c80a4eba: Pushed 7f18b442972b: Pushed 3ce512daaf78: Pushed 7aae4540b42d: Pushed ...

Efter du har uploaded dit image kan du se det på Docker Hub som vist her.

New Docker image listing on Docker Hub

Hvis dit upload ikke virker i docker vil du få et output som dette.

Output

The push refers to a repository [docker.io/sammy/ubuntu-nodejs] e3fbbfb44187:
 Preparing 5f70bf18a086: 
 Preparing a3b5c80a4eba: 
 Preparing 7f18b442972b: 
 Preparing 3ce512daaf78: 
 Preparing 7aae4540b42d:
Waiting unauthorized: authentication required 

0