docker: 构建自己的镜像

我们给予ubuntu的镜像然后拷贝python的requirement.txt文件进去,再根据这个文件安装对应的python库

拷贝文件到docker容器。首先查找对应的容器ID。然后执行命令

docker cp 文件源路径 文件目标路径

root@zhf-maple:/home/zhf/桌面# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

f98b8e77182b maple412/ubuntu:nb_test "/bin/bash" 22 seconds ago Up 17 seconds tender_rosalind



root@zhf-maple:/home/zhf/桌面# docker cp /home/zhf/docker/requirement.txt f98b8e77182b:/home/software_requirement


root@f98b8e77182b:/home/software_requirement# ls -al

total 12

drwxr-xr-x 2 root root 4096 Sep 22 06:08 .

drwxr-xr-x 4 root root 4096 Sep 22 06:08 ..

-rw-r--r-- 1 root root 2058 Sep 22 06:03 requirement.txttxt



root@f98b8e77182b:/home/software_requirement# python3 install -r requirement.txt



保存镜像:

Docker ps -l找到最近一次修改的容器id

root@zhf-maple:/home/zhf/桌面# docker ps -l

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

f98b8e77182b maple412/ubuntu:nb_test "/bin/bash" 17 minutes ago Exited (1) 10 minutes ago tender_rosalind


然后使用docker commit 容器ID 镜像名就可以生成镜像了

root@zhf-maple:/home/zhf/docker# docker commit f98b8e77182b maple412/ubuntu:test

sha256:bca747cf9c55617d802d9e1633c6d70149959caef49af9a44f6d0a4b840c6c96


此时查看镜像就有了我们生成的镜像

root@zhf-maple:/home/zhf/docker# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

maple412/ubuntu test bca747cf9c55 19 seconds ago 522MB

maple412/ubuntu nb_test 1a2a83944331 8 months ago 521MB




通过docker login -u xx -p xx 登录docker后就可以上传就成功了

root@zhf-maple:/home/zhf/docker# docker push maple412/ubuntu:test

The push refers to repository [docker.io/maple412/ubuntu]

21b2d81ef223: Pushed

df28f5ba1b2a: Pushed

2c77720cf318: Layer already exists

1f6b6c7dc482: Layer already exists

c8dbbe73b68c: Layer already exists

2fb7bfc6145d: Layer already exists

test: digest: sha256:0a0ecefa6226f7cb22bf8387ec2ac766ab6c958a9b38cdeecc0063da85d2e6f8 size: 1573

docker hub上也可以看到上传的镜像

 

对应的Dockerfile如下:

FROM ubuntu

WORKDIR /home/software_requirement

COPY ./requirement.txt /home/software_requirement

RUN apt-get update && apt-get install python3-pip --assume-yes

RUN pip3 install -r requirement.txt


这里有2点需要注意下:

1 这里的COPY命令,源路径要写相对路径。也就是requirement.txt相对于Dockerfile的位置,否则会提示找不到源路径位置

2 在使用apt-get install的时候会遇到如下错误,提示是否需要安装,然后自动退出

Step 5/7 : RUN apt-get install python3.6

---> Running in c96a012485da

Reading package lists...

Building dependency tree...

Reading state information...

The following additional packages will be installed:

file libexpat1 libmagic-mgc libmagic1 libmpdec2 libpython3.6-minimal

libpython3.6-stdlib libreadline7 libsqlite3-0 libssl1.1 mime-support

python3.6-minimal readline-common xz-utils

Suggested packages:

python3.6-venv python3.6-doc binutils binfmt-support readline-doc

The following NEW packages will be installed:

file libexpat1 libmagic-mgc libmagic1 libmpdec2 libpython3.6-minimal

libpython3.6-stdlib libreadline7 libsqlite3-0 libssl1.1 mime-support

python3.6 python3.6-minimal readline-common xz-utils

0 upgraded, 15 newly installed, 0 to remove and 0 not upgraded.

Need to get 6580 kB of archives.

After this operation, 33.7 MB of additional disk space will be used.

Do you want to continue? [Y/n] Abort.

The command '/bin/sh -c apt-get install python3.6' returned a non-zero code: 1


解决办法就是在命令最后加上--assume-yes

RUN apt-get update && apt-get install python3-pip --assume-yes

 

转载于:https://www.cnblogs.com/zhanghongfeng/p/11569109.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "docker commit" 命令用于构建一个新的镜像,通过将当前容器的修改应用于指定的镜像。语法为:`docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]`。 例如,如果当前正在运行一个容器,并且要创建一个名为"mynewimage"的新镜像,则可以使用以下命令:`docker commit CONTAINER_ID mynewimage`。 ### 回答2: Docker是一个开源的容器化引擎,可以将应用程序及其依赖项封装在轻量级的容器中,实现快速部署和移植。Docker提供了许多常用操作,如镜像、容器、网络等。 在Docker中,我们通过镜像来实现容器的构建和部署。镜像是一个轻量级的虚拟环境,包含应用程序及其依赖项、系统工具和文件系统等组件。Docker提供了许多常用的镜像,如Ubuntu、CentOS、Nginx、MySQL等。在构建镜像时,通常需要通过Dockerfile文件描述要构建镜像的组件及其安装和配置方式。 除了使用Dockerfile文件构建镜像外,我们还可以使用docker commit命令创建新的镜像。该命令将容器的当前状态保存为新的镜像,并记录镜像的版本号和元数据。因此,使用docker commit命令构建镜像通常需要在已有的容器上进行。 使用docker commit命令构建镜像的方法如下: 首先,启动一个容器,并在其中进行一些修改或配置;其次,在容器上执行docker commit命令,将容器的当前状态保存为新的镜像。具体语法为: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] 其中,CONTAINER指定要保存为镜像的容器的ID或名称,REPOSITORY和TAG指定新镜像的存储位置和版本号。 OPTIONS可以使用以下选项: -a, --author="":指定镜像的作者。 -c, --change="":应用在容器上的Dockerfile命令。 -m, --message="":提交镜像时的注释。 -p, --pause=true:在保存容器的状态前暂停容器。 使用docker commit命令构建镜像的过程中,容器内的数据会被保存为新镜像的一部分,包括文件系统、环境变量、进程等。因此,该方法适用于需要对现有镜像进行较小的修改和调整的场景。 总之,使用docker commit命令可以快速创建新镜像,并在现有镜像的基础上进行修改和调整。这是Docker构建容器化环境的重要方式之一。 ### 回答3: Docker commit构建镜像Docker提供的一种镜像管理方式,其可以通过修改一个已经运行的容器,创建一个全新的Docker镜像。通过该操作,用户可以将容器中的所有文件、目录、环境变量、运行状态等打包成一个新的Docker镜像Docker commit的使用非常简单,只需要通过命令docker commit来指定容器和镜像名即可。例如,将一个名为nginx的容器打包成一个名为new-nginx的镜像,命令如下: docker commit nginx new-nginx 在生成新镜像后,我们可以使用docker images命令来查看生成的新镜像。同时,该操作还可以向镜像中添加新的应用程序、配置文件等,从而定制一个符合自己需求的Docker镜像Docker commit的应用场景很广泛,特别是在需要频繁调试和测试应用程序的场合中。通过该操作,我们可以快速创建出一个包含必要软件和配置的Docker镜像,从而节约了很多的时间和人力成本。此外,在开发过程中,我们可以通过Docker commit来生成不同的版本,便于管理和维护。 总的来说,Docker commit构建镜像Docker提供的一个非常重要的功能,它提供了很多灵活性和定制化的选择。通过这个操作,我们可以快速生成适应自己需求的Docker镜像,从而实现更加高效和便捷的容器管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值