DockerFile

此篇为Docker笔记,文章可能存在疏忽,建议直接观看原视频。
视频地址:https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0

DockerFile

就是脚本。

构建步骤:

  • 编写一个dockerfile文件;
  • docker build 构建成为一个镜像;
  • docker run 运行镜像;
  • docker push 发布镜像(发布到DockerHub…)

例如:centos的dockerfile脚本:

FROM scratch
ADD centos-7-x86_64-docker.tar.xz /

LABEL \
    org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20201113" \
    org.opencontainers.image.title="CentOS Base Image" \
    org.opencontainers.image.vendor="CentOS" \
    org.opencontainers.image.licenses="GPL-2.0-only" \
    org.opencontainers.image.created="2020-11-13 00:00:00+00:00"

CMD ["/bin/bash"]
DockerFile构建过程

在这里插入图片描述

DockerFile指令
FROM                           # 基础镜像,一切从这里开始构建
MAINTAINER                     # 作者,一般是姓名+邮箱
RUN                            # 镜像构建时需要运行的命令
ADD                            # 例如:添加tomcat镜像
WORKDIR                        # 镜像的工作目录
VOLUME                         # 挂载的目录
EXPOSE                         # 暴露端口,与-p用处相同
CMD                            # 指定容器启动时要运行的命令,多个CMD只有最后一个会生效,替换
ENTRYPOINT                     # 指定容器启动时要运行的命令,可以追加命令
ONBUILD                        # 当构建一个被继承DockerFile时,会运行ONBUILD指令(触发)
COPY                           # 类似ADD,将文件拷贝到镜像中
ENV                            # 构建的时候设置环境变量

构建自己的centos:

# 官方的centos
root@zhucz:~$ docker run -it centos
[root@fbcf12bb6fad /]# ifconfig
bash: ifconfig: command not found
# 1. 编写DockerFile文件
FROM centos
MAINTAINER zhucz<1138609280@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. 通过DockerFile构建镜像
root@zhucz:/home/dockerfile# docker build -f myCentosDockerFile -t mycentos:0.1 .
...
Successfully built 7700dd0256a3
Successfully tagged mycentos:0.1
# 3. 测试运行
root@zhucz:/home/dockerfile# docker run -it mycentos:0.1
[root@f6af41485939 local]# pwd
/usr/local     # WORKDIR 设置的工作目录
[root@f6af41485939 local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.3  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:03  txqueuelen 0  (Ethernet)
        RX packets 27  bytes 3152 (3.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

补充:查看镜像的历史变更:

docker history 镜像id

在这里插入图片描述

CMD 和 ENTRYPOINT区别

测试CMD:

# 1. 编写 dockerfile 文件
root@zhucz:/home/dockerfile# vim dockerfile-cmd-test
FROM centos
CMD ["ls","-a"]
# 2. 构建镜像
root@zhucz:/home/dockerfile# docker build -f dockerfile-cmd-test -t cmdtest .
# 3. 运行镜像  ——   发现 ls -a 生效
root@zhucz:/home/dockerfile# docker run c1f1e542aa13
.
..
.dockerenv
bin
dev
etc
home
lib
# 4. 测试追加命令 -l,报错,实际为 -l 替换了 ls -a 导致无法识别 -l 命令
root@zhucz:/home/dockerfile# docker run c1f1e542aa13 -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.

测试ENTRYPOINT:

root@zhucz:/home/dockerfile# vim dockerfile-entrypoint-test
FROM centos
ENTRYPOINT ["ls","-a"]
root@zhucz:/home/dockerfile# docker build -f dockerfile-entrypoint-test -t entrypointtest .
root@zhucz:/home/dockerfile# docker run 4a5ea0981c5d
.
..
.dockerenv
bin
dev
etc
home
lib
# 测试追加-l,ls -a ===>  ls -al
root@zhucz:/home/dockerfile# docker run 4a5ea0981c5d -l
total 56
drwxr-xr-x   1 root root 4096 Oct 10 03:12 .
drwxr-xr-x   1 root root 4096 Oct 10 03:12 ..
-rwxr-xr-x   1 root root    0 Oct 10 03:12 .dockerenv
lrwxrwxrwx   1 root root    7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x   5 root root  340 Oct 10 03:12 dev
drwxr-xr-x   1 root root 4096 Oct 10 03:12 etc
drwxr-xr-x   2 root root 4096 Nov  3  2020 home
lrwxrwxrwx   1 root root    7 Nov  3  2020 lib -> usr/lib
构建Tomcat镜像
  1. 准备jdk、tomcat压缩文件

在这里插入图片描述

  1. 编写Dockerfile文件(官方命名:Dockerfile,build时会自动寻找这个文件)

    FROM centos
    MAINTAINER zhucz<1138609280@qq.com>
    
    COPY readme.txt /usr/local/readme.txt
    
    ADD jdk-8u202-linux-x64.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/jdk1.8.0_202
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.54
    ENV CATALINA_BASH /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. 构建镜像

    root@zhucz:/home/zhuchangzhen/tomcat# docker build -t mytomcat ....Successfully built c705485cda76Successfully tagged mytomcat:latest
    
  3. 启动

    root@zhucz:/home/zhuchangzhen/tomcat# docker run -d -p 9090:8080 --name zhucztomcat -v /home/zhuchangzhen/tomcat/test:/usr/local/apache-tomcat-9.0.54/webapps/test -v /home/zhuchangzhen/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.54/logs mytomcat
    
  4. 发布项目(由于做了挂载,可以直接在本地编写项目发布)

    # 本地/test/WEB-INF/web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
    </web-app>
    # /test/index.html
    <%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>hello zhucz</title>
    </head>
    <body>Hello World!<br/>
    <%out.println("你的 IP 地址 " + request.getRemoteAddr());%>
    </body></html>
    
  5. 访问

在这里插入图片描述

发布镜像到DockerHub
# 登录
root@zhucz:/home# docker login -u 18845634889
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
root@zhucz:/home# docker tag c705485cda76 18845634889/mycentos:1.0 # 标签改成 Docker ID + 镜像名:版本号
root@zhucz:/home# docker push 18845634889/mycentos:1.0
The push refers to repository [docker.io/18845634889/mycentos]
925b6392f7c7: Pushed 
9eea98a815df: Pushing [====================>                              ]  6.478MB/16.04MB
34265b5ff1f2: Pushing [>                                                  ]   7.12MB/402.5MB
95ee41225d95: Pushed 
74ddd0ec08fa: Pushing [==================================================>]    233MB

小结

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值