-
Notifications
You must be signed in to change notification settings - Fork 0
/
docker与沙箱.txt
131 lines (126 loc) · 7.54 KB
/
docker与沙箱.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
一、docker常用命令
1)下载镜像(docker pull codeocean/jupyterlab)
2)运行容器(docker run -p 7862:7862 -v /d/jupyter_temp:/usr/local/jupyter_temp -it codeocean/jupyterlab)
容器中运行:
a)jupyter lab --generate-config
b)cp /usr/local/jupyter_temp/jupyter_lab_config.py ~/.jupyter/
c)cd /usr/local/jupyter_temp
d)jupyter:jupyter lab --allow-root --port 7862
3)查看所有运行的容器(docker ps)
4)查看所有的image(docker images)
5)停止容器(docker stop 容器id)
二、windows下docker安装
1、www.docker.com下载docker
2、安装,采用默认选项(安装WSL2替代Hyper-V)
三、关于容器、镜像、repo
1、docker服务器可以运行多个容器,一个容器通常就运行一个程序,但容器里可以有多个镜像(如python、jupyterlab等)
2、镜像是只读的,将镜像运行起来就成为了容器,容器比镜像多了一个读写层,容器还可以绑定volume和宿主机的文件夹关联
3、容器可以设置根目录、port、网络,限制硬盘空间、硬盘读写速度、cpu资源、内存资源等
4、镜像可以到hub.docker.com下载
5、假设有一个文件夹my_docker1,可以在该文件夹下放一个dockfile文件,然后在该文件夹下运行docker build,就能生成对应的镜像文件,dockfile可以是这样的:
FROM python:3.10
WORKDIR /xxx
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt # RUN为docker build时运行内容
COPY . .
CMD ["python", "-m", "your_python_module", "your_module_para"](该方式通常更能理顺子文件夹中py文件之间的依赖关系) # CMD为docker run时运行内容
或 CMD ["python", "your_python_module.py", "your_module_para"]
四、下载和运行现成镜像
1、下载:docker pull codeocean/jupyterlab
2、运行docker:docker run -p 7862:7862 -v /d/jupyter_temp:/usr/local/jupyter_temp -it codeocean/jupyterlab
1)-p为端口
2)-v为装载宿主机文件夹(如共享编辑好的配置文件等),其中注意宿主机d:盘的表达,注意docker目录中必须用绝对路径不能用~。另外-it必须放最后。
3、配置jupyterlab(docker可能没有vi,从volume中把config文件copy过来方便)
1)生成配置文件:jupyter lab --generate-config
2)找到配置文件:.jupyter/下的jupyter_lab_config.py
3)编辑配置文件:
a)c.ServerApp.allow_remote_access = True
b)c.ServerApp.open_browser = False
c)c.ServerApp.port = 7862
d)c.ServerApp.terminals_enabled = False (注意:这样做很大程度上提高了安全性,但是python中仍然能够获取本地任何文件夹的访问和操作权限)
e)c.ServerApp.token = 'Jackseaver112279'
f)c.ServerApp.ip = '0.0.0.0' (这样局域网其他ip可以访问)
4)远程登录:http://116.62.63.204:7862
4、docker中运行jupyterlab(已进入docker的linux中)
jupyter lab --allow-root --port 7862
5、浏览器中:116.62.63.204:7862打开jupyter,输入token(Jackseaver112279)登录即可。
五、建立自定义的jupyter的image
1、准备文件:dockerfile(docker build需要的默认名字)
FROM codeocean/jupyterlab
WORKDIR /usr/local/jupyter_temp/
RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install pip -U # RUN为docker build时运行内容
RUN pip install matplotlib
RUN pip install pandas
RUN pip install numpy
EXPOSE 7862
CMD ["jupyter", "lab", "--allow-root", "--ServerApp.allow_remote_access=True", "--ServerApp.token=Jackseaver112279", "--no-browser", "--ip=*", "--port=7862"]
2、dockerfile所在文件夹下,编译image
docker build -t jupyter_with_common_python_libs .
a)-t 参数用于指定新镜像的名称和可选的 tag
b). 表示 Dockerfile 文件所在的当前目录,Docker 将从这个目录开始构建镜像。
3、新建批处理并运行image(装载d:/jupyter_temp为docker下的/usr/local/jupyter_temp,用作数据交换)
docker run -p 7862:7862 -v /d/jupyter_temp:/usr/local/jupyter_temp -it jupyter_with_common_python_libs
4、关闭容器:需要在docker desktop中关闭
#------------------------------------------------------------------------------------------------------------
六、centos8下建立自定义沙箱:基于python基础库和jupyter的image(jupyter_with_common_python_libs, 2024-01-08)
0、centos8下安装docker
一、安装yum-utils
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
二、为yum源添加docker仓库位置:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
三、安装docker
解决podman和docker的冲突:
1.查看是否安装 Podman
rpm -q podman
2.删除之后在重新yum install docker-ce下载
sudo dnf remove podman
yum erase podman buildah
sudo yum install docker-ce
四、启动docker
systemctl start docker
五、查看docker是否启动成功
sudo systemctl status docker(出现如下方: active running表示运行成功)
六、可以根据自己需求修改docker安装路径
6.1 查看本机用户安装docker的路径
sudo docker info | grep "Docker Root Dir"
6.2 修改安装路径
# 停止docker
systemctl stop docker.socket
systemctl stop docker
# 移动docker所有文件 /data/docker 是自己打算修改的路径
mv /var/lib/docker /data/docker
# 建立软连接
ln -s /data/docker /var/lib/docker
# 重启docker
systemctl restart docker
设置自动启动:sudo systemctl enable docker
1、准备文件:dockerfile(docker build需要的默认名字)
FROM codeocean/jupyterlab
WORKDIR /usr/local/jupyter_temp/
RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install pip -U # RUN为docker build时运行内容
RUN pip install matplotlib
RUN pip install scikit-learn
RUN pip install pandas
RUN pip install tabulate
RUN pip install statsmodels
RUN pip install numpy
EXPOSE 7863
CMD ["jupyter", "lab", "--allow-root", "--ServerApp.allow_remote_access=True", "--ServerApp.token=Jackseaver112279", "--no-browser", "--ip=*", "--port=7863"]
2、dockerfile所在文件夹下,编译image
docker build -t jupyter_with_common_python_libs .
a)-t 参数用于指定新镜像的名称和可选的 tag
b). 表示 Dockerfile 文件所在的当前目录,Docker 将从这个目录开始构建镜像。
3、新建批处理并运行image(装载/home/tutu/jupyter_temp为docker下的/usr/local/jupyter_temp,用作数据交换)
mkdir ~/jupyter_temp
docker run -p 7863:7863 -v /home/tutu/jupyter_temp:/usr/local/jupyter_temp -it jupyter_with_common_python_libs(这个image运行时)
4、python安装docker库,并且增加docker权限(否则报错:Error while fetching server API version: ('Connection aborted.', PermissionError(13, 'Permission denied')))
安装:
pip install docker
允许tutu(如远程jupyter下)连接docker:
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker(更新组)
测试(python里可以直接调用指定image,不需要docker运行如jupyter_with_common_python_libs镜像):python life-agent/tools/exec_code/exec_python_linux.py
#------------------------------------------------------------------------------------------------------------