本文共 4679 字,大约阅读时间需要 15 分钟。
为什么要用Dockerfile?
我们知道下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低。所以就需要一种文件或脚本,我们把想执行的操作以命令的方式写入其中,然后让docker读取并分析、执行,那么重复构建、更新将变得很方便,所以Dockerfile就此诞生了。
常用参数:
FROM命令。用法,FROM <image>:<tag>。FROM命令告诉docker我们构建的镜像是以哪个(发行版)镜像为基础的RUN命令。用法RUN <command>。RUN 后面接要执行的命令,比如,我们想在镜像中安装vim,只需在Dockfile中写入RUN yum install -y vimENV命令。用法,ENV <key> <value>。ENV命令主要用于设置容器运行时的环境变量ADD命令。用法,ADD <src> <dest>。ADD主要用于将宿主机中的文件添加到镜像中准备一个 CentOS 7操作系统,具体要求如下:
必须是 64 位操作系统
建议内核在 3.8 以上
[root@mytest ~]# uname -r3.10.0-693.11.1.el7.x86_64
[root@mytest ~]# yum install docker
可使用以下命令,查看 Docker 是否安装成功:
[root@mytest ~]# docker versionClient: Version: 1.12.6 API version: 1.24 Package version: docker-1.12.6-71.git3e8e77d.el7.centos.1.x86_64 Go version: go1.8.3 Git commit: 3e8e77d/1.12.6 Built: Tue Jan 30 09:17:00 2018 OS/Arch: linux/amd64
若输出了 Docker 的版本号,则说明安装成功了,可通过以下命令启动 Docker 服务:
[root@mytest ~]# systemctl start docker.service
一旦 Docker 服务启动完毕,就可以开始使用 Docker 了。
2.3 下载镜像
以 CentOS 为例,下载一个 CentOS 的镜像:
[root@mytest ~]# docker pull centos:7.3.1611
下载完成后,使用命令查看本地镜像列表:
[root@mytest ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEdocker.io/centos 7.3.1611 66ee80d59a68 4 months ago 191.8 MB
2.4 准备我们的jdk和tomcat安装包
创建工作目录:mkdir -p /usr/local
在/usr/local 目录下创建Dockerfile,添加如下内容:
[root@mytest local]# pwd/usr/local[root@mytest local]# vi Dockerfile #使用基础镜像FROM centos#作者信息MAINTAINER shiyu#创建目录RUN mkdir -p /usr/local/jdk1.7.0_79RUN mkdir -p /usr/local/tomcat#把当前目录下的jdk文件夹和tomcat文件夹添加到镜像ADD jdk1.7.0_79 /usr/local/jdk1.7.0_79ADD tomcat /usr/local/tomcat#添加环境变量ENV JAVA_HOME /usr/local/jdk1.7.0_79ENV CATALINA_HOME /usr/local/tomcatENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin#暴露端口EXPOSE 8088#启动运行tomcatENTRYPOINT /usr/local/tomcat/bin/startup.sh && tail -f /usr/local/tomcat/logs/catalina.out
2.5 开始构建镜像
Dockerfile文件保存之后,利用下面的命令进行构建镜像
root@mytest local]# docker build -t shiyu/centos:tomcat-centos --rm=true .Sending build context to Docker daemon 1.79 GBStep 1 : FROM centos ---> 2d194b392dd1Step 2 : MAINTAINER shiyu ---> Running in d2cb90945542 ---> 73b98190bccfRemoving intermediate container d2cb90945542Step 3 : RUN mkdir -p /usr/local/jdk1.7.0_79 ---> Running in 82a2ca78103f ---> 13e0d9446abaRemoving intermediate container 82a2ca78103fStep 4 : RUN mkdir -p /usr/local/tomcat ---> Running in 9212b67923ab ---> 2c3175985ba2Removing intermediate container 9212b67923abStep 5 : ADD jdk1.7.0_79 /usr/local/jdk1.7.0_79 ---> 127ad557b492Removing intermediate container a76726aea89cStep 6 : ADD tomcat /usr/local/tomcat ---> 077971565a12Removing intermediate container 3d683fb7d020Step 7 : ENV JAVA_HOME /usr/local/jdk1.7.0_79 ---> Running in d7b24f8ee544 ---> c20920d0d202Removing intermediate container d7b24f8ee544Step 8 : ENV CATALINA_HOME /usr/local/tomcat ---> Running in a66ed6a00240 ---> 1b1c342c5b57Removing intermediate container a66ed6a00240Step 9 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin ---> Running in 898cffa7afb6 ---> 3d76679ed432Removing intermediate container 898cffa7afb6Step 10 : EXPOSE 8088 ---> Running in 7164b56a9ae4 ---> ef9813039027Removing intermediate container 7164b56a9ae4Step 11 : ENTRYPOINT /usr/local/tomcat/bin/startup.sh && tail -f /usr/local/tomcat/logs/catalina.out ---> Running in 07a5cf4102cb ---> b61b207a5809Removing intermediate container 07a5cf4102cbSuccessfully built b61b207a5809-t选择指定生成镜像的用户名,仓库名和tag --rm=true指定在生成镜像过程中删除中间产生的临时容器。
查看新产生的镜像
[root@mytest local]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEshiyu/centos tomcat-centos b61b207a5809 28 minutes ago 1.263 GBdocker.io/centos latest 2d194b392dd1 7 hours ago 195.4 MBdocker.io/centos 7.3.1611 66ee80d59a68 4 months ago 191.8 MB
运行镜像:
[root@mytest local]# docker run -d -p 8090:8088 b61b8578122af71494569649306731592f5e3d41148bbff3792bb94aa40117f5de5c-p指定主机8090端口与容器8088端口进行绑定 -d 指定容器运行后与当前tty分离,后台运行 b61b是镜像的ID前4位 另外还有一种自动映射主机端口的启动方法
[root@mytest local]# docker run -d -p 8088 --name myweb b61
通过 http://宿主机IP:8090,即可看见我们部署的tomcat首页了。
2.6 查看container容器的运行状态
[root@mytest local]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES8578122af714 b61b "/bin/sh -c '/usr/loc" 6 minutes ago Up 6 minutes 0.0.0.0:8090->8088/tcp naughty_bartik
现在的容器状态为Up, 运行中, 如何停止一个运行中的容器? 运行docker stop命令