Skip to content

Commit 61e2171

Browse files
authored
CI optimize (#58)
1 parent 6727e8f commit 61e2171

File tree

7 files changed

+194
-107
lines changed

7 files changed

+194
-107
lines changed

.github/workflows/docker.yml

+165-78
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,22 @@ env:
1616
DOCKER_REGISTRY_PASSWORD: ${{ secrets.DOCKER_REGISTRY_PASSWORD }}
1717

1818
jobs:
19-
build-base:
19+
qpod_base:
20+
name: qpod/base
2021
runs-on: ubuntu-latest
2122
steps:
2223
- uses: actions/checkout@v2
23-
- run: echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json && sudo service docker restart && docker info
24-
25-
- name: docker - atom/base
26-
run: |
24+
- run: |
2725
source ./tool.sh
28-
build_image atom latest docker_atom/Dockerfile && push_image
29-
build_image base latest docker_base/Dockerfile
30-
alias_image base latest py-mini latest
31-
push_image
26+
build_image atom latest docker_atom/Dockerfile && push_image
27+
build_image base latest docker_base/Dockerfile && alias_image base latest python latest && push_image
3228
33-
build-cuda-base:
29+
qpod_cuda_11:
30+
name: qpod/cuda_11.x
3431
runs-on: ubuntu-latest
3532
steps:
3633
- uses: actions/checkout@v2
37-
- run: echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json && sudo service docker restart
38-
- name: docker - cuda
39-
run: |
34+
- run: |
4035
source ./tool.sh
4136
4237
build_image cuda_11.4 latest docker_atom/Dockerfile --build-arg "BASE_IMG=nvidia/cuda:11.4.1-cudnn8-runtime-ubuntu20.04"
@@ -48,19 +43,36 @@ jobs:
4843
build_image cuda_11.2 latest docker_base/Dockerfile --build-arg "BASE_IMG=cuda_11.2"
4944
build_image cuda_11.2 latest docker_cuda/Dockerfile --build-arg "BASE_IMG=cuda_11.2" && push_image
5045
51-
# For legacy tensorflow 1.15 support
46+
qpod_cuda_10:
47+
name: qpod/cuda_10.x
48+
runs-on: ubuntu-latest
49+
steps:
50+
- uses: actions/checkout@v2
51+
- run: |
52+
source ./tool.sh
53+
54+
# cuda_10.0 - for legacy tensorflow 1.15 support
5255
build_image cuda_10.0 latest docker_atom/Dockerfile --build-arg "BASE_IMG=nvidia/cuda:10.0-cudnn7-runtime-ubuntu18.04"
5356
build_image cuda_10.0 latest docker_base/Dockerfile --build-arg "BASE_IMG=cuda_10.0"
5457
build_image cuda_10.0 latest docker_cuda/Dockerfile --build-arg "BASE_IMG=cuda_10.0" && push_image
5558
56-
build-core:
57-
needs: build-base
59+
# cuda_10.1
60+
build_image cuda_10.1 latest docker_atom/Dockerfile --build-arg "BASE_IMG=nvidia/cuda:10.1-cudnn7-runtime-ubuntu18.04"
61+
build_image cuda_10.1 latest docker_base/Dockerfile --build-arg "BASE_IMG=cuda_10.1"
62+
build_image cuda_10.1 latest docker_cuda/Dockerfile --build-arg "BASE_IMG=cuda_10.1" && push_image
63+
64+
# cuda_10.2
65+
build_image cuda_10.2 latest docker_atom/Dockerfile --build-arg "BASE_IMG=nvidia/cuda:10.2-cudnn7-runtime-ubuntu18.04"
66+
build_image cuda_10.2 latest docker_base/Dockerfile --build-arg "BASE_IMG=cuda_10.2"
67+
build_image cuda_10.2 latest docker_cuda/Dockerfile --build-arg "BASE_IMG=cuda_10.2" && push_image
68+
69+
qpod_core:
70+
name: qpod/core
71+
needs: qpod_base
5872
runs-on: ubuntu-latest
5973
steps:
6074
- uses: actions/checkout@v2
61-
- run: echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json && sudo service docker restart
62-
- name: docker-core
63-
run: |
75+
- run: |
6476
source ./tool.sh
6577
build_image core latest docker_core/Dockerfile \
6678
--build-arg "ARG_PROFILE_PYTHON=base,datascience,database,nlp,cv,bio,chem,tf2,torch" \
@@ -73,84 +85,161 @@ jobs:
7385
--build-arg "ARG_PROFILE_LATEX=base,cjk"
7486
push_image
7587
76-
build-py:
77-
needs: build-base
88+
qpod_py-data:
89+
name: qpod/py-data
90+
needs: qpod_base
7891
runs-on: ubuntu-latest
7992
steps:
8093
- uses: actions/checkout@v2
81-
- run: echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json && sudo service docker restart
82-
- name: docker-py
83-
run: |
84-
source ./tool.sh
85-
build_image py-data latest docker_core/Dockerfile --build-arg "ARG_PROFILE_PYTHON=datascience,database" && push_image
86-
build_image py-nlp latest docker_core/Dockerfile --build-arg "ARG_PROFILE_PYTHON=datascience,nlp" && push_image
87-
build_image py-cv latest docker_core/Dockerfile --build-arg "ARG_PROFILE_PYTHON=datascience,cv" && push_image
88-
build_image py-bio latest docker_core/Dockerfile --build-arg "ARG_PROFILE_PYTHON=datascience,bio" && push_image
89-
build_image py-bio latest docker_core/Dockerfile --build-arg "ARG_PROFILE_PYTHON=datascience,chem" && push_image
90-
build_image py-std latest docker_core/Dockerfile \
91-
--build-arg "ARG_PROFILE_PYTHON=datascience,database,nlp,cv,bio,chem" \
92-
&& push_image
93-
build_image py-jdk latest docker_core/Dockerfile \
94-
--build-arg "ARG_PROFILE_PYTHON=datascience,database,nlp,cv,bio,chem" \
95-
--build-arg "ARG_PROFILE_JAVA=base" \
96-
&& push_image
94+
- run: source ./tool.sh && build_image py-data latest docker_core/Dockerfile --build-arg "ARG_PROFILE_PYTHON=datascience,database" && push_image
95+
96+
qpod_py-nlp:
97+
name: qpod/py-nlp
98+
needs: qpod_base
99+
runs-on: ubuntu-latest
100+
steps:
101+
- uses: actions/checkout@v2
102+
- run: source ./tool.sh && build_image py-nlp latest docker_core/Dockerfile --build-arg "ARG_PROFILE_PYTHON=datascience,nlp" && push_image
103+
104+
qpod_py-cv:
105+
name: qpod/py-cv
106+
needs: qpod_base
107+
runs-on: ubuntu-latest
108+
steps:
109+
- uses: actions/checkout@v2
110+
- run: source ./tool.sh && build_image py-cv latest docker_core/Dockerfile --build-arg "ARG_PROFILE_PYTHON=datascience,cv" && push_image
111+
112+
qpod_py-bio:
113+
name: qpod/py-bio
114+
needs: qpod_base
115+
runs-on: ubuntu-latest
116+
steps:
117+
- uses: actions/checkout@v2
118+
- run: source ./tool.sh && build_image py-bio latest docker_core/Dockerfile --build-arg "ARG_PROFILE_PYTHON=datascience,bio" && push_image
119+
120+
qpod_py-chem:
121+
name: qpod/py-chem
122+
needs: qpod_base
123+
runs-on: ubuntu-latest
124+
steps:
125+
- uses: actions/checkout@v2
126+
- run: source ./tool.sh && build_image py-chem latest docker_core/Dockerfile --build-arg "ARG_PROFILE_PYTHON=datascience,chem" && push_image
127+
128+
qpod_py-std:
129+
name: qpod/py-std
130+
needs: qpod_base
131+
runs-on: ubuntu-latest
132+
steps:
133+
- uses: actions/checkout@v2
134+
- run: source ./tool.sh && build_image py-std latest docker_core/Dockerfile --build-arg "ARG_PROFILE_PYTHON=datascience,database,nlp,cv,bio,chem" && push_image
135+
136+
qpod_py-jdk:
137+
name: qpod/py-jdk
138+
needs: qpod_base
139+
runs-on: ubuntu-latest
140+
steps:
141+
- uses: actions/checkout@v2
142+
- run: source ./tool.sh && build_image py-jdk latest docker_core/Dockerfile --build-arg "ARG_PROFILE_PYTHON=datascience,database,nlp,cv,bio,chem" --build-arg "ARG_PROFILE_JAVA=base" && push_image
143+
144+
qpod_r-base:
145+
name: qpod/r-base
146+
needs: qpod_base
147+
runs-on: ubuntu-latest
148+
steps:
149+
- uses: actions/checkout@v2
150+
- run: source ./tool.sh build_image r-base latest docker_core/Dockerfile --build-arg "ARG_PROFILE_R=base" && push_image
97151

98-
build-r:
99-
needs: build-base
152+
qpod_r-std:
153+
name: qpod/r-std
154+
needs: qpod_base
100155
runs-on: ubuntu-latest
101156
steps:
102157
- uses: actions/checkout@v2
103-
- run: echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json && sudo service docker restart
104-
- name: docker-R
105-
run: |
158+
- run: source ./tool.sh && build_image r-std latest docker_core/Dockerfile --build-arg "ARG_PROFILE_R=base,datascience" --build-arg "ARG_PROFILE_JAVA=base" && push_image
159+
160+
qpod_r-latex:
161+
name: qpod/r-latex
162+
needs: qpod_base
163+
runs-on: ubuntu-latest
164+
steps:
165+
- uses: actions/checkout@v2
166+
- run: |
106167
source ./tool.sh
107-
build_image r-mini latest docker_core/Dockerfile \
108-
--build-arg "ARG_PROFILE_R=base" \
109-
&& push_image
110-
build_image r-std latest docker_core/Dockerfile \
111-
--build-arg "ARG_PROFILE_R=base,datascience" \
112-
--build-arg "ARG_PROFILE_JAVA=base" \
113-
&& push_image
114168
build_image r-latex latest docker_core/Dockerfile \
115169
--build-arg "ARG_PROFILE_R=base,datascience" \
116170
--build-arg "ARG_PROFILE_JAVA=base" \
117-
--build-arg "ARG_PROFILE_LATEX=base,cjk" \
118-
&& push_image
171+
--build-arg "ARG_PROFILE_LATEX=base,cjk"
172+
push_image
173+
174+
qpod_r-studio:
175+
name: qpod/r-studio
176+
needs: qpod_base
177+
runs-on: ubuntu-latest
178+
steps:
179+
- uses: actions/checkout@v2
180+
- run: |
181+
source ./tool.sh
119182
build_image r-studio latest docker_core/Dockerfile \
120183
--build-arg "ARG_PROFILE_R=base,datascience,rstudio,rshiny" \
121184
--build-arg "ARG_PROFILE_JAVA=base" \
122-
--build-arg "ARG_PROFILE_LATEX=base,cjk" \
123-
&& push_image
185+
--build-arg "ARG_PROFILE_LATEX=base,cjk"
186+
push_image
124187
125-
build-other:
126-
needs: build-base
188+
qpod_node:
189+
name: qpod/node
190+
needs: qpod_base
127191
runs-on: ubuntu-latest
128192
steps:
129193
- uses: actions/checkout@v2
130-
- run: echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json && sudo service docker restart
131-
- name: docker-other
132-
run: |
133-
source ./tool.sh
134-
build_image node latest docker_core/Dockerfile --build-arg "ARG_PROFILE_NODEJS=base" && push_image
135-
build_image jdk latest docker_core/Dockerfile --build-arg "ARG_PROFILE_JAVA=base" && push_image
136-
build_image julia latest docker_core/Dockerfile --build-arg "ARG_PROFILE_JULIA=base" && push_image
137-
build_image go latest docker_core/Dockerfile --build-arg "ARG_PROFILE_GO=base" && push_image
194+
- run: source ./tool.sh && build_image node latest docker_core/Dockerfile --build-arg "ARG_PROFILE_NODEJS=base" && push_image
195+
196+
qpod_jdk:
197+
name: qpod/jdk
198+
needs: qpod_base
199+
runs-on: ubuntu-latest
200+
steps:
201+
- uses: actions/checkout@v2
202+
- run: source ./tool.sh && build_image jdk latest docker_core/Dockerfile --build-arg "ARG_PROFILE_JAVA=base" && push_image
203+
204+
qpod_julia:
205+
name: qpod/julia
206+
needs: qpod_base
207+
runs-on: ubuntu-latest
208+
steps:
209+
- uses: actions/checkout@v2
210+
- run: source ./tool.sh && build_image julia latest docker_core/Dockerfile --build-arg "ARG_PROFILE_JULIA=base" && push_image
138211

139-
build-cuda-core:
140-
needs: build-cuda-base
212+
qpod_go:
213+
name: qpod/go
214+
needs: qpod_base
141215
runs-on: ubuntu-latest
142216
steps:
143217
- uses: actions/checkout@v2
144-
- run: echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json && sudo service docker restart
145-
- name: docker-cuda-core
146-
run: |
218+
- run: source ./tool.sh && build_image go latest docker_core/Dockerfile --build-arg "ARG_PROFILE_GO=base" && push_image
219+
220+
qpod_tf1:
221+
name: qpod/tf1
222+
needs: qpod_cuda_10
223+
runs-on: ubuntu-latest
224+
steps:
225+
- uses: actions/checkout@v2
226+
- run: |
147227
source ./tool.sh
148228
149229
build_image py-cuda-10.0 latest docker_core/Dockerfile \
150230
--build-arg "ARG_PROFILE_PYTHON=tf1,datascience,nlp,cv" \
151231
--build-arg "BASE_IMG=cuda_10.0"
152232
alias_image py-cuda-10.0 latest tf1 latest && push_image
153233
234+
qpod_core-cuda:
235+
name: qpod/core-cuda
236+
needs: qpod_cuda_11
237+
runs-on: ubuntu-latest
238+
steps:
239+
- uses: actions/checkout@v2
240+
- run: |
241+
source ./tool.sh
242+
154243
build_image full-cuda-11.2 latest docker_core/Dockerfile \
155244
--build-arg "BASE_IMG=cuda_11.2" \
156245
--build-arg "ARG_PROFILE_PYTHON=base,datascience,database,nlp,cv,bio,chem,tf2,torch" \
@@ -162,28 +251,26 @@ jobs:
162251
--build-arg "ARG_PROFILE_LATEX=base,cjk"
163252
alias_image full-cuda-11.2 latest core-cuda latest && push_image
164253
165-
build-dev-core:
166-
needs: build-core
254+
qpod_core-dev:
255+
name: qpod/core-dev
256+
needs: qpod_core
167257
runs-on: ubuntu-latest
168258
steps:
169259
- uses: actions/checkout@v2
170-
- run: echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json && sudo service docker restart
171-
- name: docker-other
172-
run: |
260+
- run: |
173261
source ./tool.sh
174262
build_image core-dev latest docker_dev/Dockerfile \
175263
--build-arg "ARG_PROFILE_JUPYTER=base,kernels,extensions" \
176264
--build-arg "ARG_PROFILE_VSCODE=base"
177265
alias_image core-dev latest full latest && push_image
178266
179-
build-dev-cuda:
180-
needs: build-cuda-core
267+
qpod_cuda-dev:
268+
name: qpod/cuda-dev
269+
needs: qpod_core-cuda
181270
runs-on: ubuntu-latest
182271
steps:
183272
- uses: actions/checkout@v2
184-
- run: echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json && sudo service docker restart
185-
- name: docker-dev-cuda
186-
run: |
273+
- run: |
187274
source ./tool.sh
188275
build_image cuda-dev latest docker_dev/Dockerfile \
189276
--build-arg "BASE_IMG=core-cuda" \

README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ Typically, you can choose `full` / `full-cuda` if you have enough disk space and
7070
| py-std | https://hub.docker.com/r/qpod/py-std | qpod/base | Python environment including all the packages mentioned above installed. |
7171
| py-jdk | https://hub.docker.com/r/qpod/py-jdk | qpod/base | `py-std` plus OpenJDK. (no LaTex) |
7272
| r-mini | https://hub.docker.com/r/qpod/r-mini | qpod/base | Minimal R environment -- no JDK, no R data science packages, no LaTex. |
73-
| r-std | https://hub.docker.com/r/qpod/r-std | qpod/base | Standard R environment for data science -- including popular R data science packages. (OpenJDK included since many R packages need Java, no LaTex.) |
73+
| r-std | https://hub.docker.com/r/qpod/r-std | qpod/base | Standard R environment for data science -- including popular R data science packages. (OpenJDK included since many R packages need Java, no LaTex.) |
7474
| r-latex | https://hub.docker.com/r/qpod/r-latex | qpod/base | `r-std` + LaTex -- this is the full R environment if you do not need RStudio. |
7575
| r-studio | https://hub.docker.com/r/qpod/r-studio | qpod/base | Full R environment if you want to use RStudio. `r-latex` + RStudio + RShiny. |
7676
| node | https://hub.docker.com/r/qpod/node | qpod/base | Minimal NodeJS environment (including npm and yarn). |
@@ -173,8 +173,8 @@ Minor modifications are expected to port to `arm64`, `ppc64le` platform.
173173

174174
Although `conda` is installed, we do not recommend to use conda to install a lib/package, because:
175175

176-
- `conda` does not reuse the existing system library yet if a system lib is already installed -- `conda` installs it again.
177-
- `conda` does not provide a stable Linux system library repository yet, for example, some lib works well on `debian:jessie` but fail on `debian:stretch`.
176+
- `conda` repo mirrors are generally not avaliable in restricted enterprise LAN, especially in fincial/medical related companies.
177+
- `conda` does not reuse the existing system library yet if a system lib is already installed -- `conda` installs it again; and `conda` does not provide a stable Linux system library repository yet, for example, some lib works well on `debian:jessie` but fail on `debian:stretch`.
178178

179179
### Customization
180180

docker_atom/work/script-setup.sh

+3-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ setup_nvtop() {
4141

4242

4343
setup_java_base() {
44-
URL_OPENJDK=`curl -sL https://jdk.java.net/archive/ | grep 'linux-x64_bin.tar' | sed -n 's/.*href="\([^"]*\).*/\1/p' | head -n 1` \
44+
VERSION_JDK=11 \
45+
&& URL_OPENJDK=`curl -sL https://jdk.java.net/archive/ | grep 'linux-x64_bin.tar' | grep -v sha256 | sed -n 's/.*href="\([^"]*\).*/\1/p' | grep "jdk${VERSION_JDK}" | head -n 1` \
46+
&& echo "Installing JDK from: ${URL_OPENJDK}" \
4547
&& install_tar_gz ${URL_OPENJDK} && mv /opt/jdk-* /opt/jdk \
4648
&& ln -s /opt/jdk/bin/* /usr/bin/ \
4749
&& echo "@ Version of Java (java/javac):" && java -version && javac -version

docker_dev/work/install_list_JPY_extend.pip

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
ipyparallel ipynb % IPython extensions
55
nbresuse % Notebook extension
6-
jupyter_nbextensions_configurator % Jupyter Notebook extension configurator
7-
jupyter_contrib_nbextensions % Jupyter Notebook third-party extensions
6+
# jupyter_nbextensions_configurator % Jupyter Notebook extension configurator
7+
# jupyter_contrib_nbextensions % Jupyter Notebook third-party extensions
88

99
jupyterlab_server % Jupyter Lab Server
1010
jupyterlab-git % Jupyter Lab Git extension
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
{
2-
"NotebookApp": {
2+
"ServerApp": {
33
"ip": "0.0.0.0",
44
"port": 8888,
5+
"root_dir": "/root",
6+
"default_url": "/lab",
57
"allow_root": true,
6-
"notebook_dir": "/root",
7-
"default_url": "/lab"
8+
"allow_origin": "*",
9+
"open_browser": false
810
}
911
}

0 commit comments

Comments
 (0)