一、手动构建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镜像步骤:
- 启动容器安装软件服务
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
######
- 将安装好服务的容器commit提交为镜像
docker commit oldboy centos6-ssh:v1
- 启动新容器来测试新提交的镜像
docker run -d -p 2022:22 centos6-ssh:v1 /usr/sbin/sshd -D
dockerfile制作docker镜像步骤:
- 编写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"]
- docker build构建镜像
docker build -t centos6-ssh:v2 .
- 启动新容器来测试新构建的镜像
docker run -d -p 1322:22 centos6-ssh:v2
四、dockerfile实战2
手动制作支持ssh-http双服务的docker镜像
- 启动容器安装软件服务
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
- 编写容器启动脚本
vi /init.sh
#!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D
- 将安装好服务的容器commit提交为镜像
docker commit oldgirl centos6-ssh-httpd:v1
- 启动新容器来测试新提交的镜像
docker run -d -p 8080:80 -p 1122:22 centos6-ssh-httpd:v1 /bin/bash /init.sh
dockerfile制作docker镜像步骤:
- 编写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"]
- 编写容器启动脚本
vim /init.sh
#!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D
- docker build构建镜像
docker build -t centos6-ssh-httpd:v2
- 启动新容器来测试新提交的镜像
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