Docker笔记:关于Dockerfile及构建镜像
2023-12-13 05:45:16
Dockerfile 的作用
- Dockerfile让docker命令变得更简单,是用于构建docker镜像,实现自动化部署
Dockerfile 构建自己的centos镜像
- 这里有一个应用场景,创建一个自己的centos镜像,这个镜像有我们所需的软件
- 可以将我们一系列的操作,配置在dockerfile中
- 通过 docker build 就可以生成我们自己的 centos镜像
1 ) 编写 Dockerfile
FROM centos
RUN yum install -y net-tools
WORKDIR /home/www
CMD /bin/bash
2 )构建centos镜像
- $
docker build -f Dockerfile -t my_centos:v1.0.0 .
- 这里 -f Dockerfile 指定Dockfile文件
- 这里Dockerfile用的文件名就是Dockerfile可以不加,忽略
- -t 是打镜像标签
- 注意,最后面的 .
3 )运行新打包的镜像
- 运行:$
docker run -it my_centos
- 启动后,自动进入 /home/www目录中,可以使用 pwd 来测试
- ifconfig 测试可以输出,说明 net-tools 已经正确被安装了
- 这里 run 的时候,后面没有 /bin/bash 但是运行之后
- 直接打开了bash环境了,是Dockerfile中的CMD执行了
Docker 打包 Nginx 镜像
- Dockerfile 构建一个 nginx 镜像
- 构建好的镜像内会有一个 /usr/share/nginx/html/index.html文件
1 )编写 Dockerfile
- 新建 Dockerfile_nginx 文件
FROM nginx RUN echo 'hello docker' > /usr/share/nginx/html/index.html WORKDIR /usr/share/nginx/html
- 注意,上面没有 CMD, 如果添加命令,就会替换了 nginx 的默认启动命令
- $
docker build -f Docker_nginx -t my_nginx:v1.0.0 .
这里是打包 - $
docker run -itd -p 80:80 my_nginx:v1.0.0
运行新镜像 - $
curl 127.0.0.1
可看到结果 - $
docker exec -it 容器id /bin/bash
- $
pwd
可看到 在 工作目录 /usr/share/nginx/html中
- $
关于 Dockerfile中的一些配置信息
FROM # 基础境像,一切从这里开始构建
MAINTAINER # 镜像是谁写的,姓名+邮箱
LABEL # LABEL 指令用来给镜像添加一些元数据
RUN # 编译镜像时运行的脚本
COPY # 编译镜像时复制文件到镜像中 不会解压
ADD # 编译镜像时复制文件到镜像中 tar.gz 文件会自动解压
WORKDIR # 镜像的工作目录 相当于 cd 的 命令
CMD # 设置容器启动的命令,会被run时指定的命令替换掉, 比如 docker -it nginx /bin/bash 这里的 /bin/bash
ENTRYPOINT # 设置容器启动的命令,不会被外部配置替换
EXPOSE # 设置镜像暴露的端口,告诉外面容器暴露的端口 和 -p 不一样
VOLUME # 设置容器挂载的卷,告诉外面容器暴露的数据卷 和 -v 不一样,在容器内使用 df 命令可以看到挂载的卷
ENV # 设置容器的环境变量 和 -e 一样
构建一个复杂版的 centos 镜像
1 )编写 Dockerfile_centos 文件
FROM centos
MAINTAINER Wang
ENV MyLocal /home
WORKDIR $MyLocal
EXPOSE 80
VOLUME ["volume1", "volume2"] # 这样写在根目录下会产生这两个目录
RUN yum install -y net-tools
RUN yum install -y vim
ADD test.tar.gz /root
COPY test.tar.gz /home
CMD /bin/bash
2 ) 构建新镜像
- $
docker build -f Dockerfile_centos -t my_centos:v2.0.0 .
3 )运行镜像
- $
docker images
找到刚才打包的新镜像 - $
docker run -it --name my_centos2 my_centos:v2.0.0的镜像id
4 )验证
- $
pwd
验证了 workdir 是 /home - 再验证打包与解压的结果,验证通过
- /volume1, /volume2 都存在
- $
printenv
验证环境变量,验证通过 - 其他验证,通过
- $
docker inspect 镜像id | grep xxx
这里的 xxx 是你想看的任何相关信息 - 这样可以看很多细节
- 可查看 容器中的 /volume1 在物理机上的位置
- 拿到位置后可验证内外数据同步
Dockerfile 中CMD与ENTRYPOINT
- CMD 可被追加的命令替换
- ENTRYPOINT 不可被替换,如果有命令,会被追加
- 如果 ENTRYPOINT 配置的是 [“ls”, “-a”]
- $
docker run -it 镜像id -l
- 后面的
-l
会追加,类似ls -a -l
- 后面的
文章来源:https://blog.csdn.net/Tyro_java/article/details/134956833
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!