一、docker-compose
1、Docker-Compose
项目是
Docker
官方的开源项目
,
负责实现对
Docker
容器集群的快速编排
通过编写
docker-compose
文件可对多个服务同时进行启动
/
停止
/
更新
(
可定义依赖
,
按顺序启动服务
)
2、docker-compose
将所管理的容器分为
3
层结构:
project? ? ? ??
1? ? ? ? ?
一个微服务项目
service? ? ? ?N? ? ? ? ?
由
N
个微服务组成
container? ? N? ? ? ??
而每个微服务又由
N
个节点组成
3、docker-compose.yml组成一个project,project里包括多个service,每个service定义了容器运行的镜像(或构建镜像)
Docker-Compose
的工程配置文件默认为
docker-compose.yml
4、前面我们使用
Docker
的时候
,
定义
Dockerfile
文件
,
然后使用
docker build
、
docker run
等命令操作容器
.
然而微服务架构的应用系统一般包含若干个微服务
,
每个微服务一般都会部署多
个实例
,
如果每个微服务都要手动启停
,
那么效率之低
,
维护量之大可想而知
.
而使用
Docker Compose
可以轻松、高效的管理容器
,
它是一个用于定义和运行多容器
Docker
的应用程序工具
.
5、三步过程
1)
用
dockerfile,
或者镜像定义应用程序的环境
,
以便在任何地方复制
.
2)
在
docker-compose.yml
中定义组成应用程序的服务
,
以便它们可以在单独的环境中一起运行
.
3)
运行
docker compose up
启动并运行整个应用程序
.
(一)、docker-compose安装与配置
从上篇博客的基础上将docker.service恢复
?vim /lib/systemd/system/docker.service
(删除EnvironmentFile=/run/flannel/docker_opts.env和$DOCKER_OPTS)
1、上传文件
①、将docker-compose-Linux-x86_64重命名为docker-compose
②、将刚才下载的docker-compose文件上传到centos7的/usr/local/bin/目录下
cd /usr/local/bin
?③、添加可执行权限
chmod +x /usr/local/bin/docker-compose
?(二)docker-compose.yml 配置文件基本介绍
1、version:
指定
docker-compose.yml
文件的写法格式
Compose
目前有三个版本分别为
Version 1,Version 2,Version 3,Compose
区分
Version 1
和
Version 2
(
Compose 1.6.0+,Docker Engine 1.10.0+
)
.Version 2
支持更多的指令.Version 1
将来会被弃用
.
①、vim docker-compose.yml
:wq? :保存并退出
?
2、services:多个容器集合
services
:
? ? 容器
1
:
? ? 容器
2
:
· image
:镜像名称或镜像
ID.
如果镜像在本地不存在
,Compose
将会尝试拉取镜像
· build
:服务除了可以基于指定的镜像
,
还可以基于一份
Dockerfile,
在使用
up
启动时执行构建任? 务
,
构建标签是
build,
可以指定
Dockerfile
所在文件夹的路径
.Compose
将会利用
· Dockerfile
自动构建镜像
,
然后使用镜像启动服务容器
· hostname
:启动高可用(集群)微服务时
,
必须与代码配置中的
spring.profiles
属性一致
.
· network_mode
:配置服务容器的网络模式
· environment
:环境变量配置
,
可以用数组或字典两种方式
environment
:
? ? ?RACK_ENV
:
development
? ? SHOW
:
'ture'
-------------------------
environment
:
? ? -
RACK_ENV
=
development
? ? -
SHOW
=
ture
?(三)docker-compose 基本指令
1、查看版本信息
docker-compose -v
2、构建并启动容器
docker-compose up
3、启动单个服务
docker-compose up 服务名称
4、后台启动服务
docker-compose up -d
5、停止和删除容器、网络、卷、镜像
docker-compose down
6、启动指定服务或启动所有服务
docker-compose start [服务名称]
7、停止指定服务或停止所有服务
docker-compose stop [服务名称]
8、列出所有运行容
docker-compose ps
9、进入指定容器
docker-compose exec
10、删除所有(停止状态的)服务容器
docker-compose rm
参数:
-f
:强制直接删除
,
包括非停止状态的容器
-v
:删除容器所挂载的数据卷
(四)docker-compose 网络
编辑docker-compose.yml
vim docker-compose.yml? (还可以直接点击进入编辑)
1、指定网络模式
①、docker-compose.yml
version: '3'
services:
nginx:
container_name: my-nginx
image: nginx
ports:
- 9999:80
volumes:
- /home/nginx/html:/etc/nginx/html
- /home/nginx/conf.d:/etc/nginx/conf.d
- /home/nginx/log:/var/log/nginx
restart: always
写法:
network_mode
:
"bridge"
network_mode
:
"host"
network_mode
:
"none"
network_mode
:
"service:[service_name]"
network_mode
:
"container:[container name/id]"
②、启动
docker-compose up
删除,
?启动后台运行
docker-compose up -d
直接浏览器访问:
2、引用外部已存在的网络
①、查看网络:
?docker inspect my-nginx
②、创建mm网络
docker network create --subnet 10.0.10.0/24 mm
③、查看网络
?docker network ls
④、编辑docker-compose.yml
version: '3'
services:
nginx:
container_name: my-nginx
image: nginx
ports:
- 9999:80
volumes:
- /home/nginx/html:/etc/nginx/html
- /home/nginx/conf.d:/etc/nginx/conf.d
- /home/nginx/log:/var/log/nginx
restart: always
networks:
- mm-net
networks:
mm-net:
external:
name: mm
删除:
?docker-compose down
后台启动:
docker-compose up -d
查看网络:
3、自定义网络
①、编辑docker-compose.yml
version: '3'
services:
nginx:
container_name: my-nginx
image: nginx
ports:
- 9999:80
volumes:
- /home/nginx/html:/etc/nginx/html
- /home/nginx/conf.d:/etc/nginx/conf.d
- /home/nginx/log:/var/log/nginx
restart: always
networks:
mm-net:
ipv4_address: 192.168.101.110
networks:
mm-net:
driver: bridge
ipam:
config:
- subnet: 192.168.101.0/24
gateway: 192.168.101.1
②、删除:
?docker-compose down
③、后台启动:
docker-compose up -d
④、查看网络:
4、连接mysql
①、编辑docker-compose.yml
version: '3'
services:
nginx:
container_name: my-nginx
image: nginx
ports:
- 9999:80
volumes:
- /home/nginx/html:/etc/nginx/html
- /home/nginx/conf.d:/etc/nginx/conf.d
- /home/nginx/log:/var/log/nginx
restart: always
mysql:
container_name: my-mysql
image: mysql:8.0.27
security_opt:
- seccomp:unconfined
ports:
- 2333:3306
volumes:
- /home/mysql/conf/my.cnf:/etc/my.cnf
- /home/mysql/data:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=root123
②、测试连接
?
|