DockerFile可以说是一种可以被Docker程序解释的脚本,DockerFile是由一条条的命令组成的,每条命令对应linux下面的一条命令,Docker程序将这些DockerFile指令再翻译成真正的linux命令,其有自己的书写方式和支持的命令,Docker程序读取DockerFile并根据指令生成Docker镜像,相比手动制作镜像的方式,DockerFile更能直观的展示镜像是怎么产生的,有了DockerFile,当后期有额外的需求时,只要在之前的DockerFile添加或者修改响应的命令即可重新生成新的Docke镜像,避免了重复手动制作镜像的麻烦,具体如下:
一、创建一个centos容器
docker run -it docker.io/centos "/bin/bash"
ctrl+PQ退出
[root@1 ~]# mkdir /opt/dockerfile/{web/{nginx,tomcat,jdk,apache},system/{centos,ubuntu,redhat}} -pv
#目录结构按照业务类型或系统类型等方式划分,方便后期镜像比较多的时候进行分类。
[root@1 ~]# cd /opt/dockerfile/web/nginx/
二、编写dockerfile
#生成的镜像的时候会在执行命令的当前目录查找Dockerfile文件,所以名称不可写错,而且D必须大写
[root@1 nginx]# vim ./Dockerfile
#My Dockerfile
#'#'为注释符号
#除了注释行之外的第一行,必须是Fror xxx (xxx是基础镜像)
From centos #第一行先定义基础镜像,后面的是本地有效的镜像名,如果本地没有 会从远程仓库下载,第一行很重要。#镜像维护者的信息 maintainer
MAINTAINER 2249902650@qq.com#其他可选参数
#USER 指定改容器运行时的用户名和UID,后续的RUN命令也会使用这面指定的用户执行
#WORKDIR /a
#WORKDIR b (workdir) #指定工作目录,最终为/a/b
#VOLUME (volume)设置主机挂载卷#执行的命令,将编译安装nginx的步骤执行一遍
RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
ADD nginx-1.10.3.tar.gz /usr/local/src/ #自动解压压缩包
RUN cd /usr/local/src/nginx-1.10.3 && ./configure --prefix=/usr/local/nginx --with-http_sub_module && make && make install
RUN cd /usr/local/nginx/
ADD nginx.conf /usr/local/nginx/conf/nginx.conf
RUN useradd nginx -s /sbin/nologin
RUN ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx
RUN echo "test nginx page" > /usr/local/nginx/html/index.html
XPOSEE 80 443 #向外开放的端口,多个端口用空格做间隔,启动容器时候-p需要使用此端香外映射,如-怕8081:80,则80就是这里的80
CMD ["nginx"] #运行的命令,每个Dockerfile只能有一条,如果有多条则只有最厚一条被执行
#如果在从该镜像启动容器的时候也指定了命令,那么指定的命令会覆盖Dockerfile构建的镜像里面的CMD命令,即指定的命令优先级更高,Dockerfile的优先级较低一些
#CMD ["nginx","-g","daemon off;"]#VOLUME
#ENTRYPOINT 参数替换
[root@docker-server1 nginx]# cp /usr/local/nginx/conf/nginx.conf . #配置文件关闭后台运行
[root@docker-server1 nginx]# cp /usr/local/src/nginx-1.10.3.tar.gz . #nginx源码包
[root@docker-server1 nginx]# docker build –t jack/nginx-1.10.3:v1 /opt/dockerfile/web/nginx/
可以清晰看到各个步骤执行的具体操作
[root@docker-server1 nginx]# docker run -d -p 80:80 --name yum-nginx jack/nginx-1.10.3:v1 /usr/sbin/nginx
过程为在centos 基础镜像之上手动编译安装nginx,然后再提交为镜像。
[root@docker-server1 ~]# docker pull centos
[root@docker-server1 ~]# docker run -it docker.io/centos /bin/bash
[root@86a48908bb97 /]# yum install wget -y
[root@86a48908bb97 /]# cd /etc/yum.repos.d/
[root@86a48908bb97 yum.repos.d]# rm -rf ./* #更改yum 源
[root@86a48908bb97 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@86a48908bb97 yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@86a48908bb97 yum.repos.d]# yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop #安装基础包
[root@86a48908bb97 yum.repos.d]# cd /usr/local/src/
[root@86a48908bb97 src]# wet http://nginx.org/download/nginx-1.10.3.tar.gz
[root@86a48908bb97 src]# tar xvf nginx-1.10.3.tar.gz
[root@86a48908bb97 src]# cd nginx-1.10.3
[root@86a48908bb97 nginx-1.10.3]# ./configure --prefix=/usr/local/nginx --with-http_sub_module
[root@86a48908bb97 nginx-1.10.3]# make && make install
[root@86a48908bb97 nginx-1.10.3]# cd /usr/local/nginx/
[root@86a48908bb97 nginx]# vim conf/nginx.conf
user nginx;
worker_processes auto;
daemon off;
[root@86a48908bb97 nginx]# ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx #创建软连
[root@86a48908bb97 nginx]# useradd nginx -s /sbin/nologin
[root@86a48908bb97 nginx]# chown nginx.nginx /usr/local/nginx/ -R
[root@86a48908bb97 nginx]# echo "My Nginx Test Page" > /usr/local/nginx/html/index.html
[root@docker-server1 ~]# docker commit -m "test nginx" 86a48908bb97 jack/nginx-test-image
sha256:fce6e69410e58b8e508c7ffd2c5ff91e59a1144847613f691fa5e80bb68efbfa
[root@docker-server1 ~]# docker commit -m "test nginx" 86a48908bb97 jack/nginx-test-image:v1
sha256:474cad22f28b1e6b17898d87f040dc8d1f3882e2f4425c5f21599849a3d3c6a2
[root@docker-server1 ~]# docker run -d -p 80:80 --name my-centos-nginx jack/nginx-test-image:v1 /usr/sbin/nginx
8042aedec1d6412a79ac226c9289305087fc062b0087955a3a0a609c891e1122
备注: -name是指定容器的名称,-d是后台运行,-p是端口映射,jack/nginx-test-image是xx仓库下的xx镜像的xx版本,可以不加版本,不加版本默认是使用latest,最后面的nginx是运行的命令,即镜像里面要运行一个nginx命令,所以才有了前面将/usr/local/nginx/sbin/nginx软连接到/usr/sbin/nginx,目的就是为了让系统可以执行此命令。
=============
dockerfile制作ssh
编写init.sh脚本
ssh root@10.0.0.8:1023 进行连接docker容器
有问题请加博主微信进行沟通!
全部评论