构建docker镜像

1. 使用Dockerfile文件

创建一个示例仓库:

1
2
3
mkdir static_web
cd static_web
touch Dockerfile

这个目录是构建环境,docker称此环境为上下文。

Dockerfile 简介

文件内容如下:

1
2
3
4
5
6
7
# Version: 0.0.1                                                                                                                                                                   FROM ubuntu:20.04
MAINTAINER LI RANRAN "lrr19960429@163.com"
RUN apt-get update && apt-get install -y nginx
RUN echo 'Hi, I am in your container' \
> /usr/share/nginx/html/index.html
EXPOSE 80

运行Dockerfile

1
$ docker build -t="lrr01/static_web" .

运行成功如下所示:

image-20210702205928808

在构建时为镜像设置标签

使用方法为“镜像名:标签”

1
docker build -t="lrr01/static_web:v1" .

命令中的. 是告诉Docker在当前目录去找Dockerfile文件,也可以指定git仓库的地址来指定Dockerfile的位置。

docker build的过程中,会将构建上下文传到Docker守护进程,如下所示。

image-20210702210724151

如在上下文的根目录存在.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 命令来查看新构建的镜像。

image-20210702212405867

使用docker history,可以查看镜像是如何构建出来的,如下所示:

1
docker history 7682ea492fec

image-20210702212746968

从新镜像启动容器

1
docker run -d -p 80 --name static_web lrr01/static_web nginx -g "daemon off;"

image-20210702213357644

使用 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查看容器端口分配情况:

image-20210702214101523

可以看到容器中的80端口,被映射到宿主机的49153端口。

也可以通过docker port 容器ID/容器名 来查看容器的端口映射情况:

image-20210702214251569

通过-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
作者

bd160jbgm

发布于

2021-07-02

更新于

2021-07-03

许可协议