Dockerfile就是用来创建docker镜像的构建文件——命令脚本。
案例 CentOS
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" RUN rm -rf /var/cache && rm -rf /tmp/* CMD ["/bin/bash"]
|
Docker指令
基础知识:
- 每个保留关键字(指令)都必须是大写字母
- 从上到下顺序执行
#
表示注释
- 每一个指令都会创建一个新的镜像层,并提交!
命令 |
解释 |
FROM |
基础镜像 |
MAINTAINER |
镜像编写者,姓名+邮箱 |
RUN |
运行 |
ADD |
添加 |
WORKDIR |
镜像工作目录 |
VOLUME |
挂载的目录 |
EXPOSE |
暴露端口 |
CMD |
指定容器启动时要运行的命令,最后一个生效 |
ENTRYPOINT |
指定容器启动时要运行的命令 |
ONBUILD |
被继承时运行该指令,触发指令 |
COPY |
类似ADD,将文件拷贝到镜像中 |
ENV |
构建时设置环境变量 |
实战测试
Docker Hub中99%的镜像都是从这个基础镜像过来的 FROM scratch,然后添加需要的软件和配置来进行构建
构建CentOS
创建一个自己的CentOS
添加vim
、ifconfig
命令,编写DockerFile文件
FROM centos:7 MAINTAINER swcode<2627311935@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 "构建完成" CMD /bin/bash
|
构建CentOS
docker build -f mydockerfile -t mycentos:0.1 .
|
成功之后会打印
Successfully built d2a4569364a1 Successfully tagged mycentos:0.1
|
测试运行
docker run -it mycentos:0.1 pwd ifconfig vim test.txt
|
查看镜像构建过程
CMD和ENTRYPOINT
CMD 和 ENTRYPOINT 区别
命令 |
描述 |
CMD |
指定容器启动时要运行的命令,最后一个生效 |
ENTRYPOINT |
指定容器启动时要运行的命令,可追加 |
测试CMD
新建dockerfile
FROM centos:7 CMD ["ls", "-a"]
|
构建
docker build -f dockerfile-cmd-test -t cmdtest .
|
尝试追加-l
,无法执行,报错。
[root@swcode dockerfile] docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "-l": executable file not found in $PATH: unknown. ERRO[0000] error waiting for container: context canceled
|
测试ENTRYPOINT
新建dockerfile
FROM centos:7 ENTRYPOINT ["ls", "-a"]
|
构建
docker build -f dockerfile-entrypoint-test -t entrypoint-test .
|
追加-l
,成功执行。
[root@swcode dockerfile] total 64 drwxr-xr-x 1 root root 4096 Feb 15 08:17 . drwxr-xr-x 1 root root 4096 Feb 15 08:17 .. -rwxr-xr-x 1 root root 0 Feb 15 08:17 .dockerenv -rw-r--r-- 1 root root 12114 Nov 13 2020 anaconda-post.log lrwxrwxrwx 1 root root 7 Nov 13 2020 bin -> usr/bin
|
构建Tomcat
1、准备镜像文件 tomcat 压缩包,jdk的压缩包
2、编写dockerfile文件,官方命名Dockerfile
,build会自动寻找这个文件,就不需要-f
。
touch readme.txt vim Dokcerfile
|
写入以下内容
FROM centos:7 MAINTAINER swcode<2627311935àqq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u351-linux-x64.tar /usr/local ADD apache-tomcat-9.0.71.tar.gz /usr/local
RUN yum -y install vim
ENV MYPATH /usr/local WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_351 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.71 ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.71 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.71/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.71/bin/logs/catalina.out
|
3、构建镜像
docker build -t diytomcat:1.0 .
|
4、启动镜像
docker run -d -p 9090:8080 --name swcode-tomcat -v /home/swcode/build/tomcat/test:/usr/local/apache-tomcat-9.0.71/webapps/test -v /home/swcode/build/tomcat/logs/:/usr/local/apache-tomcat-9.0.71/logs diytomcat:1.0
|
5、启动成功,访问ip:9090
6、发布项目
cd /home/swcode/build/tomcat/test mkdir WEB-INF vim web.xml
|
写入以下内容
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
</web-app>
|
创建首页面index.jsp
cd /home/swcode/build/tomcat/test vim index.jsp
|
写入以下内容
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Hello World</title> </head> <body> Hello World!<br/> <% out.println("项目发布成功"); %> </body> </html>
|
访问ip:9090/test
发布镜像
发布到Docker Hub
Docker Hub:https://hub.docker.com
1、注册账号、登陆
[root@swcode tomcat]
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
|
2、提交自己的镜像
docker push swcode/diytomcat:1.0
|
发布到阿里云
小结