Dockerfile 就是用来构建 docker 镜像的构建文件!命令脚本! 通过这个脚本可以生产镜像
初始Dockerfile
Dockerfile 构建步骤:
1、编写一个dockerfile 文件
2、docker build 构建成为一个镜像
3、docker run 运行镜像
4、docker push 发布镜像
1
2
3
4
5
6
7
8
9
10
|
#创建一个dockerfile
#文件内容如下
[root@localhost docker-file]# cat dockerfile1
FROM centos
VOLUME ["volume01","volume02"] #匿名挂载
CMD echo "-------->end<------"
CMD /bin/bash
|

DockerFile构建过程
基础知识:
1、每个保留关键字 (指令) 都是必须是大写字母
2、命令从上到下执行顺序
3、# 表示注释
4、每一个指令都会创建提交一个新的镜像层,并提交
5、常见指令

1
2
3
4
5
6
7
8
9
10
11
12
|
FROM #基础镜像,一切从这里开始
MAINTAINER #镜像是谁写的,姓名+邮箱(统一格式)
RUN #镜像构建的时候需要运行的命令
ADD #步骤,例如要搭建tomcat镜像,要加入tomcat压缩包
WORKDIR #镜像的工作目录
VOLUME #挂载的目录位置
EXPOST #暴露端口配置
CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,即可被代替
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以直接追加命令
ONBUILD #当构建一个被继承当镜像,DockerFile这个时候就会执行ONBUILD的指令(触发指令)
COPY #类似ADD,将文件拷贝到镜像中
ENV #构建的时候设置环境变量
|
名词解释
DockerFile:构建文件,定义了一切的步骤 源代码
DockerImages:通过 DockerFile 构建生成的镜像
Docker容器:容器就是镜像运行起来提供服务器
实战测试
编写一个简单的centos容器 带 vim 跟 net-tools 的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#1 编写dockerfile的文件
[root@localhost docker-file]# cat dockerfile-centos
#以哪个镜像为基础
FROM centos
MAINTAINER ops<me@opsta.cn> #谁维护的
#设置变量
ENV MYPATH /usr/local
WORKDIR $MYPATH #用户进入容器的目录
#执行安装
RUN yum -y install vim
RUN yum -y install net-tools
#暴露端口
EXPOSE 80
#输出
CMD echo $MYPATH
CMD echo ----->opsta<-------
CMD /bin/bash
# 2 通过这个文件构建镜像
#命令 docker build -f dockerfile-centos mycentos:0.1 .
Successfully built 5a7c6e767b10
Successfully tagged mycentos:0.1
# 3 测试运行
|
列出本地进行的变更历史
1
|
docker history 5a7c6e767b10
|
CMD 和 ENTRYPOINT 的区别
1
2
|
CMD #指定容器启动的时候要运行的命令,只有最后一个会生效 可被替代
ENTRYPOINT ##指定容器启动的时候要运行的命令,可以追加
|
测试CMD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#编写 dockerfile文件
[root@localhost docker-file]# more dockerfile-cmd-test
FROM centos
CMD ["ls","-a"]
#构建镜像
[root@localhost docker-file]# docker build -f dockerfile-cmd-test -t cmdtest .
#run 运行
[root@localhost docker-file]# docker run -it cmdtest
. .dockerenv dev home lib64 media opt root sbin sys usr
.. bin etc lib lost+found mnt proc run srv tmp var
[root@localhost docker-file]# docker run -it cmdtest -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-l\": executable file not found in $PATH": unknown.
ERRO[0000] error waiting for container: context canceled
|
测试ENTRYPOINT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
[root@localhost docker-file]# more dockerfile-entrtpoint-test
FROM centos
ENTRYPOINT ["ls","-a"]
[root@localhost docker-file]# docker build -f dockerfile-entrtpoint-test -t entrtpoint-test .
Successfully built 73527121de0b
Successfully tagged entrtpoint-test:latest
[root@localhost docker-file]# docker run -it entrtpoint-test
. .dockerenv dev home lib64 media opt root sbin sys usr
.. bin etc lib lost+found mnt proc run srv tmp var
[root@localhost docker-file]# docker run 73527121de0b -l
total 0
-rwxr-xr-x. 1 root root 0 Jun 23 08:31 .dockerenv
lrwxrwxrwx. 1 root root 7 May 11 2019 bin -> usr/bin
drwxr-xr-x. 5 root root 340 Jun 23 08:31 dev
drwxr-xr-x. 1 root root 66 Jun 23 08:31 etc
drwxr-xr-x. 2 root root 6 May 11 2019 home
lrwxrwxrwx. 1 root root 7 May 11 2019 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 May 11 2019 lib64 -> usr/lib64
drwx------. 2 root root 6 Jun 11 02:35 lost+found
drwxr-xr-x. 2 root root 6 May 11 2019 media
drwxr-xr-x. 2 root root 6 May 11 2019 mnt
drwxr-xr-x. 2 root root 6 May 11 2019 opt
dr-xr-xr-x. 217 root root 0 Jun 23 08:31 proc
dr-xr-x---. 2 root root 162 Jun 11 02:35 root
drwxr-xr-x. 11 root root 163 Jun 11 02:35 run
lrwxrwxrwx. 1 root root 8 May 11 2019 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 May 11 2019 srv
dr-xr-xr-x. 13 root root 0 Jun 21 03:22 sys
drwxrwxrwt. 7 root root 145 Jun 11 02:35 tmp
drwxr-xr-x. 12 root root 144 Jun 11 02:35 usr
drwxr-xr-x. 20 root root 262 Jun 11 02:35 var
|
制作 Tomcat 镜像
1、准备镜像文件 Tomcat 压缩包,jdk 的压缩包
2、编写Dockerfile ,官方命名 Dockerfile ,build会自动寻找这个文件 不需要 -f 指定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
FROM centos
MAINTAINER opsta<me@opsta.cn>
ADD jdk-8u231-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.55.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local/
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk-8u231
ENV CLASSPATH=$JAVA_HOME/bin
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.55
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.55
ENV PATH=.:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin:$PATH
EXPOSE 8080
CMD /usr/local/apache-tomcat-8.5.55/bin/startup.sh && tail -f /usr/local/apache-tomcat-8.5.55/logs/catalina.out
|
3、构建镜像
1
|
docker build -t mytomcat .
|
4、运行
1
2
|
# -v /opt/tomcat/test/ 可要可不要
docker run -d -p 9090:8080 --name tomcat -v /opt/tomcat/test/:/usr/local/apache-tomcat-8.5.55/webapps/test -v /opt/tomcat/logs:/usr/local/apache-tomcat-8.5.55/logs mytomcat
|
5、测试访问

发布镜像
1、地址 https://hub.docker.com/ 注册自己的账号
2、登陆
3、给自己要提交的镜像打标签
1
2
|
#docker tag 镜像id 新名字
docker tag a6fb4f06ee09 meethong/tomcat:1.0
|
4、提交
1
|
docker push meethong/tomcat:1.0
|