构建Docker镜像实战案例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构建Docker镜像实战案例相关的知识,希望对你有一定的参考价值。
Dockerfile介绍
- Dockerfile是由一组指令组成的文件,每条指令对应linux中一条命令,Docker程序将读取Dockerfile中的指令生成指定镜像。
- Dockerfile大致结构:基础镜像信息、维护者信息、镜像操作指令、容器启动时执行指令。每行支持一条指令,每条指令可以携带多个参数,支持以 # 开头的注释。
- Dockerfile操作指令:
FROM 镜像 : 指定新的镜像所基于的镜像
MAINTAINER 名字 :说明新镜像的维护人
RUN 命令 : 在所基于的镜像上执行命令,并提交到新的镜像中
CMD ["要运行的程序","参数1","参数2"] : 指定启动容器时要运行的命令或脚本
EXPOSE端口号 : 指定新镜像加载到Docker时要开启的端口
ENV环境变量 变量值 : 设置一个环境变量的值,会背后面的RUN用到
ADD源文件/目录 目标文件/目录 :将源文件复制到目标文件 ,源文件和Dockerfile位于同一目录
COPY源文件/目录 目标文件/目录 :将本地主机的源文件复制到目标目录,源文件和Dockerfile位于同一目录
VOLUME["目录"] : 在容器中创建一个挂载点
USER 用户名 /UID :指定运行容器时的用户
WORKDIR路径 : 为后续的RUN 、CMD、ENTRYPOINT 指定工作目录
ONBUILD命令 : 指定所生成的镜像作为一个基础镜像时所要运行的命令。
?
实战 下面详解三个案例:构建nginx、tomcat、mysql镜像
?
-
构建Nginx镜像
-
建立工作目录
# docker pull centos //下载基础镜像 # mkdir nginx # cd nginx/
-
创建Dockerfile文件
# vim Dockerfile //编写Dockerfile # 设置基础镜像 FROM centos # 维护该镜像的用户 MAINTAINER this is nginx image <zkc> # 安装环境 下载软件包 并解压 RUN yum install -y wget proc-devel net-tools gcc zlib zlib-devel make openssl-devel RUN wget http://nginx.org/download/nginx-1.9.7.tar.gz RUN tar zxvf nginx-1.9.7.tar.gz # 工作目录 编译安装 WORKDIR nginx-1.9.7 RUN ./configure --prefix=/usr/local/nginx && make && make install # 开启 80 和443端口 EXPOSE 80 EXPOSE 443 # 修改配置文件,以非 deamon方式启动 RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf # 复制服务脚本并设置权限 WORKDIR /root/nginx ADD run.sh /run.sh RUN chmod 755 /run.sh # 启动容器时执行脚本 CMD ["/run.sh"]
-
编写执行脚本
# vim run.sh #!/bin/bash /usr/local/nginx/sbin/nginx
-
生成镜像
# docker build -t nginx:new . # docker run -d -P nginx:new # docker ps -a
? - 测试
??
??
-
构建Tomcat 镜像
-
建立工作目录
# mkdir /root/tomcat # cp jdk-8u91-linux-x64.tar.gz /root/tomcat/ //将安装包复制到该目录并解压 # cp apache-tomcat-8.5.16.tar.gz /root/tomcat/ # cd /root/tomcat/ # tar zxvf jdk-8u91-linux-x64.tar.gz # tar zxvf apache-tomcat-8.5.16.tar.gz
-
创建Dockerfile文件
# vim Dockerfile //编写Dockerfile FROM centos MAINTAINER this is tomcat image <zkc> # 安装JDK环境,设置其环境变量 ADD jdk1.8.0_91 /usr/local/java ENV JAVA_HOME /usr/local/java ENV JAVA_BIN /usr/local/java/bin ENV JRE_HOME /usr/local/java/jre ENV PATH $PATH:/usr/local/java/bin:/usr/local/java/jre/bin ENV CLASSPATH /usr/local/java/jre/bin:/usr/local/java/lib:/usr/local/java/jre/lib/charsets.jar ADD apache-tomcat-8.5.16 /usr/local/tomcat8 EXPOSE 8080
-
生成镜像
# docker build -t tomcat:centos .
?
-
加载到容器并开启服务
[[email protected] tomcat]# docker run --name tomcat01 -p 80:8080 -it tomcat:centos /bin/bash //加载到容器 并 映射本地的80端口到 容器的8080端口 [[email protected] /]# cd /usr/local/tomcat8/bin [[email protected] bin]# ./startup.sh
- 测试
- 在浏览器输入:192.168.200.132 (宿主机IP)
?
?
-
构建Mysql镜像
-
建立工作目录
# mkdir /mysql # cd /mysql
-
创建Dockerfile文件
# vim Dockerfile //编写Dockerfile # 设置基础镜像为centos6 FROM guyton/centos6 MAINTAINER this is msyql images <zkc> RUN yum -y install mysql mysql-server # 开启mysql服务并授权 RUN /etc/init.d/mysqld start &&mysql -e "grant all privileges on *.* to ‘root‘@‘%‘ identified by ‘abc123‘;" &&mysql -e "grant all privileges on *.* to ‘root‘@‘localhost‘ identified by ‘abc123‘;" EXPOSE 3306 # 运行初始化脚本mysql_safe CMD ["mysqld_safe"]
-
生成镜像
# docker build -t centos6:mysql . //后面有个点 . # docker run --name=mysqlserver -d -P centos6:mysql //加载到容器并映射本地随机端口到容器的3306端口 # docker ps -a
?
- 测试
- 注意:两边防火墙都要关
-
使用其他mysql服务器远程登录容器mysql
# mysql -h 192.168.200.132 -u root -P 32770 -pabc123
以上是关于构建Docker镜像实战案例的主要内容,如果未能解决你的问题,请参考以下文章
Maven实战技巧「Docker实战系列」使用Maven插件构建Docker镜像的方法
企业运维实战--最全Docker学习笔记1.Docker简介安装部署镜像构建Dockerfile详解镜像构建镜像优化本地私有仓库搭建