内容简介:之前就了解过首先,在以往的项目中,都是使用我们要知道的是,如果我们只使用
之前就了解过 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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Cracking the Coding Interview
Gayle Laakmann McDowell / CareerCup / 2015-7-1 / USD 39.95
Cracking the Coding Interview, 6th Edition is here to help you through this process, teaching you what you need to know and enabling you to perform at your very best. I've coached and interviewed hund......一起来看看 《Cracking the Coding Interview》 这本书的介绍吧!