Skip to content

Commit 00188dc

Browse files
ztrabooarbrandeskdmccormick
authored
Allow multiple devstack instances on one machine (openedx-unsupported#532)
* Update many `docker` usages to be `docker-compose` to allow multi-devstack support via setting of `COMPOSE_PROJECT_NAME` connfiguration option in `options.local.mk`. * Add network aliases for backwards-compatibility. * Add several new Makefile targets: + dev.print-container.<service> + dev.ps + dev.stop[.<services>] + dev.kill[.<services>] + dev.down[.<services>] + dev.restart[.<services>] + dev.rm-stopped * Using new targets, fix features that would break when using an alternative `COMPOSE_PROJECT_NAME`. * Utilize `COMPOSE_FILE` docker-compose environment variable to set Docker Compose file list for all Makefile rules and scripts used through the Makefile. Co-authored-by: Adolfo R. Brandes <[email protected]> Co-authored-by: Kyle McCormick <[email protected]>
1 parent 1726f30 commit 00188dc

33 files changed

+421
-209
lines changed

Makefile

+103-73
Large diffs are not rendered by default.

Makefile.edx

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ dev.provision.whitelabel:
2323
# The containers must be started with the 'dev.up.e2e_wl_tests' target.
2424
# AND the test must be setup using the 'dev.provision.whitelabel' target.
2525
whitelabel-tests:
26-
docker run -d --name=devstack.whitelabel --network=devstack_default -v ${DEVSTACK_WORKSPACE}/edx-e2e-tests:/edx-e2e-tests -v ${DEVSTACK_WORKSPACE}/edx-platform:/edx-e2e-tests/lib/edx-platform --env-file ${DEVSTACK_WORKSPACE}/edx-e2e-tests/devstack_env edxops/e2e
27-
docker cp ${DEVSTACK_WORKSPACE}/edx-themes/edx-platform/run_whitelabel_tests.sh devstack.whitelabel:/tmp/run_whitelabel_tests.sh
26+
docker run -d --name=devstack.whitelabel --network=${COMPOSE_PROJECT_NAME:-devstack}_default -v ${DEVSTACK_WORKSPACE}/edx-e2e-tests:/edx-e2e-tests -v ${DEVSTACK_WORKSPACE}/edx-platform:/edx-e2e-tests/lib/edx-platform --env-file ${DEVSTACK_WORKSPACE}/edx-e2e-tests/devstack_env edxops/e2e
27+
docker cp ${DEVSTACK_WORKSPACE}/edx-themes/edx-platform/run_whitelabel_tests.sh $(make --silent dev.print-container.devstack.whitelabel)":/tmp/run_whitelabel_tests.sh
2828
docker exec -t devstack.whitelabel env TEST_ENV=devstack TERM=$(TERM) bash /tmp/run_whitelabel_tests.sh
2929

3030
whitelabel-cleanup:

README.rst

+10-10
Original file line numberDiff line numberDiff line change
@@ -405,11 +405,11 @@ already being correcty provisioned.
405405
So, when in doubt, it may still be best to run the full ``make dev.provision``.
406406

407407
Sometimes you may need to restart a particular application server. To do so,
408-
simply use the ``docker-compose restart`` command:
408+
simply use the ``make dev.restart.%`` command:
409409

410410
.. code:: sh
411411
412-
docker-compose restart <service>
412+
make dev.restart.<service>
413413
414414
In all the above commands, ``<service>`` should be replaced with one of the following:
415415

@@ -681,7 +681,7 @@ vary depending on the database. For all of the options, see ``provision.sql``.
681681
- Password: ``password``
682682

683683
If you have trouble connecting, ensure the port was mapped successfully by
684-
running ``docker-compose ps`` and looking for a line like this:
684+
running ``make dev.ps`` and looking for a line like this:
685685
``edx.devstack.mysql docker-entrypoint.sh mysql ... Up 0.0.0.0:3506→3306/tcp``.
686686

687687
Switching branches
@@ -774,20 +774,20 @@ Set a PDB breakpoint anywhere in the code using:
774774
775775
and your attached session will offer an interactive PDB prompt when the breakpoint is hit.
776776

777-
To detach from the container, you'll need to stop the container with:
777+
You may be able to detach from the container with the ``Ctrl-P, Ctrl-Q`` key sequence.
778+
If that doesn't work, you will have either close your terminal window,
779+
stop the container with:
778780

779781
.. code:: sh
780782
781-
make stop
783+
make dev.stop.<service>
782784
783-
or a manual Docker command to bring down the container:
785+
or kill the container with:
784786

785787
.. code:: sh
786788
787-
docker kill $(docker ps -a -q --filter="name=edx.devstack.<container name>")
789+
make dev.kill.<service>
788790
789-
Alternatively, some terminals allow detachment from a running container with the
790-
``Ctrl-P, Ctrl-Q`` key sequence.
791791
792792
Running LMS and Studio Tests
793793
----------------------------
@@ -872,7 +872,7 @@ Check the logs
872872

873873
If a container stops unexpectedly, you can look at its logs for clues::
874874

875-
docker-compose logs lms
875+
make <service>-logs
876876

877877
Update the code and images
878878
~~~~~~~~~~~~~~~~~~~~~~~~~~

course-generator/create-courses.sh

+4-4
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ for arg in "$@"; do
1515
studio=true
1616
fi
1717
elif [ $arg == "--ecommerce" ]; then
18-
if [ ! "$(docker exec -t edx.devstack.ecommerce bash -c 'echo "Course will be created for ecommerce"; exit $?')" ]; then
18+
if [ ! "$(docker-compose exec ecommerce bash -c 'echo "Course will be created for ecommerce"; exit $?')" ]; then
1919
echo "Issue with ecommerce container"
2020
container_error=true
2121
else
2222
ecommerce=true
2323
fi
2424
elif [ $arg == "--marketing" ]; then
25-
if [ ! "$(docker exec -t edx.devstack.marketing bash -c 'echo "Course will be created for marketing"; exit $?')" ]; then
25+
if [ ! "$(docker-compose exec marketing bash -c 'echo "Course will be created for marketing"; exit $?')" ]; then
2626
echo "Issue with marketing container. Course creation will proceed without marketing container."
2727
else
2828
marketing=true
@@ -54,10 +54,10 @@ fi
5454

5555
if $ecommerce ; then
5656
echo "Creating courses on ecommerce."
57-
docker exec -t edx.devstack.ecommerce bash -c "source /edx/app/ecommerce/ecommerce_env && python /edx/app/ecommerce/ecommerce/manage.py generate_courses '$course_json'"
57+
docker-compose exec ecommerce bash -c "source /edx/app/ecommerce/ecommerce_env && python /edx/app/ecommerce/ecommerce/manage.py generate_courses '$course_json'"
5858
fi
5959

6060
if $marketing ; then
6161
echo "Creating courses on marketing."
62-
docker exec -t edx.devstack.marketing bash -c "drush generate_courses '$course_json'"
62+
docker-compose exec marketing bash -c "drush generate_courses '$course_json'"
6363
fi

destroy.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ set -e
55
read -p "This will delete all data in your devstack. Would you like to proceed? [y/n] " -r
66
if [[ $REPLY =~ ^[Yy]$ ]]
77
then
8-
docker-compose -f docker-compose.yml -f docker-compose-watchers.yml -f docker-compose-host.yml -f docker-compose-themes.yml -f docker-compose-analytics-pipeline.yml down -v
8+
docker-compose down -v
99
fi

docker-compose-analytics-pipeline.yml

+40-8
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@ version: "2.1"
33
services:
44
namenode:
55
image: edxops/analytics_pipeline_hadoop_namenode:${OPENEDX_RELEASE:-latest}
6-
container_name: edx.devstack.analytics_pipeline.namenode
6+
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.analytics_pipeline.namenode"
77
hostname: namenode
88
environment:
99
- CLUSTER_NAME=devstack
10+
networks:
11+
default:
12+
aliases:
13+
- edx.devstack.analytics_pipeline.namenode
1014
ports:
1115
- 127.0.0.1:50070:50070
1216
command: ["/run.sh"]
@@ -15,12 +19,16 @@ services:
1519

1620
datanode:
1721
image: edxops/analytics_pipeline_hadoop_datanode:${OPENEDX_RELEASE:-latest}
18-
container_name: edx.devstack.analytics_pipeline.datanode
22+
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.analytics_pipeline.datanode"
1923
hostname: datanode
2024
environment:
2125
CORE_CONF_fs_defaultFS: "hdfs://namenode:8020"
2226
depends_on:
2327
- namenode
28+
networks:
29+
default:
30+
aliases:
31+
- edx.devstack.analytics_pipeline.datanode
2432
ports:
2533
- 127.0.0.1:50075:50075
2634
command: ["/run.sh"]
@@ -29,7 +37,7 @@ services:
2937

3038
resourcemanager:
3139
image: edxops/analytics_pipeline_hadoop_resourcemanager:${OPENEDX_RELEASE:-latest}
32-
container_name: edx.devstack.analytics_pipeline.resourcemanager
40+
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.analytics_pipeline.resourcemanager"
3341
hostname: resourcemanager
3442
environment:
3543
CORE_CONF_fs_defaultFS: "hdfs://namenode:8020"
@@ -40,13 +48,17 @@ services:
4048
depends_on:
4149
- namenode
4250
- datanode
51+
networks:
52+
default:
53+
aliases:
54+
- edx.devstack.analytics_pipeline.resourcemanager
4355
ports:
4456
- 127.0.0.1:8088:8088 # resource manager web ui
4557
command: ["/run.sh"]
4658

4759
nodemanager:
4860
image: edxops/analytics_pipeline_hadoop_nodemanager:${OPENEDX_RELEASE:-latest}
49-
container_name: edx.devstack.analytics_pipeline.nodemanager
61+
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.analytics_pipeline.nodemanager"
5062
hostname: nodemanager
5163
environment:
5264
CORE_CONF_fs_defaultFS: "hdfs://namenode:8020"
@@ -60,15 +72,23 @@ services:
6072
- resourcemanager
6173
- namenode
6274
- datanode
75+
networks:
76+
default:
77+
aliases:
78+
- edx.devstack.analytics_pipeline.nodemanager
6379
ports:
6480
- 127.0.0.1:8042:8042 # node manager web ui
6581
- 127.0.0.1:19888:19888 # node manager job history server ui
6682
command: ["/run.sh"]
6783

6884
sparkmaster:
6985
image: edxops/analytics_pipeline_spark_master:${OPENEDX_RELEASE:-latest}
70-
container_name: edx.devstack.analytics_pipeline.sparkmaster
86+
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.analytics_pipeline.sparkmaster"
7187
hostname: sparkmaster
88+
networks:
89+
default:
90+
aliases:
91+
- edx.devstack.analytics_pipeline.sparkmaster
7292
ports:
7393
- 127.0.0.1:8080:8080
7494
- 127.0.0.1:7077:7077 # spark master port
@@ -77,25 +97,33 @@ services:
7797

7898
sparkworker:
7999
image: edxops/analytics_pipeline_spark_worker:${OPENEDX_RELEASE:-latest}
80-
container_name: edx.devstack.analytics_pipeline.sparkworker
100+
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.analytics_pipeline.sparkworker"
81101
hostname: sparkworker
82102
depends_on:
83103
- sparkmaster
84104
environment:
85105
- SPARK_MASTER=spark://sparkmaster:7077
106+
networks:
107+
default:
108+
aliases:
109+
- edx.devstack.analytics_pipeline.sparkworker
86110
ports:
87111
- 127.0.0.1:8081:8081 # spark worker UI
88112

89113
vertica:
90114
image: iamamr/vertica:9.1.0-0
91115
hostname: vertica
92-
container_name: edx.devstack.analytics_pipeline.vertica
116+
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.analytics_pipeline.vertica"
93117
volumes:
94118
- vertica_data:/home/dbadmin/docker
119+
networks:
120+
default:
121+
aliases:
122+
- edx.devstack.analytics_pipeline.vertica
95123

96124
analyticspipeline:
97125
image: edxops/analytics_pipeline:${OPENEDX_RELEASE:-latest}
98-
container_name: edx.devstack.analytics_pipeline
126+
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.analytics_pipeline"
99127
hostname: analyticspipeline
100128
volumes:
101129
- ${DEVSTACK_WORKSPACE}/edx-analytics-pipeline:/edx/app/analytics_pipeline/analytics_pipeline
@@ -109,6 +137,10 @@ services:
109137
- sparkworker
110138
- elasticsearch
111139
- vertica
140+
networks:
141+
default:
142+
aliases:
143+
- edx.devstack.analytics_pipeline
112144
ports:
113145
- 127.0.0.1:4040:4040 # spark web UI
114146
environment:

docker-compose-marketing-site.yml

+5-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ services:
77
- MARKETING_SITE_ROOT="http://localhost:8080"
88

99
marketing:
10-
container_name: edx.devstack.marketing
10+
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.marketing"
1111
depends_on:
1212
- mysql
1313
- memcached
@@ -26,5 +26,9 @@ services:
2626
# IP address of your machine to enable debugging (IP_ADDRESS set in .env file)
2727
- XDEBUG_CONFIG=remote_host=${XDEBUG_IP_ADDRESS:-127.0.0.1}
2828
image: edxops/edx-mktg:${OPENEDX_RELEASE:-latest}
29+
networks:
30+
default:
31+
aliases:
32+
- edx.devstack.marketing
2933
ports:
3034
- "8080:80"

docker-compose-watchers-nfs.yml

+11-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ version: "2.1"
33
services:
44
lms_watcher:
55
command: bash -c 'cd /edx/app/edxapp/edx-platform && source ../edxapp_env && while true; do paver watch_assets --w=$$ASSET_WATCHER_TIMEOUT; sleep 2; done'
6-
container_name: edx.devstack.lms_watcher
6+
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.lms_watcher"
77
environment:
88
BOK_CHOY_HOSTNAME: edx.devstack.lms_watcher
99
ASSET_WATCHER_TIMEOUT: 12
@@ -14,10 +14,14 @@ services:
1414
- edxapp_node_modules:/edx/app/edxapp/edx-platform/node_modules
1515
- src-nfs:/edx/src
1616
- ${DEVSTACK_WORKSPACE}/edx-themes:/edx/app/edx-themes:cached
17+
networks:
18+
default:
19+
aliases:
20+
- edx.devstack.lms_watcher
1721

1822
studio_watcher:
1923
command: bash -c 'cd /edx/app/edxapp/edx-platform && source ../edxapp_env && while true; do paver watch_assets --w=$$ASSET_WATCHER_TIMEOUT; sleep 2; done'
20-
container_name: edx.devstack.studio_watcher
24+
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.studio_watcher"
2125
environment:
2226
BOK_CHOY_HOSTNAME: edx.devstack.studio_watcher
2327
ASSET_WATCHER_TIMEOUT: 12
@@ -28,6 +32,11 @@ services:
2832
- edxapp_node_modules:/edx/app/edxapp/edx-platform/node_modules
2933
- src-nfs:/edx/src:cached
3034
- ${DEVSTACK_WORKSPACE}/edx-themes:/edx/app/edx-themes:cached
35+
networks:
36+
default:
37+
aliases:
38+
- edx.devstack.studio_watcher
39+
3140
volumes:
3241
edxapp_lms_assets:
3342
edxapp_studio_assets:

docker-compose-watchers.yml

+10-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ version: "2.1"
33
services:
44
lms_watcher:
55
command: bash -c 'cd /edx/app/edxapp/edx-platform && source ../edxapp_env && while true; do paver watch_assets --w=$$ASSET_WATCHER_TIMEOUT; sleep 2; done'
6-
container_name: edx.devstack.lms_watcher
6+
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.lms_watcher"
77
environment:
88
BOK_CHOY_HOSTNAME: edx.devstack.lms_watcher
99
ASSET_WATCHER_TIMEOUT: 12
@@ -14,10 +14,14 @@ services:
1414
- edxapp_node_modules:/edx/app/edxapp/edx-platform/node_modules
1515
- ${DEVSTACK_WORKSPACE}/src:/edx/src:cached
1616
- ${DEVSTACK_WORKSPACE}/edx-themes:/edx/app/edx-themes:cached
17+
networks:
18+
default:
19+
aliases:
20+
- edx.devstack.lms_watcher
1721

1822
studio_watcher:
1923
command: bash -c 'cd /edx/app/edxapp/edx-platform && source ../edxapp_env && while true; do paver watch_assets --w=$$ASSET_WATCHER_TIMEOUT; sleep 2; done'
20-
container_name: edx.devstack.studio_watcher
24+
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.studio_watcher"
2125
environment:
2226
BOK_CHOY_HOSTNAME: edx.devstack.studio_watcher
2327
ASSET_WATCHER_TIMEOUT: 12
@@ -28,6 +32,10 @@ services:
2832
- edxapp_node_modules:/edx/app/edxapp/edx-platform/node_modules
2933
- ${DEVSTACK_WORKSPACE}/src:/edx/src:cached
3034
- ${DEVSTACK_WORKSPACE}/edx-themes:/edx/app/edx-themes:cached
35+
networks:
36+
default:
37+
aliases:
38+
- edx.devstack.studio_watcher
3139

3240
volumes:
3341
edxapp_lms_assets:

docker-compose-xqueue.yml

+10-2
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,27 @@ version: "2.1"
22

33
services:
44
xqueue:
5-
container_name: edx.devstack.xqueue
5+
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.xqueue"
66
image: edxops/xqueue:${OPENEDX_RELEASE:-latest}
77
command: bash -c 'source /edx/app/xqueue/xqueue_env && while true; do python /edx/app/xqueue/xqueue/manage.py runserver 0.0.0.0:18040 ; sleep 2; done'
88
volumes:
99
- ${DEVSTACK_WORKSPACE}/xqueue:/edx/app/xqueue/xqueue:cached
1010
# depends_on: even though we need mysql, we can't refer to it because it's started in the other compose file
11+
networks:
12+
default:
13+
aliases:
14+
- edx.devstack.xqueue
1115
ports:
1216
- 18040:18040
1317

1418
xqueue_consumer:
15-
container_name: edx.devstack.xqueue_consumer
19+
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.xqueue_consumer"
1620
image: edxops/xqueue:${OPENEDX_RELEASE:-latest}
1721
command: bash -c 'source /edx/app/xqueue/xqueue_env && while true; do python /edx/app/xqueue/xqueue/manage.py run_consumer ; sleep 2; done'
1822
volumes:
1923
- ${DEVSTACK_WORKSPACE}/xqueue:/edx/app/xqueue/xqueue:cached
24+
networks:
25+
default:
26+
aliases:
27+
- edx.devstack.xqueue_consumer
2028
# depends_on: even though we need mysql, we can't refer to it because it's started in the other compose file

0 commit comments

Comments
 (0)