为项目配置docker

栏目: 数据库 · 发布时间: 5年前

内容简介:之前就了解过首先,在以往的项目中,都是使用我们要知道的是,如果我们只使用

之前就了解过 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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

实战移动互联网营销

实战移动互联网营销

江礼坤 / 机械工业出版社 / 2016-1 / 79.00

移动互联网的兴起,又为企业带来了新的挑战与机遇!越来越多的人,看到了移动互联网的价值与前景,但是在具体操作时,移动互联网具体如何玩?企业如何向移动互联网转型?如何通过移动互联网做营销?等等一系列问题,接踵而至。虽然目前相关的资料和文章很多,但是都过于零散,让人看完后,还是无从下手。而本书旨在成为移动互联网营销领域标准的工具书、参考书,为大家呈现一个系统、全面的移动互联网营销体系。让大家从思维模式到......一起来看看 《实战移动互联网营销》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具