There are five containers, that are necessary to run Avril on Docker:
So three of them should be built first. The Maven modules for them are located in my Avril project. So open the workspace and start following run configurations:
Execute following Maven targets (e.g. from the IDE):
It is also possible to execute “package” targets, but then the files should be manually copied to the proper directories.
Copy the file(s) to the remote server:
cd /home/kalaschnikow/Desktop/avril_misc/install # for avril2019: scp -P 1002 AvrilDock.war kalaschnikow@avril2019.wialon-consulting.de:/home/kalaschnikow/AvrilDock.war scp -P 1002 AvrilWebAdmin.war kalaschnikow@avril2019.wialon-consulting.de:/home/kalaschnikow/AvrilWebAdmin.war # for avril2021: scp -P 1002 AvrilDock.war kalaschnikow@avril2021.avril.work:/home/kalaschnikow/AvrilDock.war scp -P 1002 AvrilWebAdmin.war kalaschnikow@avril2021.avril.work:/home/kalaschnikow/AvrilWebAdmin.war
Login to the remote server
ssh -p 1002 kalaschnikow@avril2019.wialon-consulting.de
(the following commands will be executed on the remote server)
(Optionally) Backup old WAR files (replace 20201208 with current date)
mkdir ~/avril.bak/wars/20201208 mkdir ~/avril.bak/wars/20201208/old mkdir ~/avril.bak/wars/20201208/new cd ~/avril.bak/wars/20201208/old cp /dockerdata/volumes/avril/wildfly/deployments/AvrilDock.war . cp /dockerdata/volumes/avril/wildfly/deployments/AvrilWebAdmin.war . cd ~/avril.bak/wars/20201208/new cp ~/AvrilDock.war . cp ~/AvrilWebAdmin.war .
Stop the compose
cd /dockerdata/compose sudo docker-compose down
Copy the file(s) to the deployment directory:
cp ~/AvrilDock.war /dockerdata/volumes/avril/wildfly/deployments/AvrilDock.war cp ~/AvrilWebAdmin.war /dockerdata/volumes/avril/wildfly/deployments/AvrilWebAdmin.war
Start compose
cd /dockerdata/compose sudo docker-compose up -d
We need two MySQL containers because we have two containers (avrilkeycloak and avril), which need MySQL.
# === MySQL for keycloak === # stop native MySQL service sudo service mysql stop # remove old keycloakmysql container if necessary sudo docker rm keycloakmysql # run keycloakmysql container # ( if necessary open port with '-p xxxx:3306', where xxxx port number on localhost, e.g. 3307 ) sudo docker run --network avrilnet \ --name keycloakmysql -v /dockerdata/keycloakmysql:/var/lib/mysql \ -e MYSQL_DATABASE=keycloak -e MYSQL_USER=keycloak -e MYSQL_PASSWORD=keycYaopnlp=8 \ -e MYSQL_ROOT_PASSWORD=mysqlYaopnlp=8 -d mysql:5.5 # === MySQL for avril === # remove old avrilmysql container if necessary sudo docker rm avrilmysql # run avrilmysql container sudo docker run --network avrilnet -p 3306:3306 \ --name avrilmysql -v /dockerdata/avrilmysql:/var/lib/mysql \ -e MYSQL_DATABASE=keycloak -e MYSQL_USER=keycloak -e MYSQL_PASSWORD=keycYaopnlp=8 \ -e MYSQL_ROOT_PASSWORD=mysqlYaopnlp=8 -d mysql:5.5
# === RabbitMQ === # stop service sudo service rabbitmq-server stop # for official image: sudo docker run --network avrilnet \ -d --hostname kalaschnikow2017 --name avrilrabbitmq \ -p 15672:15672 -p 1883:1883 \ -v /dockerdata/rabbitmq/enabled_plugins:/etc/rabbitmq/enabled_plugins \ rabbitmq:3-management # for my image: sudo docker run --network avrilnet \ -d --hostname kalaschnikow2017 --name avrilrabbitmq \ -p 15672:15672 -p 1883:1883 \ avrilrabbitmq # my image on 1fire sudo docker run --network avrilnet \ -d --hostname avril2018.wialon-consulting.de --name avrilrabbitmq \ -p 15672:15672 -p 1883:1883 \ avrilrabbitmq
After that we can open management UI entering http://host_name:15672 (for example http://62.113.211.161:15672 ) in the browser.
# === Keycloak === # remove old avrilkeycloak container if necessary sudo docker rm avrilkeycloak # run avrilkeycloak container (based on official keycloak image) sudo docker run --network avrilnet --name avrilkeycloak -p 8180:8080 \ -e DB_VENDOR=mysql \ -e DB_ADDR=avrilmysql \ -e MYSQL_PORT_3306_TCP_ADDR=avrilmysql \ -e MYSQL_PORT_3306_TCP_PORT=3306 \ -e MYSQL_PASSWORD=keycYaopnlp=8 \ -d jboss/keycloak:3.4.3.Final # run avrilkeycloak container (based my own image) sudo docker run --network avrilnet --name avrilkeycloak -p 8180:8180 \ -e DB_VENDOR=mysql \ -e DB_ADDR=keycloakmysql \ -e MYSQL_PORT_3306_TCP_ADDR=keycloakmysql \ -e MYSQL_PORT_3306_TCP_PORT=3306 \ -e MYSQL_PASSWORD=keycYaopnlp=8 \ -d avrilkeycloak
# === Avril === # remove old avril container if necessary sudo docker rm avril # start avril container (old way) sudo docker run --network avrilnet --name avril -p 8080:8080 \ -v /dockerdata/avril/modules/system/add-ons:/opt/jboss/wildfly/modules/system/add-ons \ -v /dockerdata/avril/upload:/opt/jboss/wildfly/upload \ -v /dockerdata/avril/modules/system/layers/base/com/mysql:/opt/jboss/wildfly/modules/system/layers/base/com/mysql \ -v /dockerdata/avril/standalone/configuration/standalone.xml:/opt/jboss/wildfly/standalone/configuration/standalone.xml \ -it avril # start avril container sudo docker run --network avrilnet --name avril \ -p 8080:8080 -p 9990:9990 \ -v /dockerdata/avril/modules/system/add-ons:/opt/jboss/wildfly/modules/system/add-ons \ -v /dockerdata/avril/upload:/opt/jboss/wildfly/upload \ -v /dockerdata/avril/modules/system/layers/base/com/mysql:/opt/jboss/wildfly/modules/system/layers/base/com/mysql \ -it avril # start avril container in debug mode sudo docker run --network avrilnet --name avril \ -p 8080:8080 -p 9990:9990 -p 8787:8787 \ -v /dockerdata/avril/modules/system/add-ons:/opt/jboss/wildfly/modules/system/add-ons \ -v /dockerdata/avril/upload:/opt/jboss/wildfly/upload \ -v /dockerdata/avril/modules/system/layers/base/com/mysql:/opt/jboss/wildfly/modules/system/layers/base/com/mysql \ -it avril
If all containers exist, it is possible to run them with the following simple commands:
sudo docker start keycloakmysql sudo docker start avrilmysql sudo docker start avrilrabbitmq sudo docker start avrilkeycloak sudo docker start avril
Or all with one command:
sudo docker start keycloakmysql && sudo docker start avrilmysql && sudo docker start avrilrabbitmq && \ sudo docker start avrilkeycloak && sudo docker start avril
It is possible to to use option –restart unless-stopped on run command. (TODO: include it in the documentation above).
See also: https://docs.docker.com/config/containers/start-containers-automatically/
At the moment it is solved with update commands on all containers:
sudo docker update --restart unless-stopped avrilmysql && \ sudo docker update --restart unless-stopped avril && \ sudo docker update --restart unless-stopped keycloakmysql && \ sudo docker update --restart unless-stopped avrilkeycloak && \ sudo docker update --restart unless-stopped avrilrabbitmq
See this Stackoverflow question
In short:
# first save image as TAR archive docker save -o <path for generated tar file> <image name> # then copy it for example with SCP scp file.ext kalaschnikow@avril2018.wialon-consulting.de:/home/kalaschnikow # then load it into docker docker load -i <path to image tar file>
Full version (but not completed yet!):
# pack mysql images # ... # pack rabbit mq image sudo docker save -o avrilrabbitmq.tar avrilrabbitmq # pack AvrilDock image # ... # pack AvrilWebAdmin image # ... # gzip all tars as multi volume # ... # sudo gzip avrilrabbitmq.tar ... # transfer volumes to remote server ... # unpack on the remote server # ...
At first package all my images. Open IntelliJ and start following run configurations:
After that do the following on the console:
# # ### On SRC server ### # # pack AvrilKeycloak image sudo docker save -o ./AvrilKeycloak.tar avrilkeycloak:latest # copy file to the DEST server scp AvrilKeycloak.tar kalaschnikow@avril2018.wialon-consulting.de:/home/kalaschnikow # pack keycloak database sudo zip -r keycloakmysql.zip keycloakmysql # pack avril database sudo zip -r avrilmysql.zip avrilmysql # copy files to the DEST server scp avrilmysql.zip kalaschnikow@avril2018.wialon-consulting.de:/home/kalaschnikow scp keycloakmysql.zip kalaschnikow@avril2018.wialon-consulting.de:/home/kalaschnikow # # ### On DEST server ### # # copy files to _artifacts folder cd /dockerdata/_artifacts cp ~/keycloakmysql.zip . cp ~/avrilmysql.zip . mv ~/AvrilKeycloak.tar . # unpack files unzip keycloakmysql.zip unzip avrilmysql.zip # move directories to dockerdata mv keycloakmysql .. mv avrilmysql .. # create network 'avrilnet' (if it not already exists) sudo docker network create avrilnet # run keycloakmysql container # ( if necessary open port with '-p xxxx:3306', where xxxx port number on localhost, e.g. 3307 ) sudo docker run --network avrilnet \ --name keycloakmysql -v /dockerdata/keycloakmysql:/var/lib/mysql \ -e MYSQL_DATABASE=keycloak -e MYSQL_USER=keycloak -e MYSQL_PASSWORD=keycYaopnlp=8 \ -e MYSQL_ROOT_PASSWORD=mysqlYaopnlp=8 -d mysql:5.5 # load AvrilKeycloak image sudo docker load -i AvrilKeycloak.tar # run avrilkeycloak container sudo docker run --network avrilnet --name avrilkeycloak -p 8180:8180 \ -e DB_VENDOR=mysql \ -e DB_ADDR=keycloakmysql \ -e MYSQL_PORT_3306_TCP_ADDR=keycloakmysql \ -e MYSQL_PORT_3306_TCP_PORT=3306 \ -e MYSQL_PASSWORD=keycYaopnlp=8 \ -d avrilkeycloak