为什么要用Dockerfile?
我们知道下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低。所以就需要一种文件或脚本,我们把想执行的操作以命令的方式写入其中,然后让docker读取并分析、执行,那么重复构建、更新将变得很方便,所以Dockerfile就此诞生了。
常用参数:
FROM命令。用法,FROM <image>:<tag>。FROM命令告诉docker我们构建的镜像是以哪个(发行版)镜像为基础的
RUN命令。用法RUN <command>。RUN 后面接要执行的命令,比如,我们想在镜像中安装vim,只需在Dockfile中写入RUN yum install -y vim
ENV命令。用法,ENV <key> <value>。ENV命令主要用于设置容器运行时的环境变量
ADD命令。用法,ADD <src> <dest>。ADD主要用于将宿主机中的文件添加到镜像中
1.Docker与虚拟机
2.搭建过程
2.1准备宿主机
准备一个 CentOS 7操作系统,具体要求如下:
-
必须是 64 位操作系统
-
建议内核在 3.8 以上
通过以下命令查看您的 CentOS 内核:
-
[root@mytest ~]# uname -r
-
3.10.0-693.11.1.el7.x86_64
2.2安装docker
[root@mytest ~]# yum install docker
可使用以下命令,查看 Docker 是否安装成功:
-
[root@mytest ~]# docker version
-
Client:
-
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 images
-
REPOSITORY TAG IMAGE ID CREATED SIZE
-
docker.io/centos 7.3.1611 66ee80d59a68 4 months ago 191.8 MB
2.4 准备我们的jdk和tomcat安装包
-
创建工作目录:mkdir -p /usr/local
- 将jdk和tomcat包上传到/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_79
-
RUN mkdir -p /usr/local/tomcat
-
#把当前目录下的jdk文件夹和tomcat文件夹添加到镜像
-
ADD jdk1.7.0_79 /usr/local/jdk1.7.0_79
-
ADD tomcat /usr/local/tomcat
-
#添加环境变量
-
ENV JAVA_HOME /usr/local/jdk1.7.0_79
-
ENV CATALINA_HOME /usr/local/tomcat
-
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
-
#暴露端口
-
EXPOSE 8088
-
#启动运行tomcat
-
ENTRYPOINT /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 GB
-
Step 1 : FROM centos
-
---> 2d194b392dd1
-
Step 2 : MAINTAINER shiyu
-
---> Running in d2cb90945542
-
---> 73b98190bccf
-
Removing intermediate container d2cb90945542
-
Step 3 : RUN mkdir -p /usr/local/jdk1.7.0_79
-
---> Running in 82a2ca78103f
-
---> 13e0d9446aba
-
Removing intermediate container 82a2ca78103f
-
Step 4 : RUN mkdir -p /usr/local/tomcat
-
---> Running in 9212b67923ab
-
---> 2c3175985ba2
-
Removing intermediate container 9212b67923ab
-
Step 5 : ADD jdk1.7.0_79 /usr/local/jdk1.7.0_79
-
---> 127ad557b492
-
Removing intermediate container a76726aea89c
-
Step 6 : ADD tomcat /usr/local/tomcat
-
---> 077971565a12
-
Removing intermediate container 3d683fb7d020
-
Step 7 : ENV JAVA_HOME /usr/local/jdk1.7.0_79
-
---> Running in d7b24f8ee544
-
---> c20920d0d202
-
Removing intermediate container d7b24f8ee544
-
Step 8 : ENV CATALINA_HOME /usr/local/tomcat
-
---> Running in a66ed6a00240
-
---> 1b1c342c5b57
-
Removing intermediate container a66ed6a00240
-
Step 9 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
-
---> Running in 898cffa7afb6
-
---> 3d76679ed432
-
Removing intermediate container 898cffa7afb6
-
Step 10 : EXPOSE 8088
-
---> Running in 7164b56a9ae4
-
---> ef9813039027
-
Removing intermediate container 7164b56a9ae4
-
Step 11 : ENTRYPOINT /usr/local/tomcat/bin/startup.sh && tail -f /usr/local/tomcat/logs/catalina.out
-
---> Running in 07a5cf4102cb
-
---> b61b207a5809
-
Removing intermediate container 07a5cf4102cb
-
Successfully built b61b207a5809
-t选择指定生成镜像的用户名,仓库名和tag
--rm=true指定在生成镜像过程中删除中间产生的临时容器。
查看新产生的镜像
-
[root@mytest local]# docker images
-
REPOSITORY TAG IMAGE ID CREATED SIZE
-
shiyu/centos tomcat-centos b61b207a5809 28 minutes ago 1.263 GB
-
docker.io/centos latest 2d194b392dd1 7 hours ago 195.4 MB
-
docker.io/centos 7.3.1611 66ee80d59a68 4 months ago 191.8 MB
运行镜像:
-
[root@mytest local]# docker run -d -p 8090:8088 b61b
-
8578122af71494569649306731592f5e3d41148bbff3792bb94aa40117f5de5c
-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 ps
-
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-
8578122af714 b61b "/bin/sh -c '/usr/loc" 6 minutes ago Up 6 minutes 0.0.0.0:8090->8088/tcp naughty_bartik
现在的容器状态为Up, 运行中, 如何停止一个运行中的容器? 运行docker stop命令