什么网站可以做外贸,长沙移动网站建设哪家好,教学直播平台网站建设费用,零成本做网站docker compose的作用
docker-compose是docker官方的一个开源项目可以实现对docker容器集群的快速编排docker-compose 通过一个配置文件来管理多个Docker容器在配置文件中#xff0c;所有的容器通过 services来定义然后使用docker-compose脚本来启动#xff0c;停止和重启容…docker compose的作用
docker-compose是docker官方的一个开源项目可以实现对docker容器集群的快速编排docker-compose 通过一个配置文件来管理多个Docker容器在配置文件中所有的容器通过 services来定义然后使用docker-compose脚本来启动停止和重启容器使用docker-compose可以对我们项目进行快速部署
docker命令部署项目
比如项目中有nginx, web, mysql 三项服务
1 mysql 的部署
拉取镜像 $ docker pull mysql创建mysql, 并将mysql数据库导入到容器里 $ docker run --name mysql_c -p 3306:3306 -v /root/mysql/conf.d:/etc/mysql/conf.d -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD123456 -d mysql在物理机 $ mkdir /root/mysql/conf.d /root/mysql/data 来创建两个目录 客户端 尝试连接 物理机上的mysql容器成功连接成功后创建数据库或导入数据库这里导入之前的数据库
2 web的部署
测试本地的web项目是否可以链接容器数据库检查连接配置正常 这里如果mysql连接配置写的是ip最好改成 host对应的域名 打包或不打包的不同部署方式参考前文需要注意连接数据库的问题这里简单举例: 这里用centos镜像来运行的不是golang或已经打包好的镜像$ docker run -itd --name goweb1 --link mysql_c:mysql -p 8080:8080 -v /root/wwwroot/:/root centos --link 之后会在 /etc/host 生成mysql对应的别名配置就可以连接到mysql了 $ docker exec -it goweb1 /bin/bash 这里goweb1是容器可以用自己的$ chmode -R goweb1 这里找到对应的目录修改执行权限, 这里goweb1是目录$ nohup ./goweb 这里 goweb是可执行程序客户端访问测试正常
3 nginx的部署
如果想要不通过ip访问通过域名访问就要配置ng的转发转发配置, 默认配置文件 default.conf新建任意 xxx.conf 存放在物理机上 /root/nginx/conf.d
goweb.conf
upstream backend {ip_hash;server goweb1:8080; # 这里是 goweb1 容器服务的host别名
}server {listen 80;server_name goweb.xxxx.com; # 你的域名地址location / {# 设置主机头和客户端真实地址以便服务器获取客户端真实IP # 禁用缓存proxy_buffering off; # 反向代理的地址proxy_pass http://backend; }# error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location /50x.html {root html;}
}启动nginx映射端口配置映射目录连接web服务 $ docker run -itd --name nginxweb -p 80:80 --link goweb1:centos -v /root/nginx/conf.d/:/etc/nginx/conf.d nginx 检查 host配置 $ cat /etc/hosts如果是客户端访问 goweb.xxxx.com 域名客户端需要配置相关的host, 才能访问确认配置文件无误 ping 域名 成功 以上是纯docker命令部署也可通过 Dockerfile来配置部署goweb应用程序 不管是原生docker命令部署还是 Dockerfile部署其实都比较麻烦
docker compose 部署项目
1 安装 docker compose
如果你是安装的桌面版 Docker不需要额外安装已经包含了如果是没图形界面的服务器版 Docker你需要单独安装 如果是 centos8 默认源是有问题的我们可以配置到阿里源 参考http://bbs.itying.com/topic/6256730b212f3a0c78d4ac16 $ rm -rf /etc/yum.repos.d/*$ touch /etc/yum.repos.d/CentOS-Base.repo 复制链接提供的内容 $ yum clean all$ yum makecache在安装 docker compose 前还要配置 docker的源这里是时候的 阿里源 $ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo $ sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin 如果在安装的时候后面有 docker-compose-plugin 参数也会被安装 $ yum install docker-compose-plugin 这是单独安装 运行 docker compose 检查是否安装成功
2 配置 docker-compose.yml
version: 3services: # 定义容器服务mysql_c: # 当前容器配置image: mysqlcontainer_name: mysql_c # 可以不写和配置名保持一致environment: MYSQL_ROOT_PASSWORD: 123456restart: alwaysports:- 3306:3306volumes:- /root/mysql/conf.d:/etc/mysql/conf.d- /root/mysql/data:/var/lib/mysqlgoweb1:image: gowebimg # 这个golangweb的镜像需要提前准备好build:context: ./dockerfile: Dockerfile# container_name: goweb1restart: alwaysports:- 8080:8080depends_on: # 表示 mysql_c 容器创建完成后再去创建 goweb1 容器- mysql_cnginx:image: nginxcontainer_name: nginxrestart: alwaysports:- 80:80depends_on:- goweb1volumes:- /root/nginx/conf.d/:/etc/nginx/conf.d验证配置文件: $ docker compose convert 如果有错不会启动输出错误如: yaml: line3: did not find expected key 编译运行容器: $ docker compose up后台运行: $ docker compose up -d$ docker ps / docker compose ps 这样一次就起来了3个容器服务 之后验证服务是否正常 如果不正常进行检查如 检查web服务$ docker compose exec 服务名 /bin/bash 例如: $ docker compose exec goweb1 /bin/bash 查看里面的配置文件 注意一般而言我们这样查看都是基于未打包的因为打包后的可执行文件不是docker打包可能结果和配置不匹配 上述配置有可能会遇到一些问题比如 mysql容器先启动起来goweb应用接着启动起来但是mysql可能还没启动起来 可重启应用解决 $ docker compose restart goweb1可使用脚本解决 重启某个服务 $ docker compose restart goweb1 docker compose 极大方便了我们结合不同的容器 通过一个配置文件一个命令即可部署
3 解决启动顺序问题导致的数据库访问不通
使用 wait-for-it.sh 脚本
https://github.com/vishnubob/wait-for-it 改写 compose 文件 goweb1:image: gowebimg # 这个golangweb的镜像需要提前准备好build:context: ./dockerfile: Dockerfile# container_name: goweb1restart: alwaysports:- 8080:8080depends_on: # 表示 mysql_c 容器创建完成后再去创建 goweb1 容器- mysql_ccommand: [./wait-for-it.sh, mysql_c:3306, --, ./goweb] # goweb是编译后的可执行文件docker compose 常见命令
$ docker compose build 可编译/重新编译服务 如果有 Dockerfile会编译我们的镜像–force-rm总是删除构建过程中的临时容器。–no-cache镜像构建过程中不使用 cache。–pull始终先尝试通过 pull 来获取最新版本的镜像 $ docker compose logs 可查看操作日志$ docker compose ps 可查看当前主机容器信息类似 docker ps$ docker compose start 启动容器$ docker compose restart 重启容器$ docker compose stop 停止容器 后面不加容器则全部停止$ docker compose rm 删除容器 不加容器删除停止状态的容器 -f 强制删除 $ docker compose exec 进入容器$ docker compose version 查看版本
docker compose 实现容器扩容
1 方案1基于命令
$ docker compose up --scalegoweb13 -d goweb1 是服务名, 3 是部署扩展3台用于负载均衡注意如果web服务启动多态配置相同的端口会有问题这时只需要注释掉 上面的 ports 配置 # ports:# - 8080:8080$ docker compose ps 可看见3台 goweb1 服务结束掉一台会自动重新负载均衡 可以进入 nginx 服务 ping goweb1 服务ip地址会动态变化
2 方案2: 基于docker-compose.yml文件
goweb1:build:context: ./dockerfile: Dockerfilerestart: alwaysdeploy:replicas: 3 #副本数量resources: #资源limits: #配置cpucpus: 0.5 # 设置该容器最多只能使用 50% 的 CPUmemory: 500M # 设置该容器最多只能使用 500M内存restart_policy: #定义容器重启策略, 用于代替 restart 参数condition: on-failure #只有当容器内部应用程序出现问题才会重启depends_on:- mysql_ccommand: [./wait-for-it.sh,mysql_c:3306,--,./goweb]注意启动多个副本不能指定 container_name