一、Compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过使用 YML 文件来配置应用程序需要的所有服务,一键启动。

1.1 三板斧

  1. Dockerfile: 保证项目可以在任何地方运行
  2. docker-compose.yml: 配置服务
  3. 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 常用命令

  1. 创建:docker-compose create
  2. 启动:docker-compose up
  3. 停止: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 轻松地扩展到多个主机。
image.png
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

image.png

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.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议