linux运维之Dockerfile(自动创建镜像)
使用dockerfile自动构建镜像:
类似于ansible剧本,大小几kb
手动做镜像:大小几百M+
dockerfile 支持自定义容器的初始化命令
dockerfile主要组成部分:
基础镜像信息 FROM centos:6.9
制作镜像操作指令 RUN yum install openssh-server -y
容器启动时执行指令 CMD ["/bin/bash"]
dockerfile常用指令:
FROM 这个镜像的妈妈是谁?(指定基础镜像)
MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,可以没有)(不重要)
LABLE 描述,便签 (不重要)
RUN 你想让她干啥(在命令前面加上RUN即可)
ADD 给它点创业资金(会自动解压tar) 制作docker基础的系统镜像
WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)
VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)
EXPOSE 它要打开的门是啥(指定对外的端口)(-p 随机端口)
CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)(容易被替换)
dockerfile 其他指令:
COPY 复制文件(不会解压)rootfs.tar.gz
ENV 环境变量
ENTRPOINT 容器启动后执行的命令(无法被替换,启容器的时候指定的命令,
会被当成参数)
自动构建镜像:创建dockerfile:
步骤:
(1)[root@docker01 ~]# mkdir /opt/dockerfile
[root@docker01 ~]# cd /opt/dockerfile
[root@docker01 dockerfile]# mkdir centos6.9_ssh
[root@docker01 dockerfile]# cd centos6.9_ssh
[root@docker01 centos6.9_ssh]# pwd
/opt/dockerfile/centos6.9_ssh
(2) [root@docker01 centos6.9_ssh]# vim dockerfile ##名字只能叫dockerfile
FROM centos6.9
RUN echo '192.168.15.84 mirrors.aliyun.com' >>/etc/hosts
RUN curl -o /etc/yum.repos.d/Centos.Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN yum install openssh-server -y
RUN service sshd restart
RUN echo '123456' | passwd --stdin root
CMD ["/usr/sbin/sshd","-D"]
(3) [root@docker01 centos6.9_ssh]# docker build -t centos6.9_ssh:v2
[root@docker01 centos6.9_ssh]# docker images
centos6.9_ssh v2 4b646d7d7392 17 seconds ago 301M
(4) [root@docker01 centos6.9_ssh]# docker run -d -p 2022:22 centos6.9_ssh:v2
[root@docker01 centos6.9_ssh]# docker ps -a -l
[root@docker01 centos6.9_ssh]# ssh root@10.0.0.11 -p 2022
----------------------------------------------------------------------------------
文字步骤: 自动构建镜像的步骤:
1. 手动构建一遍
echo '192.168.15.84 mirrors.aliyun.com' >>/etc/hosts
curl -o /etc/yum.repos.d/Centos.Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
yum install openssh-server -y
service sshd restart
echo '123456' | passwd --stdin root
yum install nginx -y
vi /init.sh
2.编写dockerfile
FROM centos:6.9
RUN yum install openssh-server -y
CMD ["/bin/bash"]
3.构建镜像
docker build -t centos6.9_ssh:v2
4.测试
docker run -d -p 2022:22 centos6.9_ssh:v2
解释:
1)docker RUN:相当于 重新开启一个容器。
2)启动一个临时容器时,会覆盖这三个文件:
/etc/resolv.conf
/etc/hostname
/etc/hosts
3)排错步骤:
[root@docker01 centos6.9_ssh]# docker ps -a -l
[root@docker01 centos6.9_ssh]# docker logs bdb57de442a4
docker logs bdb57de442a4 : 能够看见容器在创建中出现了什么报错。
====================================================================