Dockerfile 介绍
Dockerfile是用来构建docker 镜像的构建文件!命令参数脚本!
Dockerfile 构建过程
基础知识:
(1) 指令必须是大写字母
(2) 执行从上到下
(3) # 表示注释
(4) 每一个指令都会创建提交一个新的镜像层并提交
Dockerfile 指令
所有命令官方文档:https://docs.docker.com/engine/reference/builder/
如下部分命令:
FROM # 指定基础镜像 一切从这里开始
RUN # 镜像构建的时候需要运行的命令
CMD # 指定这个容器启动的时后要运行的命令(只有最后一个会生效,可被替代)
ENTRYPOINT # 指定这个容器启动的时候要运行的命令(可追加命令)
LABEL # 设置镜像的标签
MAINTAINER # 镜像是谁写的,姓名+邮箱
EXPOSE # 保留端口配置
ENV # 构建的时候设置环境变量
ADD # copy文件。会自动解压
COPY # 类似ADD,将文件拷贝到镜像中
VOLUME # 挂载的目录
WORKDIR# 镜像的工作目录
ARG # 设置编译镜像时加入的参数
ONBUILD # 当构建被继承 DockerFIle 这个时候就会运行
STOPSIGNAL #设置容器的退出信号量
HEALTHCHECK
SHELL
创建一个自己的centos镜像
centos官方镜像的Dockerfile:
(1) 创建Dockerfile文件
[root@VM-4-17-centos dockerfile]# cat dockerfile-centos
FROM centos:centos7.9.2009
MAINTAINER zhx<3136713504@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
docker build -f dockerfile-centos -t mycentos:1.0 .
最终返回success即代表成功。
(3) 测试运行
[root@VM-4-17-centos dockerfile]# docker run -it mycentos:1.0
[root@bb6bdc3229c1 local]# pwd
/usr/local
[root@bb6bdc3229c1 local]# vim test.java # 测试新增的vim是否成功
[root@bb6bdc3229c1 local]# ifconfig # 测试新增的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 8 bytes 656 (656.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
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
(4) 查看镜像的构建过程
[root@VM-4-17-centos dockerfile]# docker history 0c18e8f6d0e7
IMAGE CREATED CREATED BY SIZE COMMENT
0c18e8f6d0e7 20 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin… 0B
bcea0da1c1e6 20 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
8082a2aa1189 20 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
bd24d65a0400 20 minutes ago /bin/sh -c #(nop) EXPOSE 80 0B
a1cdffcb80bc 20 minutes ago /bin/sh -c yum -y install net-tools 166MB
53ea63c137f6 20 minutes ago /bin/sh -c yum -y install vim 221MB
27c642c3be3e 20 minutes ago /bin/sh -c #(nop) WORKDIR /usr/local 0B
f818b92286c2 20 minutes ago /bin/sh -c #(nop) ENV MYPATH=/usr/local 0B
9f16cd75f5f5 20 minutes ago /bin/sh -c #(nop) MAINTAINER zhx<3136713504… 0B
eeb6ee3f44bd 7 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 7 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 7 months ago /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4… 204MB
创建一个tomcat镜像
(1) 准备的资源路径
[root@VM-4-17-centos tomcat-src]# pwd
/home/tomcat-src
[root@VM-4-17-centos tomcat-src]# ls
apache-tomcat-9.0.22.tar.gz Dockerfile jdk-8u261-linux-x64.tar.gz
(2) 创建Dockerfile
FROM centos:centos7.6.1810
MAINTAINER zhx<3136xxxxxx@qq.com>
ADD jdk-8u261-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.22.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_261
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.22
ENV PATH $PATH:$JAVA_HOME/bin:CATALINA_HOME/lib:CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.22/logs/catalina.out
(3) 构建镜像
[root@VM-4-17-centos tomcat-src]# docker build -f ./Dockerfile -t diytomcat:1.0 .
(4) 启动运行
docker run -d -p 8080:8080 --name diytomcat01 -v /home/build/tomcat/test/:/usr/local/apache-tomcat-9.0.22/webapps/test -v /home/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.22/logs diytomcat:1.0
(5) 测试环境是否装好了
- 外部访问: ip地址:8080
- 运行java,javac等命令
发布镜像到docker hub
- 需要一个
https://hub.docker.com/
的账号 - 使用
docker login
登录
docker login语法:
[root@VM-4-17-centos tomcat]# 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
登录:
[root@VM-4-17-centos tomcat]# docker login -u username
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
- 使用
docker push
提交镜像到docker hub
docker push语法:
[root@VM-4-17-centos tomcat]# docker push --help
Usage: docker push [OPTIONS] NAME[:TAG]
Push an image or a repository to a registry
Options:
-a, --all-tags Push all tagged images in the repository
--disable-content-trust Skip image signing (default true)
-q, --quiet Suppress verbose output
添加一个tag:
[root@VM-4-17-centos tomcat-src]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
diytomcat 1.0 dadb05f09719 15 seconds ago 790MB
mysql latest 3218b38490ce 4 months ago 516MB
centos centos7.6.1810 f1cb7c7d58b7 3 years ago 202MB
[root@VM-4-17-centos tomcat-src]# docker tag diytomcat:1.0 jikezhang/diytomcat:1.0
push:
[root@VM-4-17-centos tomcat-src]# docker push jikezhang/diytomcat:1.0
The push refers to repository [docker.io/jikezhang/diytomcat]
ef5292fe44f0: Pushed
267d2ef6470a: Pushed
d9e099ac4dde: Pushed
89169d87dbe2: Pushed
1.0: digest: sha256:21ec50deca4cc74451e318dc6c42ccf40d2a44837c08883c5f11b146ec016905 size: 1166