DockerFile 镜像打包全流程详解+例子

x33g5p2x  于2021-10-17 转载在 Docker  
字(3.3k)|赞(0)|评价(0)|浏览(742)

Dockfile 是用来构建镜像的文件,命令参数脚本
构建步骤:

  1. 编写一个dockefile文件
  2. docker build 构建成为一个镜像
  3. docker run运行镜像
  4. docker push 发布镜像(DockerHub、阿里云镜像仓库)

基础知识:

  1. 每个保留关键字(指令)都必须是大写字母
  2. 执行从上到下顺序执行
  3. /#表示注释
  4. 每一个指令都会创建提交一个新的镜像层,并提交!

dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,文件也很简单

Docker镜像逐渐成为企业交付的标准,需要掌握

DockerFile:构建文件,定义了一切的步骤,源代码

DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品

Docker容器:容器就是镜像运行起来提供服务器

Dockerfile指令

eg1: 自己创建一个centos镜像,带有ifconfig和vim命令
官方的centos镜像是没有vim和ifconfig命令的

1.写Dockerfile文件

FROM centos
MAINTAINER ldj<666@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "----end------"
CMD /bin/bash

2.之后构建镜像通过命令

docker build -f  /root/ldj/docker-file/dockerfile2-centos -t ldj-centos:1.0 .

3.成功

通过docker history 查看构建历史

eg2,CMD和ENTRYPOINT的区别

cmd:指定这个容器启动的时候运行的命令,只有最后一个会生效,可被替代

ENTRYPOINT 指定这个容器启动的时候要运行的命令,可以追加命令

演示 CMD命令
脚本内容

FROM centos
CMD ["ls","-a"]

1.写一个DockerFile 文件

  1. docker run eee738131140 -l 报错
    原因是因为-l 把CMD里面的命令替代了,而-l不是命令,报错了
[root@l4 docker-file]# docker run eee738131140 -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.
ERRO[0000] error waiting for container: context canceled 
[root@l4 docker-file]#

3.如果写成docker run eee738131140 ls -h /root不会报错,ls -h /root是可以运行的命令

[root@l4 docker-file]# docker run eee738131140 ls -h /root
anaconda-ks.cfg
anaconda-post.log
original-ks.cfg
[root@l4 docker-file]# docker run eee738131140 ls -h /home
[root@l4 docker-file]#

演示ENTRYPOINT

dockefile内容

FROM centos
ENTRYPOINT ["ls","-a"]

2.构建镜像

3.运行镜像
docker run bf83f4af585c

[root@l4 docker-file]# docker run bf83f4af585c
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin

3.追加命令,不会被覆盖
docker run bf83f4af585c -h

[root@l4 docker-file]# docker run bf83f4af585c -h
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys

eg3 自己制作一个tomcat 镜像

编写dockfile文件,官方命名Dockerfile,build会自动寻找这个文件,就不需要-f指定

1.自己写一个Dockfile

FROM centos

MAINTAINER ldj<666@qq.com>

COPY readme.txt /usr/local/readme.txt

ADD jdk-17_linux-x64_bin.tar.gz /usr/local
ADD apache-tomcat-9.0.54.tar.gz /usr/local

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk-17

ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.54
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.54
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.54/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.54/bin/logs/catalina.out

2.构建镜像

docker build -t diytomcat .

3.启动镜像

[root@l4 tomcat]# docker run -d -p 8088:8080 --name ldjtomcat -v /root/ldj/tomcat/test:/usr/local/apache-tomcat-9.0.54/webapps/test -v /root/ldj/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.54/logs diytomcat
a9ad1a474cacf58f729dad039df3b3dbbe7dc737294db6aa9275c140c50b7e43

进入tomcat镜像成功

  1. 写一个jsp文件测试
[root@l4 test]# vim ldd.jsp
[root@l4 test]# pwd
/root/ldj/tomcat/test
[root@l4 test]#

测试成功

5.发布镜像

  1. 地址 https://hub.docker.com/ 注册自己账号
  2. 去的这个账号可以登录
  3. 在我们服务器上提交自己镜像
[root@l4 tomcatlogs]# docker login --help

Usage:  docker login [OPTIONS] [SERVER]

Log in to a Docker registry.
If no server is specified, the default is defined by the daemon.

Options:
  -p, --password string   Password
      --password-stdin    Take the password from stdin
  -u, --username string   Username
  1. 登录完成后可以提交镜像了 docker push

1.登录成功

提交镜像

docker tag 10ed4ccc76de ldj/centos:1.0
docker push ldj/centos:1.0

相关文章

最新文章

更多