Difference between revisions of "Docker"

From wikieduonline
Jump to navigation Jump to search
 
(149 intermediate revisions by 4 users not shown)
Line 1: Line 1:
[[w:Docker_(software)|Docker]] is a software available since 2013 that among other features performs operating-system-level virtualization also known as [[containers|containerization]]
+
[[wikipedia:Docker_(software)|Docker]] is a software utility to pack, ship and run any [[container]]s application available since March [[2013]].
 +
* [[Google trends]]: https://trends.google.com/trends/explore?date=all&q=Docker
 +
* <code>[[docker --help]]</code>
  
 
== Features ==
 
== Features ==
 
Docker offer the following features:
 
Docker offer the following features:
* Package an application and its dependencies in a virtual container that can run on any Linux server ([[/docker images/]])
+
* Package an application and its dependencies in a virtual container that can run on any Linux server ([[docker images]])
* Pull or push [[/docker images/]] to a [[container repository]]/container registry (<code>[[docker pull]]</code><ref>https://docs.docker.com/engine/reference/commandline/pull/</ref>, <code>[[docker push]]</code>). By default docker hub but you can specify any other registry.
+
* Pull or push [[docker images]] to a [[container repository]]/[[container registry]] (<code>[[docker pull]]</code><ref>https://docs.docker.com/engine/reference/commandline/pull/</ref>, <code>[[docker push]]</code>). By default docker hub but you can specify any other registry.
  
 
== Installing Docker ==
 
== Installing Docker ==
Line 10: Line 12:
  
 
On macOS you can follow official documentation https://docs.docker.com/docker-for-mac/install/ which requires to create and account to download installer. You can also try:
 
On macOS you can follow official documentation https://docs.docker.com/docker-for-mac/install/ which requires to create and account to download installer. You can also try:
<code>brew cask install docker</code> or try to follow https://pilsniak.com/how-to-install-docker-on-mac-os-using-brew/ instructions:
+
<code>[[brew cask install docker]]</code> or try to follow https://pilsniak.com/how-to-install-docker-on-mac-os-using-brew/ instructions:
 
: <code>brew install docker [[docker-compose]] docker-machine</code>(to install docker and docker-compose)
 
: <code>brew install docker [[docker-compose]] docker-machine</code>(to install docker and docker-compose)
 
: <code>brew cask install virtualbox</code>
 
: <code>brew cask install virtualbox</code>
Line 17: Line 19:
 
: <code>docker-machine env default</code>
 
: <code>docker-machine env default</code>
 
: <code>eval $(docker-machine env default)</code>
 
: <code>eval $(docker-machine env default)</code>
: <code>[[/docker run/]] hello-world</code> (will pull hello-world image and run it on docker)
+
: <code>[[docker run]] hello-world</code> (will pull hello-world image and run it on docker)
  
On Ubuntu: <code>[[snap]] install docker</code>
+
=== Ubuntu ===
 +
* <code>[[apt install docker.io]]</code>
 +
<code>[[snap]] install docker</code> (officially provided by [[Canonical]])
  
 
=== Binaries ===
 
=== Binaries ===
Following binaries will be installed: <code>docker-init</code>, <code>[[/docker-proxy/]]</code>, <code>docker</code> and <code>dockerd</code>
+
Following binaries will be installed: <code>[[docker-init]]</code>, <code>[[docker-proxy]]</code>, <code>docker</code> and <code>[[dockerd]]</code>
  
 
=== Verifying Docker installation ===
 
=== Verifying Docker installation ===
 
Once installed the Docker [[Daemon (computing)|daemon]], called <code>"dockerd"</code> should be running.  
 
Once installed the Docker [[Daemon (computing)|daemon]], called <code>"dockerd"</code> should be running.  
You can also run <code>[[/docker run/]] hello-world</code> to verify docker correct installation.
+
You can also run <code>[[docker run]] hello-world</code> to verify docker correct installation.
  
 
=== Configuration files ===
 
=== Configuration files ===
* Ubuntu: <code>/etc/docker/daemon.json</code>
+
Ubuntu:
 +
* <code>[[/etc/docker/daemon.json]]</code> (Ref: https://docs.docker.com/engine/reference/commandline/dockerd/)
 +
* <code>/etc/docker/[[key.json]]</code>
  
== Docker Releases  ([[/Docker Engine release notes/]]) ==
+
=== Directories ===
 +
[[/var/lib/docker/]] (The Docker daemon was explicitly designed to have exclusive access to)<ref>https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/</ref>
 +
 
 +
== Docker Releases  ([[Docker Engine release notes]]) ==
 
* https://docs.docker.com/engine/release-notes/
 
* https://docs.docker.com/engine/release-notes/
 
* https://github.com/docker/docker-ce/releases
 
* https://github.com/docker/docker-ce/releases
Use: <code>[[/docker version/]]</code><ref>https://docs.docker.com/engine/reference/commandline/version/</ref> to check your version.
+
Use: <code>[[docker version]]</code><ref>https://docs.docker.com/engine/reference/commandline/version/</ref> to check your version.
 
You can download Docker CE source code from GitHub<ref>https://github.com/docker/docker-ce/releases</ref>.
 
You can download Docker CE source code from GitHub<ref>https://github.com/docker/docker-ce/releases</ref>.
  
Line 42: Line 51:
 
Some typical task using containers:
 
Some typical task using containers:
  
=== Docker verification commands ===
+
== Docker verification commands ==
* Verify correct installation: <code>[[/docker run/]] hello-world</code>
+
* Verify correct installation: <code>[[docker run]] hello-world</code>
 
You will see some message similar to this one:
 
You will see some message similar to this one:
 
<pre>
 
<pre>
Line 74: Line 83:
 
</pre>
 
</pre>
  
=== Docker image and container creation ===
+
== Docker image and container creation ==
* Create a new docker image base on ''alpine'' linux distribution and login into the new container: <code>[[/docker run/]] -it alpine sh</code>
+
* Create a new [[docker image]] base on ''alpine'' linux distribution and login into the new container: <code>[[docker run]] -it alpine sh</code>
* Create a new docker image: <code>docker build</code>
+
* Create a new docker image: <code>[[docker build]]</code>
** Create a new docker image by creating a new text file with instructions, usually called <code>[[/Dockerfile/]]</code><ref>https://docs.docker.com/engine/reference/builder/</ref>: <code>docker build -f /path/to/a/Dockerfile .</code>
+
** Create a new docker image by creating a new text file with instructions, usually called <code>[[Dockerfile]]</code><ref>https://docs.docker.com/engine/reference/builder/</ref>: <code>docker build -f /path/to/a/Dockerfile .</code>
* Create a container: <code>docker create</code>
+
* Create a container: <code>[[docker create]]</code>
 
* Generate a mediawiki:1.27 image: <code>docker build --tag mediawiki:1.27  .</code> (you can use -t or --tag)
 
* Generate a mediawiki:1.27 image: <code>docker build --tag mediawiki:1.27  .</code> (you can use -t or --tag)
 
* Execute or run a container based on mediawiki:1.27 image: <code>docker run --name wikiFGA -p 0.0.0.0:9090:80 -d mediawiki:1.27</code>
 
* Execute or run a container based on mediawiki:1.27 image: <code>docker run --name wikiFGA -p 0.0.0.0:9090:80 -d mediawiki:1.27</code>
  
=== Docker Container Operation ===
+
== Docker Container Operation ==
* '''Start''' an existing container: <code>[[/docker start/]] CONTAINER_ID OR CONTAINER_NAME</code>. See also [[/docker run/]] and differences<ref>https://stackoverflow.com/questions/34782678/difference-between-running-and-starting-a-docker-container</ref>.
+
* '''Start''' an existing container: <code>[[docker start]] CONTAINER_ID OR CONTAINER_NAME</code>. See also <code>[[docker run]]</code> and differences<ref>https://stackoverflow.com/questions/34782678/difference-between-running-and-starting-a-docker-container</ref> and <code>[[docker container start]]</code>
 
* '''Stop''' an running container: <code>docker stop container_id</code>
 
* '''Stop''' an running container: <code>docker stop container_id</code>
  
 
* '''Show''' only running containers:
 
* '''Show''' only running containers:
** <code>docker container ls</code> <ref>https://docs.docker.com/engine/reference/commandline/container_ls/</ref> or <code>[[/docker ps/]]</code> <ref>https://docs.docker.com/engine/reference/commandline/ps/</ref>. (<code>docker container ls</code>) introduced in 2017 in [[DevOps/Docker/Docker Engine release notes|Docker 1.13]]<ref>https://www.docker.com/blog/whats-new-in-docker-1-13/</ref> (There is no difference between both commands)<ref>https://stackoverflow.com/a/45254760</ref>  
+
** <code>[[docker container ls]]</code> <ref>https://docs.docker.com/engine/reference/commandline/container_ls/</ref> or <code>[[docker ps]]</code> <ref>https://docs.docker.com/engine/reference/commandline/ps/</ref>. (<code>[[docker container]] ls</code>) introduced in 2017 in [[Docker 1.13]]<ref>https://www.docker.com/blog/whats-new-in-docker-1-13/</ref> (There is no difference between both commands)<ref>https://stackoverflow.com/a/45254760</ref>  
  
 
* '''Show''' containers (running or not):  
 
* '''Show''' containers (running or not):  
** <code>docker ps -a </code>: https://docs.docker.com/engine/reference/commandline/ps/
+
** <code>[[docker ps]] -a </code>: https://docs.docker.com/engine/reference/commandline/ps/
 
** <code>docker container ls -a </code>. See also <code>[[docker-compose]] ps</code>
 
** <code>docker container ls -a </code>. See also <code>[[docker-compose]] ps</code>
  
* '''Login/Connect''' into a running container:
+
* '''Login'''/[[Connect into a running container]]:
** <code>[[/docker exec/]]<ref>https://docs.docker.com/engine/reference/commandline/exec/</ref> -it <my_container_name> bash</code>
+
** <code>[[docker exec]]<ref>https://docs.docker.com/engine/reference/commandline/exec/</ref> -it <my_container_name> bash</code>
 
** <code>docker exec -it <my_container_name> sh</code>
 
** <code>docker exec -it <my_container_name> sh</code>
 +
** <code>[[docker run]] -it --user USER_NAME CONTAINER_NAME</code>
  
 
*  '''Start''' stopped containers: <code>docker start $(docker ps -a -q -f status=exited)</code>
 
*  '''Start''' stopped containers: <code>docker start $(docker ps -a -q -f status=exited)</code>
* '''Restart''' all containers: <code>docker restart $(docker ps -aq)</code> previously <code>docker restart $(docker ps -q)</code><code>-a all -q quiet</code><ref>https://stackoverflow.com/questions/38221463/command-for-restarting-all-running-docker-containers</ref>
+
* '''Restart''' all containers: <code>[[docker restart]] $(docker ps -aq)</code> previously <code>docker restart $(docker ps -q)</code><code>-a all -q quiet</code><ref>https://stackoverflow.com/questions/38221463/command-for-restarting-all-running-docker-containers</ref>
 +
 
 +
* [[Start configuration behavior and restart policy]]<ref>https://docs.docker.com/config/containers/start-containers-automatically/#use-a-restart-policy</ref>  
  
* [[/Start configuration behavior and restart policy/]]<ref>https://docs.docker.com/config/containers/start-containers-automatically/#use-a-restart-policy</ref>  
+
* <code>[[docker container update]]</code>
  
 +
* <code>[[docker kill]]</code>
  
See also: [[docker compose]] and <code>docker stack</code>
+
See also: <code>[[docker compose]]</code> and <code>[[docker stack]]</code>
  
=== Docker images management ===
+
== [[Docker images management]] ==
* List created images: <code>[[/docker images/]]</code><ref>https://docs.docker.com/engine/reference/commandline/images/</ref>, <code>docker image ls</code> (both commands seems to perform the same action, note it is image instead of image'''s''')
+
{{docker images TOC}}
: Images are stored in <code>docker info | grep "Docker Root Dir"</code><ref>https://stackoverflow.com/questions/19234831/where-are-docker-images-stored-on-the-host-machine</ref>
 
* <code>docker image rm</code><ref>https://docs.docker.com/engine/reference/commandline/image_rm/</ref>. See also: <code>docker rm CONTAINER</code>
 
  
 
=== Docker Network command line commands ===
 
=== Docker Network command line commands ===
* <code>docker network ls</code>
+
{{docker network TOC}}
* <code>docker network inspect</code>
+
* <code>docker network -rm</code>
* Deprecated: <code>[[/docker --link/]]</code><ref>https://docs.docker.com/network/links/</ref>
 
  
 
=== Docker resource limitation ===
 
=== Docker resource limitation ===
* Limit container '''CPU''' usage to 0.5 cpus: <code> docker run -it --cpus=".5" docker_image /bin/bash</code>
+
* Limit container '''CPU''' usage to 0.5 cpus: <code>[[docker run]] -it --cpus=".5" docker_image /bin/bash</code>
* Limit memory requires your kernel to have functionality activated, you can check it executing<code>[[docker info]]</code>. See https://docs.docker.com/install/linux/linux-postinstall/ and [[docker-compose]] resource limitation example: [[DevOps/Docker/docker compose/Version 3 resouces]]
+
* Limit [[memory]] requires your kernel to have functionality activated, you can check it executing<code>[[docker info]]</code>. See https://docs.docker.com/install/linux/linux-postinstall/ and [[docker-compose]] resource limitation example: [[Version 3 resouces]]
  
 
=== Docker: Working with remote repositories/registries ===
 
=== Docker: Working with remote repositories/registries ===
You will be using mainly the following commands <code>[[/docker login/]]</code>, <code>docker logout</code>, <code>[[/docker pull/]]</code> and <code>docker push</code>. Docker registry allow to configure notifications. <ref>https://docs.docker.com/registry/notifications/</ref>. Docker has a public repository called Docker Hub and cloud providers offer repositories services such as AWS Elastic Container Registry (ECR).
+
You will be using mainly the following commands <code>[[docker login]]</code>, <code>[[docker logout]]</code>, <code>[[docker pull]]</code> and <code>docker push</code>. Docker registry allow to configure notifications. <ref>https://docs.docker.com/registry/notifications/</ref>. Docker has a public repository called Docker Hub and cloud providers offer repositories services such as AWS Elastic Container Registry (ECR).
  
 
=== Docker Information ===
 
=== Docker Information ===
* <code>[[/docker version/]]</code> https://docs.docker.com/engine/reference/commandline/version/
+
* <code>[[docker version]]</code> https://docs.docker.com/engine/reference/commandline/version/
* <code>[[/docker info/]]</code> https://docs.docker.com/engine/reference/commandline/info/
+
* <code>[[docker info]]</code> https://docs.docker.com/engine/reference/commandline/info/
* <code>[[/docker stats/]]</code>
+
* <code>[[docker stats]]</code> https://docs.docker.com/engine/reference/commandline/stats/
* <code>[[/docker system info/]]</code> https://docs.docker.com/v17.12/edge/engine/reference/commandline/system_info/
+
* <code>[[docker system info]]</code> https://docs.docker.com/v17.12/edge/engine/reference/commandline/system_info/
 
* <code>docker system events</code> https://docs.docker.com/v17.12/edge/engine/reference/commandline/system_events/
 
* <code>docker system events</code> https://docs.docker.com/v17.12/edge/engine/reference/commandline/system_events/
* <code>docker system df</code>
+
* <code>[[docker system df]]</code>
* <code> docker top [CONTAINER_NAME or CONTAINER_ID]</code> https://docs.docker.com/engine/reference/commandline/top/
+
* <code>[[docker top]][CONTAINER_NAME or CONTAINER_ID]</code> https://docs.docker.com/engine/reference/commandline/top/
* <code>[[/docker inspect/]] CONTAINER_ID|IMAGE_ID</code><ref>http://manpages.ubuntu.com/manpages/disco/man1/docker-inspect.1.html</ref> https://docs.docker.com/engine/reference/commandline/inspect/ also available for: container, image, volume, network, node, service, or task
+
* <code>[[docker inspect]] CONTAINER_ID|IMAGE_ID</code><ref>http://manpages.ubuntu.com/manpages/disco/man1/docker-inspect.1.html</ref> https://docs.docker.com/engine/reference/commandline/inspect/ also available for: container, image, volume, network, node, service, or task
* <code>[[/docker images/]]</code>,  <code>[[/docker images/]] -q</code>
+
* <code>[[docker images]]</code>,  <code>[[docker images]] -q</code>
* <code>[[/docker image inspect/]]</code><ref>https://docs.docker.com/engine/reference/commandline/image_inspect/</ref>
+
* <code>[[docker image inspect]]</code><ref>https://docs.docker.com/engine/reference/commandline/image_inspect/</ref>
* <code>[[/docker image ls/]]</code> or <code>[[/docker image ls/]] --no-trunc </code>
+
* <code>[[docker image ls]]</code> or <code>[[docker image ls]] --no-trunc </code>
 +
* <code>[[docker volume ls]]</code>
 +
* <code>[[docker history]] IMAGE</code>
 +
* <code>[[docker ps]]</code>
  
 
=== Docker Operation ===
 
=== Docker Operation ===
* <code>[[/docker run/]]<ref>https://docs.docker.com/engine/reference/run/</ref> IMAGE|IMAGE_ID </code>: https://docs.docker.com/engine/reference/run/
+
* <code>[[docker run]]<ref>https://docs.docker.com/engine/reference/run/</ref> IMAGE|IMAGE_ID </code>: https://docs.docker.com/engine/reference/run/
* <code>[[/docker start/]] CONTAINER_ID|CONTAINER_NAME</code>: https://docs.docker.com/engine/reference/commandline/start/  
+
* <code>[[docker start]] CONTAINER_ID|CONTAINER_NAME</code>: https://docs.docker.com/engine/reference/commandline/start/  
* <code>[[/docker stop/]] CONTAINER_ID|CONTAINER_NAME</code>: https://docs.docker.com/engine/reference/commandline/stop/
+
* <code>[[docker stop]] CONTAINER_ID|CONTAINER_NAME</code>: https://docs.docker.com/engine/reference/commandline/stop/
* <code>[[/docker restart/]] CONTAINER_ID|CONTAINER_NAME</code>: https://docs.docker.com/engine/reference/commandline/restart/
+
* <code>[[docker restart]] CONTAINER_ID|CONTAINER_NAME</code>: https://docs.docker.com/engine/reference/commandline/restart/
  
 
=== Docker/[[cgroup]] Performance information ===
 
=== Docker/[[cgroup]] Performance information ===
 
* <code>[[systemd-cgtop]]</code>
 
* <code>[[systemd-cgtop]]</code>
  
=== Docker Swarm ===
+
=== [[Docker Swarm]] ===
* <code>[[/docker swarm/]]</code><ref><https://docs.docker.com/engine/reference/commandline/swarm/</ref>
+
{{docker swarm TOC}}
* <code>docker nodes</code>
+
* <code>[[docker service create]]</code>
  
 
=== Maintenance ===
 
=== Maintenance ===
* <code>[[/docker system/]] prune -a</code> remove unused and dangling images. Therefore any images being used in a container, whether they have been exited or currently running, will NOT be affected.<ref>https://stackoverflow.com/a/45143234</ref>
+
* <code>[[docker system prune]] -a</code> remove unused and dangling images. Therefore any images being used in a container, whether they have been exited or currently running, will NOT be affected.<ref>https://stackoverflow.com/a/45143234</ref>. See also: <code>[[docker system info]]</code>
 +
 
 +
=== [[Docker Volumes]] ===
 +
{{docker volumes}}
  
=== Volumes ===
+
Related terms: [[Bind Mounts]]
* <code>[[/docker volume/]]</code>: https://docs.docker.com/engine/reference/commandline/volume/
 
* <code>[[/docker volume ls/]]</code>: https://docs.docker.com/engine/reference/commandline/volume_ls/
 
* <code>[[/docker inspect/]] -f '{{ .Mounts }}' CONTAINER_NAME</code><ref>https://stackoverflow.com/questions/30133664/how-do-you-list-volumes-in-docker-containers</ref>
 
* <code>docker volumes prune</code>
 
  
== Docker logging ==
+
=== Secrets ===
Docker support logging to format or different platforms, such as, json-file, syslog, journald, gelf, fluentd, awslogs, splunk, etwlogs, gcplogs and logentries.<ref>https://docs.docker.com/config/containers/logging/configure/</ref>
+
* <code>[[docker secrets]]</code> (Feb 2017)<ref>https://www.docker.com/blog/docker-secrets-management/</ref> ([[swarm]] mode only)
* Configuration is done at docker container start time with command <code>docker run -it --log-drive LOG_METHOD CONTAINER_ID</code>
 
* Check method configured in a running container:
 
** <code>docker inspect -f '{{.HostConfig.LogConfig.Type}}' CONTAINER_ID</code>
 
** <code>docker inspect -f '{{.HostConfig.LogConfig}}' CONTAINER_ID</code>
 
* View [[logs]]
 
:<code>[[/docker logs/]] CONTAINER_NAME_OR_ID</code> (Docker Community Engine only support: local, json-file and [[journald]])
 
:<code>[[/docker logs/]] CONTAINER_NAME_OR_ID</code> 2>&1 | grep "STRING_TO_SEARCH"</code> (You will need to redirect outputs to be able to grep output)<ref>https://stackoverflow.com/questions/34724980/finding-a-string-in-docker-logs-of-container</ref>
 
:See https://docs.docker.com/config/containers/logging/ for more information
 
  
== Misc ==
+
== [[Docker logging]] ==
 +
 
 +
== Related terms==
 
* <code>[[DevOps/Docker/docker tag|docker tag]]</code><ref>https://docs.docker.com/engine/reference/commandline/tag/</ref>
 
* <code>[[DevOps/Docker/docker tag|docker tag]]</code><ref>https://docs.docker.com/engine/reference/commandline/tag/</ref>
 +
* <code>[[docker registry]]</code>
 +
* [[OverlayFS]]
 +
* [[Docker Enterprise]] (2017)
 +
* [[Docker Desktop on Windows]] ~ 500 MB
 +
* [[Benjamin Golub]]
 +
* [[Docker download rate limit]] <ref>https://docs.docker.com/docker-hub/download-rate-limit/</ref>
 +
* [[Docker Swarm]], [[Docker Scout]]
 +
* <code>[[crane]]</code> tool for interacting with [[remote images]] and [[registries]].
 +
* [[systemctl restart]]
  
 
== Activities ==
 
== Activities ==
 
# Read docker blog: https://blog.docker.com/
 
# Read docker blog: https://blog.docker.com/
# Read [[/Docker Engine release notes/]] (2017) and [[Docker CE]] or [[Docker EE]] releases.
+
# Read [[Docker Engine release notes]] (2017) and [[Docker CE]] or [[Docker EE]] releases.
# Understand the difference between an image and a container, Docker Images vs. Containers: https://stackoverflow.com/a/26960888
+
# Understand the difference between an [[docker image|image]] and a container, Docker Images vs. Containers: https://stackoverflow.com/a/26960888
# Understand the difference between <code>[[/docker start/]]</code> and <code>[[/docker run/]]</code>: https://stackoverflow.com/questions/34782678/difference-between-running-and-starting-a-docker-container. See also [[runC]]
+
# Understand the difference between <code>[[docker start]]</code> and <code>[[docker run]]</code>: https://stackoverflow.com/questions/34782678/difference-between-running-and-starting-a-docker-container. See also [[runC]]
 
# Read Stackoverflow questions related to docker: https://stackoverflow.com/questions/tagged/docker?tab=Votes
 
# Read Stackoverflow questions related to docker: https://stackoverflow.com/questions/tagged/docker?tab=Votes
 +
# Read about Docker Image Manifest Version 2, Schema 2: https://github.com/docker/distribution/blob/fda42e5ef908bdba722d435ff1f330d40dfcd56c/docs/spec/manifest-v2-2.md
 +
# Duplicate and image using <code>[[docker commit]]</code> command
 +
* [[Create and manage access tokens]]
  
 
== See also ==
 
== See also ==
* [[w:Docker (software)| Docker Hub]] official Docker container image [[registry]]
+
* {{docker cmd}}
* [[/docker compose/]]
+
* {{Docker}}
* [[Jenkins X]]
+
* {{Dockerd}}
* [[Cloud computing/Amazon Web Services/Elastic Container Service]] ([[ECS]])
+
* {{docker-compose}}
* AWS Elastic Container Registry ([[ECR]])
 
* [[EKS]], [[Kubernetes]] and [[Pods]]
 
* [[DevOps/Container]]: [[runC]]
 
* [[Binary repository manager]]: [[JFrog Artifactory]]
 
* [[containerd]]
 
* [[KVM]], [[multipass]]
 
 
 
 
 
  
 
{{CC license}}
 
{{CC license}}
 
Source: https://en.wikiversity.org/wiki/DevOps/Docker
 
Source: https://en.wikiversity.org/wiki/DevOps/Docker
  
{{subpage navbar}}
+
[[Category:Docker]]
 
+
[[Category:Linux containers]]
[[Category:Cloud computing]]
 
[[Category:Software development]]
 
[[Category:Server administration]]
 

Latest revision as of 14:50, 29 August 2024

Docker is a software utility to pack, ship and run any containers application available since March 2013.

Features[edit]

Docker offer the following features:

Installing Docker[edit]

You can read official Docker documentation about installing Docker on your system: https://docs.docker.com/install/.

On macOS you can follow official documentation https://docs.docker.com/docker-for-mac/install/ which requires to create and account to download installer. You can also try: brew cask install docker or try to follow https://pilsniak.com/how-to-install-docker-on-mac-os-using-brew/ instructions:

brew install docker docker-compose docker-machine(to install docker and docker-compose)
brew cask install virtualbox
docker-machine create --driver virtualbox default
docker-machine ls
docker-machine env default
eval $(docker-machine env default)
docker run hello-world (will pull hello-world image and run it on docker)

Ubuntu[edit]

Binaries[edit]

Following binaries will be installed: docker-init, docker-proxy, docker and dockerd

Verifying Docker installation[edit]

Once installed the Docker daemon, called "dockerd" should be running. You can also run docker run hello-world to verify docker correct installation.

Configuration files[edit]

Ubuntu:

Directories[edit]

/var/lib/docker/ (The Docker daemon was explicitly designed to have exclusive access to)[2]

Docker Releases (Docker Engine release notes)[edit]

Use: docker version[3] to check your version. You can download Docker CE source code from GitHub[4].

Docker Command Line[edit]

You can read official docker command line documentation in https://docs.docker.com/engine/reference/commandline/docker/. Before being able to run docker commands you will have to install Docker on your machine.

Some typical task using containers:

Docker verification commands[edit]

  • Verify correct installation: docker run hello-world

You will see some message similar to this one:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
ca4f61b1923c: Pull complete
Digest: sha256:97ce6fa4b6cdc0790cda65fe7290b74cfebd9fa0c9b8c38e979330d547d22ce1
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

Docker image and container creation[edit]

  • Create a new docker image base on alpine linux distribution and login into the new container: docker run -it alpine sh
  • Create a new docker image: docker build
    • Create a new docker image by creating a new text file with instructions, usually called Dockerfile[5]: docker build -f /path/to/a/Dockerfile .
  • Create a container: docker create
  • Generate a mediawiki:1.27 image: docker build --tag mediawiki:1.27 . (you can use -t or --tag)
  • Execute or run a container based on mediawiki:1.27 image: docker run --name wikiFGA -p 0.0.0.0:9090:80 -d mediawiki:1.27

Docker Container Operation[edit]

  • Start stopped containers: docker start $(docker ps -a -q -f status=exited)
  • Restart all containers: docker restart $(docker ps -aq) previously docker restart $(docker ps -q)-a all -q quiet[12]

See also: docker compose and docker stack

Docker images management[edit]

Docker Network command line commands[edit]

Docker resource limitation[edit]

Docker: Working with remote repositories/registries[edit]

You will be using mainly the following commands docker login, docker logout, docker pull and docker push. Docker registry allow to configure notifications. [18]. Docker has a public repository called Docker Hub and cloud providers offer repositories services such as AWS Elastic Container Registry (ECR).

Docker Information[edit]

Docker Operation[edit]

Docker/cgroup Performance information[edit]

Docker Swarm[edit]

Maintenance[edit]

  • docker system prune -a remove unused and dangling images. Therefore any images being used in a container, whether they have been exited or currently running, will NOT be affected.[23]. See also: docker system info

Docker Volumes[edit]

Related terms: Bind Mounts

Secrets[edit]

Docker logging[edit]

Related terms[edit]

Activities[edit]

  1. Read docker blog: https://blog.docker.com/
  2. Read Docker Engine release notes (2017) and Docker CE or Docker EE releases.
  3. Understand the difference between an image and a container, Docker Images vs. Containers: https://stackoverflow.com/a/26960888
  4. Understand the difference between docker start and docker run: https://stackoverflow.com/questions/34782678/difference-between-running-and-starting-a-docker-container. See also runC
  5. Read Stackoverflow questions related to docker: https://stackoverflow.com/questions/tagged/docker?tab=Votes
  6. Read about Docker Image Manifest Version 2, Schema 2: https://github.com/docker/distribution/blob/fda42e5ef908bdba722d435ff1f330d40dfcd56c/docs/spec/manifest-v2-2.md
  7. Duplicate and image using docker commit command

See also[edit]

Text is available under the Creative Commons Attribution-ShareAlike License; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy.

Source: https://en.wikiversity.org/wiki/DevOps/Docker

  1. https://docs.docker.com/engine/reference/commandline/pull/
  2. https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/
  3. https://docs.docker.com/engine/reference/commandline/version/
  4. https://github.com/docker/docker-ce/releases
  5. https://docs.docker.com/engine/reference/builder/
  6. https://stackoverflow.com/questions/34782678/difference-between-running-and-starting-a-docker-container
  7. https://docs.docker.com/engine/reference/commandline/container_ls/
  8. https://docs.docker.com/engine/reference/commandline/ps/
  9. https://www.docker.com/blog/whats-new-in-docker-1-13/
  10. https://stackoverflow.com/a/45254760
  11. https://docs.docker.com/engine/reference/commandline/exec/
  12. https://stackoverflow.com/questions/38221463/command-for-restarting-all-running-docker-containers
  13. https://docs.docker.com/config/containers/start-containers-automatically/#use-a-restart-policy
  14. https://docs.docker.com/engine/reference/commandline/images/
  15. https://stackoverflow.com/questions/19234831/where-are-docker-images-stored-on-the-host-machine
  16. https://docs.docker.com/engine/reference/commandline/image_rm/
  17. https://docs.docker.com/network/links/
  18. https://docs.docker.com/registry/notifications/
  19. http://manpages.ubuntu.com/manpages/disco/man1/docker-inspect.1.html
  20. https://docs.docker.com/engine/reference/commandline/image_inspect/
  21. https://docs.docker.com/engine/reference/run/
  22. <https://docs.docker.com/engine/reference/commandline/swarm/
  23. https://stackoverflow.com/a/45143234
  24. https://www.docker.com/blog/docker-secrets-management/
  25. https://docs.docker.com/engine/reference/commandline/tag/
  26. https://docs.docker.com/docker-hub/download-rate-limit/

Advertising: