当前位置:   article > 正文

docker 安装与使用日记_docker slim

docker slim

docker安装

傻瓜式安装,最省心,容器不需要GPU支持可采用这种方法:
sudo snap install docker
普通安装,参照https://docs.docker.com/engine/install/ubuntu/

将python代码打包成镜像

1. 生成依赖列表

pipreqs ./
  • 1

2. 编写python Dockerfile示例

# 第一阶段,基于的基础镜像
FROM python:3.9-buster as builder-image
# 安装支持
COPY requirements.txt .
RUN pip3 install -i https://pypi.mirrors.ustc.edu.cn/simple --trusted-host https://pypi.mirrors.ustc.edu.cn --default-timeout=60 --no-cache-dir -r requirements.txt
# 第二阶段,将安装的包拷贝过来. 因为用不到python中所有的功能,可以选择一个稍微小一点的基础镜像,压缩最终镜像大小。
FROM python:3.9-slim-buster
COPY --from=builder-image /usr/local/bin /usr/local/bin
COPY --from=builder-image /usr/local/lib/python3.9/site-packages /usr/local/lib/python3.9/site-packages
# 指定镜像中的工作目录
WORKDIR ./docker_demo
#ADD <源路径> <目标路径>。使用ADD指令可以将构建上下文目录中的源路径目录复制到镜像内的 <目标路径> 位置。第一个参数“.”代表Dockerfile所在的目录,即python项目dockerdemo下所有的目录(不包括docker_demo自身)。第二个参数“.”代表镜像的工作目录
ADD . .

CMD ["python", "./src/main.py"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

slim:通常只安装运行特定工具所需的最小包
buster: 表示使用debian 10的系统,与之对应的是stretch, debian 9的系统, jessie, debian 8 的系统
Alphine: 专门为容器构建的操作系统,更小,但是经常会出问题,不建议

3. 创建image

docker build -t [镜像名:版本号] .
# 也可不加版本号,直接写镜像名
# 查看image
sudo docker images
# 新建容器,并运行image
sudo docker run  [镜像ID:版本号] 
# 删除image
sudo docker rmi [镜像ID]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

docker查找网上的镜像

例如,想寻找一个打包了openfoam软件的镜像,并拉取到本地使用

docker search openfoam
docker pull 镜像名
  • 1
  • 2

显示所有镜像或容器container

sudo docker images
sudo docker ps -a
  • 1
  • 2

删除镜像

sudo docker rmi 镜像ID
  • 1

删除容器、删除已退出的所有容器

sudo docker rm 容器ID
sudo docker rm $(sudo docker ps -qf status=exited)
  • 1
  • 2

生成容器,并在容器中开启一个终端

sudo docker run -it [镜像ID] /bin/bash
# 如需指定容器名称,用--name
sudo docker run --name 容器名 镜像ID
# 如需指定共享宿主机网络给容器
sudo docker run -itd --name=容器名 --network=host 镜像ID
  • 1
  • 2
  • 3
  • 4
  • 5

退出容器、启动已停止容器、进入容器

退出,exit或ctrl+D
启动/停止容器、进入已启动容器
用root身份进入已启动的容器
注意这里用的是[容器ID],不是镜像ID

sudo docker start/stop [容器ID]
docker exec -it [容器ID] /bin/bash
docker exec -u root -t -i container_id /bin/bash
  • 1
  • 2
  • 3

容器与宿主机文件拷入拷出

注意这里用的是[容器ID],不是镜像ID

# docker cp 容器名:文件在容器的路径 宿主机路径
docker cp [容器ID]:/docker_demo/src/filename /home/
# docker cp 文件路径 容器名:容器里对应路径
docker cp filename [容器ID]:/docker_demo/src/
  • 1
  • 2
  • 3
  • 4

在容器中使用带有图形界面的软件

首先,安装x11-xserver-utils,ubuntu20.04自带不需要安装
sudo apt-get install x11-xserver-utils
其次,生成容器并进入容器终端,–net=host 必须加,否则无法正常显示
sudo docker run -it -v /etc/localtime:/etc/localtime:ro -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY -e GDK_SCALE -e GDK_DPI_SCALE --net=host --name of9ui f486261c8359 /bin/bash

在容器中使用GPU

需要先安装docker19或以上版本,并安装显卡驱动。然后安装nvidia-container-toolkit(运行下述代码安装)

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

最后,生成容器,需要添加参数gpus=all
sudo docker run -it -v /etc/localtime:/etc/localtime:ro -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY -e GDK_SCALE -e GDK_DPI_SCALE --net=host --gpus=all --name of9ui f486261c8359 /bin/bash
测试是否成功:
docker run --help | grep -i gpus
运行nvidia官方提供的测试gpu的镜像:
docker run --gpus all nvidia/cuda:9.0-base nvidia-smi

镜像导出与加载

将一个镜像导出为文件,再使用docker load命令将文件导入为一个镜像。

docker save test -o test.tar
docker save 0fdf2b4c26d3 > test.tar

docker load -i test.tar
docker load < test.tar
  • 1
  • 2
  • 3
  • 4
  • 5

容器保存与加载

docker import/docker export;将一个容器导出为文件,再使用docker import命令将容器导入成为一个新的镜像,但是相比docker save命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。docker import 可以为镜像指定新名称。

docker export 容器ID > test.tar
docker import - new_test < test.tar
  • 1
  • 2

若要将修改保存为镜像, 则
docker commit d81abcfd2e3b demo:v1.3 提交你刚才修改的镜像,新的镜像名称为demo,版本为v1.3,期间容器不能停止。docker commit会保存镜像的历史提交记录,体积比docker export大。

删除容器或镜像

sudo docker  stop 容器ID
sudo docker rm 容器ID
sudo docker rmi 镜像ID(镜像名)
  • 1
  • 2
  • 3

删除none镜像

1 停止Exited容器
2 删除Exited容器
3 删除none镜像

sudo docker stop $(sudo docker ps -a | grep "Exited" | awk '{print $1 }')  
sudo docker rm $(sudo docker ps -a | grep "Exited" | awk '{print $1 }') 
sudo docker rmi $(sudo docker images | grep "none" | awk '{print $3}')  
  • 1
  • 2
  • 3

如果不想每次都输入sudo

# 添加docker用户组,一般已存在,不需要执行
sudo groupadd docker     
# 将登陆用户加入到docker用户组中
sudo gpasswd -a $USER docker
# 更新用户组
newgrp docker 
sudo service docker restart
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/635966
推荐阅读
相关标签
  

闽ICP备14008679号