docker笔记三
DockerFile
dockerfile 是用来构建docker镜像的配置文件,如果我们想构建自己应用的docker镜像,就需要编写docker镜像文件,然后通过docker build 命令来构建我们自己的docker镜像。
基础知识
DockerFile 每个保留关键字都必须是大写的。
DockerFile的构建顺序是从上到下执行的,注释符号是 #
每个指令都会创建一个镜像层并提交
说明:
DockerFile是面向开发的,我们要发布项目作镜像,就需要编写DockerFile。DockerFile是用来构建docker镜像的文件,定义了构建docker镜像的步骤。
基本指令
FROM # from:基础镜像,一切从这里开始构建 MAINTAINER # maintainer:镜像是谁写的, 姓名+邮箱 RUN # run:镜像在构建的时候需要运行的命令,构建时可以执行的操作系统(win/linux)命令,可以进行镜像工具的安装.yum,apt COPY # copy:类似ADD,将我们文件拷贝到镜像中 ADD # add:步骤 添加文件到指定目录,自动解压 ENV # env:构建的时候设置环境变量,就是设置系统环境变量 WORKDIR # workdir:镜像的工作目录,默认进入的主目录 VOLUME # volume:挂载的目录 EXPOSE # expose:保留端口配置,对外暴露的端口 CMD # cmd:指定这个容器启动的时候要运行的命令,只有最后一个会生效,前面设置的cmd会被dockerfile最后一个设置的cmd替代,在启动镜像时指定的命令也会进行CMD命令的替代 ENTRYPOINT # entrypoint:指定这个容器启动的时候要运行的命令,可以追加命令 ONBUILD # onbuild:当构建一个被继承DockerFile这个时候就会运行onbuild的指令,触发指令
实战测试
下图是centos的一个dockerfile文件,可以看到我们基础的操作系统镜像都是来源scrath这个基础的官方镜像,我们常见的应用镜像mysql,nginx,redis基本都是以系统镜像作为底层镜像来构建。我们的应用镜像也通常以这些系统镜像或者应用环境镜像作为基础镜像来构建。
创建一个自己的centos镜像(为centos安装vim 和 ifconfig 命令)
vim mydockerfile-centos # 编写dockerfile FROM centos # 基础镜像 MAINTAINER lindeyu<ldystack@163.com> # 镜像的来源信息 ENV MYPATH /usr/local #设置构建镜像的环境变量 WORKDIR $MYPATH # 设置镜像的工作目录,也是镜像进入的目录 RUN yum -y install vim # 镜像构建时安装vim RUN yum -y install net-tools # 镜像构建时安装net-tools CMD echo $MYPATH CMD echo "----end---" CMD /bin/bash # 容器启动时运行的命令,只有最后一个会生效,前面设置的被覆盖,可被外面设置的命令替代 # 构建镜像 -f 指定dockerfile -t 镜像名:版本号 . docker build -f mydockerfile-centos -t mycentos:0.1 .
运行我们编译好的镜像测试查看
docker run -it mycentos:0.1 # 以交互方式启动镜像
我们可以通过docker history 镜像id,查看镜像层和构建的dockerfile
CMD 和 ENTPYPOINT 区别
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。 ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
测试CMD和ENTPYPOINT
# 编写dockerfile文件 $ vim dockerfile-test-cmd FROM centos CMD ["ls","-a"] # 启动后执行 ls -a 命令 # 构建镜像 $ docker build -f dockerfile-test-cmd -t cmd-test:0.1 . # 运行镜像 $ docker run cmd-test:0.1 # 由结果可得,运行后就执行了 ls -a 命令 . .. .dockerenv bin dev etc home # 想追加一个命令 -l 成为ls -al:展示列表详细数据 $ docker run cmd-test:0.1 -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 # cmd的情况下 -l 替换了CMD["ls","-l"] 而 -l 不是命令所以报错
# 编写dockerfile文件 $ vim dockerfile-test-entrypoint FROM centos ENTRYPOINT ["ls","-a"] # 构建镜像 $ docker build -f dockerfile-test-entrypoint -t cmd-test:0.1 . # 运行镜像 $ docker run entrypoint-test:0.1 . .. .dockerenv bin dev etc home lib lib64 lost+found ... # 我们的命令,是直接拼接在我们得ENTRYPOINT命令后面的 $ docker run entrypoint-test:0.1 -l total 56 drwxr-xr-x 1 root root 4096 May 16 06:32 . drwxr-xr-x 1 root root 4096 May 16 06:32 .. -rwxr-xr-x 1 root root 0 May 16 06:32 .dockerenv lrwxrwxrwx 1 root root 7 May 11 2019 bin -> usr/bin drwxr-xr-x 5 root root 340 May 16 06:32 dev drwxr-xr-x 1 root root 4096 May 16 06:32 etc drwxr-xr-x 2 root root 4096 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 ....
实战 dockerFile 制作tomcat镜像
# 创建目录,准备构建镜像需要的软件
mkdir docker-tomcat
cd docker-tomcat
编写dockerfile
#基础镜像
FROM centos
#作者信息
MAINTAINER lindeyu<ldystack@163.com>
#设置应用主目录
ENV MYPATH /usr/local
WORKDIR $MYPATH
#拷贝本地文件
COPY README /usr/local/README
#添加jdk ,ADD 命令会自动解压
ADD jdk-8u211-linux-x64.tar.gz /usr/local
#添加tomcat
ADD apache-tomcat-8.5.39.tar.gz /usr/local
#安装vim
RUN yum -y install vim
#设置环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_211
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.39
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.39
#设置环境变量,分割符号 :
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#对外暴露的端口
EXPOSE 8080
#容器启动运行的命令
CMD /usr/local/apache-tomcat-8.5.39/bin/startup.sh && tail -f /usr/local/apache-tomcat-8.5.39/logs/catalina.out
构建镜像
docker build -f dockerfile -t tomcat-ldy:8.5.39 .
docker images
创建容器
docker run -d --name tomcat01 -p 9090:8080 -v /home/docker_volume/tomcat01-volume/webapps/app:/usr/local/apache-tomcat-8.5.39/webapps/app/ -v /home/docker_volume/tomcat01-volume/logs/:/usr/local/apache-tomcat-8.5.39/logs tomcat-ldy:8.5.39
同步文件到数据卷,访问测试
# 进入容器后台查看同步情况
docker exec -it tomcat01 /bin/bash
浏览器访问
本地查看同步日志
发布自己的镜像到远程仓库(dockerHub 或 阿里云容器镜像仓库)
基本登录、登出命令
由于dockerHub镜像在国外,这里以阿里云镜像仓库为例,你需要开通阿里云的容器镜像服务,官网有详细的文档https://cr.console.aliyun.com/repository/,这里不在赘述。
注意你镜像的名字就代表你docker仓库的名字,这里我是随便起了一个private
小结
springBoot打包docker镜像容器
待完成