DockerFile企业案例一

Dockerfile指令集

dockerfile主要组成部分:

基础镜像信息 FROM centos:6.8

制作镜像操作指令RUN yum insatll openssh-server -y

容器启动时执行指令 CMD ["/bin/bash"]

dockerfile常用指令:

FROM 这个镜像的妈妈是谁?(指定基础镜像)

MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,可以没有)

RUN 你想让它干啥(在命令前面加上RUN即可)

ADD 给它点创业资金(COPY文件,会自动解压)

WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)

VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)

EXPOSE 它要打开的门是啥(指定对外的端口)

CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)

dockerfile其他指令:

COPY
    格式为 COPY <src> <dest>。
    复制本地主机的 <src>(为 Dockerfile 所在目录的相对路径)到容器中的 <dest>。
    当使用本地目录为源目录时,推荐使用 COPY。

ENV
    格式为 ENV <key> <value>。
    指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。

    例如
    ENV PG_MAJOR 9.3
    ENV PG_VERSION 9.3.4
    RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
    ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH

ENTRYPOINT
    两种格式:

    ENTRYPOINT ["executable", "param1", "param2"]
    ENTRYPOINT command param1 param2(shell中执行)。
    配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
    每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。

创建镜像

编写完成 Dockerfile 之后,可以通过 docker build 命令来创建镜像。
基本的格式为 docker build [选项] 路径,该命令将读取指定路径下(包括子目录)的 Dockerfile,并将该路径下所有内容发送给 Docker 服务端,由服务端来创建镜像。
因此一般建议放置 Dockerfile 的目录为空目录。也可以通过 .dockerignore 文件(每一行添加一条匹配模式)来让 Docker 忽略路径下的目录和文件。


要指定镜像的标签信息,可以通过 -t 选项,例如
$ sudo docker build -t myrepo/myapp /tmp/test1/
#设置基本的镜像,
FROM Centos_lamp:v1
FROM centos:7
RUN yum install openssh-server -y
RUN echo "123456" |passwd --stdin root
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
RUN mkdir -p /var/run/sshd
RUN /etc/init.d/sshd start

#暴露ssh端口22
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]

环境准备

Dockerfile:用于构建镜像 run.sh:启动SSH服务的脚本文件 authorized_keys:包含需要远程登录的用户的公钥

run.sh

#!/bin/bash
/usr/sbin/sshd -D

生成authorized_keys公钥文件

$ ssh-keygen -t rsa
按回车选择默认的没有密码,此时会在当前用户目录下的.ssh目录中生成两个文件——id_rsa
和id_rsa.pub,其中后者就是我们要的公钥文件。将其内容加到authorized_keys文件中,具体为:
$ cat ~/.ssh/id-rsa.pub > authorized_keys

编写Dockerfile文件

Centos

# 使用的基础镜像
FROM centos
# 添加的作者信息
MAINTAINER hujianli 1879324764

#安装ssh 服务端及ssh 客户端
RUN yum -y install openssh-server

RUN mkdir -p /var/run/sshd
RUN mkdir -p /root/.ssh
RUN sed -i "s/#PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config && \
    sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd && \
    ssh-keygen -t rsa -P "" -f /etc/ssh/ssh_host_rsa_key && \
    ssh-keygen -t ecdsa -P "" -f /etc/ssh/ssh_host_ecdsa_key && \
    ssh-keygen -t ed25519 -P "" -f /etc/ssh/ssh_host_ed25519_key



#复制配置文件到相应位置,并赋予脚本可执行权限
ADD authorized_keys /root/.ssh/authorized_keys
ADD run.sh /root/run.sh
RUN chmod 755 /root/run.sh

#导出端口
EXPOSE 22
#设置默认的启动命令
CMD ["/root/run.sh"]

sudo docker run -d -p 2023:22 ssh:dockerfile

构建完成就能访问了