Docker-11-Dockerfile

简介: Docker-11-Dockerfile

通常我们构建一个 applicationimage 需要进行基础镜像选择、目录创建、软件的安装、服务的部署、卷挂载、端口暴露、定义环境变量等一系列的操作才能完成。为了解决这个问题,Dockerfile 出现了,它是一个镜像的具体描述,或者说是镜像的具体构建步骤模板。


Dockerfile 的主要组成部分


FROM alpine:latest ---指定基础镜像的信息
RUN apt-get install golang-go ---定义镜像构建的步骤
CMD ["/bin/sh"] ---指定容器启动时命令
复制代码


Dockerfile 的常用指令


FROM ---指定基础镜像
MAINTAINER ---指定维护者信息,可以没有
RUN ---容器内执行shell命令
ADD ---COPY文件,会自动解压
COPY ---COPY文件
WORKDIR ---设置当前工作目录
VOLUME ---设置卷,挂载主机目录
EXPOSE ---指定对外的端口
CMD ---指定容器启动后的要执行的命令
ENV ---定义环境变量
ENTRYPOINT ---容器启动后执行额的命令
复制代码


Dockerfile 的 CMD 和 ENTRYPOINT 的区别


当只有 CMD 的时候,即执行 CMD 的命令;如果启动容器的时候加了命令,则会替代 CMD 的命令。


当只有 ENTRYPOINT 的时候,可以执行 ENTRYPOINT 的命令,如果启动容器的时候加了参数(在命令的位置),则启动的参数会作为 ENTRYPOINT 的参数。


ENTRYPOINTCMD 都存在的时候,CMD 的内容会作为 ENTRYPOINT 的参数,如果启动容器的时候加了参数 X,则 X 会替代 CMD 的内容作为 ENTRYPOINT 的参数。


举个例子


alpine 镜像安装 ssh 软件并且实现 ssh 远程连接。

当前路径下的文件 location:/home/phyger/dockerfile


网络异常,图片无法展示
|


Dockerfile 内容


FROM alpine:latest
MAINTAINER phyger
# 复制时区文件
COPY Shanghai /etc/localtime
# 更新镜像源,安装openssh,生成秘钥,修改root用户密码
RUN echo "http://mirrors.ustc.edu.cn/alpine/v3.5/main" > /etc/apk/repositories && \
    echo "http://mirrors.ustc.edu.cn/alpine/v3.5/community" >> /etc/apk/repositories && \
    apk --update add --no-cache && \
    apk add --no-cache openssh && \
    sed -i "s/#PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config && \
    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 dsa -P "" -f /etc/ssh/ssh_host_dsa_key && \
    ssh-keygen -t ed25519 -P "" -f /etc/ssh/ssh_host_ed25519_key && \
    echo "root:admin" | chpasswd
# 暴露22端口
EXPOSE 22
# 命令参数
CMD ["-D"]
# 指定容器启动的命令
ENTRYPOINT ["/usr/sbin/sshd"]
复制代码


构建镜像


网络异常,图片无法展示
|


镜像使用


启动容器:


网络异常,图片无法展示
|


查询 IP


网络异常,图片无法展示
|


SSH 连接测试:


网络异常,图片无法展示
|


查看容器中 SSH 进程:


网络异常,图片无法展示
|


到此,成功!

相关文章
|
4月前
|
存储 安全 数据安全/隐私保护
在Docker中,Docker安全么?
在Docker中,Docker安全么?
|
4月前
|
运维 持续交付 Docker
在Docker中,Docker可以用来做什么?
在Docker中,Docker可以用来做什么?
|
数据可视化 应用服务中间件 nginx
|
7月前
|
运维 Java 虚拟化
[Docker] Docker为什么出现
[Docker] Docker为什么出现
|
7月前
|
Linux Go 开发者
Docker(一):认识Docker
Docker(一):认识Docker
|
7月前
|
JavaScript Linux Docker
【Docker】什么是Docker?
【4月更文挑战第20天】【Docker】什么是Docker?
|
运维 Java 程序员
【docker】对docker的理解
【docker】对docker的理解
|
Java Shell Linux
Docker使用总结
Docker使用总结
135 0
|
Linux 测试技术 API
【Docker】Docker最近这么火,它到底是什么
【Docker】Docker最近这么火,它到底是什么
|
Linux 虚拟化 开发者

热门文章

最新文章