Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
articles:linux:docker-reference-page [2022/02/12 14:47] tom |
articles:linux:docker-reference-page [2022/02/12 16:32] (current) tom [Packaging & Distributing Your Own Docker Containers into Images] |
||
---|---|---|---|
Line 9: | Line 9: | ||
**Docker Tutorial for Beginners [FULL COURSE in 3 Hours]\\ | **Docker Tutorial for Beginners [FULL COURSE in 3 Hours]\\ | ||
by [[articles: | by [[articles: | ||
+ | |||
+ | ===== Base Questions ===== | ||
What does a Docker structure look like? | What does a Docker structure look like? | ||
Line 22: | Line 24: | ||
* Docker is less resource hungry because Docker containers use the host Linux kernel. | * Docker is less resource hungry because Docker containers use the host Linux kernel. | ||
- | Where are docker | + | Where are docker |
* I think the big public repository is hub.docker.com. | * I think the big public repository is hub.docker.com. | ||
Line 28: | Line 30: | ||
How to install Docker? | How to install Docker? | ||
- | * This can change, so get the latest information by doing an Internet search " | + | * This can change, so get the latest information by doing an Internet search " |
- | * As of 12 Feb 2022, Linux Mint 20.3 is based on Ubuntu | + | * Keep in mind that there are two base flavors |
+ | |||
+ | ===== Basic Commands ===== | ||
< | < | ||
Line 43: | Line 48: | ||
# Initial start of a container based on a specific version of image (pulls image from hub if not already downloaded to your machine: | # Initial start of a container based on a specific version of image (pulls image from hub if not already downloaded to your machine: | ||
- | docker run [flags] [name-of-image or id-of-image]:[version] | + | docker run [flags] [name-of-image or id-of-image][:version] |
-d = runs in detached mode (so you can continue to use your terminal instance. | -d = runs in detached mode (so you can continue to use your terminal instance. | ||
-p[host port]: | -p[host port]: | ||
Line 59: | Line 64: | ||
# To enter into a terminal of a running container | # To enter into a terminal of a running container | ||
docker exec -it [container name or last 12 positions of container id] /bin/bash | docker exec -it [container name or last 12 positions of container id] /bin/bash | ||
+ | |||
+ | # To list Docker networks: | ||
+ | docker network ls | ||
</ | </ | ||
- | In order for containers to talk to each other you have to setup a docker network. Normally, unless you are a developer, you would not have to do this, but if you do then review Nana's video, Developing with Containers chapter below. Or reference a more up-to-date tutorial or documentation. | + | ===== Docker Networks ===== |
+ | |||
+ | In order for containers to talk to each other you have to setup a docker network. Normally, unless you are a developer, you would not have to do this, but if you do then review Nana's video, Developing with Containers chapter below. Or reference a more up-to-date tutorial or documentation. However, you can also setup a Docker network automatically when you use Docker compose. See topic below. | ||
{{youtube> | {{youtube> | ||
+ | ===== Docker Compose ===== | ||
+ | |||
+ | Placeholders are in square [] brackets and comments are in curly {} braces in the template below. Note that in the template I have laid out 2 different Docker containers in a single compose file. When you do this, a common Docker network is created. Also, indentation must be precise for this to work (supposedly). | ||
+ | |||
+ | < | ||
+ | version:' | ||
+ | services: | ||
+ | [user assigned name]: {same as docker run --name flag} | ||
+ | image: [image name][: | ||
+ | ports: | ||
+ | - [host port]: | ||
+ | volumes: | ||
+ | - [user reference name]: | ||
+ | - [host path]: | ||
+ | - [container path] {for an anonymous volume} | ||
+ | environment: | ||
+ | - [environment setting]=[assigned value] | ||
+ | [user assigned name]: {same as docker run --name flag} | ||
+ | image: [image name][: | ||
+ | ports: | ||
+ | - [host port]: | ||
+ | volumes: | ||
+ | - [user reference name]: | ||
+ | - [host path]: | ||
+ | - [container path] {for an anonymous volume} | ||
+ | environment: | ||
+ | - [environment setting]=[assigned value] | ||
+ | |||
+ | # For two containers to share a volume, you can set that after defining named volumes above and adding the volume after the container definition and using an already defined name (i.e). | ||
+ | |||
+ | volumes: | ||
+ | db-data: {assuming db-data was established above} | ||
+ | driver: local {this is needed but not sure why} | ||
+ | |||
+ | </ | ||
+ | |||
+ | The contents of the file above would be saved in a text file saved with a .yaml extension. | ||
+ | |||
+ | To start a Docker compose file, run: | ||
+ | |||
+ | < | ||
+ | docker-compose [flags] [command] | ||
+ | -f [name of yaml file] | ||
+ | |||
+ | Commands: | ||
+ | |||
+ | up = start a Docker Compose configuration | ||
+ | down = stop a Docker Compose configuration | ||
+ | |||
+ | Examples: | ||
+ | |||
+ | docker-compose -f mycontainers.yaml up | ||
+ | docker-compose -f mycontainers.yaml down | ||
+ | </ | ||
+ | |||
+ | ===== Persistent Data with Docker Volumes ===== | ||
+ | |||
+ | You need to do this when you want to store data/files between restarts of a Docker container. | ||
+ | |||
+ | You have three types of Docker volumes, i.e. | ||
+ | |||
+ | < | ||
+ | # A defined volume (Note: I am only showing the -v flag). | ||
+ | docker run -v [host folder]: | ||
+ | docker run -v / | ||
+ | |||
+ | # An anonymous volume (Note: I am only showing the -v flag and I don't necessarily know where the persistent storage is kept but should be below / | ||
+ | docker run -v [container folder] | ||
+ | docker run -v / | ||
+ | |||
+ | # A named volume (Note: I am only showing the -v flag, again I may not know where the storage is kept but should be below / | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Packaging & Distributing Your Own Docker Containers into Images ===== | ||
+ | Again, check with Nina on how to do this. Clients of Dockerized applications would not normally have to do any of this. | ||
+ | {{youtube> |