Docker制作容器镜像的2种方法

目录

第一种方式(手动修改容器镜像)

1.先下载centos镜像

2.启动容器并进行安装配置

3.安装配置完成后,进行打包成新的镜像

第二种方式(推荐:利用Dockerfile文件)

1.创建Dockerfile文件

2.执行docker  build 创建镜像

3.查看镜像列表,并创建容器


第一种方式(手动修改容器镜像)

1.先下载centos镜像

[[email protected] ~]# docker pull centos

2.启动容器并进行安装配置

                 

暂时安装以下必用的软件吧 net-tools,openssh-server

[[email protected] /]# yum install openssh-server net-tools -y

OK,配置安装完毕,之后退出容器,就可以生成一个新的docker 镜像了。

3.安装配置完成后,进行打包成新的镜像

commit: 提交一个具有新配置的容器成为镜像,后面跟容器的name 或者容器Id ,最后是生成新镜像的名字

                

第二种方式(推荐:利用Dockerfile文件)

Dockerfile包含创建镜像所需要的全部指令。基于在Dockerfile中的指令,我们可以使用Docker build命令来创建镜像。通过减少镜像和容器的创建过程来简化部署。

1.创建Dockerfile文件

[[email protected] ~]# mkdir centos7-dockerfile

[[email protected] centos7-dockerfile]# cat Dockerfile 
# The dockerfile has Change add sshd services on Centos7.0
#centos7:latest image
FROM centos:latest

MAINTAINER Yifeng,http://www.cnblogs.com/hanyifeng

#Install sshd net-tools
RUN yum install openssh-server net-tools -y
RUN mkdir /var/run/sshd

#Set password for root
RUN echo 'root:iloveworld' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

#Set history record
ENV HISTTIMEFORMAT "%F %T  "

#Fix sshd service:Read from socket failed: Connection reset by peer?
RUN ssh-keygen -A

#Change timezone CST
RUN \cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#Open 22 port
EXPOSE 22

#Auto running sshd service
CMD ["/usr/sbin/sshd","-D"]

FROM: 必不可少的命令,从某个镜像作为基。如 FROM <image_name> ,或者 FROM <image_name>:<tag>. 如果不加tag,默认为latest。先从本地镜像仓库去搜索基镜像,如过本地没有,在去网上docker registry去寻找。

MAINTAINER:标明该Dockerfile作者及联系方式,可忽略不写

RUN:建立新的镜像时,可以执行在系统里的命令,如安装特定的软件以及设置环境变量。

ENV:设置系统环境变量(注意:写在/etc/profile里的命令在dockerfile这里会不生效,所以为改成ENV的方式)

EXPOSE:开放容器内的端口,但不和宿主机进行映射。方便在宿主机上进行开发测试。(如需映射到宿主机端口,可在运行容器时使用 -p host_port:container_port)

CMD:设置执行的命令,经常用于容器启动时指定的某个操作。如执行自定义脚本服务,或者是执行系统命令。CMD 只能存在一条,如在Dockerfile中有多条CMD的话,只有最后一条CMD生效!

2.执行docker  build 创建镜像

                

3.查看镜像列表,并创建容器