=====Overview======
Docker configuration is done in the YML files, where we should describe what we want and how that should be linked in regards to:
* Storage
* Network
* Ports
=====Installation=====
Docker is open source application and can be freely downloaded and installed.
Now it is important to notice that, in general docker installed on Windows will run windows apps and docker installed on Linux will run Linux apps.
Of course, there are exception of that rule and Linux docker can run Windows apps, but that is story for another time.
Docker is easily installed as follows:
====Install the package====
You can install the package using your favorite package manager, in my case "yum"
[root@postgresqlmaster yum.repos.d]# cat docker.repo
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
[root@postgresqlmaster yum.repos.d]#
[root@postgresqlpgpool app]# yum install docker-ce docker-ce-cli containerd.io
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.cvut.cz
* extras: ftp.cvut.cz
* updates: ftp.cvut.cz
Resolving Dependencies
--> Running transaction check
---> Package containerd.io.x86_64 0:1.2.10-3.2.el7 will be installed
---> Package docker-ce.x86_64 3:19.03.5-3.el7 will be installed
---> Package docker-ce-cli.x86_64 1:19.03.5-3.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===========================================================================================================================================================================================================================
Package Arch Version Repository Size
===========================================================================================================================================================================================================================
Installing:
containerd.io x86_64 1.2.10-3.2.el7 docker-ce-stable 23 M
docker-ce x86_64 3:19.03.5-3.el7 docker-ce-stable 24 M
docker-ce-cli x86_64 1:19.03.5-3.el7 docker-ce-stable 39 M
Transaction Summary
===========================================================================================================================================================================================================================
Install 3 Packages
Total size: 87 M
Installed size: 362 M
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : 1:docker-ce-cli-19.03.5-3.el7.x86_64 1/3
Installing : containerd.io-1.2.10-3.2.el7.x86_64 2/3
Installing : 3:docker-ce-19.03.5-3.el7.x86_64 3/3
Verifying : containerd.io-1.2.10-3.2.el7.x86_64 1/3
Verifying : 1:docker-ce-cli-19.03.5-3.el7.x86_64 2/3
Verifying : 3:docker-ce-19.03.5-3.el7.x86_64 3/3
Installed:
containerd.io.x86_64 0:1.2.10-3.2.el7 docker-ce.x86_64 3:19.03.5-3.el7 docker-ce-cli.x86_64 1:19.03.5-3.el7
Complete!
[root@postgresqlpgpool app]# service docker start
Redirecting to /bin/systemctl start docker.service
[root@postgresqlpgpool app]
====Start the service====
[root@postgresqlmaster yum.repos.d]# service docker start
Redirecting to /bin/systemctl start docker.service
[root@postgresqlmaster yum.repos.d]# service docker status
Redirecting to /bin/systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2020-01-23 07:36:43 EST; 1min 56s ago
Docs: https://docs.docker.com
Main PID: 3890 (dockerd)
Tasks: 19
Memory: 34.0M
CGroup: /system.slice/docker.service
├─3890 /usr/bin/dockerd
└─3893 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd...
Jan 23 07:36:42 postgresqlmaster systemd[1]: Starting Docker Application Container Engine...
Jan 23 07:36:42 postgresqlmaster dockerd[3890]: time="2020-01-23T07:36:42.412010221-05:00" level=info msg="libcontainerd: new containerd process, pid: 3893"
Jan 23 07:36:43 postgresqlmaster dockerd[3890]: time="2020-01-23T07:36:43.573133278-05:00" level=info msg="Graph migration to content-addressability took 0.00 seconds"
Jan 23 07:36:43 postgresqlmaster dockerd[3890]: time="2020-01-23T07:36:43.573865294-05:00" level=info msg="Loading containers: start."
Jan 23 07:36:43 postgresqlmaster dockerd[3890]: time="2020-01-23T07:36:43.768519625-05:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can...red IP address"
Jan 23 07:36:43 postgresqlmaster dockerd[3890]: time="2020-01-23T07:36:43.867416058-05:00" level=info msg="Loading containers: done."
Jan 23 07:36:43 postgresqlmaster dockerd[3890]: time="2020-01-23T07:36:43.879638594-05:00" level=info msg="Daemon has completed initialization"
Jan 23 07:36:43 postgresqlmaster dockerd[3890]: time="2020-01-23T07:36:43.879659977-05:00" level=info msg="Docker daemon" commit=89658be graphdriver=overlay version=17.05.0-ce
Jan 23 07:36:43 postgresqlmaster dockerd[3890]: time="2020-01-23T07:36:43.889952934-05:00" level=info msg="API listen on /var/run/docker.sock"
Jan 23 07:36:43 postgresqlmaster systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.
====Run "Hello World"====
[root@postgresqlmaster yum.repos.d]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:9572f7cdcee8591948c2963463447a53466950b3fc15a247fcad1917ca215a2f
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://hub.docker.com/ <-- Here you can find A LOT OF dockerized applications (images)
For more examples and ideas, visit:
https://docs.docker.com/get-started/
[root@postgresqlmaster yum.repos.d]#
=====Configurations=====
With docker we can download and run any image from a registry. Currently there are over 3 million dockerized applications including:
* Databases
* Web Services
* Operation Systems and others
You can download and run such images from any registry, but the most popular is: [[https://hub.docker.com || this one]].
Let's start by downloading and installing MySQL database which has been dockerized.
====MySQL Docker====
Once we have docker installed, we can search and install any image we want:
[root@localhost ~]# docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 18.06.0-ce
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: d64c661f1d51c48782c9cec8fda7604785f93587
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-693.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.796GiB
Name: localhost.localdomain
ID: JJ7T:TB2D:ODDZ:7TEB:P5QQ:TVYO:VGRK:76SO:2XXP:7Q47:2P77:KHEG
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
===Install MySQL===
Now we can install the mysql image using the following commands:
[root@localhost ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 6616 [OK]
mariadb MariaDB is a community-developed fork of MyS… 2101 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 485 [OK]
percona Percona Server is a fork of the MySQL relati… 350 [OK]
zabbix/zabbix-server-mysql Zabbix Server with MySQL database support 108 [OK]
hypriot/rpi-mysql RPi-compatible Docker Image with Mysql 90
zabbix/zabbix-web-nginx-mysql Zabbix frontend based on Nginx web-server wi… 61 [OK]
centurylink/mysql Image containing mysql. Optimized to be link… 60 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 38 [OK]
tutum/mysql Base docker image to run a MySQL database se… 32
centos/mysql-57-centos7 MySQL 5.7 SQL database server 31
mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr… 31
schickling/mysql-backup-s3 Backup MySQL to S3 (supports periodic backup… 20 [OK]
bitnami/mysql Bitnami MySQL Docker Image 16 [OK]
zabbix/zabbix-proxy-mysql Zabbix proxy with MySQL database support 15 [OK]
linuxserver/mysql A Mysql container, brought to you by LinuxSe… 14
centos/mysql-56-centos7 MySQL 5.6 SQL database server 8
circleci/mysql MySQL is a widely used, open-source relation… 6
openshift/mysql-55-centos7 DEPRECATED: A Centos7 based MySQL v5.5 image… 6
dsteinkopf/backup-all-mysql backup all DBs in a mysql server 4 [OK]
mysql/mysql-router MySQL Router provides transparent routing be… 2
openzipkin/zipkin-mysql Mirror of https://quay.io/repository/openzip… 1
cloudposse/mysql Improved `mysql` service with support for `m… 0 [OK]
cloudfoundry/cf-mysql-ci Image used in CI of cf-mysql-release 0
ansibleplaybookbundle/mysql-apb An APB which deploys RHSCL MySQL 0 [OK]
===Download (pull) MySQL)===
[root@localhost ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
be8881be8156: Pull complete
c3995dabd1d7: Pull complete
We can check installed images of course and see how much space they occupy:
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 2cb0d9787c4d 2 weeks ago 1.85kB
mysql latest 02d081b9c73e 3 months ago 300MB
===Start the MySQL===
We can see now, that I have installed mysql, we can initiate a new container for mysql image as follows:
[root@postgresqlmaster yum.repos.d]# docker run --name mysql -e MYSQL_ROOT_PASSWORD='oracle' -d mysql
d434caf757cfc946d074fbabe44c9a14117d18b8e0451d06afb81a94facbe540
[root@localhost ~]#
===Login to the host===
[root@postgresqlmaster yum.repos.d]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d434caf757cf mysql "docker-entrypoint..." 7 seconds ago Up 6 seconds 3306/tcp, 33060/tcp mysql
[root@postgresqlmaster yum.repos.d]# docker exec -it d434caf757cf /bin/bash
root@d434caf757cf:/#
===Connect to the DB===
And voila we can connect to the DB :)
[root@localhost ~]# docker exec -it d434caf757c mysql -uroot -p <- 'oracle'
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.11 MySQL Community Server - GPL
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
===Check Logs===
We can check the logs of the installation as follows:
[root@localhost ~]# docker logs -f mysql2
[Entrypoint] MySQL Docker Image 8.0.11-1.1.5
[Entrypoint] Initializing database
2018-07-27T15:28:10.177501Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.11) initializing of server in progress as process 21
mbind: Operation not permitted
2018-07-27T15:28:15.362667Z 5 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
2018-07-27T15:28:17.111421Z 5 [Warning] [MY-010315] [Server] 'user' entry 'mysql.infoschema@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:17.111452Z 5 [Warning] [MY-010315] [Server] 'user' entry 'mysql.session@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:17.111460Z 5 [Warning] [MY-010315] [Server] 'user' entry 'mysql.sys@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:17.111467Z 5 [Warning] [MY-010315] [Server] 'user' entry 'root@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:17.111479Z 5 [Warning] [MY-010323] [Server] 'db' entry 'performance_schema mysql.session@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:17.111484Z 5 [Warning] [MY-010323] [Server] 'db' entry 'sys mysql.sys@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:17.111492Z 5 [Warning] [MY-010311] [Server] 'proxies_priv' entry '@ root@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:17.111603Z 5 [Warning] [MY-010330] [Server] 'tables_priv' entry 'user mysql.session@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:17.111612Z 5 [Warning] [MY-010330] [Server] 'tables_priv' entry 'sys_config mysql.sys@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:18.279696Z 0 [System] [MY-013170] [Server] /usr/sbin/mysqld (mysqld 8.0.11) initializing of server has completed
[Entrypoint] Database initialized
2018-07-27T15:28:21.900080Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.11) starting as process 67
mbind: Operation not permitted
2018-07-27T15:28:22.282453Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2018-07-27T15:28:22.290888Z 0 [Warning] [MY-010315] [Server] 'user' entry 'mysql.infoschema@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:22.290910Z 0 [Warning] [MY-010315] [Server] 'user' entry 'mysql.session@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:22.290919Z 0 [Warning] [MY-010315] [Server] 'user' entry 'mysql.sys@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:22.290926Z 0 [Warning] [MY-010315] [Server] 'user' entry 'root@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:22.290942Z 0 [Warning] [MY-010323] [Server] 'db' entry 'performance_schema mysql.session@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:22.290947Z 0 [Warning] [MY-010323] [Server] 'db' entry 'sys mysql.sys@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:22.290956Z 0 [Warning] [MY-010311] [Server] 'proxies_priv' entry '@ root@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:22.292825Z 0 [Warning] [MY-010330] [Server] 'tables_priv' entry 'user mysql.session@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:22.292838Z 0 [Warning] [MY-010330] [Server] 'tables_priv' entry 'sys_config mysql.sys@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:22.296561Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.11' socket: '/var/lib/mysql/mysql.sock' port: 0 MySQL Community Server - GPL.
Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/tzdata.zi' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
2018-07-27T15:28:24.404253Z 9 [Warning] [MY-010315] [Server] 'user' entry 'healthchecker@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:24.404283Z 9 [Warning] [MY-010315] [Server] 'user' entry 'mysql.infoschema@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:24.404293Z 9 [Warning] [MY-010315] [Server] 'user' entry 'mysql.session@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:24.404300Z 9 [Warning] [MY-010315] [Server] 'user' entry 'mysql.sys@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:24.404307Z 9 [Warning] [MY-010315] [Server] 'user' entry 'root@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:24.404320Z 9 [Warning] [MY-010323] [Server] 'db' entry 'performance_schema mysql.session@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:24.404325Z 9 [Warning] [MY-010323] [Server] 'db' entry 'sys mysql.sys@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:24.404333Z 9 [Warning] [MY-010311] [Server] 'proxies_priv' entry '@ root@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:24.404409Z 9 [Warning] [MY-010330] [Server] 'tables_priv' entry 'user mysql.session@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:24.404417Z 9 [Warning] [MY-010330] [Server] 'tables_priv' entry 'sys_config mysql.sys@localhost' ignored in --skip-name-resolve mode.
[Entrypoint] ignoring /docker-entrypoint-initdb.d/*
mbind: Operation not permitted
2018-07-27T15:28:27.123116Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.11) MySQL Community Server - GPL.
[Entrypoint] Server shut down
[Entrypoint] MySQL init process done. Ready for start up.
[Entrypoint] Starting MySQL 8.0.11-1.1.5
2018-07-27T15:28:27.607070Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.11) starting as process 1
mbind: Operation not permitted
2018-07-27T15:28:28.013191Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2018-07-27T15:28:28.024200Z 0 [Warning] [MY-010315] [Server] 'user' entry 'healthchecker@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:28.024228Z 0 [Warning] [MY-010315] [Server] 'user' entry 'mysql.infoschema@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:28.024237Z 0 [Warning] [MY-010315] [Server] 'user' entry 'mysql.session@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:28.024245Z 0 [Warning] [MY-010315] [Server] 'user' entry 'mysql.sys@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:28.024251Z 0 [Warning] [MY-010315] [Server] 'user' entry 'root@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:28.024266Z 0 [Warning] [MY-010323] [Server] 'db' entry 'performance_schema mysql.session@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:28.024271Z 0 [Warning] [MY-010323] [Server] 'db' entry 'sys mysql.sys@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:28.024280Z 0 [Warning] [MY-010311] [Server] 'proxies_priv' entry '@ root@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:28.026295Z 0 [Warning] [MY-010330] [Server] 'tables_priv' entry 'user mysql.session@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:28.026307Z 0 [Warning] [MY-010330] [Server] 'tables_priv' entry 'sys_config mysql.sys@localhost' ignored in --skip-name-resolve mode.
2018-07-27T15:28:28.029599Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.11' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Server - GPL.
Finally, we can connect to the mysql, by running the mysql command from the docker:
====Mongo Configuration====
Other configuration which can use is for Mongo database:
incidenttool_mongo:
image: mongo
volumes:
- incidenttool_mongodb:/data/db
- incidenttool_mongodb_config:/data/configdb
- /apphome/backup/bulk_copied:/data/db/dump
ports:
- 27017:27017
networks:
- incidenttool
environment:
- "TZ=UTC"
- "MONGO_INITDB_ROOT_USERNAME=root"
- "MONGO_INITDB_ROOT_PASSWORD=password"
volumes:
incidenttool_mongodb:
incidenttool_mongodb_config:
networks:
incidenttool:
driver: bridge
ipam:
config:
- subnet: 172.31.254.0/28
In case of changes, you have to restart the container is follows:
docker-compose -p production up -d incidenttool_mongo