docker构建镜像

将容器导出为新的镜像
docker commit -a “作者信息” -m “提交信息” +容器ID(容器名) 镜像名:tag
在这里插入图片描述
在这里插入图片描述
除了上面的方式构建镜像外,更建议使用Dockerfile的方式构建
并不是说从0开始的一个过程,而是在一个已经存在的镜像的基础上来构建,基础镜像一般有厂商提供
在这里插入图片描述
例子:
vim Dockerfile #新建个dockerfile文件
在这里插入图片描述
FROM +基础镜像名字
MAINTAINER 维护者信息 自定义的
RUN +创建的临时容器所要执行的命令
CMD [“指定新创建的镜像所要执行的什么”]
在这里插入图片描述
在这里插入图片描述
docker build -t 新创建的镜像名:tag dockerfile的文件路径 -f 所要执行的文件名(若文件名为Dockerfile时可以省略,若名字为其他的时候必须指定)
新版docker不能省略信息
在这里插入图片描述
在这里插入图片描述
可以看到会启动一个临时容器,当镜像构建完成后,临时容器会被删除掉,执行docker images可以看到新生成的镜像
在这里插入图片描述
在这里插入图片描述
执行docker history contos:v1查看新创建镜像的具体信息
在这里插入图片描述
例子2:
因为上面的镜像下载的数据都是来自国外的yum,现在要将镜像里面的yum源改为国内的镜像,并且做出来的镜像较大,所以需要优化
先将本地的yum源进行打包
cd /etc/yum.repos.d/
tar zcf /root/repo.tar.gz * #将下面的所有文件打包为repo.tar.gz的软件包
tar tf repo.tar.gz #查看打包的压缩文件的具体文件信息
在这里插入图片描述
在这里插入图片描述
修改刚刚的Dockerfile文件
vim Dockerfile
FROM hub.c.163.com/library/centos
MAINTAINER liuchengpeng
RUN rm -rf /etc/yum.repos.d/*
ADD repo.tar.gz /etc/yum.repos.d/ #ADD命令就是拷贝并解压,前台是Dockerfile文件与上传的压缩包在同一个目录下,否则要写绝对路径,这个命令的意思是将本地的压缩包文件拷贝解压到容器的yum目录下
RUN yum -y install net-tools iproute -y &&
yum clean all &&
rm -rf /var/cache/yum/x86_64/* #下载ipconfig、ip a 相关命令,清空缓存
CMD 【“/bin/bash”】
在这里插入图片描述执行:docker build -t centos:v1
在这里插入图片描述
查看导出的镜像
docker images
在这里插入图片描述
验证:容器里面的yum源变了
在这里插入图片描述
注:
Dockerfile文件中拷贝ADD与COPY的区别
ADD:会拷贝过去的同时并解压
COPY:只是单纯的拷贝,不会解压
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建容器查看,对比
在这里插入图片描述
###############################################################################
其他的常用指令
ENV :指定变量
USER :指定用户

示例:
1、创建一个dockerfile文件
在这里插入图片描述
2、更改dockerfile的配置文件
FROM centos:v1
MAINTAINER duan
RUN useradd tom #创建一个用户tom
ENV aa xxxx #添加一个变量aa等于xxxx
ENV bb yyy
VOLUME [“/data1”] #在容器里面创建一个卷/data1,会与宿主机的随机的一个目录进行绑定
USER tom #登录到创建的镜像所启动的容器的时候,在不指定用户时,默认使用tom用户登录
CMD [“/bin/bash”]
在这里插入图片描述
生成镜像:docker build -t centos:other . -f dockerfile_other
在这里插入图片描述进入容器,验证
docker run -it --name=c1 --rm centos:other
可以看到登录的用户就是tom
在这里插入图片描述
要是发现tom用户的权限不够,采用root用户登录
执行:docker exec -it -u root c1 bash
在这里插入图片描述
变量验证
在这里插入图片描述
卷验证
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
###############################################################################
练习,制作一个可以ssh的镜像
在本地宿主机上面查看下openssh所需要的安装包
rpm -qa |grep ssh
在这里插入图片描述
查看ssh守护进程
ps aux |grep -v grep|grep ssh
在这里插入图片描述
创建一个dockerfile文件
vim dockerfile_ssh
编辑文件
FROM centos:v1
MAINTAINER duan
RUN echo haha001 |passwd --stdin root #设置一个root密码
RUN yum -y install openssh-clients openssh-server && \ #安装ssh的客户端,服务端
rm -rf /var/cache/yum/x86_64/* &&
yum clean all #清空缓存

EXPOSE 22 #描述端口22
CMD [“/usr/sbin/sshd”,“-D”] #sshd守护进程
在这里插入图片描述
执行文件,构建镜像
docker build -t centos:ssh . -f dockerfile_ssh
在这里插入图片描述
显示制作镜像成功
docker images
在这里插入图片描述
用刚刚的镜像拉取一个容器
docker run -dit --name=c1 --restart=always centos:ssh
在这里插入图片描述
查看日志,很多报错,缺少密钥文件
docker logs c1
在这里插入图片描述
删除生成的容器c1
docker rm c1

修改dockerfile文件
FROM centos:v1
MAINTAINER duan
RUN echo haha001 |passwd --stdin root #设置一个root密码
RUN yum -y install openssh-clients openssh-server && \ #安装ssh的客户端,服务端
rm -rf /var/cache/yum/x86_64/* &&
yum clean all && \ #清空缓存
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key && \ #根据报错生成需要的密钥文件, -f是指定文件
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key && \
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key &&
sed -i ‘/UseDNS/cUseDNS no’ /etc/ssh/sshd_config #在/etc/ssh/sshd_config文件中找到UseDNS这一行,并将这一行替换为UseDNS no,c是替换的意思

EXPOSE 22 #描述端口22
CMD [“/usr/sbin/sshd”,“-D”] #sshd守护进程
在这里插入图片描述
在这里插入图片描述
再次构建镜像
docker build -t centos:ssh . -f dockerfile_ssh
在这里插入图片描述
查看构建的镜像
docker images
在这里插入图片描述
通过刚刚构建的镜像拉取一个容器,并且查看容器没有报错信息
docker run -dit --name=c1 --restart=always -p 222:22 centos:ssh
在这里插入图片描述
远程连接测试,正常连接,成功
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker 构建镜像是通过编写 Dockerfile 文件来指定构建镜像的步骤和配置。Dockerfile 是由多条指令构成的,每一条指令对应于 Docker 镜像中的每一层。Dockerfile 中的每个指令都会创建一个新的镜像层,这个层可以理解为一个临时的容器。每个指令都会在当前的层上进行操作,执行完后,当前层的状态将被记录下来并成为下一层的基础。这样就实现了镜像分层的原理。 在构建 Docker 镜像时,可以根据需要使用不同的指令,例如使用 FROM 指令选择基础镜像,使用 RUN 指令执行命令,使用 COPY 指令复制文件,使用 EXPOSE 指令暴露端口等等。通过这些指令的组合,可以按照需求来构建具有特定功能和配置的镜像。 举例来说,可以通过编写 Dockerfile 来构建一个包含 SSH 服务的镜像。在 Dockerfile 中,可以使用基础镜像、安装 SSH 服务的指令来构建,最后可以通过构建镜像来运行 SSH 服务。同样的原理也适用于构建其他类型的镜像,例如包含 Systemctl 或 Tomcat 的镜像。 总结来说,Docker 构建镜像是通过编写 Dockerfile 文件,使用多条指令来指定构建镜像的步骤和配置。每个指令都会创建一个新的镜像层,实现了镜像分层的原理。可以根据需求选择不同的指令来构建具有特定功能和配置的镜像。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Dockerfile构建镜像](https://blog.csdn.net/gcc001224/article/details/125864815)[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: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值