Dockerfile概念及初次构建

  • docker镜像的分层
    • docker镜像的创建
      • 基于已有的镜像进行创建
      • 基于本地的模板文件进行创建
    • 基于Dockerfile创建
      • Dockerfile操作指令
    • 构建apache
    • 构建ssh

docker镜像的分层

在这里插入图片描述

Dockerfile概念及初次构建_第1张图片

docker镜像的创建

Dockerfile概念及初次构建_第2张图片

基于已有的镜像进行创建

#将容器里面运行的程序及运行环境打包生成新的镜像
docker commit [选项] 容器id/容器名 仓库名:标签
#选项
-a	作者信息
-p	生成过程中停止容器的运行

基于本地的模板文件进行创建

wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
#导入镜像
cat debian-7.0-x86-minimal.tar.gz | docker import - debian:v1
docker images

Dockerfile概念及初次构建_第3张图片
Dockerfile概念及初次构建_第4张图片

基于Dockerfile创建

Dockerfile ———— 一组指令组成的文件
docker build 命令用于使用 Dockerfile 创建镜像
-f :指定要使用的Dockerfile路径;
-tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

####由四部分组成####
基础镜像信息
维护者信息
镜像操作指令
容器启动时执行指令

Dockerfile操作指令

Dockerfile概念及初次构建_第5张图片

构建apache

cd /opt
mkdir apache
cd apache
vim httpdfile

FROM centos
MAINTAINER ryclock

RUN yum -y update
RUN yum -y install httpd

EXPOSE 80

ADD index.html /var/www/html/index.html
ADD apa.sh /apa.sh

RUN chmod +x /apa.sh
CMD ["/run.sh"]

在这里插入图片描述

Dockerfile概念及初次构建_第6张图片

echo 'test1' > index.html

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

Dockerfile概念及初次构建_第7张图片

#如果使用默认Docker默认名称则不需要-f指定路径,这里需要
docker build -f /opt/apache/httpdfile -t httpd:v1 .
docker images
docker run -d -p 6688:80 httpd:v1

Dockerfile概念及初次构建_第8张图片
Dockerfile概念及初次构建_第9张图片
在这里插入图片描述

在这里插入图片描述

Dockerfile概念及初次构建_第10张图片

构建ssh

cd /opt
mkdir sshd
cd sshd
vim sshdfile

#基础镜像
FROM centos

#镜像维护人信息
MAINTAINER rytlock

#更新基于镜像yum源
RUN yum -y update

#在基于镜像上安装软件
#openssh是SSH协议的免费开源实现
#net-tools组件可支持使用ifconfig命令查看网卡信息
#lsof查看进程打开的文件、打开文件的进程、进程打开的端口
#telnet支持远程登陆
#passwd用于设置密码,更新用户身份令牌
RUN yum -y install openssh* net-tools lsof telnet passwd

#更改root用户密码为123123
RUN echo '123123' | passwd --stdin root

#将ssh服务端配置文件中所有的UsePAM yes替换为UsePAM no,关闭第三方认证登陆,别人都无法远程登陆该主机
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config

#创建非密钥对文件,生成到/etc/ssh/目录下为ssh_host_rsa_key
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

#嵌套创建/root/.ssh目录并且将/root目录属主和属组改为root并且为/root/.ssh目录赋权700,只有root用户可读写执行
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh

#指定端口22
EXPOSE 22

#在运行容器时启动ssh服务,并开启守护进程
CMD ["/usr/sbin/sshd","-D"]
#构建新镜像,因为这次dockerfile文件不是官方默认的名称了,所以我们-f指定以/opt/sshd/sshdfile来生成镜像,-t指定新镜像名为mysshd,tag为1.0
docker build -f /opt/sshd/sshdfile -t sshd:v1 .

#后台运行并生成容器,暴露端口1111
docker run -d -p 1111:22 sshd:v1

#验证
ssh localhost -p 1111

#openssh是SSH协议的免费开源实现
#net-tools组件可支持使用ifconfig命令查看网卡信息
#lsof查看进程打开的文件、打开文件的进程、进程打开的端口
#telnet支持远程登陆
#passwd用于设置密码,更新用户身份令牌

在这里插入图片描述
Dockerfile概念及初次构建_第11张图片
Dockerfile概念及初次构建_第12张图片
Dockerfile概念及初次构建_第13张图片
登陆成功
Dockerfile概念及初次构建_第14张图片

你可能感兴趣的:(Dockerfile概念及初次构建)