一、Compose
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过使用 YML 文件来配置应用程序需要的所有服务,一键启动。
1.1 三板斧
- Dockerfile: 保证项目可以在任何地方运行
- docker-compose.yml: 配置服务
- docker-compose up: 启动项目
1.2 安装
curl -L https://get.daocloud.io/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
cd /usr/local/bin
docker-compose version
1.3 常用命令
- 创建:docker-compose create
- 启动:docker-compose up
- 停止:docker-compose down,或者ctrl+c,会停止项目中所有服务
1.4 网络
compose启动项目后会自行创建一个网络,项目中的服务都运行在同一个网络下,容器名相当于ip,避免了每次容器重启ip漂移的问题。
1.5 yaml规则
# 3层
#版本
version:'3.8'
#服务
service:
#服务1
web:
#服务配置
images
build
network
...
#服务2
redis:
#其他配置,非必须
volumes:[]
networks:
configs:
1.6 部署wordpress
创建项目目录
mkdir /docker/wordpress
cd /docker/wordpress
vim docker-compose.yml
编写yaml
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- /docker/wordpress/mysql:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
启动项目
#-d 后台启动
docker-compose up -d
1.7 部署springboot
jar
@RestController
public class HelloController {
@Autowired
StringRedisTemplate redisTemplate;
@GetMapping("/")
public String hello() {
Long views = redisTemplate.opsForValue().increment("views");
return "hello, views: " + views;
}
}
Dockerfile
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
docker-compose.yml
version: '3.8'
services:
composeApp:
build: .
image: composee
depends_on:
- redis
ports:
- "8080:8080"
redis:
image: "redis"
把以上文件放到同一文件夹
启动项目
docker-compose up -d
二、Swarm
Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。
raft:一致性算法,保证大多数节点存活才可用,集群至少大于3台才能保证高可用。如果只有双主双从,一旦主节点宕机则集群失效。
2.1 初识
创建一个主节点
docker swarm init --advertise-addr 192.168.98.146
防火墙打开2377端口
# 开放80端口
firewall-cmd --permanent --add-port=2377/tcp
# 移除端口
#firewall-cmd --permanent --remove-port=8080/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
更改主机名称
vim /etc/hostname
systemctl restart systemd-hostnamed
其他三个节点加入
#生成工作节点秘钥
docker swarm join-token manager
#生成管理节点秘钥
docker swarm join-token manager
#两台工作节点、一台管理节点
dockerswarm join --token ...
检查是否加入
docker node ls
2.2 实战
创建服务、动态扩展服务、动态更新服务
用docker service启动一个nginx
docker service create -p 80:80 nginx --name nginx
直接使用docker run启动,不具有扩缩容,而使用service能支持扩缩容和滚动更新。
#查看服务
docker service ls
#查看服务内的进程
docker service ps nginx
#查看服务的详细信息
docker service inspect nginx
#扩容至3个副本(缩容也行)
docker service update --replicas 3 nginx
docker service scale nginx=3
#移除服务
docker service rm nginx
三、其他
如果需要管理超过10台服务器,建议使用k8s。
3.1 docker stack
类似k8s,也是集群部署
#yml单机
docker-compose up -d wordpress.yaml
#yml集群
docker stack deploy wordpress.yaml
Q.E.D.
Comments | 0 条评论