1 Docker镜像用途

  • 统一应用发布的标准格式
  • 支撑一个Docker容器的运行

2 Docker镜像的创建方法

  • 基于已有镜像创建
  • 基于本地模板创建
  • 基于Dockerfile创建 (实际环境中用的最多)

2.1 基于已有镜像的创建

将容器里面运行的程序及运行环境打包生成新的镜像

docker commit [选项] 容器ID/名称  仓库名称:[标签]
  • -m:说明信息
  • -a:作者信息
  • -p:生成过程当中停止容器的运行
## 创建容器
docker create -it centos:7 /bin/bash
docker commit -m "new" -a dakao ee9dbcd1dc2b daoke:test
## commit 是提交
docker images | grep dakao

2.2 基于本地模板创建 

a.通过导入操作系统模板文件生成新的镜像

b.使用wget命令导入为本地镜像

wget http://download.openvz.org/template/precreated/debian-7.0-x86- minimal.tar.gz

c.导入成功后可查看本地镜像信息

docker images | grep new

2.3 基于Dockerfile创建 

  • Dockerfile是由一组指令组成的文件
  • Dockerfile结构四部分
  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行指令
  • Dockfile每行支持一条指令,每条指令可携带多个参数,支持使用以“#”号开头的注释

Dockerfire操作指令

怎么查看docker中镜像的核数 docker查看镜像dockerfile_centos

3 Dockerfile实战

本章节以各种镜像制作为案例展示通过dockerfile制作容器镜像的过程。 

3.1 构建apache容器服务

1)基础镜像目录

# mkdir apache
# cd apache

2)编辑镜像dockerfile

# vim Dockerfile

#基于的基础镜像
FROM centos:7
#维护镜像的用户信息
MAINTAINER The porject <cloud-ops@centos.org>
#镜像操作指令安装apache软件
RUN yum -y update    #更新yum
RUN yum -y install httpd
#开启80端口
EXPOSE 80
#复制网站首页文件
ADD index.html /var/www/html/index.html
#将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#启动容器时执行脚本
CMD ["/run.sh"]

3)编辑启动脚本

# vim run.sh
#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND

echo "web test" > index.html

4) 构建镜像

//生成镜像
# docker build -t httpd:centos . (注意别忘 了末尾有".",且.前面有空格)

5)镜像容器启动运行

//新镜像运行容器
# docker run -d -p 1216:80 httpd:centos

6)测试验证

//测试
# curl http://192.168.40.30:1216

3.2 构建sshd容器服务 

centos:7的镜像发现无法使用sshd服务,需要手工添加sshd服务。

sshd为secure shell 的简称,可以通过网络在主机中开机shell的服务。

操作步骤

  • 下载基础镜像
  • 建立工作目录
  • 创建并编写Dockfile文件
  • 生成镜像
  • 启动容器
# mkdir sshd
# cd sshd

# vim Dockerfile

FROM centos:7
MAINTAINER The CentOS Project <cloud-centos>
RUN yum -y update
RUN yum -y install openssh* net-tools lsof telnet passwd
RUN echo '123456' | passwd --stdin root
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN sed -i '/^session\s\+required\s\+pam_loginuid.so/s/^/#/' /etc/pam.d/sshd
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]                                 

//生成镜像
docker build -t sshd:new .

//启动容器并修改root密码
docker run -d -P sshd:new    #随机映射端口号
ssh localhost -p ***** #此处的*****端口号需要自己用docker ps 查看一下随机映射的是多少端口号