资讯专栏INFORMATION COLUMN

为项目配置docker

qiangdada / 2262人阅读

摘要:和首先,在以往的项目中,都是使用的形式来配置的,所以,首先就需要了解这两者的关系。完整配置文件版本号服务官方参考

之前就了解过docker,但是一直没有自己配置过docker。这次自己为项目配置了一下docker,在这里做一下总结记录。

Dockerfile和docker-compose

首先,在以往的项目中,都是使用DockerFile + docker-compose的形式来配置docker的,所以,首先就需要了解这两者的关系。

我们要知道的是,如果我们只使用dockerfile就可以完成对docker的镜像配置。那么,为什么我们还要使用docker-compose呢?

最开始是这样的,我们只是用docker中的一些命令,就可以实现配置一个镜像。但是这是有问题的:不能保存。所以就是用dockerfile将创建镜像的过程记录下来,然后我们只需要使用:

docker build

就可以创建一个镜像。

现在问题又来了:我想创建一个完整的项目,光是有一个镜像是不够的,比如我们的项目中就需要使用nginxmysqlredis才能够启动项目。

虽然我们也可以考虑使用一个dockerfile,然后写成一个镜像,但是这就不可复用了。所以更加合理的做法应该是我们分别为nginxmysqlredis创建一个镜像,然后将这些镜像结合起来使用。

docker-compose就是帮我们实现这个问题的。

所以,总结来说,dockerfile是用来创建单个镜像的,而docker-compose是用来创建一个项目的。

Dockerfile

首先先说一下Dockerfile的创建。在这个项目中,我们只写了一条语句:

FROM registry.cn-beijing.aliyuncs.com/mengyunzhi/nginx:1.13.12

FROM是第一条命令,并且是必须的一条命令,它指定了基础镜像。

在这里,我们使用的基础镜像是托管在阿里docker仓库中的镜像。

我们也可以从docker官方仓库中获取镜像:

FROM nginx:1.13.12

但是有可能在拉取镜像的时候比较慢。

docker-compose

docker-compose我们通过配置docker-compose.yml来实现。

声明版本
version: "3"

这是声明我们要使用哪种版本的语法的,不同版本的略有差异。

声明服务

按照我们上面所说,需要nginxmysqlredis三个镜像,也就是需要三个服务:

services:
  alice.mysql:

  alice.nginx:

  alice.redis:

然后我们以mysql为例,说明需要哪些命令来构建service。

首先我们要使用上面创建的Dockerfile,对获取的镜像进行构建(build)。

services:
  alice.mysql:
    build:
      context: ./mysql

context选项指定了基础镜像。

然后就是image

services:
  alice.mysql:
    build:
      context: ./mysql
    image: mysql:5.7

image指定了服务使用的镜像名,这个在我们没有上面的构建命令(build)时,会先找本地是否有对应的镜像,如果没有,compose会尝试拉取镜像。

端口(ports):

services:
  alice.mysql:
    build:
      context: ./mysql
    image: mysql:5.7
    ports:
      - "3309:3306"

将docker容器的3306端口映射到本地的3309端口。

环境(environment):

services:
  alice.mysql:
    build:
      context: ./mysql
    image: mysql:5.7
    ports:
      - "3309:3306"
    environment:
      - MYSQL_USER=root
      - MYSQL_PASSWORD=
      - MYSQL_ALLOW_EMPTY_PASSWORD=true
      - MYSQL_DATABASE=alice

其实我更喜欢将这一部分叫做环境变量,因为这部分是用来定义变量的。

最后,因为我们是要将多个服务结合起来,使项目运行的,所以就需要各个容器间进行通信。所以就需要使用网络(networks)进行配置,将各个服务放在同一个局域网下:

services:
  alice.mysql:
    build:
      context: ./mysql
    image: mysql:5.7
    ports:
      - "3309:3306"
    environment:
      - MYSQL_USER=root
      - MYSQL_PASSWORD=
      - MYSQL_ALLOW_EMPTY_PASSWORD=true
      - MYSQL_DATABASE=alice
    networks:
      aliceNetwork:
        ipv4_address: 172.28.8.4

这里使用了ipv4_address为其分配了一个静态IP地址。

声明网络

上面我们使用了网络,那是为服务定义网络,其实在这之前,我们还需要定义一个自己的网络:

networks:
  aliceNetwork:
    ipam:
      config:
        - subnet: 172.28.8.0/24

这里声明了一个子网段,所以可以看到上面mysql的网络是172.28.8.4这种形式,其实只是从这个网段中随便选了一个。

完整配置文件:

# 版本号
version: "3"

# 服务
services:
  alice.mysql:
    build:
      context: ./mysql
    image: mysql:5.7
    ports:
      - "3309:3306"
    environment:
      - MYSQL_USER=root
      - MYSQL_PASSWORD=
      - MYSQL_ALLOW_EMPTY_PASSWORD=true
      - MYSQL_DATABASE=alice
    networks:
      aliceNetwork:
        ipv4_address: 172.28.8.4

  alice.nginx:
    build:
      context: ./nginx
    image: nginx:1.13.12
    volumes:
      - ./:/etc/nginx/conf.d
      - ./app:/usr/local/app
    ports:
      - 9000:80
      - 9001:81
    networks:
      aliceNetwork:
        ipv4_address: 172.28.8.3

  alice.redis:
    build:
      context: ./redis
    image: redis:alpine
    ports:
      - "6380:6379"
    networks:
      aliceNetwork:
        ipv4_address: 172.28.8.5

networks:
  aliceNetwork:
    ipam:
      config:
        - subnet: 172.28.8.0/24

官方参考:
https://docs.docker.com/compo...
https://hub.docker.com/_/nginx

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27707.html

相关文章

  • Docker相关的项目

    摘要:相关基于项目和项目,并遵循应用的十二因素风格。相关在设计上,项目尽量保持驱动和模块化,以便模块支持不同的实现方案。相关不仅可以管理众多虚拟机,其计算服务还支持对的驱动,管理引擎的子项目还可用于通过模板管理容器。现已整合公司所支持的项目。 整理自《Docker技术入门与实践》 PaaS(Platform as a Service) PaaS 是希望提供一个统一的可供所有软件直接运行而无需...

    littlelightss 评论0 收藏0
  • Docker 中运行 Laravel 项目

    摘要:本篇承接使用构建环境,介绍如何在该文所用的容器中运行项目。接下来可以新建一个项目或是通过转移项目。从上同步项目一般服务器中运行的项目都是在本地开发完成后同步上去的。生成文件文件含有项目所需的配置以及用于加密解密的随机字符串。 本篇承接 使用 Docker 构建 LNMP 环境,介绍如何在该文所用的容器中运行 Laravel 项目。主要步骤为:转移 Laravel 项目到数据卷 => 配...

    luxixing 评论0 收藏0
  • [手把手系列之]Docker 部署 vue 项目

    摘要:部署项目写在前面作为轻量级虚拟化技术,拥有持续集成版本控制可移植性隔离性和安全性等优势。容器可以被创建启动停止删除暂停等。重新运行应用容器直接基于镜像来启动容器,运行命令将宿主机的挂载到容器的目录上。Docker 部署 vue 项目 1.写在前面: Docker 作为轻量级虚拟化技术,拥有持续集成、版本控制、可移植性、隔离性和安全性等优势。本文使用Docker来部署一个vue的前端应用,并尽...

    VPointer 评论0 收藏0
  • Node项目的Gitlab自动部署实践(基于Docker

    摘要:只要的项目有提交,相关就根据来决定是否跑自动部署的命令。项目的自动部署添加执行的注册命令,按照说明进行参数配置。至此,和服务都已经自动部署完成。 准备工作 说明 公司最近准备了一台新的开发服务器,正好用以实践docker的基本应用。docker的好处不再赘述,详情可参考阮一峰的这篇入门。(关于Docker最好的中文介绍,没有之一)。 公司目前主要使用了EggJs + ReactJS的技...

    oysun 评论0 收藏0
  • 使用Docker部署Spring-Boot+Vue博客系统

    摘要:先来看一下容器的文件中间一些操作省略这里用了多阶段构建容器,如果直接通过设置环境变量只会在后面一个阶段生效,但是是在第一个阶段执行的,所以环境变量不能应用到当中。 在今年年初的时候,完成了自己的个Fame博客系统的实现,当时也做了一篇博文Spring-boot+Vue = Fame 写blog的一次小结作为记录和介绍。从完成实现到现在,也断断续续的根据实际的使用情况进行更新。 只不过每...

    Eirunye 评论0 收藏0

发表评论

0条评论

qiangdada

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<