内容简介:之前就了解过首先,在以往的项目中,都是使用我们要知道的是,如果我们只使用
之前就了解过 docker
,但是一直没有自己配置过 docker
。这次自己为项目配置了一下docker,在这里做一下总结记录。
Dockerfile和docker-compose
首先,在以往的项目中,都是使用 DockerFile + docker-compose
的形式来配置 docker 的,所以,首先就需要了解这两者的关系。
我们要知道的是,如果我们只使用 dockerfile
就可以完成对docker的镜像配置。那么,为什么我们还要使用 docker-compose
呢?
最开始是这样的,我们只是用docker中的一些命令,就可以实现配置一个镜像。但是这是有问题的: 不能保存
。所以就是用 dockerfile
将创建镜像的过程记录下来,然后我们只需要使用:
docker build
就可以创建一个镜像。
现在问题又来了:我想创建一个完整的项目,光是有一个镜像是不够的,比如我们的项目中就需要使用 nginx
、 mysql
、 redis
才能够启动项目。
虽然我们也可以考虑使用一个 dockerfile
,然后写成一个镜像,但是这就不可复用了。所以更加合理的做法应该是我们分别为 nginx
、 mysql
、 redis
创建一个镜像,然后将这些镜像结合起来使用。
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'
这是声明我们要使用哪种版本的 语法
的,不同版本的略有差异。
声明服务
按照我们上面所说,需要 nginx
、 mysql
、 redis
三个镜像,也就是需要三个服务:
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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
WWW信息体系结构(影印版第2版)
Louis Rosenfeld / 清华大学出版社 / 2003-6 / 49.8
如今的网站和内联网已经变得比以前越来越大,越来越有价值,而且越来越复杂,同时其用户也变得更忙,也更加不能容忍错误的发生。数目庞大的信息、快速的变化、新兴的技术和公司策略是设计师、信息体系结构构建师和网站管理员必须面对的事情,而这些已经让某些网让看起来像是个快速增长却规划很差的城市——到处都是路,却无法导航。规划精良的信息体系结构当前正是最关键性的。 本书介绍的是如何使用美学和机械学的理念创建......一起来看看 《WWW信息体系结构(影印版第2版)》 这本书的介绍吧!