“Dockerfile服务(本地版)”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
(创建页面,内容为“==创建镜像== 当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。…”)
 
加载所需的centos7包
 
(未显示同一用户的4个中间版本)
第5行: 第5行:
 
     1.从已经创建的容器中更新镜像,并且提交这个镜像
 
     1.从已经创建的容器中更新镜像,并且提交这个镜像
 
     2.使用 Dockerfile 指令来创建一个新的镜像
 
     2.使用 Dockerfile 指令来创建一个新的镜像
 +
 +
==所需软件==
 +
centos7的打包docker镜像 -- centos7.tar,
 +
 +
jdk-8u211-linux-x64.tar.gz
 +
 +
apache-tomcat-8.5.40.tar.gz
  
 
==什么是DockerFile==
 
==什么是DockerFile==
第33行: 第40行:
 
CMD的主要是为一个正运行的容器提供默认执行命令。如果存在多个CMD指令,那么只有最后一个会被执行。如果在容器运行时指定了命令,则CMD指定的默认内容会被替代。
 
CMD的主要是为一个正运行的容器提供默认执行命令。如果存在多个CMD指令,那么只有最后一个会被执行。如果在容器运行时指定了命令,则CMD指定的默认内容会被替代。
  
==案例1:构建Centos镜像==
+
==案例:构建Tomcat镜像==
 
 
我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
 
 
 
===编写Dockerfile文件===
 
runoob@runoob:~$ vi Dockerfile
 
 
 
<nowiki>FROM    centos:6.7
 
MAINTAINER      Fisher "fisher@sudops.com"
 
 
 
RUN    /bin/echo 'root:123456' |chpasswd
 
RUN    useradd runoob
 
RUN    /bin/echo 'runoob:123456' |chpasswd
 
RUN    /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
 
EXPOSE  22
 
EXPOSE  80
 
CMD    /usr/sbin/sshd -D</nowiki>
 
 
 
每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
 
 
 
第一条FROM,指定使用哪个镜像源
 
 
 
RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
 
 
 
===构建镜像===
 
 
 
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
 
 
 
runoob@runoob:~$ docker build -t runoob/centos:6.7 .
 
 
 
<nowiki>Sending build context to Docker daemon 17.92 kB
 
Step 1 : FROM centos:6.7
 
---&gt; d95b5ca17cc3
 
Step 2 : MAINTAINER Fisher "fisher@sudops.com"
 
---&gt; Using cache
 
---&gt; 0c92299c6f03
 
Step 3 : RUN /bin/echo 'root:123456' |chpasswd
 
---&gt; Using cache
 
---&gt; 0397ce2fbd0a
 
Step 4 : RUN useradd runoob
 
......</nowiki>
 
 
 
参数说明:
 
 
 
    -t :指定要创建的目标镜像名
 
 
 
    . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
 
 
 
===查看和使用镜像===
 
 
 
使用docker images 查看创建的镜像已经在列表中存在,镜像ID为860c279d2fec
 
 
 
runoob@runoob:~$ docker images
 
 
 
<nowiki>REPOSITORY          TAG                IMAGE ID            CREATED              SIZE
 
runoob/centos      6.7                860c279d2fec        About a minute ago  190.6 MB
 
runoob/ubuntu      v2                  70bf1840fd7c        17 hours ago        158.5 MB
 
ubuntu              14.04              90d5884b1ee0        6 days ago          188 MB
 
php                5.6                f40e9e0f10c8        10 days ago          444.8 MB
 
nginx              latest              6f8d099c3adc        12 days ago          182.7 MB
 
mysql              5.6                f2e8d6c772c0        3 weeks ago          324.6 MB
 
httpd              latest              02ef73cf1bc0        3 weeks ago          194.4 MB
 
ubuntu              15.10              4e3b13c8a266        5 weeks ago          136.3 MB
 
hello-world        latest              690ed74de00f        6 months ago        960 B
 
centos              6.7                d95b5ca17cc3        6 months ago        190.6 MB
 
training/webapp    latest              6fae60ef3446        12 months ago        348.8 MB</nowiki>
 
 
 
我们可以使用新的镜像来创建容器
 
 
 
runoob@runoob:~$ docker run -t -i runoob/centos:6.7  /bin/bash
 
 
 
[root@41c28d18b5fb /]# id runoob
 
 
 
uid=500(runoob) gid=500(runoob) groups=500(runoob)
 
 
 
从上面看到新镜像已经包含我们创建的用户runoob
 
 
 
==案例2:构建Tomcat镜像==
 
 
JAVA程序必须有JDK环境才可以运行,为了减少镜像大小及提高性能,这里直接把JDK放到宿主机上,容器以挂载形式使用。
 
JAVA程序必须有JDK环境才可以运行,为了减少镜像大小及提高性能,这里直接把JDK放到宿主机上,容器以挂载形式使用。
  
第119行: 第49行:
  
 
mv jdk1.8.0_211 /usr/local/jdk1.8
 
mv jdk1.8.0_211 /usr/local/jdk1.8
 +
 +
===加载所需的centos7包===
 +
 +
<nowiki>[root@controller ~]# docker load -i centos7.tar
 +
[root@localhost ~]# docker images
 +
REPOSITORY          TAG                IMAGE ID            CREATED            SIZE
 +
<none>              <none>              9f38484d220f        2 months ago        202MB
 +
[root@localhost ~]# docker tag 9f38484d220f centos:7
 +
[root@localhost ~]# docker images
 +
REPOSITORY          TAG                IMAGE ID            CREATED            SIZE
 +
centos              7                  9f38484d220f        2 months ago        202MB</nowiki>
 +
 +
===上传所需的tomcat包===
 +
上传apache-tomcat-8.5.40.tar.gz到Linu服务器根目录
  
 
===编写Tomcat 镜像文件===
 
===编写Tomcat 镜像文件===
第131行: 第75行:
 
ENV JAVA_HOME /usr/local/jdk
 
ENV JAVA_HOME /usr/local/jdk
  
RUN yum install wget -y
+
RUN tar zxf apache-tomcat-${VERSION}.tar.gz && \
 
 
RUN wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz && \
 
    tar zxf apache-tomcat-${VERSION}.tar.gz && \
 
 
     mv apache-tomcat-${VERSION} /usr/local/tomcat && \
 
     mv apache-tomcat-${VERSION} /usr/local/tomcat && \
 
     rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \
 
     rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \
第141行: 第82行:
 
EXPOSE 8080
 
EXPOSE 8080
 
CMD ["catalina.sh", "run"]</nowiki>
 
CMD ["catalina.sh", "run"]</nowiki>
 
 
  
 
===构建镜像===
 
===构建镜像===

2019年6月4日 (二) 13:09的最新版本

创建镜像

当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

   1.从已经创建的容器中更新镜像,并且提交这个镜像
   2.使用 Dockerfile 指令来创建一个新的镜像

所需软件

centos7的打包docker镜像 -- centos7.tar,

jdk-8u211-linux-x64.tar.gz

apache-tomcat-8.5.40.tar.gz

什么是DockerFile

Virtual4-25.png

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像

Dockerfile相关语法

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

FROM

第一条FROM,指定使用哪个镜像源

ENV

ENV指令用来定义镜像的环境变量,并且可以引用已经存在的环境变量,例如:HOME、HOSTNAME、PATH。ENV的值跟ARG指令申明的变量一样可以传递、被引用,定义方法也基本一致。

RUN

RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。

EXPOSE

EXPOSE指定容器在运行中监听的端口。默认情况下,EXPOSE指定的是TCP端口

CMD

CMD的主要是为一个正运行的容器提供默认执行命令。如果存在多个CMD指令,那么只有最后一个会被执行。如果在容器运行时指定了命令,则CMD指定的默认内容会被替代。

案例:构建Tomcat镜像

JAVA程序必须有JDK环境才可以运行,为了减少镜像大小及提高性能,这里直接把JDK放到宿主机上,容器以挂载形式使用。

安装JDK

该jdk可以从群里下,也可以从网上下载。

tar zxvf jdk-8u211-linux-x64.tar.gz

mv jdk1.8.0_211 /usr/local/jdk1.8

加载所需的centos7包

[root@controller ~]# docker load -i centos7.tar
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              9f38484d220f        2 months ago        202MB
[root@localhost ~]# docker tag 9f38484d220f centos:7
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              7                   9f38484d220f        2 months ago        202MB

上传所需的tomcat包

上传apache-tomcat-8.5.40.tar.gz到Linu服务器根目录

编写Tomcat 镜像文件

Tomcat基础镜像Dockerfile:

cat Dockerfile

FROM centos:7
MAINTAINER www.aliangedu.com

ENV VERSION=8.5.40
ENV JAVA_HOME /usr/local/jdk

RUN tar zxf apache-tomcat-${VERSION}.tar.gz && \
    mv apache-tomcat-${VERSION} /usr/local/tomcat && \
    rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \
    mkdir /usr/local/tomcat/webapps/ROOT

EXPOSE 8080
CMD ["catalina.sh", "run"]

构建镜像

docker build -t 10.0.0.30:5000/tomcat-85 -f Dockerfile .

Step 8/8 : CMD ["catalina.sh", "run"]
 ---> Running in 9fbd976eac3a
Removing intermediate container 9fbd976eac3a
 ---> c35e2f65e281
Successfully built c35e2f65e281
Successfully tagged 10.0.0.30:5000/tomcat-85:latest