前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 从入门到进阶七:DockerFile 与 Docker Compose

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

作者头像
看、未来
发布2022-05-06 14:38:31
9010
发布2022-05-06 14:38:31
举报
文章被收录于专栏:CSDN搜“看,未来”

文章目录

Dockerfile

Dockerfile 是什么

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

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

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

Dockerfile 规则

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

代码语言:javascript
复制
RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。

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

以下两种写法高下立判:

代码语言:javascript
复制
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 层镜像。可简化为以下格式:

代码语言:javascript
复制
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 文件的存放目录下,执行构建动作:

代码语言:javascript
复制
mkdir myfile
cd myfile
vim Dockerfile
代码语言:javascript
复制
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 保留字

代码语言:javascript
复制
    FROM- 镜像从那里来

    MAINTAINER- 镜像维护者信息

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

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

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

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

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

    HEALTHCHECH- 健康检测指令

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

    EXPOSE- 暴露端口

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

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

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

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

虚悬镜像

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

代码语言:javascript
复制
from ubuntu
CMD echo 'action is success'

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

查看所有当前虚悬镜像:

代码语言:javascript
复制
docker image ls -f dangling=true

删除所有虚悬镜像:

代码语言:javascript
复制
docker image prune

留着也没用。

Docker Compose 容器编排

Docker Compose 是什么?

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

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

下载安装 compose

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

下载命令:

代码语言:javascript
复制
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 使用步骤

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

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

compose 常用命令

代码语言:javascript
复制
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      # 停止服务
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • Dockerfile
    • Dockerfile 是什么
      • Dockerfile 规则
        • Dockerfile 构建镜像示例
          • Dockerfile 保留字
          • 虚悬镜像
          • Docker Compose 容器编排
            • Docker Compose 是什么?
              • 下载安装 compose
                • compose 使用步骤
                  • compose 常用命令
                  相关产品与服务
                  容器镜像服务
                  容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档