总结
如果你选择了IT行业并坚定的走下去,这个方向肯定是没有一丝问题的,这是个高薪行业,但是高薪是凭自己的努力学习获取来的,这次我把P8大佬用过的一些学习笔记(pdf)都整理在本文中了
《Java中高级核心知识全面解析》
小米商场项目实战,别再担心面试没有实战项目:
Docker可以通过读取Dockerfile指令来自动构建镜像
完整的小例子:
#在一个空目录下,新建一个名为 Dockerfile 文件
mkdir /usr/dockerfile -p
vim dockerfile-demo
#编辑 dockerfile
FROM nginx:latest
维护者 可以省略
MAINTAINER jourwon jourwon@docker.com
#启动容器
RUN mkdir /usr/share/nginx/html/ -p
RUN echo Hello DockerFile! > /usr/share/nginx/html/demo.html
#构建镜像 . : 根据当前上下文环境构建
docker build -f dockerfile-demo -t jourwon/nginx:v1 .
#运行
docker run --rm -d -it --network host jourwon/nginx:v1
浏览器访问
D ockerfile命令官方文档 常见命令详解:
1. FROM
指定所创建镜像的基础镜像,如果本地不存在,则默认会去Docker Hub下载指定镜像。命令格式如下:
FROM [–platform=] [AS ]
Or
FROM [–platform=] [:] [AS ]
Or
FROM [–platform=] [@] [AS ]
平时不用这么复杂的,只需如下即可
FROM [:]
FROM centos:7.6.1810
任何Dockerfile中的第一条指令必须为FROM指令。并且,如果在同 一个Dockerfile中创建多个镜像,可以使用多个FROM指令(每个镜像一 次)。
2. MAINTAINER
指定维护者信息,格式为MAINTAINER。可以不写
MAINTAINER jourwon jourwon@docker.com
该信息会写入生成镜像的Author属性域中
3. RUN
容器构建时需要运行的命令
1、RUN
默认将在shell终端中运行命令,即/bin/sh-c
2、RUN [“executable”,“param1”,“param2”]。指令会被解析 为Json数组,因此必须用双引号。exec执行,不会启动shell环境
指定使用其他终端类型可以通过此方式实现,例如
RUN [“/bin/bash”,“-c”,“echo hello”]
每条RUN指令将在当前镜像的基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用\来换行
在shell形式中,可以使用\(反斜杠)将一条RUN指令继续到下一行。例如,考虑以下两行:
RUN /bin/bash -c 'source $HOME/.bashrc; \
echo $HOME’
它们在一起等效于以下这一行:
RUN /bin/bash -c ‘source $HOME/.bashrc; echo $HOME’
要使用’/bin/sh’以外的其他shell ,请使用exec 形式传入所需的shell 。例如:
RUN [“/bin/bash”, “-c”, “echo hello”]
注意 在JSON格式中,必须转义反斜杠。在Windows中,反斜杠是路径分隔符,这一点尤其重要。由于无效的JSON,以下行否则将被视为shell形式,并以意外的方式失败:
RUN [“c:\windows\system32\tasklist.exe”]
此示例的正确语法为:
RUN [“c:\windows\system32\tasklist.exe”]
4. CMD
CMD指令用来指定启动容器时默认执行的命令。它支持三种格式:
CMD 指令的格式和 RUN 相似:
-
shell 格式:
CMD <命令>
-
exec 格式(推荐):
CMD ["可执行文件","参数 1","参数 2"...]
-
参数列表格式:
CMD ["参数 1","参数 2"...]
。在指定了 ENTRYPOINT 指令后,用 CMD 指定具体参数
注:DockerFile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换。
5. COPY
复制本地主机的下的内容到镜像中的路径下。目标路径不存在时,会自动创建格式如下:
COPY
src:为Dockerfile所在目录的相对路径、文件或目录dest:镜像中的目标路径,相对和绝对都可以
支持通配符和正则
COPY hom* /mydir/
COPY hom?.txt mydir/
当使用本地目录为源目录时,推荐使用COPY
6. ENV
用来在构建镜像过程中设置环境变量。这个其实就是用一个别名指定一个目录地址,然后后续RUN指令可以通过 $别名 的方式来使用这个目录地址。
格式为ENV或ENV=… ,ENV 指令有两种形式
第一种形式ENV 会将一个变量设置为一个值。第一个空格之后的整个字符串将被视为 -包括空格字符。该值将为其他环境变量解释,因此如果不对引号字符进行转义,则将其删除。
第二种形式ENV = … 允许一次设置多个变量。请注意,第二种形式在语法中使用等号= ,而第一种形式则不使用等号= 。与命令行解析一样,引号和反斜杠可用于在值中包含空格。
例如:
ENV myName=“John Doe” myDog=Rex\ The\ Dog \
myCat=fluffy
和
ENV myName John Doe
ENV myDog Rex The Dog
ENV myCat fluffy
是一样的
ENV 从结果镜像运行容器时,使用设置的环境变量将保留。可以使用查看值docker inspect , 并使用更改它们docker run --env = 。
docker run --env= built_image
7. ADD
将宿主机目录下的文件拷贝到镜像且 ADD
命令会自动处理 URL
和解压 tar
压缩包,格式为
ADD hom* /mydir/
ADD hom?.txt /mydir/
ADD test.txt /absoluteDir/
ADD test.txt relativeDir/
其中可以是Dockerfile所在目录的一个相对路径(文件或目录),也可以是一个URL,还可以是一 个tar文件(如果为tar文件,会自 动解压到路径下)。可以是镜像内的绝对路径,或者相对于工作目录(WORKDIR)的相对路径
与COPY的区别
1、Dockerfile中的COPY指令和ADD指令都可以将主机上的资源复制或加入到容器镜像中,都是在 构建镜像的过程中完成的。
2、COPY指令和ADD指令的区别在于是否支持从远程URL获取资源。COPY指令只能从执行docker build所在的主机上读取资源并复制到镜像中。而ADD指令还支持通过URL从远程服务器读取资源并复制到镜像中。
3、满足同等功能的情况下,推荐使用COPY指令。ADD指令更擅长读取本地tar文件并解压缩
4、当要读取URL远程资源的时候,并不推荐使用ADD指令,而是建议使用RUN指令,在RUN指令 中执行wget 或curl命令
8. ENTRYPOINT
指定镜像的默认入口命令,该入口命令会在启动容器时作为根命令执行,所有传入值作为该命令的 参数
ENTRYPOINT有两种形式:
-
在EXEC的形式,这是优选的形式
ENTRYPOINT ["executable", "param1", "param2"]
,这种执行的是executable param1 param2
-
带壳形式:
ENTRYPOINT command param1 param2
。这中其实执行的是/bin/sh -c command param1 param2
多个ENTRYPOINT 只有最后一条生效
ENTRYPOINT [“echo”, “4”]
ENTRYPOINT [“echo”, “5”]
ENTRYPOINT [“echo”, “6”]
9. VOLUME
容器数据卷,用于数据保存和持久化工作。
创建一个数据卷挂载点,格式为VOLUME [“/data”]
FROM centos:7.6.1810
RUN mkdir /myvol
RUN echo “hello world” > /myvol/greeting
VOLUME /myvol
RUN echo “hello” > /myvol/greeting
可以从本地主机或其他容器挂载数据卷,一般用来存放数据库和需要保存的数据等
10. WORKDIR
指定在创建容器后,终端默认登陆进来的工作目录,即一个落脚点。
为后续的RUN、CMD和ENTRYPOINT指令配置工作目录格式为WORKDIR /path/to/workdir
可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则 会基于之前命令指定的路径
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
最终的输出pwd命令这Dockerfile 将是/a/b/c
11. EXPOSE
声明镜像内服务所监听的端口格式为EXPOSE[…]
EXPOSE 指令通知Docker 容器在运行时监听指定的网络端口。可以指定端口是侦听TCP 还是
UDP ,如果未指定协议,则默认值为TCP 。
EXPOSE 22 80 8443
默认情况下, EXPOSE 假定为TCP 。还可以指定UDP :
EXPOSE 80/udp
要同时在TCP和UDP上公开,请包括以下两行:
EXPOSE 80/tcp
EXPOSE 80/udp
无论EXPOSE
设置如何,都可以在运行时使用该-p
标志覆盖它们。例如
docker run -p 80:80/tcp
编写完成Dockerfile之后,可以通过docker build命令来创建镜像。
基本的格式为docker build[选项]内容路径,该命令将读取指定路径下(包括子目录)的Dockerfile,并将该路径下的所有内容发送给Docker服务端,由服务端来创建镜像
如果使用非内容路径下的Dockerfile,可以通过-f选项来指定其路径
$ docker build -f /path/to/a/Dockerfile .
要指定生成镜像的标签信息,可以使用-t选项
docker build -t jourwon/ubuntu:v1 .
docker build 最后的 . 号,其实是在指定镜像构建过程中的上下文环境的目录
镜像管理
Docker镜像由一系列层组成。每层代表镜像的Dockerfile中的一条指令。除最后一层外的每一层都是只 读的。考虑以下Dockerfile:
FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py
该Dockerfile包含四个命令,每个命令创建一个层。该 FROM语句首先从ubuntu:18.04镜像创建只读层。
总结:心得体会
既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。
学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
该Dockerfile包含四个命令,每个命令创建一个层。该 FROM语句首先从ubuntu:18.04镜像创建只读层。
总结:心得体会
既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。
学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
[外链图片转存中…(img-ZxN9PbOg-1715302967767)]