这里说明有这种挂载方式,什么是dockerfile下面会讲
$ FROM centos # 没有"http://www.likecs.com/",是匿名挂载,宿主机的默认地址 # 容器内直接在根目录下 $ VOLUME ["volume01","volume02"] $ CMD echo "----Howl write dockerfile----" $ CMD /bin/bash9.3 容器数据卷
容器数据卷是用于容器间的数据共享,操作方式还是命令行: --volume-from
# centos01就叫数据卷容器 $ docker run -d --name centos01 howl/centos:1.0 $ docker run -d --name centos02 --volume-from centos01 howl/centos:1.0这是数据卷,不和容器同生命周期,所以哪怕父容器删了,其余容器也能访问同步
10. Dockerfile
Dockerfile是有一系列命令和参数的脚本,通过这个脚本我们可以构建一个镜像
10.1 Dockerfile指令
指令必须都是大写,从上往下执行,且每个指令都会创建一层(可用&&将命令连起来只生成一层)
命令 语法 解释FROM FROM image[:tag] 指定基础镜像,必须第一条。FROM scratch表示不以任何镜像为基础
MAINTAINER 维护者信息
RUN 镜像构建时需要执行的命令
ADD 复制本地压缩文件,会自动解压
WORKDIR 镜像工作目录
VOLUME 设置容器卷
EXPOSE 指定堆外端口
CMD 指定容器运行中的命令,会被覆盖
ENTRYPOINT 指定容器启动时运行的命令,可以追加命令
ONBUILD 当构建一个被继承Dockerfile时会运行该指令
COPY COPY 宿主文件地址 容器文件地址 将文件拷贝到镜像中
ENV 构建时设置环境变量
10.1 编写Dockerfile
举例做个tomcat镜像,需要准备tomcat压缩包、jdk压缩包、readme文件
$ FROM centos $ MAINTAINER howl $ COPY readme.txt /usr/local/readme.txt $ ADD jdk-8u291-linux-x64.tar.gz /usr/local $ ADD apache-tomcat-8.5.68.tar.gz /usr/local $ RUN yum -y install vim $ ENV MYPATH /usr/local $ WORKDIR $MYPATH # JAVA_HOME 目录安装之后才知道 $ ENV JAVA_HOME /usr/local/jdk1.8.0_291 $ ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar $ ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.68 $ ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.68 $ ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib $ EXPOSE 8080 $ CMD /usr/local/apache-tomcat-8.5.68/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.68/bin/logs/catalina.out每条指令都会创建一个新的镜像层,并对镜像进行提交
若构建名为Dockerfile那么就会自动查找,不用-f去指定了
Docker运行得有前台应用在运行,不然会自动结束,tail就是为了前台运行,比如top等命令
注意:根据linux位数,arm,aarch64来安装jdk,笔者安装错了,走了很多弯路
10.2 Build制作镜像 # -f 指定dockerfile的路径 # -t 生成的镜像名字[:tag] 生成镜像的地址 # . 表示当前目录 $ docker build -t howl/tomcat .
10.3 运行制作的镜像 $ docker run -d -p 8080:8080 howl/tomcat
有个注意的地方,webapps下要新建目录才能访问的,不能放入已有文件夹内,也不能直接放入webapps里面
10.4 发布镜像
镜像的发布有两种途径,分别是:
DockerHub
# 首先需要登录 $ docker login -u loadingkiller $ Password: "输入密码" # 推送名字得是自己DockerHub上的账号名,所以得先改标签 # 本来 howl/centos 改成 loadingkiller/tomcat $ docker tag howl/tomcat:latest loadingkiller/tomcat:1.0 # 推送,速度慢等吧 $ docker push loadingkiller/centos:1.0阿里云镜像仓库
进入阿里云镜像管理可以创建镜像仓库,然后跟着里面的提示走
# 登录 docker login -u=XXX registry.cn-hongkong.aliyuncs.com # 选择分支对应关系 docker tag [ImageId] registry.cn-hongkong.aliyuncs.com/howlet/mytomcat:[镜像版本号] # 推送上去 docker push registry.cn-hongkong.aliyuncs.com/howlet/mytomcat:[镜像版本号] # 拉取 docker pull registry.cn-hongkong.aliyuncs.com/howlet/mytomcat:[镜像版本号]