一、手动构建docke镜像的缺点

相对于手动制作的docker镜像,使用dockerfile构建的镜像有以下优点:

1:dockerfile只有几kb,便于传输

2:使用dockerfile构建出来的镜像,在运行容器的时候,不用指定容器的初始命令

3:支持更多的自定义操作

二、dockerfile常用指令语法

dockerfile常用指令

  • FROM 这个镜像的妈妈是谁?(指定基础镜像)
  • MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,可以没有)
  • RUN 你想让它干啥(在命令前面加上RUN即可)
  • ADD 一个复制命令将本地文件复制到容器中,tar类型文件会自动解压。可以访问网络资源,类似wget
  • WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)(进入容器后的目录)
  • VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)
  • EXPOSE 它要打开的门是啥(指定对外的端口)(-P 随机端口映射的端口)
  • CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)(容易被替换)

dockerfile其他指令

  • COPY 复制命令,功能类似ADD,但是不会自动解压文件,也不能访问网络资源
  • ENV 环境变量 可以传环境变量 如:docker run --env "passwd=654321" -d -p 2254:22 centos6-ssh:v3
  • ENTRYPOINT 容器启动后执行的命令(无法被替换,启容器的时候指定的命令,会被当成参数

三、dockerfile实战1

手动制作docker镜像步骤:

  1. 启动容器安装软件服务
docker run -it -p 1022:22 --name oldboy centos:6.9 
######
yum install openssh-server -y
/etc/init.d/sshd start
echo 123456|passwd  --stdin root 
######
  1. 将安装好服务的容器commit提交为镜像
docker commit oldboy centos6-ssh:v1
  1. 启动新容器来测试新提交的镜像
docker run -d -p 2022:22 centos6-ssh:v1  /usr/sbin/sshd -D

dockerfile制作docker镜像步骤:

  1. 编写dockerfile
vi  dockerfile
FROM  centos:6.9
RUN     yum install openssh-server -y
RUN     /etc/init.d/sshd start
RUN     echo 123456|passwd --stdin root 
CMD     ["/usr/sbin/sshd","-D"]
  1. docker build构建镜像
docker build -t centos6-ssh:v2  .
  1. 启动新容器来测试新构建的镜像
docker run -d -p 1322:22 centos6-ssh:v2  

四、dockerfile实战2

手动制作支持ssh-http双服务的docker镜像

  1. 启动容器安装软件服务
docker run -it --name oldgirl centos:6.9 
yum install httpd -y
yum install openssh-server -y
/etc/init.d/sshd start
echo 123456|passwd  --stdin root  
  1. 编写容器启动脚本
vi /init.sh
#!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D
  1. 将安装好服务的容器commit提交为镜像
docker commit oldgirl centos6-ssh-httpd:v1
  1. 启动新容器来测试新提交的镜像
docker run -d -p 8080:80 -p 1122:22 centos6-ssh-httpd:v1 /bin/bash /init.sh

dockerfile制作docker镜像步骤:

  1. 编写dockerfile
FROM  centos:6.9
RUN     yum install openssh-server httpd -y
RUN     /etc/init.d/sshd start
RUN     echo 123456|passwd --stdin root
ADD      init.sh   /init.sh 
CMD     ["/bin/bash","/init.sh"]
  1. 编写容器启动脚本
vim /init.sh
#!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D
  1. docker build构建镜像
docker build -t centos6-ssh-httpd:v2
  1. 启动新容器来测试新提交的镜像
docker run -d -p 8080:80 -p 2122:22 centos6-ssh-httpd:v2

五、dockerfile实战3

自动构建可道云网盘kodexplorer镜像(php项目)

5.1 需要的环境:

==++制作docker镜像步骤,先手动,再自动++==

  • httpd+php或者nginx+php
  • php所需模块:未知
  • 基础镜像:centos:6.9
  • 项目下载地址: http://static.kodcloud.com/update/download/kodexplorer4.37.zip

项目官网:https://kodcloud.com/download/

5.2 手动制作kodexplorer镜像

 yum install httpd php php-cli  php-gd php-mbstring unzip -y
 cd /var/www/html/
 curl -O http://static.kodcloud.com/update/download/kodexplorer4.40.zip
 unzip kodexplorer4.40.zip
 chmod -R 777 /var/www/html/
 /etc/init.d/httpd  start

5.3 编写dockerfile自动构建

[root@docker1 ~]# vim dockerfile 

FROM  centos:6.9
RUN      yum install httpd php php-cli  php-gd php-mbstring unzip -y
WORKDIR /var/www/html
RUN     /etc/init.d/httpd  start
COPY    kodexplorer4.40.zip .
RUN     unzip kodexplorer4.40.zip
RUN     chmod -R 777 /var/www/html/
ADD      init.sh   /init.sh
EXPOSE  80
CMD     ["/bin/bash","/init.sh"]
[root@docker1 ~]# vim init.sh 

#!/bin/bash
/etc/init.d/httpd start
tail  -F /aa
~             

自动构建

docker build -t kod:v1 .
[root@docker1 ~]# ls
anaconda-ks.cfg  dockerfile  init.sh  kodexplorer4.40.zip