微网站平台怎样做网站,网站策划书如何做,成都 高端网站建设,注册一家小规模公司多少钱简介
引言#xff08;需求#xff09;
为了完成一个完整项目势必用到N多个容器配合完成项目中的业务开发#xff0c;一旦引入N多个容器#xff0c;N个容器之间就会形成某种依赖#xff0c;也就意味着某个容器的运行需要其他容器优先启动之后才能正常运行#xff1b;
容…
简介
引言需求
为了完成一个完整项目势必用到N多个容器配合完成项目中的业务开发一旦引入N多个容器N个容器之间就会形成某种依赖也就意味着某个容器的运行需要其他容器优先启动之后才能正常运行
容器的编排先后运行顺序至关重要
无法从项目的角度将一组容器划分到一起日后难点在于项目多服务器部署
项目角度管理一组项目容器
功能
实现对docker容器集群的快速编排站在项目角度将一组容器集合在一起对这组容器按照一定顺序进行启动通过定义一个单独的 docker-compose.yml 配置文件来定义一组相关联的应用容器为一个项目
重要概念
项目project: 由一组关联的应用容器服务组成的一个完整业务单元在docker-compose.yml文件中定义服务services: 一个应用的多个容器实际上可以包括若干个运行相同镜像的容器实例
docker-compose安装
安装
apt安装
sudo apt install -y docker-composepip安装
sudo pip3 install docker-compose验证是否安装成功及其版查询版本
docker-compose -v
# 输出信息如下
docker-compose version 1.25.0, build unknowndocker-compose 与docker-engine 版本兼容关系
# 查看本地版本
docker -v
# Docker version 24.0.7
# docker-compose 指定vision版本3.2意味着部署服务器docker engin引擎版本至少高于17.04.0
# 具体对应关系官网查看
# https://docs.docker.com/compose/compose-file/compose-file-v3/# 版本不支持会报如下错误
ERROR: Version in ./docker-compose.yml is unsupported. You might be seeing this error because youre using the wrong Compose file version. Either specify a supported version (e.g 2.2 or 3.3) and place your service definitions under the services key, or omit the version key and place your service definitions at the root of the file to use version 1.案例一文件基本结构
创建一个工程项目目录
mkdir -p ems/docker
cd ems/docker在项目根目录下创建配置文件 docker-compose.yml
# docker-compose 版本号
version: 3.3# 一个应用服务
services:tomcat01:# 利用本地仓库已经构建好的镜像,如果没找到会自动尝试hub上pullimage: tomcat:8.0# 容器名称 --namecontainer_name: tomcat01# 做端口映射 -pports:- 8080:8080# - 8081:8081 # 可以映射多个端口tomcat02:image: tomcat:8.0container_name: tomcat02ports: - 8081:8080redis01:image: redis:5.0.12container_name: redis01ports:- 6379:6379mysql01:image: mysql:5.6container_name: mysql01# 给当前容器指定环境参数 类似于 docker run -e MYPASSWORDroot redis:5.0.12 -dports:- 3306:3306environment: - MYSQL_ROOT_PASSWORDROOT # 推荐写法- MYSQL_ROOT_PASSWORD:root# 指定同步数据卷 -v ./data路径一定要先存在volumes:# 相对或绝对路径# - ./data:/var/lib/mysql# 别名挂载数据卷一定要先申明# ERROR: Named volume data:/var/lib/mysql:rw is used in service mysql01 but no declaration was found in the volumes section- data:/var/lib/mysql# 申明数据卷别名
volumes:data:启动 docker-compose 一组服务
# -d 表示后台启动容器
docker-compose up -d
# 直接bash面板启动
docker-compose up访问一下tomcat http://192.168.18.224:8080/ docker-compose down 清除上一次的缓存配置(连同创建的容器一起清除)
docker-compose 常用服务配置命令详解
官方参考文档 https://docs.docker.com/compose/compose-file/build/ 官方中文文档 Dockerfile 文件
# 指定基础镜像
FROM openjdk:8-jre
# ARG特殊他不是有效指令可以在FROM之前
ARG buildno
ARG password# 暴露端口可以在容器服务中暴露
EXPOSE 8081
# 设置环境变量
ENV APP_PATH/apps
# 指定工作目录
WORKDIR ${APP_PATH}
# 拷贝文件到镜像中
COPY apps.jar ${APP_PATH}
# 使用数据卷
VOLUME ${APP_PATH}# 运行jar包 java -jar apps.jar
ENTRYPOINT [ java, jar ]
CMD [ apps.jar ]默认情况下Dockerfile中指定的选项例如CMDEXPOSEVOLUMEENV都被遵守不需要在docker-compose.yml中再次指定它们
docker-compose.yml 文件
version: 3.3
services:tomcat01:image: tomcat:8.0container_name: tomcat01ports:- 8080:8080networks:- sensizrestart: alwaysapps:# 通过Docjerfile文件指定镜像# build: ./ # 可以直接指定其他参数默认build:# 指定dockerfile上下文目录也可以是git仓库的URLcontext: ./# 指定Dockerfile的文件名如果为默认值Dockerfile可以不写dockerfile: Dockerfile# # 给docker中传入环境变量参数# args:# buildno: 1ports:- 8081:8080cap_add:- ALLcommand: [test.jar]# 先启动顺序tomcat01 mysql resdi再启动appsdepends_on:- tomcat01- mysql01# - redisnetworks:- sensizmysql01:image: mysql:5.6# 数据卷别名要首先申明volumes:- data:/var/lib/mysqlports:- 3303:3306environment:- MYSQL_ROOT_PASSWORDroot# env_file: # - ./ENV_FILE.envexpose:- 8888# 声明数据卷别名
volumes:data:
# 申明使用的网桥
networks:sensiz:image 指定启动容器的镜像可以是镜像仓库/标签或者镜像id或者id的前一部分
如果本地仓库镜像不存在Compose将尝试从官方镜像仓库将其pull下来如果你还指定了build在这种情况下它将使用指定的build选项构建它并使用image指定的名字和标记对其进行标记。但最好指定二者之一即可。
build 通过dockerfile构建镜像即同样支持docker engine中的 docker build -t thicv:v1.0 .
注 build与image 最好指定一个即可即通过其中一种方式指定镜像
version: 3.3
services:apps:# 通过Docjerfile文件指定镜像# build: ./ # 可以直接指定其他参数默认build:# 指定dockerfile上下文目录也可以是git仓库的URLcontext: ./# 指定Dockerfile的文件名如果为默认值Dockerfile可以不写dockerfile: Dockerfile# # 给docker中传入环境变量参数args:buildno: 1password: secret# 也可以是# - passwordsecretargs添加构建镜像的参数环境变量只能在构建过程中访问。 首先在Dockerfile中指定要使用的参数
ARG buildno
ARG passwordRUN echo Build number: $buildno
RUN script-requiring-password.sh $passwordcap_add | cap_drop
指定容器的内核能力capacity分配 # 如拥有所有能力可以指定为cap_add:- ALL# 去掉NET_ADMIN能力cap_drop:- NET_ADMINcommand 覆盖容器启动后默认执行的命令 类似于docker run image test.jar
containner_name 指定容器名称如若不指定默认名称使用 项目名称-服务名称-序列号 格式
注指定容器名称后该服务器将无法进行扩展不推荐使用
volumes 指定宿主机与容器文件的映射
注 别名一定要先声明挂载数据卷的默认权限是读写rw可以通过ro指定为只读
version: 3.3
services:mysql01:image: mysql:5.6# 数据卷别名要首先申明volumes:- data:/var/lib/mysq:ro# 声明数据卷别名
volumes:data:depends_on 解决容器的依赖、启动先后问题
但当前服务不会等待被依赖服务【完全启动】之后才启动
environment | env_file environment指定容器启动时的环境变量类似于docker run -e 选项 env_file 指定容器启动时的环境变量文件
version: 3.3
services:mysql01:image: mysql:5.6# 数据卷别名要首先申明environment:- MYSQL_ROOT_PASSWORDroot# env_file: # - ./ENV_FILE.envexpose 暴露端口但不映射到宿主机只与被链接的服务访问且仅可以指定内部端口为参数
labels
为容器添加元数据信息做辅助说明
networks 用来指定启动容器使用的网桥类似于docker run --network
一个项目的一组容器应当在同一个网桥中
ports 用来指定宿主机与容器间的端口映射
restart
指定容器退出后 的策略为始终重启相当于daocker run --restartalways always 总是重新启动 no是默认重启策略即任何情况都不会重启 on-failure 退出代码只是出现故障重新启动
restart: alwaysdocker-compose 常用操作命令进阶
大部分命令的对象可以是项目本身也可以指定为项目中的服务或容器
docker engine 的命令同样可以操作服务容器
语法 docker-compose [选项] [服务id]
指令说明docker-compose --help查询命令帮助docker-compose up对整个项目进行操作镜像构建、创建服务、启动服务并关联服务相关容器的额一系列造作-d表示后台启动docker-compose up [servicesID]仅仅启动compose中某一个服务容器docker-compose down停止并删除所有启动的容器、网桥等docker-compose down [servicesID]仅仅关闭compose中某一个服务容器docker-compose exec [servicesID]进入某个已经运行的容器这样不用加选项 -itdocker-compose ps列出所有运行的容器docker-compose restart重启整个项目docker-compose restart [servicesID]仅仅重启某一个服务docker-compose rm删除所有项目删除已经停止的服务容器-f 选项也可以强制删除-v 删除挂载的数据卷docker-compose rm [servicesID]仅仅删除某一个服务docker-compose top查看项目中所有的服务容器运行进程docker-compose top [services]仅仅查看对应服务的运行进程docker-compose logs [servicesID]查看对应服务容器的运行日志-f 实时查看
docker-compose -f ./docker-compose.yml 在某路径下查询docker-compose.yml文件