Docker教程-Linux版 docker常见指令、dockerfile文件写法、安装nvidia-docker

错误修复写在前,怕忘了

2020-10-21 03:35:28.323894: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
2020-10-21 03:35:28.398097: F tensorflow/python/lib/core/bfloat16.cc:705] Check failed: PyBfloat16_Type.tp_base != nullptr 

到时再改吧,目前线本地跑跑看

更改docker 储存的地方 (<,>)这个部分先不用看,部署完docker,等用到的时候就会来看了,直接从 1.安装命令开始吧!!!

如果自己的磁盘被顶掉了,可能是添加的docker路径引起的,只要删掉就好了

独立的问题 
ubuntu 修改docker镜像位置:
1.cd /etc/systemd/system/multi-user.target.wants
2.sudo gedit docker.service
3.ExecStart=/usr/bin/dockerd --graph=/media/astonmatin/datasets/docker -H fd:// --containerd=/run/containerd/containerd.sock
4.systemctl daemon-reload
5.systemctl restart docker

Docker教程-Linux版

注意事项
以Linux-Centos7例:

1.如果您不熟悉docker,请参考如下链接,或参考百度

https://www.marsbigdata.com/community/details?id=11531140003328

2.所有的命名方式以及文件目录,请严格按照要求进行命名及构建目录(以下仅是docker使用的示例)

1.安装命令

>>> yum install docker

在这里插入图片描述在这里插入图片描述

2.安装成功查看Docker启动版本

>>> docker -v

在这里插入图片描述

3.启动docker

>>> service docker start

在这里插入图片描述

也可以设置开机启动docker 命令:systemctl enable docker

4.创建一个新的文件夹并进入到文件夹下(任意位置)

>>> mkdir docker
>>> cd docker

在这里插入图片描述

5.将代码移动到docker文件夹下并查看

>>> ls

在这里插入图片描述

6.生成项目依赖

1、安装pipreqs,它可以实现只导出当前项目运行所依赖的包,环境中多余的库就不会导出,在迁移环境时候很少方便。

pip3 install pipreqs

2、进入项目的根目录然后执行下面命令,等待一会就会生成一个requirements.txt文件,里面是项目所依赖的所有库包:

pipreqs ./ --encoding=utf-8

3、在同级路径下可以看到生成的requirements.txt文件,查看文件类似下面的:

requirements.txt

matplotlib>=3.2.2
numpy>=1.18.5
opencv-python>=4.1.2
pillow
PyYAML>=5.3
scipy>=1.4.1
tensorboard>=2.2
torch>=1.6.0
torchvision>=0.7.0
tqdm>=4.41.0

7.编写dockerfile

>>> vim dockerfiler

在这里插入图片描述
编写示例:

由于基础镜像中将cuda10.0升级为10.1,请选手在构建镜像时,先将之前构建的基础镜像删除重新构建

# 拉取基础镜像,基础镜像基于cuda10.1,基础镜像种已经包含了python3 ,pip3
FROM swr.cn-east-3.myhuaweicloud.com/algorithm-seed/algorithm-base
# 2、执行创建 project文件夹
RUN mkdir /project     //project 指的是当前目录下的代码
# 3、下面这段命令指的是 将你的代码 放到你构建的镜像 的 project目录下
copy project /project
# 4、由于基础镜像无法覆盖选手代码项目中的全部依赖,所以选手需要将上面执行得到的requirement.txt执行,安装其它依赖
# 4.1、进入到存放requirements.txt 的目录
WORKDIR /project/
# 4.2、执行下载requirements.txt中的依赖
RUN pip3 install -r requirements.txt
# 5、cd 到project主程序目录下
WORKDIR /project/code
# 6、指定容器运行时的动作
CMD ["python","main.py"]
>>> cat dockerfile查看dockerfile

在这里插入图片描述

8.构建镜像

>>> docker build -t test .

创建镜像(注:-t 表示为该镜像起名称,另外,构建命令后面有个英文实心点,表示当前目录。)

开始构建:

test 指镜像名,这里只做示例,选手请根据要求名称构建镜像

指当前目录下(dockerfile)

在这里插入图片描述
在这里插入图片描述
构建成功:
在这里插入图片描述

9.成功之后运查看镜像

>>>docker images

在这里插入图片描述

10.运行镜像

>>> docker run test

在这里插入图片描述
启动方式这里只做示例

11.导出镜像

请注意:一定要使用 docker save 命令来导出镜像

>>> docker save -o 要保存的文件名 要保存的镜像

或者

>>> docker save -o 要保存的文件名 IMAGE ID

(文件过大,需要等待一段时间)
在这里插入图片描述

12.使用Xftp等工具、方法将test.tar导出,提交test.tar

在这里插入图片描述




安装nvidia-docker (虽迟但到)

# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker

# Add the package repositories
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
  sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
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

# Install nvidia-docker2 and reload the Docker daemon configuration
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd

# (插入一条)设置默认运行时后,重新启动Docker守护程序以完成安装:
sudo systemctl restart docker

# Test nvidia-smi with the latest official CUDA image
docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi
  1. 删除容器
    使用如下命令可以查看当前正在运行的容器
docker ps

对于已退出的容器,可以使用如下命令进行查看:

docker ps -a

删除docker中的容器可以使用如下命令:

docker rm 容器id
  1. 删除镜像
    删除docker中的镜像,我们可以使用如下命令:
docker rmi 镜像id

Docker使用说明

1.Docker下载

1.1官网

docker官网:http://www.docker.com
docker中文网站:https://www.docker-cn.com/

1.2仓库

Docker镜像库:

Docker Hub官网: https://hub.docker.com/

国内镜像:
https://hub.daocloud.io/

2.Docker安装

2.1环境说明

官方建议使用CentOS 7及以上

2.2安装Docker

安装命令:
yum install docker

查看Docker启动版本
docker -v

启动docker:service docker start
停止docker:service docker stop
重启docker:service docker restart
查看docker状态:service docker status

开机启动:systemctl enable docker
查看docker概要信息:docker info
查看docker帮助文档:docker --help

3.Docker镜像

3.1镜像常用命令

列出docker下的所有镜像:docker images

搜索镜像 eg:docker search python

拉取镜像:docker pull XXXX

查看所有正在运行容器: docker ps
停止正在运行的容器: docker stop containerId // containerId 是容器的ID

查询所有容器: docker ps -a
查看所有容器ID docker ps -a -q

启动所有停止的容器: docker start $(docker ps -a -q) 
停止所有容器: docker stop $(docker ps -a -q)
删除所有容器: docker rm $(docker ps -a -q) 
  
镜像打tag:       docker tag 当前镜像名:TAG 仓库地址/镜像名称:TAG
镜像上传仓库:     docker push仓库地址/镜像名称:TAG
进入容器:        docker exec -it [containerId] /bin/sh
执行命令:        docker exec [containerId] -it [command]
容器控制台日志:   docker logs -f [containerId]

复制文件至容器:   docker cp /目录/文件名 容器ID:容器目录
复制容器文件至本地:docker cp 容器ID:文件路径 本地路径

3.2删除镜像

docker rmi -f 镜像ID

4.Docker容器操作

查看正在运行容器: 	docker ps
查看所有的容器:	docker ps -a
查看停止的容器: 	docker ps -f status=exited
重启容器: 		docker restart 容器ID或者容器名
强制停止容器: 	docker kill 容器ID或者容器名
文件拷贝: 		docker cp 需要拷贝的文件或目录 容器名称:容器目录
删除指定的容器: docker rm 容器ID或者容器名
删除所有容器:	  docker rm docker ps -a -q

进入容器:docker exec -it 容器ID bash

5.DockerFile 示例 ★

当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
1.从已经创建的容器中更新镜像,并且提交这个镜像 
2.使用 Dockerfile 指令来创建一个新的镜像

Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。DockerFile是描述镜像的一种文件!

 Dockerfile其内部包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

5.1Dockerfile常用指令

指令描述指令描述
FROM构造的新镜像是基于哪个镜像例如:FROM centos:v1COPY拷贝文件或者目录到镜像,用法同ADD例如:COPY ./startup.sh /startup.sh
MAINTAINER维护者信息例如:MAINTAINER yanglinENTRYPOINT运行容器时执行的shell命令例如:ENTRYPOINT ["/bin/bash","-c","/startup.sh"]ENTRYPOINT /bin/bash -c ‘/startup.sh’
RUN构建镜像时运行的shell命令例如:RUN [“yum”, “install”, “http”]RUN yum install httpdVOLUME指定容器挂载点到宿主机自动生成的目录或者其他容器例如:VOLUME ["/path/to/dir"]
CMD运行容器时执行的shell命令例如:CMD ["-c","/startup.sh"]CMD ["/usr/sbin/sshd","-D"]CMD /usr/sbin/sshd -DUSER为RUN,CMD,ENTRYPOINT执行命令指定运行用户例如:USER www镜像构建完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户。
EXPOSE指定于外界交互的端口,即容器在运行时监听的端口EXPOSE 8081 8082WORKDIR为RUN,CMD,ENTRYPOINT,COPY和ADD设置工作目录例如:WORKDIR /data
ENV设置容器内环境变量例如:ENV MYSQL_ROOT_PASSWORD 123456HEALTHCHECK健康检查HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/
ADD拷贝文件或者目录到镜像,如果是URL或者压缩包会自动下载或者自动解压例如:ADD hom* /mydir/ ADD test relativeDir/ARG在构建镜像时指定一些参数例如:FROM centos:6ARG age=100

形象说明:
FROM它的妈妈是谁(基础镜像)
MAINTAINER告诉别人,你创造了它(维护者信息)
RUN你想让它干啥(把命令前面加上RUN
ADD往它肚子里放点东西(COPY文件,会自动解压)
WORKDIR我是cd(当前工作目录)
VOLUME给我一个存放行李的地方(目录挂载)
EXPOSE我要打开的门是啥(端口)
RUN奔跑吧

5.2 构建步骤

编写Dockerfile文件 -----> 编写DockerFile文件
docker build      -----> 构建镜像
docker run        -----> 使用镜像启动容器

DockerFile就是镜像的描述文件

5.3 dockfile

FROM swr.cn-east-3.myhuaweicloud.com/algorithm-seed/algorithm-base

RUN mkdir /app

copy quartz.py /app

WORKDIR /app

CMD ["python","quartz.py"]

5.4 docker build

# python-test-1 镜像名    . 当前目录
docker build -t python-test-1 .

5.5 docker run

运行镜像
docker run -d --name=python-test-1 python-test-1

5.6.镜像导出

# 例如: docker save -o 要保存的文件名 要保存的镜像
docker save -o python-test.tar python-test-1

知乎 https://www.marsbigdata.com/competition/details?id=11973974199808

docker run -p是docker的一个命令,用于创建一个新的容器并运行一个命令。具体的参数可以根据需要进行设置。其中,-p参数用于将主机端口与容器端口进行映射。有以下三种写法可以使用: 1. docker run -p ip:主机端口:容器端口 2. docker run -p 主机端口:容器端口(常用) 3. docker run -p 容器端口 举个例子,假设我们要运行一个名为jenkins2的容器,并将主机的8080端口映射到容器的8080端口,可以使用以下命令: docker run -d --name jenkins2 --restart always -p 8080:8080 jenkins/jenkins 这样,在Docker重启后,jenkins2容器会自动启动,并且主机的8080端口将与容器的8080端口进行映射。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【Docker系列】从头学起 Docker——docker run 命令详解](https://blog.csdn.net/qq_45547688/article/details/125785419)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Docker命令总结:run](https://blog.csdn.net/qq_47346664/article/details/119887657)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值