通过Dockerfile构建镜像
自定义镜像需要写Dockerfile文件,如果文件名不为Dockerfile,则需要使用-f来指定文件名。
原理
使用基镜像生成一个临时容器,然后在这个临时容器里执行Dockerfile文件里定义的命令,完成所有操作后把临时容器导出为一个新的镜像,最后删除该临时镜像。
Dockerfile常用命令
- FROM:指定基镜像
- MAINTAINER:维护者的信息
- RUN:在临时容器里执行的操作系统命令
- ADD file /path/:把物理机里file拷贝到镜像的指定目录 /path
- COPY file /path/:把物理机里file拷贝到镜像的指定目录 /path
- ENV:指定变量
- USER:指定容器内部以哪个用户运行进程
- VOLUME:指定数据卷(所指文件夹会在创建的容器里创建,并随机绑定到物理机的随机目录)
- EXPOSE:指定镜像容器所使用的端口
- CMD:指定镜像创建出来的容器运行什么进程
创建可以执行某命令(如ifconfig)的centos镜像
- 在临时容器里执行安装操作即可,Dockerfile内容如下
FROM hub.c.163.com/library/centos
MAINTAINER sun
RUN yum install net-tools -y
CMD ["/bin/bash"]
- 构建语法如下
docker build -t 镜像名:tag . -f file
在此处为:
docker build -t centos:v1 .
- 查看镜像
docker images
- 测试镜像
docker run --rm -it centos:v1
ifconfig
自定义nginx镜像
- 拷贝所需要的repo文件
cd /etc/yum.repos.d/
tar zcf /root/repo.tar.gz *
- 创建index.html
vi index.html
hello world!
- 写dockerfile1,内容如下
注意:容器里nginx作为守护进程运行的话,必须要以nginx -g daemon off
这个格式运行
FROM hub.c.163.com/library/centos
MAINTAINER sun
RUN rm -rf /etc/yum.repos.d/*
ADD repo.tar.gz /etc/yum.repos.d/
RUN yum install -y nginx
ADD index.html /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
- 构建新镜像
docker build -t nginx:v1 . -f dockerfile1
- 验证镜像
docker run -d --name=web --restart=always -p 80:80 nginx:v1
在浏览器访问: