Dockerfile
用来构建docker镜像的docker文件
步骤
- 编写dockerfile文件
- docker build 构建一个镜像
- docker run 运行一个镜像
- docker push 发布一个镜像,发布位置有dockerhub、阿里云镜像仓库
构建过程
基础知识
- 每个指令(关键字)都必须大写
- 执行顺序从上到下
- #表示注释
- 每个指令都会创建一个镜像层并提交
指令
说明:
FROM:基础镜像
MAINTAINER:镜像是谁写的,一般命令是姓名+邮箱
RUN:构建镜像时需要运行的命令
ADD:添加内容,用于复制新文件、目录或远程文件 URL到容器路径中。例如:在centos中添加jdk、tomcat等
COPY:COPY 指令只能从执行 docker build 所在的主机上读取资源并复制到镜像中。
WORKDIR:镜像的工作目录
VOLUME:指定挂载在主机的目录
EXPOSE:暴露的端口号
CMD:指定容器运行时要执行的命令,只允许使用一次CMD
命令。使用多个CMD
会抵消之前所有的命令,只有最后一个命令生效。
ENTRYPOINT:指定容器运行时要执行的命令,可以追加命令,不会被docker run
的命令行指令所覆盖。如果要覆盖的话需要通过docker run --entrypoint
来指定。
ONBUILD:触发指令添加到镜像中,只有在该镜像作为基础镜像时执行。
ENV:运行镜像时指定自动设置的环境变量。
构建进行
docker build -f dockerfile -t dockerfile-test .
解释:
-f dockerfile :指向编写的dockerfile 文件
-t dockerfile-test :为构建的镜像打上标签(镜像构建后的名字)
-q:不显示构建过程的信息
点:Dockerfile所在目录
命令区别
CMD 和 ENTRYPOINT 区别
CMD:指定容器运行时要执行的命令,只允许使用一次CMD
命令。使用多个CMD
会抵消之前所有的命令,只有最后一个命令生效。
ENTRYPOINT:指定容器运行时要执行的命令,可以追加命令,不会被docker run
的命令行指令所覆盖。如果要覆盖的话需要通过docker run --entrypoint
来指定。
示例:
cmd
1、编写dockerfile文件
vim dockerfile_cmd
2、使用cmd命令
FROM centos
CMD ["ls","-a"]
3、构建镜像
docker build -f dockerfile_cmd -t dockerfile_cmd .
4、运行
docker run 镜像id #正常运行
docker run 镜像id -l #报错
5、运行结果
[root@VM-16-5-centos dockerfile]# docker run 3fdd321d31b9
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
[root@VM-16-5-centos dockerfile]# docker run 3fdd321d31b9 -l
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
1、编写dockerfile文件
vim dockerfile_entrypoint
2、使用cmd命令
FROM centos
CMD ["ls","-a"]
3、构建镜像
build -f dockerfile_entrypoint -t dockerfile_entrypoint .
4、运行
docker run 镜像id #正常运行
docker run 镜像id -l #正常运行
5、运行结果
[root@VM-16-5-centos dockerfile]# docker run c06b85088f9a
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
[root@VM-16-5-centos dockerfile]# docker run c06b85088f9a -l
total 56
drwxr-xr-x 1 root root 4096 Sep 22 06:02 .
drwxr-xr-x 1 root root 4096 Sep 22 06:02 ..
-rwxr-xr-x 1 root root 0 Sep 22 06:02 .dockerenv
lrwxrwxrwx 1 root root 7 Nov 3 2020 bin -> usr/bin
drwxr-xr-x 5 root root 340 Sep 22 06:02 dev
drwxr-xr-x 1 root root 4096 Sep 22 06:02 etc
drwxr-xr-x 2 root root 4096 Nov 3 2020 home
lrwxrwxrwx 1 root root 7 Nov 3 2020 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Nov 3 2020 lib64 -> usr/lib64
drwx------ 2 root root 4096 Sep 15 2021 lost+found
说明entrypoint可以追加 -l指令
发布镜像
DockerHub
1、注册账号
2、在服务器登录DockerHub
#登录方式一
docker login -u 账号 -p 密码
#登录方式二
docker login -u 账号
3、提交
#提交一
git push 作者名/镜像:版本号
#提交二
git push 镜像:版本号
#提交三
git push 镜像
阿里云镜像服务
1、搜索 容器镜像服务
2、点击实例列表,选择个人或企业
3、创建命令空间(一个账号只能创建三个命名空间)
4、创建镜像仓库——》选择本地仓库
5、点击仓库进入详情页,安装文档步骤操作并提交
实战
dockerHub中实例
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"
CMD ["/bin/bash"]
手写实例(centos + jdk +tomcat)
1、编写dockerfile文件
vim Dockerfile
注:如果不指定名称,会默认查找名字为Dockerfile,所有Dockerfile直接使用这个名字
2、编写文件内容
FROM centos
ADD jdk-8u231-linux-x64.tar.gz /usr/local
ADD apache-tomcat-7.0.68.tar.gz /usr/local
ENV MYLOCAL /usr/local
WORKDIR $MYLOCAL
ENV JAVA_HOME /usr/local/jdk1.8.0_231
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-7.0.68
ENV CATALINA_BASE /usr/local/apache-tomcat-7.0.68
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-7.0.68/bin/startup.sh
3、构建镜像
docker build -t centos_jdk8_tomcat7 .
4、启动
docker run -d -p 8081:8080 -v /usr/local/dockerfile/tomcat/webapps/:/usr/local/apache-tomcat-7.0.68/webapps -v /usr/local/dockerfile/tomcat/logs/:/usr/local/apache-tomcat-7.0.68/logs centos_jdk8_tomcat7
5、创建项目演示
-
在webapps创建test文件
mkdir test
-
创建WEB-INF文件
mkdir WEB-INF
-
创建web.xml
vim web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> </web-app>
-
在test目录下创建jsp
vim index.jsp
<%@page language=“java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <metacharset="UTF-8"> <title>测试</title> </head> <body> hello world</br> <%System.out.println("hahha")%> </body>
-
访问页面
http://ip:8081/test
流程总结