构建docker镜像
1. 使用Dockerfile文件
创建一个示例仓库:
1 | mkdir static_web |
这个目录是构建环境,docker称此环境为上下文。
Dockerfile 简介
文件内容如下:
1 | # Version: 0.0.1 FROM ubuntu:20.04 |
运行Dockerfile
1 | docker build -t="lrr01/static_web" . |
运行成功如下所示:
在构建时为镜像设置标签
使用方法为“镜像名:标签”
1 | docker build -t="lrr01/static_web:v1" . |
命令中的.
是告诉Docker在当前目录去找Dockerfile文件,也可以指定git仓库的地址来指定Dockerfile的位置。
在docker build
的过程中,会将构建上下文传到Docker守护进程,如下所示。
如在上下文的根目录存在.dockerignore文件,则将按行读取该文件,其内容用于设置哪些文件不会被当作构建下文的一部分,可以防止其上传到docker守护进程中。
Dockerfile和构建缓存
注意到每一步的构建过程都会将结果提交为镜像,并有一个镜像ID,如a92d18546651
。docker会将每一步的镜像看为缓存,若第5步构建发生错误时,会直接从第4步开始。当之前的构建步骤没有变化时,可以节省时间。如在第1步到第3步之间做了修改,Docker会从有变化的指令开始。
若,确保构建过程不会使用缓存,可以使用docker build
的 --no-cache
参数。
1 | docker build --no-cache -t="lrr01/static_web:v1" . |
查看新镜像
使用 docker images
命令来查看新构建的镜像。
使用docker history
,可以查看镜像是如何构建出来的,如下所示:
1 | docker history 7682ea492fec |
从新镜像启动容器
1 | docker run -d -p 80 --name static_web lrr01/static_web nginx -g "daemon off;" |
使用 docker run
命令,用 刚才构建的镜像的名字,启动一个名为 static_web 的新容器。
用-d
选项,告诉docker以分离(detached)的方式在后台运行,比较适合运行类似Nginx守护进程这样的需要长时间运行的进程。
也指定了需要在容器中运行的命令:nginx -g "daemon off;"
。这将以前台运行的方式启动Nginx,作为web服务器。
-p
用来控制Docker在运行时应该公开哪些网络端口给外部。运行容器时,Docker可以通过两种方式来在宿主机上分配端口
- Docker在宿主机上随机选择一个32768~61000之间的端口来映射到容器的80端口
- 在Docker宿主机中指定具体的端口号来映射到容器的80端口
docker run
命令将在docker宿主机上随机打开一个端口,这个端口会连接到容器中的80端口。
使用docker ps
查看容器端口分配情况:
可以看到容器中的80端口,被映射到宿主机的49153端口。
也可以通过docker port 容器ID/容器名
来查看容器的端口映射情况:
通过-p选项映射到特定的端口
-p 80:80
:会将容器内的80端口绑定到本地宿主机的80端口
-p 127.0.0.1:80:80
:将容器内的80端口绑定到本地宿主机的127.0.0.1
这个IP的80端口。我们也可以将容器内的80端口绑定到一个宿主机的随机端口上
docker run -d -p 80:80 --name static_web lrr01/static_web nginx -g "daemon off;"
通过-P参数对外公开端口
其可以公开在Dockerfile中通过EXPOSE
指令公开的所有端口
1 | docker run -d -P --name static_web lrr01/static_web nginx -g "daemon off;" |
其会将容器内的80端口对本地宿主机公开,并且绑定到宿主机的一个随机端口上。
有了这个端口号,就可以使用本地宿主机的IP地址的IP地址或者127.0.0.1的localhost,查看Web服务器的内容。
2. 使用commit
创建一个要进行修改的容器
1 | docker run -t -i ufoym/deepo:pytorch-py36-cu100 /bin/bash |
安装pqi pip换源工具
1 | pip install pqi |
如何使用 百度pip pqi
安装指定版本pytorch
1 | pip install torch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 |