Docker学习笔记——DockerFile

概述

DockerFile是用来构建Docker镜像的文件,是一个命令参数脚本。

构建步骤

  • 编写一个DockerFile文件
  • docker build 构建成为一个镜像
  • docker run 运行镜像
  • docker push 发布镜像(Docker Hub、阿里云仓库)

Docker构建过程

基础知识

  • 每个保留关键字(指令)都必须是大写字母
  • 执行从上到下顺序执行
  • #表示注释
  • 每一个指令都会创建提交一个新的镜像层
  • Dockerfile:是定义了构建镜像文件的源代码,能够构建镜像文件
  • Docker Images:通过DockerFile构建生成的镜像,最终发布和运行的产品
  • Docker Container:容器就是镜像运行起来提供服务的

Dockerfile的指令

#指定基础镜像,一切从这里构建
FROM

#镜像是谁写的,姓名+邮箱
MAINTAINER

#镜像构建运行时需要运行的命令
RUN

#添加的内容
ADD

#指定镜像的工作目录
WORKDIR

#指定挂载的容器卷
VOLUME

#指定暴露的端口
EXPOSE

#指定容器启动时要运行的命令,只有最后一个会生效,可被替代
CMD

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

#当构建一个被继承的DockerFile,这个时候就会运行ONBUILD指令
ONBUILD

#类似ADD,将文件拷贝进镜像中
COPY

#构建的时候设置环境变量
ENV

CMD和ENTRYPOINT的区别

#指定容器启动时要运行的命令,只有最后一个会生效,可被替代
CMD

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

测试CMD

#编写Dockerfile
FROM ubuntu

CMD ["ls","-a"]

#构建镜像
docker build -f dockerfile-cmd -t cmdtest .

#执行镜像
docker run cmdtest

.
..
.dockerenv
bin
boot
dev
etc
home
lib
lib32
...
var

#执行镜像,追加命令-l,应该变成ls -al
docker run cmdtest -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
#会发现报错,因为使用CMD的情况下,-l会替换原本的命令,-l变成了单独的命令,导致报错

测试ENTRYPOINT


#编写Dockerfile
FROM ubuntu

ENTRYPOINT ["ls","-a"]

#构建镜像
docker build -f dockerfile-entrypoint -t entrypointtest .

#执行镜像
docker run entrypointtest


.
..
.dockerenv
bin
boot
dev
etc
home
lib
lib32
...
var

#执行镜像,追加命令-l,直接拼接到ENTRYPOINT后面

docker run entrypointtest -l

total 56
drwxr-xr-x   1 root root 4096 Jan 17 09:05 .
drwxr-xr-x   1 root root 4096 Jan 17 09:05 ..
-rwxr-xr-x   1 root root    0 Jan 17 09:05 .dockerenv
lrwxrwxrwx   1 root root    7 Oct  6 16:47 bin -> usr/bin
drwxr-xr-x   2 root root 4096 Apr 15  2020 boot
drwxr-xr-x   5 root root  340 Jan 17 09:05 dev
drwxr-xr-x   1 root root 4096 Jan 17 09:05 etc
drwxr-xr-x   2 root root 4096 Apr 15  2020 home
...
drwxr-xr-x  11 root root 4096 Oct  6 16:58 var

实战测试

Docker Hub上大部分镜像都是从基础镜像构建的 FROM scratch,然后配置需要的软件和配置来进行的构建。

创建一个CentOS

下面我们来搭建一个CentOS

mkdir dockerfile
cd dockerfile

vim dockerfile-centos

#编写配置文件dockerfile-centos
FROM centos 

MAINTAINER feng<123456@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

#构建镜像,注意末尾的"."
docker build -f dockerfile-centos -t mycentos:1.0 .

#运行镜像
docker run -it mycentos:1.0

#测试
[root@37bb0803a98b local]# pwd
/usr/local
[root@37bb0803a98b local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 22  bytes 2780 (2.7 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 命令

docker history id

#结果
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
740b9ca37f79   14 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B        
933c400b6f16   14 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
ab7d683e5eb2   14 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
f2838ef81fb5   14 minutes ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
e2affb226eee   14 minutes ago   /bin/sh -c yum -y install net-tools             28.4MB    
a103352528f6   14 minutes ago   /bin/sh -c yum -y install vim                   66.3MB    
4930d5f8e64d   15 minutes ago   /bin/sh -c #(nop) WORKDIR /usr/local            0B        
3d1caaea603f   15 minutes ago   /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0B        
4449580bc428   15 minutes ago   /bin/sh -c #(nop)  MAINTAINER feng<123456@qq…   0B        
5d0da3dc9764   4 months ago     /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      4 months ago     /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      4 months ago     /bin/sh -c #(nop) ADD file:805cb5e15fb6e0bb0…   231MB     

创建Tomcat镜像

步骤

  • 准备镜像文件 tomcat压缩包、jdk的压缩包
  • 编写Dockerfile文件,官方命名为Dockerfile

下载准备文件

#也可使用scp命令
#主机搭建简易python服务器
python3 -m http.server 1234 --directory Y:\Java

#Linux从主机下载文件
wget http://192.168.43.162:1234/apache-tomcat-9.0.55.tar.gz
wget http://192.168.43.162:1234/jdk1.8.0_65.tar.gz

编写Dockerfile

FROM centos
MAINTAINER feng<123456@qq.com>

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

ADD jdk1.8.0_65.tar.gz /usr/local/
ADD apache-tomcat-9.0.55.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_65
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.55
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.55
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

EXPOSE 8080

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

#生成镜像文件
docker build -t mytomcat .

#启动容器
docker run -d -p 9090:8080 --name mytomcat01 -v /home/tomcat/test:/url/local/apache-tomcat-9.0.55/webapps/test -v /home/tomcat/logs:/url/local/apache-tomcat-9.0.55/logs mytomcat

发布自己的镜像

Docker Hub

  • Docker Hub上注册账号
  • 在服务器上登陆账号并提交镜像
#登陆Docker Hub
docker login -usename 

Login Succeeded

#更改tag
docker tag id name:tag

#提交镜像,尽量带上版本号
docker push username/name:tag

阿里云镜像服务

  • 登陆阿里云
  • 找到镜像容器服务
  • 创建命名空间
  • 创建容器镜像

登陆阿里云后可以参考官方文档

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇