10.docker入门到精通—Docker compose 容器编排 你的名字 2023-09-27 16:24 75阅读 0赞 ## 一、介绍 ## Compose 是 Docker 公司推出的一个**开源**工具软件,可以管理多个Docker 容器组成一个应用。你需要定义一个YAML 格式的配置文件**docker-compose.yml**,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器。 ![dd2c8d7fcfebb5afc384239fc2c919a5.png][] Compose 允许用户通过一个单独的 docker- compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。 ## 二、下载 ## 官网 https://docs.docker.com/compose/compose-file/compose-file-v3/ 官网下载 https://docs.docker.com/compose/install/ 安装(新版docker已经安装了docker-compose,直接docker compose version查看版本) curl-L"https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)"-o /usr/local/bin/docker-compose 若github下载太慢,可以换源 curl-L https://get.daocloud.io/docker/compose/releases/download/1.28./docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 修改权限、查看版本 chmod+x /usr/local/bin/docker-compose docker-compose --version 新版docker使用: docker compose version ![7bf527311ee28bda9894a494f08a02d9.png][] 卸载 sudorm /usr/local/bin/docker-compose ## 三、核心概念(一文件、两要素) ## ### 1 一文件 ### docker-compose.yml ### 2 两要素 ### #### 2.1 服务(service) #### 一个个应用容器实例,比如订单微服务、库存微服务、mysql 容器、nginx容器或者 redis 容器 #### 2.2 工程(project) #### 由一组关联的应用容器组成的一个完整业务单元,在 **docker-compose.yml**文件中定义。 ### 3 Compose 使用的三个步骤 ### 1.编写 Dockerfile 定义各个微服务应用并构建出对应的镜像文件 2.使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务 3.最后执行 docker-compose up 命令 来启动并运行整个应用程序,完成一键部署上线 ### 4 Compose 常用命令 ### docker compose -h# 查看帮助 docker compose up # 启动所有 docker- compose 服务 docker compose up -d# 启动所有 docker- compose 服务并后台运行 docker compose down # 停止并删除容器、网络、卷、镜像。 docker compose exec yml 里面的服务 id # 进入容器实例内部 docker-compose exec docker- compose.yml 文件中写的服务 id /bin/bash docker compose ps# 展示当前 docker- compose 编排过的运行的所有容器 docker compose top# 展示当前 docker- compose 编排过的容器进程 docker compose logs yml 里面的服务 id # 查看容器输出日志 docker compose config # 检查配置 docker compose config -q# 检查配置,有问题才有输出 docker compose restart# 重启服务 docker compose start# 启动服务 docker compose stop# 停止服务 ### 5 **Compose 编排微服务** ### #### 5.1 编写 docker-compose.yml 文件 #### version: "3" services: microService: image: zzyy_docker:1.6 container_name: ms01 ports: -"6001:6001" volumes: - /app/microService:/data networks: - atguigu_net depends_on: - redis - mysql redis: image: redis:6.0.8 ports: -"6379:6379" volumes: - /app/redis/redis.conf:/etc/redis/redis.conf - /app/redis/data:/data networks: - atguigu_net command: redis-server /etc/redis/redis.conf mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: '123456' MYSQL_ALLOW_EMPTY_PASSWORD: 'no' MYSQL_DATABASE: 'db2021' MYSQL_USER: 'zzyy' MYSQL_PASSWORD: 'zzyy123' ports: -"3306:3306" volumes: - /app/mysql/db:/var/lib/mysql - /app/mysql/conf/my.cnf:/etc/my.cnf - /app/mysql/init:/docker-entrypoint-initdb.d networks: - atguigu_net command: --default-authentication-plugin=mysql_native_password #解决外部无法访问 networks: atguigu_net: #### 5.2 修改微服务工程 #### ###### 5.2.1 写yml(通过服务名访问,IP无关) ###### ![121cf2bae95be425dd780831d0acc9a3.png][] ###### 5.2.2 mvn package 命令将微服务形成新的 jar 包,并上传到Linux 服务器/mydocker目录下 ###### ![6904aa0c4741584e001cb14a797f2d7f.png][] ###### 5.2.3 编写 Dockerfile ###### # 基础镜像使用 java FROM java:8 # 作者 MAINTAINER zzyy # VOLUME 指定临时文件目录为/tmp,在主 机/var/lib/docker 目录下创建了一个临时文件 并链接到容器的/tmp VOLUME /tmp # 将 jar 包添加到容器中并更名为 zzyy_docker.jar ADD docker_boot-0.0.1-SNAPSHOT.jar zzyy_docker.jar # 运行 jar 包 RUN bash-c'touch /zzyy_docker.jar' ENTRYPOINT ["java","- jar","/zzyy_docker.jar"] #暴露 6001 端口作为微服务 EXPOSE 6001 ###### 5.2.4 构建镜像 ###### docker build -t zzyy_docker:1.6 . #### 5.3 执行 docker-compose up 或者 执行 docker-compose up -d #### ![32d193267bfc4534e73112d9b9b8c504.png][] ![d20d4e8f38cf386724c11d8abaf3a7bd.png][] #### 5.4 进入mysql容器实例并新建库 db2021 + 新建表 t\_user #### docker exec -it 容器实例id /bin/bash mysql -uroot-p create database db2021; use db2021; CREATE TABLE `t_user` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `username` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '用户名', `password` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '密码', `sex` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '性别 0=女 1=男 ', `deleted` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0' COMMENT '删除标志,默认0不删除,1删除', `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户表'; #### 5.5 测试 #### #### 5.6 关停 #### docker compose stop # 停止服务 [dd2c8d7fcfebb5afc384239fc2c919a5.png]: https://img-blog.csdnimg.cn/img_convert/dd2c8d7fcfebb5afc384239fc2c919a5.png [7bf527311ee28bda9894a494f08a02d9.png]: https://img-blog.csdnimg.cn/img_convert/7bf527311ee28bda9894a494f08a02d9.png [121cf2bae95be425dd780831d0acc9a3.png]: https://img-blog.csdnimg.cn/img_convert/121cf2bae95be425dd780831d0acc9a3.png [6904aa0c4741584e001cb14a797f2d7f.png]: https://img-blog.csdnimg.cn/img_convert/6904aa0c4741584e001cb14a797f2d7f.png [32d193267bfc4534e73112d9b9b8c504.png]: https://img-blog.csdnimg.cn/img_convert/32d193267bfc4534e73112d9b9b8c504.png [d20d4e8f38cf386724c11d8abaf3a7bd.png]: https://img-blog.csdnimg.cn/img_convert/d20d4e8f38cf386724c11d8abaf3a7bd.png
还没有评论,来说两句吧...