为什么要用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与虚拟机




Dockerfile jar 启动不了 dockerfile启动tomcat_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
/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
/centos    latest              2d194b392dd1        7 hours ago         195.4 MB
/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命令