docker 系列:实践工具

前言

本文将介绍下在使用 Docker 时的相关经验,比如使用 Docker-compose 进行容器的编排部署,使用 Portainer 对容器进行可视化的管理,以及 DockerFile 的构建建议。相当于是一套组合拳。让我们能更轻松、更方便去管理 Docker 的容器。

Docker Compose

使用 Docker Compose 有一个好处就是可以通过配置化的方式去编排容器。比如我们当前有3个服务,其中 A 依赖于 B,B 依赖于 C,那么我们就可以在 YML 中使用 depends_on 配置项,来指明对应依赖的服务。使得容器的编排更加人性化。下面列举了下比较常用的配置项:

version: "3"
services:
  redis:                             # 服务名
    image: redis:alpine              # 使用的镜像模板
    container_name: my-redis         # 容器名
    hostname: my-redis               # 容器 hostname
    ports:
      - 6379:6379                    # 端口映射
    volumes:                         # 卷映射
      - ./data/redis:/data
    restart: unless-stopped          # 容器重启策略,有 no、always、on-failure、unless-stopped 选项
    depends_on:
      - database					 # 依赖的服务
  database:
    image: postgres:latest
    volumes:
      - "/localhost/postgres.sock:/var/run/postgres/postgres.sock"
      - "/localhost/data:/var/lib/postgresql/data"

当 YML 配置文件准备好后,我们就可以使用 docker-compose up命令来启动运行容器了。如果想 stop 容器,可以使用 docker-compose down 则会把当前 YML 文件里的容器服务都停止掉。

Portainer

Portainer 可以帮助我们可视化的管理容器,而不需要到主机里一个一个命令的查看容器相关信息。这其中包括了 Docker 容器、image、volume、network 等管理选项。我们可以使用以下的 YML 配置文件来创建 Portainer:

version: '2'
services:
  portainer:
    image: portainer/portainer
    command: -H unix:///var/run/docker.sock
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
volumes:
  portainer_data:

当 Portainer 容器启动完后,我们可以访问 9000 端口,进入到如下的管理界面了:

Portainer

可以看到,Portainer 这个管理工具非常的齐全,可以说是解脱了我们的双手,省了很多敲命令的时间。

DockerFile 的构建

上面的两个让容器的编排和管理更加的简洁方便,但我们还有一个关键点需要注意:镜像。我们经常需要编写 DockerFile 以便能 build 和 push 一个自定义镜像到仓库中心。所以,关于 DockerFile 的编写也很重要,否则镜像可能非常庞大或依赖关系复杂。

关于 DockerFile,这里简单介绍下相关命令:

  • FROM:要定制的基础镜像,相当于基础系统环境,例如 centosalpine
  • RUN:要执行的命令
  • . :这里是指上下文路径,方便打包指定的文件给 docker 引擎使用
  • COPY:从上下文目录中复制文件或者目录到容器里指定路径
  • ADD:和 COPY 的类似
  • CMD:和 RUN 类似,只是 CMD 在docker run 时运行,RUN 在 docker build 运行
  • ENV:环境变量
  • EXPOSE:要暴露的端口
  • WORKDIR:工作目录,容器启动时执行的命令会在该目录下执行

例如,一个 Dockerfile 如下:

FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py

这样就可以制作一个关于 python 的镜像了。

当我们在构建 DockerFile 时,应尽量的让镜像大小降到最低,要选择合适的基础镜像,不添加多余的东西。就像上面的 python 就不需要携带文本编辑器了。另外,如果镜像的依赖关系复杂,尽量使用多阶段构建,也就是 COPY --from 之前阶段的成果。这样的话可以让我们的构建思路比较清晰明了。关于多阶段的构建,可以看看官网的这篇:多阶段构建

总结

docker 的火热衍生出了很多其他管理工具,让我们的生产力提高很多,像除了 docker-compose 外还有 Docker MachineDocker Swarm 等。当然,大多数时候,上面提及到的已经够用了,大伙也可以自个深入研究,期待一起分享总结!


感兴趣的朋友可以搜一搜公众号「 阅新技术 」,关注更多的推送文章。
可以的话,就顺便点个赞、留个言、分享下,感谢各位支持!
阅新技术,阅读更多的新知识。
阅新技术

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值