Docker 从入门到进阶七:DockerFile 与 Docker Compose

Posted 看,未来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 从入门到进阶七:DockerFile 与 Docker Compose相关的知识,希望对你有一定的参考价值。

文章目录

Dockerfile

Dockerfile 是什么

Dockerfile 是用来 构建 Docker 镜像 的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

就拿我之前几次虚拟机崩溃的例子来说吧,别的咱也不说。由于我的虚拟机上部署着我毕设的一大堆环境,每次崩溃我都要一个一个去给它们下载回来,那时候我就在想,我能不能搞个一键安装的 shell 脚本,放那儿自己运行,我一觉醒来啥都配好了。

现在上容器了,一两个镜像咱自己安装就好了,但是原生 Linux 系统那是真的要啥没啥啊,还手动一个个安装吗?能确保一个不落吗?还是直接给我来个清单一键安装吧。


Dockerfile 规则

FROM:定制的镜像都是基于 FROM 的镜像。
RUN:用于执行后面跟着的命令行命令。

RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。

·1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数
·2:指令按照从上到下,顺序执行
·3:# 表示注释
·4:每条指令都会创建一个新的镜像层并对镜像进行提交,所以过多无意义的层,会造成镜像膨胀过大。

以下两种写法高下立判:

FROM centos
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz

以上执行会创建 3 层镜像。可简化为以下格式:


FROM centos
RUN yum -y install wget \\
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \\
    && tar -xvf redis.tar.gz

如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。


Dockerfile 构建镜像示例

在 Dockerfile 文件的存放目录下,执行构建动作:

mkdir myfile
cd myfile
vim Dockerfile
FROM ubuntu
MAINTAINER wlf<lion@qq.com>
 
ENV MYPATH /usr/local
WORKDIR $MYPATH
 
#安装vim编辑器
#安装ifconfig命令查看网络IP
#安装java8及lib库
RUN apt install net-tools && install vim && glibc.i686 && mkdir /usr/local/java

#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
 
EXPOSE 80
 
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

构建:docker build -t 新镜像名字:TAG .

Dockerfile 保留字

    FROM- 镜像从那里来

    MAINTAINER- 镜像维护者信息

    RUN- 构建镜像执行的命令,每一次RUN都会构建一层

    CMD- 容器启动的命令,如果有多个则以最后一个为准,也可以为ENTRYPOINT提供参数

    VOLUME- 定义数据卷,如果没有定义则使用默认

    USER- 指定后续执行的用户组和用户

    WORKDIR- 切换当前执行的工作目录

    HEALTHCHECH- 健康检测指令

    ARG- 变量属性值,但不在容器内部起作用

    EXPOSE- 暴露端口

    ENV- 变量属性值,容器内部也会起作用

    ADD- 添加文件,如果是压缩文件也解压

    COPY- 添加文件,以复制的形式

    ENTRYPOINT- 容器进入时执行的命令

虚悬镜像

·仓库名、标签都是的镜像,俗称dangling image。

from ubuntu
CMD echo 'action is success'

喏,这个就可以构建出来一个,瞅一眼。

查看所有当前虚悬镜像:

docker image ls -f dangling=true

删除所有虚悬镜像:

docker image prune

留着也没用。


Docker Compose 容器编排

Docker Compose 是什么?

Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件
docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器

Docker-Compose是Docker官方的开源项目, 负责实现对Docker容器集群的快速编排。


下载安装 compose

官网:https://docs.docker.com/compose/

下载命令:

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

compose 使用步骤

·编写Dockerfile定义各个微服务应用并构建出对应的镜像文件
·使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务。
·最后,执行docker-compose up命令 来启动并运行整个应用程序,完成一键部署上线

关于 yml 文件教程:待补全。


compose 常用命令

Compose常用命令
docker-compose -h                           # 查看帮助
docker-compose up                           # 启动所有docker-compose服务
docker-compose up -d                        # 启动所有docker-compose服务并后台运行
docker-compose down                         # 停止并删除容器、网络、卷、镜像。
docker-compose exec  yml里面的服务id                 # 进入容器实例内部  docker-compose exec docker-compose.yml文件中写的服务id /bin/bash
docker-compose ps                      # 展示当前docker-compose编排过的运行的所有容器
docker-compose top                     # 展示当前docker-compose编排过的容器进程
docker-compose logs  yml里面的服务id     # 查看容器输出日志
docker-compose config     # 检查配置
docker-compose config -q  # 检查配置,有问题才有输出
docker-compose restart   # 重启服务
docker-compose start     # 启动服务
docker-compose stop      # 停止服务

以上是关于Docker 从入门到进阶七:DockerFile 与 Docker Compose的主要内容,如果未能解决你的问题,请参考以下文章

Docker 从入门到实践系列五 - Dockerfile文件

Docker 从入门到实践系列五 - Dockerfile文件

Docker 从入门到实践系列五 - Dockerfile文件

轻松掌握Docker使用-进阶操作

轻松掌握Docker使用-进阶操作

轻松掌握Docker使用-进阶操作