如何构建一个Docker镜像

64次阅读
没有评论

共计 4663 个字符,预计需要花费 12 分钟才能阅读完成。

这篇文章主要介绍“如何构建一个 Docker 镜像”,在日常操作中,相信很多人在如何构建一个 Docker 镜像问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何构建一个 Docker 镜像”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

8. 高级

本节我介绍如何自己构建一个 Docker 镜像,我们将构建一个支持 scala 的运行环境,并且对外开放 SSH 服务。

8.1. 构建镜像的两种方法

构建镜像有两种方法:

运行并进行一个基础容器(如 centos, docker run -it centos /bin/bash),然后安装需要的环境,再用 commit  将容器保存成新的镜像

使用 Dockerfile 构建,这也是推荐的做法

本节我们仅介绍第 2 种方法。

8.2. Dockerfile 介绍

Dokcerfile 是用于构建 Docker 镜像的元文件,它的说明及语法见: http://docs.docker.com/engine/reference/builder/

8.3. 构建规划

根据需求可以发现我们安装的主要环境有三个:SSH 服务、Java 环境(Scala 依赖它)、Scala 环境,与软件开发一样,我们也可以分模块构建,即构建三个镜像:

只包含 SSH 服务的基础镜像

带 SSH 及 Java 环境的镜像

带 SSH、Java 及 Scala 环境的镜像

8.4. SSH 镜像

FROM centos:centos7  1 
MAINTAINER gudaoxuri  2 
#---------------Use 163 mirrors---------------  3 
RUN yum install -y wget  \
 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup   \
 wget -P /etc/yum.repos.d/ http://mirrors.163.com/.help/CentOS7-Base-163.repo   \
 yum clean all   \
 yum makecache  4 
#---------------Install Common Tools---------------
RUN yum install -y sed curl tar gcc gcc-c++ make git passwd sudo
#---------------Modify Time Zone---------------
ENV TZ  Asia/Shanghai   5 
ENV TERM xterm
RUN yum install -y ntpdate   \
 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#---------------Support Chinese---------------
#RUN yum groupinstall -y  Fonts    \
# echo  LANG=\ zh_CN.UTF-8\    /etc/sysconfig/i18n
#---------------Install SSH---------------
RUN yum install -y openssh-server openssh-clients   \
 sed -i  s/UsePAM yes/UsePAM no/g  /etc/ssh/sshd_config   \
 echo  root:123456  | chpasswd   \
 ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key   \
 ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key   \
 mkdir /var/run/sshd
#---------------Setting Common Path---------------
RUN chmod 777 -R /opt/   \
 mkdir /opt/env/   \
 mkdir /opt/workspaces/
EXPOSE 22  6 
CMD [/usr/sbin/sshd ,  -D]  7

1 FROM  表示此镜像是基于哪个镜像构建的 2 MAINTAINER  开发者的信息 3 # 注释 4 RUN  常用命令,用于执行 Linux 的命令,多用于安装组件 5 ENV  常用命令,用于设置环境变量 6 EXPOSE  表明默认对外暴露的端口(docker run -P) 7 CMD  要执行的服务,多条 CMD 只执行最后一条
RUN  参数的学问,Docker 镜像是分层的,一个镜像可能由多个层组成,一次 RUN 实际上就产生了一层,在编译 Dockerfile 的过程中可能出错,重新编译时我们会发现之前已成功编译的层不会再次被编译 8.5. 编译 SSH 镜像

root@ubuntu:/opt/test/dockerfile/ssh# ls
Dockerfile
root@ubuntu:/opt/test/dockerfile/ssh# docker build -t gudaoxuri/ssh .
Sending build context to Docker daemon 3.072 kB
Sending build context to Docker daemon 
Step 0 : FROM centos:centos7
Pulling repository centos
ce20c473cd8a: Download complete 
ce20c473cd8a: Pulling image (centos7) from centos 
168a69b62202: Download complete 
812e9d9d677f: Download complete 
4234bfdd88f8: Download complete 
Status: Downloaded newer image for centos:centos7
 ---  ce20c473cd8a
Step 1 : MAINTAINER gudaoxuri
 ---  Running in 889ea744c458
 ---  5b1151e6cb0b
Removing intermediate container 889ea744c458
Step 10 : CMD /usr/sbin/sshd -D
 ---  Running in ce563073b686
 ---  b61a4adad85f
Removing intermediate container ce563073b686
Successfully built b61a4adad85f
root@ubuntu:/opt/test/dockerfile/ssh# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
gudaoxuri/ssh latest b61a4adad85f 10 minutes ago 966 MB
...

8.6. Java 镜像

FROM gudaoxuri/ssh:latest  1 
MAINTAINER gudaoxuri
#---------------Install Java---------------
RUN wget -P /opt/env/ --no-check-certificate --no-cookies --header  Cookie: oraclelicense=accept-securebackup-cookie  http://download.oracle.com/otn-pub/java/jdk/8u60-b27/jdk-8u60-linux-x64.tar.gz   \
 tar -xzf /opt/env/jdk-8u60-linux-x64.tar.gz -C /opt/env/   \
 rm /opt/env/jdk-8u60-linux-x64.tar.gz   \
 mv /opt/env/jdk1.8.0_60 /opt/env/java   \
 echo  export JAVA_HOME=/opt/env/java    /etc/profile
ENV JAVA_HOME /opt/env/java
RUN echo  PATH=$PATH:$JAVA_HOME/bin    /etc/profile
ENV PATH $PATH:$JAVA_HOME/bin

1 gudaoxuri/ssh:latest  就是我们之前编译的镜像 8.7. Scala 镜像

FROM gudaoxuri/java:latest
MAINTAINER gudaoxuri
#---------------Install Scala---------------
RUN wget -P /opt/env/ http://downloads.typesafe.com/scala/2.10.6/scala-2.10.6.tgz   \
 tar -xzf /opt/env/scala-2.10.6.tgz -C /opt/env/   \
 rm /opt/env/scala-2.10.6.tgz   \
 mv /opt/env/scala-2.10.6 /opt/env/scala   \
 echo  export SCALA_HOME=/opt/env/scala    /etc/profile
ENV SCALA_HOME /opt/env/scala
RUN sed /^PATH=/d /etc/profile   /etc/profile   \
 echo  PATH=$PATH:$JAVA_HOME/bin:$SCALA_HOME/bin    /etc/profile
ENV PATH $PATH:$JAVA_HOME/bin:$SCALA_HOME/bin

8.8. 编译 Java/Scala 镜像

过程同上,略

8.9. 发布镜像

有了新的镜像后我们希望把这个镜像发布到 hub.docker.com 上去分享,有两种方式:

使用  docker push  发布前要先登录  docker login

使用 github 发布

介于国内网络环境恶劣,第 1 种方式失败概率很高,因为它上传的是生成的镜像(几百 MB 到几 G 不等),所以推荐使用第 2 种方式
请先注册 hub.docker.com  及  github.com  的账号 8.9.1. 使用 github 发布镜像
不要用 IE 操作,笔者使用 IE11 在 hub.docker.com 上操作时发生过不小的困扰。

在 hub.docker.com  上建立 github 连接

在 github 中设置权限

在 github 中建一个开源项目,注意要包含 Dockerfile 文件

在 github 中设置这个项目的权限

在 hub.docker.com  上建立自动构建项目

在 hub.docker.com  上选择 github 上的项目

在 hub.docker.com  上设置项目属性

不多时就构建好了

到此,关于“如何构建一个 Docker 镜像”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计4663字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)