diff --git a/content/en/docs/CommunityLeaders/EventHandbooks/Docker201/gettingstarted/labs/_index.md b/content/en/docs/CommunityLeaders/EventHandbooks/Docker201/gettingstarted/labs/_index.md new file mode 100644 index 00000000..b0d7744c --- /dev/null +++ b/content/en/docs/CommunityLeaders/EventHandbooks/Docker201/gettingstarted/labs/_index.md @@ -0,0 +1,437 @@ +--- +title: "Docker Compose 101 Labs" +linkTitle: "Docker Compose 101 Labs" +weight: 100 +description: >- + Page description for Docker Compose 101 Labs +--- + +# Lab #1: version Command + +The `docker-compose version` command shows the Docker-Compose version information. + + +## Pre-requisite: + +## Tested Infrastructure + + + + + + + + + + + + + + + +
PlatformNumber of InstanceReading Time
Play with Docker15 min
+ +## Pre-requisite + +- Create an account with [DockerHub](https://hub.docker.com) +- Open [PWD](https://labs.play-with-docker.com/) Platform on your browser +- Click on **Add New Instance** on the left side of the screen to bring up Alpine OS instance on the right side + +### Checking docker-compose version +``` +$ docker-compose version +docker-compose version 1.23.2, build 1110ad0 +docker-py version: 3.7.3 +CPython version: 2.7.16 +OpenSSL version: OpenSSL 1.1.1c 28 May 2019 +``` +`docker-py` is the Docker Remote API, it does everything the docker command does, but from within Python – run containers, manage them, pull/push images, etc.
+ + +# Lab #2: help Command +The `docker-compose help` list out all the subcommands that can be used with docker-compose.Even you can try --help or -h. + + +## Pre-requisite: + +## Tested Infrastructure + + + + + + + + + + + + + + + +
PlatformNumber of InstanceReading Time
Play with Docker15 min
+ +## Pre-requisite + +- Create an account with [DockerHub](https://hub.docker.com) +- Open [PWD](https://labs.play-with-docker.com/) Platform on your browser +- Click on **Add New Instance** on the left side of the screen to bring up Alpine OS instance on the right side + +### Checking docker-compose help command +``` +$ docker-compose help + +Define and run multi-container applications with Docker. + +Usage: + docker-compose [-f ...] [options] [COMMAND] [ARGS...] + docker-compose -h|--help + +Options: + -f, --file FILE Specify an alternate compose file + (default: docker-compose.yml) + -p, --project-name NAME Specify an alternate project name + (default: directory name) + --verbose Show more output + --log-level LEVEL Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL) + --no-ansi Do not print ANSI control characters + -v, --version Print version and exit + -H, --host HOST Daemon socket to connect to + + --tls Use TLS; implied by --tlsverify + --tlscacert CA_PATH Trust certs signed only by this CA + --tlscert CLIENT_CERT_PATH Path to TLS certificate file + --tlskey TLS_KEY_PATH Path to TLS key file + --tlsverify Use TLS and verify the remote + --skip-hostname-check Don't check the daemon's hostname against the + name specified in the client certificate + --project-directory PATH Specify an alternate working directory + (default: the path of the Compose file) + --compatibility If set, Compose will attempt to convert deploy + keys in v3 files to their non-Swarm equivalent +Commands: + build Build or rebuild services + bundle Generate a Docker bundle from the Compose file + config Validate and view the Compose file + create Create services + down Stop and remove containers, networks, images, and volumes + events Receive real time events from containers + exec Execute a command in a running container + help Get help on a command + images List images + kill Kill containers + logs View output from containers + pause Pause services + port Print the public port for a port binding + ps List containers + pull Pull service images + push Push service images + restart Restart services + rm Remove stopped containers + run Run a one-off command + scale Set number of containers for a service + start Start services + stop Stop services + top Display the running processes + unpause Unpause services + up Create and start containers + version Show the Docker-Compose version information +``` + +#### Trying help commands for subcommands +Even you can try help for docker subcommands also +``` +$ docker-compose build --help +Build or rebuild services. + +Services are built once and then tagged as `project_service`, +e.g. `composetest_db`. If you change a service's `Dockerfile` or the +contents of its build directory, you can run `docker-compose build` to rebuild it. + +Usage: build [options] [--build-arg key=val...] [SERVICE...] + +Options: + --compress Compress the build context using gzip. + --force-rm Always remove intermediate containers. + --no-cache Do not use cache when building the image. + --pull Always attempt to pull a newer version of the image. + -m, --memory MEM Sets memory limit for the build container. + --build-arg key=val Set build-time variables for services. + --parallel Build images in parallel. +``` + +# Lab #3: Config Command +The `docker-compose config` command validate the docker-compose file and view the compose file. + +## Pre-requisite: + +## Tested Infrastructure + + + + + + + + + + + + + + + +
PlatformNumber of InstanceReading Time
Play with Docker15 min
+ +## Pre-requisite + +- Create an account with [DockerHub](https://hub.docker.com) +- Open [PWD](https://labs.play-with-docker.com/) Platform on your browser +- Click on **Add New Instance** on the left side of the screen to bring up Alpine OS instance on the right side + +# Assignment +- Create a docker-compose.yml file +- Validate the docker-compose file +- Testing docker-compose config with wrong config + + + +### Create a docker-compose.yml file + +Copy the below contents: + +``` +version: '3.1' +services: + #Nginx Service + webserver: + image: nginx:alpine + container_name: webserver + restart: unless-stopped + ports: + - "80:80" + - "443:443" +``` + +Or Clone the repository: + +``` +git clone https://github.com/collabnix/dockerlabs +cd intermediate/workshop/compose/lab/3/config/ +cat docker-compose.yml +``` + + +### Validate the docker-compose file +``` +$ docker-compose config +services: + webserver: + container_name: webserver + image: nginx:alpine + ports: + - 80:80/tcp + - 443:443/tcp + restart: unless-stopped +version: '3.1' +``` +### Testing docker-compose config with wrong config +Lets just change the instruction `services` to `service` and test. +``` +$docker-compose config + +ERROR: The Compose file './docker-compose.yml' is invalid because: +Invalid top-level property "service". Valid top-level sections for this Compose file are: services, secrets, version, networks, volumes, and extensions starting with "x-". + +You might be seeing this error because you're using the wrong Compose file version. Either specify a supported version (e.g "2.2" or "3.3") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1. +For more on the Compose file format versions, see https://docs.docker.com/compose/compose-file/ +``` + +# Lab #4: Build Command +In this lab we are going to look into docker-compose build command.Docker build used to create a new image using the instructions in the Dockerfile. The build can be specified either as a string containing a path to the build context. The newly built image will be used to create the container for the service. + +## Command instructions + +#### build + +The format is docker-compose build [options] [SERVICE...] . + +Build (rebuild) the service container in the project. + +Once the service container is built, it will be tagged with a tagname, such as a db container in a web project, possibly web_db. + +You can rebuild the service at any time by running the docker-compose build in the project directory. + +Options include: + +`--force-rm` removes the temporary container during the build process. + +`--no-cache` does not use cache during the build image process (this will lengthen the build process). + +`--pull always` tries to get a mirror of the updated version by `--pull` . + + + +## Pre-requisite: + +## Tested Infrastructure + + + + + + + + + + + + + + + +
PlatformNumber of InstanceReading Time
Play with Docker15 min
+ +## Pre-requisite + +- Create an account with [DockerHub](https://hub.docker.com) +- Open [PWD](https://labs.play-with-docker.com/) Platform on your browser +- Click on **Add New Instance** on the left side of the screen to bring up Alpine OS instance on the right side + +We are going to build an nginx image with custome page + +#### Setup environment: +``` +$ mkdir docker-compose/build +$ cd docker-compose/build +``` + +#### Now lets create the Dockerfile +``` +FROM nginx:alpine +RUN echo "Welcome to Docker Workshop!" >/usr/share/nginx/html/index.html +CMD ["nginx", "-g", "daemon off;"] +``` + +#### Create a docker-compose.yml file +``` +version: "3.7" +services: + webapp: + build: + context: . + dockerfile: Dockerfile + image: webapp:v1 +``` +context: To specify the build context directory that is sent to the Docker daemon.
+dockerfile: use to specify Alternate Dockerfile or path to Dockerfile. +#### Build the image using docker-compose +``` +$ docker-compose build +``` +Since we specified image: as well as build:, then the Compose built the image with name webapp and tag v1.
+If we didnt specify the image: option the image name will be buid_:latest. + +#### Check the image have created +``` +$ docker image ls webapp:v1 +``` + +### Quick Notes: + +#### build + +Specifies the path to the folder where the Dockerfile is located (either an absolute path or a path relative to the docker-compose.yml file). Compose will use it to automatically build this image and then use this image. +``` + version: '3' services: webapp: build: ./dir +``` +You can also use the context directive to specify the path to the folder where the Dockerfile is located. + +Use the dockerfile directive to specify the Dockerfile filename. + +Use the arg directive to specify the variables when the image is built. +``` + version: '3' services: webapp: build: context: ./dir dockerfile: Dockerfile-alternate args: buildno: 1 + ``` +Use cache_from specify the cache to build the image +``` + build: context: . cache_from: - alpine: latest - corp/web_app: 3.14 +``` + +# Lab #5: pull Command +The `docker-compose pull` command pull down the images which is specified under each service of docker-compose file from the docker hub. + +## Pre-requisite: + +## Tested Infrastructure + + + + + + + + + + + + + + + +
PlatformNumber of InstanceReading Time
Play with Docker15 min
+ +## Pre-requisite + +- Create an account with [DockerHub](https://hub.docker.com) +- Open [PWD](https://labs.play-with-docker.com/) Platform on your browser +- Click on **Add New Instance** on the left side of the screen to bring up Alpine OS instance on the right side + +# Assignment +- Create a docker-compose.yml file +- Pull down the service images +- Pull down image of a single service + + +### Create a docker-compose.yml file +``` +version: '3.1' +services: + #Nginx Service + webserver: + image: nginx:alpine + container_name: webserver + restart: unless-stopped + ports: + - "80:80" + - "443:443" + dbserver: + image: mysql:5.7 + container_name: Mysqldb + restart: unless-stopped + ports: + - "3306:3306" +``` + +### Pull down the service images +``` +$ docker-compose pull +Pulling webserver ... done +Pulling dbserver ... done +``` +#### Checking the images in local +``` +$ docker image ls +REPOSITORY TAG IMAGE ID CREATED SIZE +mysql 5.7 383867b75fd2 2 hours ago 373MB +nginx alpine d87c83ec7a66 2 weeks ago 21.2MB +``` + +### Pull down image of a single service +Before doing pull make sure you have removed the images(docker image rm ) which is already pulled. +``` +$ docker-compose pull webserver +Pulling webserver ... done +``` +This pulldown only the webserver service image(nginx:alpine).