Dockerfile 文件的内容编写,涉及内容太多,仅以创建纯净的 ubuntu 系统为例,其内容如下:
# 使用官方的 Ubuntu 作为基础镜像
FROM ubuntu
# 安装 SSH 服务器
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
# 设置 SSH 登录密码(请替换为你自己的密码)
RUN echo 'root:rootspassword' | chpasswd
# 允许 root 用户远程登录
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# 启用 SSH 服务
CMD ["/usr/sbin/sshd", "-D"]
上述内容一定是纯文本格式,文件名是 Dockerfile ,没有扩展名且大小写敏感。
1、Windows 环境下,使用管理员权限进入命令窗口
一路 cd 到 Dockerfile 文件所在的目录。如:
E:\docker\Dockerfile> docker build -t my-ubuntu .
“E:\docker\Dockerfile”是 Dockerfile 文件所在的文件夹,“my-ubuntu”是新建的镜像的名字,最好加上 tag,最终如下: E:\docker\Dockerfile> docker build -t my-ubuntu:9-27 . (最后有个点)
创建成功以后会显示:What's Next?
View summary of image vulnerabilities and recommendations → docker scout quickview
通过 “docker images” 命令可以看到刚才创建的这个镜像 my-ubuntu。
2、运行一个容器
docker run -d -p 2222:22 --name first-ubuntu my-ubuntu:9-27
上述可以运行一个名为 first-ubuntu 的容器,可以通过主机 2222 端口对这个 ubuntu 容器进行管理。
3、如何 push 到仓库。
这个时候如果通过 Docker Desktop 在 images 列表中,使用菜单项 Push to Hub 上传到仓库时,一定会收到 denied: requested access to the resource is denied 的错误提示。到这里基本上会把头毛挠光了。
明明是按步骤创建的镜像,为什么不能 push 呢?网上有很多帖子,但是基本上都是错误的,也许是版本不同,反正在我的机器上就是死活不成功。
于是,我又想着如何查看这个镜像文件在哪里。原来 windows 上运行 docker ,其文件管理,是其内部的 linux 系统负责的,对于 windows 文件系统来说根本不可见。此处绝望了1个小时。
百折不挠、向死而生,吾将上下而百度,终于发现云端仓库的一些微妙之处。https://hub.docker.com/repositories/用户名 ,而我本地镜像名称是 my-ubuntu:9-27 ,按照官方文档使用 push 命令的格式是 push ****/镜像名:tag。那么这个****是什么?官方文档语焉不详。我尝试使用 docker tag my-ubuntu:9-27 用户名/my-ubuntu:9-27 ,也就是说,把原来镜像名改为用户名+/+镜像名 这样的格式。然后再次刷新 Docker Desktop 中的 images 列表,从 用户名/my-ubuntu:9-27 后面的菜单项中执行 “Push to Hub”,大功告成!!!!
总结:要把自己创建的镜像 push 到自己用户目录下,才有权限。用户名要登录 docker 官网可以获得,或者在 docker desktop 右上角显示的那个名字。如下图: