Install Docker Engine on Ubuntu | Docker Docs
-
基础作业:
- 在自己的本地笔记本电脑/远程服务器上,用 Docker 容器创建 Python / Jupyter 开发环境。
- 自行安装好 VS Code 后,用 SSH remote 扩展远程连接自己创建好的 Docker 容器。
-
扩展作业:
- 在自己本地/远程服务器上,用 Docker 容器创建支持 GPUs 的 Python / Jupyter 开发环境(需要有GPU卡)
- 创建 LALsuite / LISAcode 的源码编译好的容器镜像
Install Docker Engine on Ubuntu | Docker Docs
1.安装
2.启动服务
sudo service docker start
docker version
docker info
3.dockerfile
FROM python:3.10
COPY . /home/wtl
EXPOSE 8000
WORKDIR /home/wtl
RUN apt-get update && apt-get install \
-y --no-install-recommends \
python3-setuptools \
python3-pip \
python3-dev \
python3-venv \
git \
&& \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
CMD python -c "print('hello')"
4.创建docker
##-t +docker名称;
##-f +dockerfile名称
sudo docker build -t docker_py -f dockerfile_py .
5.运行docker
sudo docker run docker_py
报错:bash: setup.sh: No such file or directory
(可以看到问题在于dockerfile最后一行,先注释掉。实际上CMD相当于应用程序)
于是运行成功:出现”“hello”
6.进入容器
sudo docker run -it docker_py /bin/bash
成功进入
exit 退出
#查看存在的docker
sudo docker ps -a
7.删除容器
sudo docker rm +dockerID
8.unified dockerfile
#!/bin/bash
#sudo docker build -t dockerfile_py2 .
sudo docker build -t python2 -f dockerfile3 .
sudo docker run -itd \
-p 1234:22 \
-p 19999:8888 \
--name wtl_jupyter \
python2
ssh -p 1234 root@0.0.0.0
https://github.com/t1nglanwang/GWData-Bootcamp/blob/main/2023/workflow/Dockerfile
FROM ubuntu:20.04
LABEL MAINTAINER="He Wang<hewang@ucas.ac.cn>"
ARG RELEASE_NAME=focal
ARG ROOT_PASSWD=root
ENV SSH_PORT 22
ENV PATH /root/miniconda3/bin:$PATH
# Open port
EXPOSE 8888
EXPOSE 22
#
# UTF-8 encoding to support chs characters
#
RUN echo "export LANG=C.UTF-8" >>/etc/profile \
#
# apt sources backup
#
&& cp /etc/apt/sources.list /etc/apt/sources.list.bak \
#
# switch apt source to TUNA
#
#换源
&& echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ release-name main restricted universe multiverse\n\
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ release-name-updates main restricted universe multiverse\n\
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ release-name-backports main restricted universe multiverse\n\
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ release-name-security main restricted universe multiverse" >/etc/apt/sources.list \
&& sed -i 's/release-name/'$RELEASE_NAME'/g' /etc/apt/sources.list \
#
# remove nvidia sources
#
# && rm /etc/apt/sources.list.d/cuda.list /etc/apt/sources.list.d/nvidia-ml.list \
#
# install necessary packages
#
&& apt-get update \
&& apt-get install -y --no-install-recommends \
build-essential \#最基础的,如GNU
apt-utils \
vim \
openssh-server \
net-tools \
iputils-ping \
wget \
curl \
git \
iptables \
bzip2 \
command-not-found \
ca-certificates \
#
# download & install miniconda
#
&& wget -q https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh \
&& bash Miniconda3-latest-Linux-x86_64.sh -b \
&& rm Miniconda3-latest-Linux-x86_64.sh \
&& ln -s /root/miniconda3/etc/profile.d/conda.sh /etc/profile.d/conda.sh \
#
# switch conda source to TUNA
#
&& echo "channels:\n\
- defaults\n\
show_channel_urls: true\n\
default_channels:\n\
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main\n\
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r\n\
custom_channels:\n\
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud\n\
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud\n\
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud\n\
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud\n\
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud" >/root/.condarc \
#
# create conda py39 environment
#
&& /root/miniconda3/bin/conda create -n py39 python=3.9 -y \
#
# switch pip source to TUNA & update pip
#
&& /root/miniconda3/envs/py39/bin/pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple \
&& /root/miniconda3/envs/py39/bin/pip install pip -U \
#
# enable root access with ssh: replace line starts with '#PermitRootLogin' or 'PermitRootLogin'
#
&& sed -i '/^#*PermitRootLogin/cPermitRootLogin yes' /etc/ssh/sshd_config \
#
# set root password
#
&& echo "root:$ROOT_PASSWD" \
&& echo "root:$ROOT_PASSWD" | chpasswd \
#
# change ssh port & start ssh service when docker container starts
#
&& echo "#!/bin/bash\n\
sed -i \"s/Port 22/Port \$SSH_PORT/g\" /etc/ssh/sshd_config\n\
service ssh start\n\
/bin/bash" >./startup.sh \
&& chmod 777 ./startup.sh \
#
# add welcome tips
#
&& CONDA_VERSION=`/root/miniconda3/condabin/conda -V` \
&& CONDA_VERSION=${CONDA_VERSION#* } \
&& echo "\
printf '\\\n'\n\
printf '\\\033[0;34m'\n\
printf 'Welcome to ICTP-AP server\\\n'\n\
printf 'Please change the default root password in time\\\n'\n\
printf '\\\n'\n\
printf ' Conda:\\\t\\\tMiniconda v$CONDA_VERSION use \`conda activate py39\` to activate conda env\\\n'\n\
printf ' SSH port:\\\t$SSH_PORT for this container\\\n'\n\
printf '\\\033[0m'\n\
printf '\\\n'\n\
" >>/etc/update-motd.d/10-help-text \
#
# cleanup
#
&& rm -rf /var/lib/apt/lists/* /tmp/*
#
# set startup script
#
ENTRYPOINT ./startup.sh
运行startup.sh后发现ssh连接不上,报:
kex_exchange_identification: read: Connection reset by peer
Connection reset by 127.0.0.1 port 1234
于是使用
sudo docker exec -it 28259faf5adc /bin/bash
进入容器。
发现ssh服务没有启动
故启动之后,并配置
service ssh start
本地机:
ssh-keygen -f "/home/wtl/.ssh/known_hosts" -R "[0.0.0.0]:1234"
ssh成功连接 !
使用vscode远程连接之后,需要更新一下conda(使用 conda init),不然启动环境是会报如下错误。
安装jupyter 之后即可在命令行启动,本地机浏览器打开即可。
扩展作业留以后有时间再做。
作业和用到的资源(dockerfile)均来自UCAS He Wang老师,非常感谢!