Docker0_GWData-Bootcamp_HW1

本文详细介绍了如何在Ubuntu系统上安装Docker引擎,创建Python和Jupyter开发环境,以及支持GPU的容器。包括设置Dockerfile,构建镜像,使用VSCode远程连接和解决SSH问题。最后提到扩展作业,如创建LALsuite/LISAcode的容器镜像。
摘要由CSDN通过智能技术生成

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老师,非常感谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值