通过dockerfile 创建镜像以及更新镜像

制作Docker镜像

安装 Docker

Docker 要求CentOS 系统的内核版本高于 3.10 

#查看当前系统的版本

uname -r

#安装 Docker 软件包和依赖包

yum -y install docker

安装完成

#从远程仓库拉取  centos:7  镜像

docker pull centos:7

#查看本地镜像

docker  images

docker: Docker 的二进制执行文件。

run:与前面的 docker 组合来运行一个容器。

centos:7 指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。

/bin/echo "Hello world": 在启动的容器里执行的命令

安装过程挺顺利,顺利的过程给后面埋下众多雷。确实是这样,原因就是上述命令安装的docker版本比较低,有好多命令不支持,因此放弃此次安装,改用安装比较新的docker

安装最新版的docker

环境:centos 7 安装的制作docker镜像的时候会出现其他问题,因此需要用Ubuntu 制作docker镜像。Ubuntu 16.04

#卸载老版本的docker以及其依赖

sudo yum remove docker docker-commoncontainer-selinuxdocker-selinuxdocker-engine

#安装 yum-utils,它提供了 yum-config-manager,可用来管理yum源

sudo yum install -yyum-utils

#添加yum源

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

#更新yum索引

sudo  yum makecache fast

#安装 docker-ce

sudo yum install docker-ce

#启动 docker

sudo  systemctl start docker

#验证是否安装成功

sudo  docker info

检测新安装的版本

 

安装过程完毕!!!!!!!!!!!!!!!!!!!!!

通过dockerfile 创建自己的镜像

可以通过dockerfile为自己定制个性化的镜像,比如在镜像中安装 mysqltomcatnginxjdk等等。也可以在网上直接拉去别人已经创建好的镜像,在此值展现如何通过 dockerfile 创建已安装tomcatnginxjdk 的镜像。

步骤一:编写 dockerfile 

dockerfile 用来创建一个自定义的image,包含了用户指定的软件依赖等,每一个命令都会在前一个命令上面形成一个新层,因此,当有多条命令可以写成一行命令时,最好写成一条命令。(即 RUN  后面写的命令)

方法一:dockerfile 的写法如下

引入Ubuntu 镜像

FROM ubuntu:trusty

RUN mkdir /usr/local/java

RUN mkdir /usr/local/tomcat

#安装 jdk

ADD jdk-8u144-linux-x64.tar.gz /usr/local/java

ENV JAVA_HOME /usr/local/java/jdk1.8.0_144

ENV PATH $JAVA_HOME/bin:$PATH

ENV CLASSPATH .:$JAVA_HOME/lib

#安装 tomcat

ADD /apache-tomcat-8.5.24.tar.gz /usr/local/tomcat/

ENV TOMCAT_HOME=/usr/local/tomcat/apache-tomcat-8.5.24

ENV PATH=$TOMCAT_HOME/bin:$PATH

RUN chmod +x /usr/local/tomcat/apache-tomcat-8.5.24/bin/*.sh

#安装 nginx

RUN apt-get update 

RUN apt-get install -y software-properties-common 

RUN add-apt-repository ppa:nginx/stable 

RUN apt-get update 

RUN apt-get install -y nginx

#向外端暴露 8080 和 80 端口

EXPOSE 8080 80

#启动tomcat nginx

ENTRYPOINT /usr/local/tomcat/apache-tomcat-8.5.24/bin/startup.sh && /etc/init.d/nginx start && /bin/bash

方法二: 

FROM ubuntu:trusty

RUN mkdir /usr/local/java

RUN mkdir /usr/local/tomcat

ADD jdk-8u144-linux-x64.tar.gz /usr/local/java

ENV JAVA_HOME /usr/local/java/jdk1.8.0_144

ENV PATH $JAVA_HOME/bin:$PATH

ENV CLASSPATH .:$JAVA_HOME/lib

ADD /apache-tomcat-8.5.24.tar.gz /usr/local/tomcat/

ENV TOMCAT_HOME=/usr/local/tomcat/apache-tomcat-8.5.24

ENV PATH=$TOMCAT_HOME/bin:$PATH

RUN chmod +x /usr/local/tomcat/apache-tomcat-8.5.24/bin/*.sh

RUN apt-get update \ 

    && apt-get install -y software-properties-common \ 

    && add-apt-repository ppa:nginx/stable \ 

    && apt-get update \ 

    && apt-get install -y nginx

EXPOSE 8080 80

ENTRYPOINT /usr/local/tomcat/apache-tomcat-8.5.24/bin/startup.sh && /etc/init.d/nginx start && /bin/bash

上述两种安装方法,区别就是安装 nginx 时,方法二将多条命令写成了一条命令。方法二比方法一制造的镜像少 30 内存。

步骤二:docker build命令创建镜像

#通过 dockerfile创建镜像

dockerfile  build  -t  vpaas  .                                              

-t: -t:在新容器内指定一个伪终端或终端。

#查看创建好之后的镜像

repository: 镜像仓库源

TAG :   标签

IMAGE: 镜像ID

CREATED:创建时间

SIZE: 镜像大小

步骤三:通过镜像启动一个容器

#通过镜像启动一个容器

docker run -itd --privileged=true -v /home/vpaas:/usr/local/vpaas_file -p 8089:8080 --name vpaas_container   vpaas:latest /bin/bash

-t:在新容器内指定一个伪终端或终端。

-i:允许你对容器内的标准输入 (STDIN) 进行交互。

-d:让容器在后台运行。

-P:将容器内部使用的网络端口映射到我们使用的主机上。

-p : 是容器内部端口绑定到指定的主机端口

-v:参数用于数据卷映射,/home/vpaas 是宿主机卷标,/usr/local/vpaas_file 是容器卷标

--name:  容器名称

vpaas:latest: 创建的镜像名

数据卷的作用:

docker 镜像启动的容器和宿主机可以看成两个不同的Linux系统,这两个文件系统之间传输文件就是用数据卷进行传输的。

宿主机将文件放入到 /home/vpaas 中,通过容器卷标  /usr/local/vpaas_file  就可以看到放入的文件,类似于文件夹共享。

#查看启动的容器

docker  ps

#查看所有的容器

docker  ps  -a

   

更新镜像

镜像创建好后,可能因为业务的需要,要加入某些功能,或者是部署自己的项目,就需要更新已经创建好的镜像。

步骤一:启动容器

docker  start  vpaas

步骤二:进入更新

docker  exec  -ti  vpaas_container  /bin/bash

vpaas_container: 容器名称,也可以成为容器ID

步骤三: 根据自己的需要,安装自己所需要的软件和部署自己的项目

步骤四:退出容器

命令:    exit

步骤五:通过容器生成镜像

docker  commit  -m="更新镜像"  78c1ea1f7782  vpaasthree

-m:提交的描述信息

-a: 指定镜像作者

e218edb10161容器ID 

vpaasthree:  指定要创建的目标镜像名

发布了32 篇原创文章 · 获赞 21 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/nimoyaoww/article/details/78806830