IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Docker进阶Dockerfile -> 正文阅读

[系统运维]Docker进阶Dockerfile

4.1.1 Dockerfile简介

什么是Dockerfile

Dockerfile类似于我们学习过的脚本,将我们在上面学到的docker镜像,使用自动化的方式实现出来。

Dockerfile的作用

1、找一个镜像:   ubuntu

2、创建一个容器:  docker run  ubuntu

3、进入容器:     dockerexec -it 容器 命令

4、操作:        各种应用配置

                ....

5、构造新镜像:    dockercommit   

Dockerfile 使用准则

   1、大: 首字母必须大写D

   2、空: 尽量将Dockerfile放在空目录中。

   3、单: 每个容器尽量只有一个功能。

   4、少: 执行的命令越少越好。

Dockerfile 基础四指令:

   基础镜像信息         从哪来?

   维护者信息           我是谁?

   镜像操作指令         怎么干?

   容器启动时执行指令    嗨!!!

Dockerfile使用命令:

构建镜像命令格式:

docker build -t [镜像名]:版本号

构建样例:

docker build -t nginx:v0.2 /opt/dockerfile/nginx/

参数详解:

-t    指定构建后的镜像信息,

/opt/dockerfile/nginx/    则代表Dockerfile存放位置,如果是当前目录,则用 .(点)表示

4.1.2 Dockerfile快速入门

准备环境

创建Dockerfile专用目录

mkdir /docker/images/ssh -p

cd /docker/images/ssh

创建秘钥认证

ssh-keygen -t rsa

cat ~/.ssh/id_rsa.pub >authorized_keys

准备软件源

cp /etc/apt/sources.list ./

定制文件

创建Dockerfile文件

# 构建一个基于ubuntu的ssh定制镜像

# 基础镜像

FROM ubuntu-base

# 镜像作者

MAINTAINER President.Wang000000@qq.com

# 执行命令

# 增加软件源 --由于课堂网络原因,我们不执行这一步

ADD sources.list/etc/apt/sources.list

# 安装 ssh 服务

RUN apt-get update &&apt-get install -y openssh-server curl vim net-tools && mkdir -p/var/run/sshd && mkdir -p /root/.ssh && sed -i"s/.*pam_loginuid.so/#&/" /etc/pam.d/sshd && apt-getautoclean && apt-get clean && apt-get autoremove

# 复制配置文件到相应位置,并赋予脚本可执行权限

ADD authorized_keys/root/.ssh/authorized_keys


# 对外端口

EXPOSE 22

# 启动ssh

ENTRYPOINT["/usr/sbin/sshd","-D"]

构建镜像

docker build -t ubuntu-ssh .

效果查看

使用新镜像启动一个容器,查看效果

docker run -d -p 10086:22ubuntu-ssh

容器检查

docker ps

docker port c03d146b64d4

ssh查看效果

ssh 192.168.8.14 -p 10086

4.1.3 基础指令详解

基础指令

FROM

格式:

FROM <image>

FROM <image>:<tag>。

解释:

FROM 是Dockerfile 里的第一条而且只能是除了首行注释之外的第一条指令

MAINTAINER

格式:

MAINTAINER<name>

解释:

指定该dockerfile文件的维护者信息。类似我们在docker commit 时候使用-a参数指定的信息

RUN

格式:

RUN<command>                                     (shell模式)

RUN["executable","param1", "param2"]。           (exec模式)

解释:

   表示当前镜像构建时候运行的命令

注释:

   shell模式:类似于  /bin/bash -c command

                举例: RUN echo hello

   exec  模式:类似于 RUN ["/bin/bash","-c", "command"]

                举例: RUN ["echo","hello"]

EXPOSE

格式:

   EXPOSE <port> [<port>...]

解释:

    设置Docker容器对外暴露的端口号,Docker为了安全,不会自动对外打开端口,如果需要外部提供访问,还需要启动容

器时增加-p或者-P参数对容器的端口进行分配。

ENTRYPOINT

格式:

  ENTRYPOINT ["executable","param1","param2"]        (exec模式)

  ENTRYPOINT command param1 param2                     (shell模式)

解释:

  每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。

4.1.4 文件编辑指令详解

注意:

ADD和COPY相当于数据卷操作,VOLUME相当于数据卷容器操作

目录文件编辑指令

ADD

格式:

   ADD <src>... <dest>

   ADD ["<src>",... "<dest>"]

解释:

将指定的 <src> 文件复制到容器文件系统中的 <dest> 

src 指的是宿主机,dest 指的是容器

   如果源文件是个压缩文件,则docker**会自动帮解压到指定的容器中(无论目标是文件还是目录,都会当成目录处理)**。

COPY

格式:

   COPY <src>... <dest>

   COPY ["<src>",... "<dest>"]

解释:

单纯复制文件场景,Docker推荐使用COPY  

VOLUME

格式:

   VOLUME ["/data"]

解释:

  VOLUME 指令可以在镜像中创建挂载点,这样只要通过该镜像创建的容器都有了挂载点 

通过 VOLUME 指令创建的挂载点,无法指定主机上对应的目录,是自动生成的。

   举例:

        VOLUME["/var/lib/tomcat7/webapps/"]

ADD**实践**      

拷贝普通文件

Dockerfile文件内容

# 执行命令

#增加文件

ADD["sources.list","/etc/apt/sources.list"]


拷贝压缩文件

Dockerfile文件内容

# 执行命令

#增加文件

ADD["linshi.tar.gz","/nihao/"]

COPY实践

修改Dockerfile文件内容:

# 执行命令

#增加文件

COPYindex.html /var/www/html/

...

ENTRYPOINT["/usr/sbin/nginx","-g","daemon off;"]

VOLUME实践

修改Dockerfile文件内容:

# 在上一个Dockerfile文件内容基础上,在COPY下面增加一个VOLUME

VOLUME ["/data/"]

...

4.1.5 环境指令详解

环境设置指令

ENV

格式:

   ENV <key> <value>

   ENV <key>=<value> ...

解释:

   设置环境变量,可以在RUN之前使用,然后RUN命令时调用,容器启动时这些环境变量都会被指定

WORKDIR

格式:

WORKDIR/path/to/workdir                  (shell 模式)

解释:

   切换目录,为后续的RUN、CMD、ENTRYPOINT 指令配置工作目录。 相当于cd

   可以多次切换(相当于cd命令), 

    也可以使用多个WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如

  举例:

   WORKDIR /a

   WORKDIR b

   WORKDIR c

   RUN pwd

   则最终路径为 /a/b/c。

ENV实践

修改Dockerfile文件内容:

# 在上一个Dockerfile文件内容基础上,在RUN下面增加一个ENV

ENV NIHAO=helloworld


WORKDIR**实践**

修改Dockerfile文件内容:

# 在上一个Dockerfile文件内容基础上,在RUN下面增加一个WORKDIR

WORKDIR /nihao/itcast/

RUN["touch","itcast.txt"]

4.1.6 Dockerfile构建过程

Dockerfile构建过程:

从基础镜像1运行一个容器A

遇到一条Dockerfile指令,都对容器A做一次修改操作

执行完毕一条命令,提交生成一个新镜像2

再基于新的镜像2运行一个容器B

遇到一条Dockerfile指令,都对容器B做一次修改操作

执行完毕一条命令,提交生成一个新镜像3

构建过程镜像介绍

构建过程中,创建了很多镜像,这些中间镜像,我们可以直接使用来启动容器,通过查看容器效果,从侧面能看到我们每次构建的效果。

提供了镜像调试的能力

我们可以通过docker history <镜像名>来查看整个构建过程所产生的镜像

拓展:

执行的步骤越多越好呢?还是越少越好?

构建缓存

我们第一次构建很慢,之后的构建都会很快,因为他们用到了构建的缓存。

不适用构建缓存方法常见两种:

全部不同缓存:

docker build --no-cache -t [镜像名]:镜像版本

部分使用缓存:

ENV REFRESH_DATE 2018-01-12

只要构建的缓存时间不变,那么就用缓存,如果时间一旦改变,就不用缓存了

 

样例:

# 构建一个基于ubuntu-base的docker定制镜像

# 基础镜像

FROM ubuntu-base


# 镜像作者

MAINTAINER President.Wang 000000@qq.com

# 创建构建刷新时间

ENV REFRESH_DATE 2018-11-02

 

# 执行命令
...


构建历史:

查看构建过程查看

docker history

清理构建缓存:

docker system prune

docker system prune --volumes

附自己写的美多商城项目Dockerfile

# 启动运行基本系统
FROM ubuntu
# 运行安装环境
ADD ./requeriments.txt /home
WORKDIR /home
RUN apt-get update && apt-get install python3-pip -y && pip3 install -r requeriments.txt
# 导入项目文件
ADD ./meiduo_mall /home/meiduo_mall
WORKDIR /home/meiduo_mall
# 指定对外开放端口
EXPOSE 8001
# 运行项目
ENTRYPOINT uwsgi --ini uwsgi.ini
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-19 12:28:08  更:2021-08-19 12:29:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年6日历 -2024/6/13 21:55:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码