docker-容器编排2

  金牌会员 | 2025-3-24 18:49:46 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 950|帖子 950|积分 2850

媒介

down

制止所有容器,并删除容器和网络
Shell
docker compose down [options] [SERVICE…]
• -v, --volumes 删除容器同时删除目录映射
没有指定SERVICE的话,就是删除project的所有服务
-v就是清算存储卷,不会清算宿主机上的存储卷,清算的事docker管理的卷
cp -r prj1 prj12
cd prj12
vi docker-compose.yml
  1. version: "3.8"
  2. services:
  3.   web:
  4.     image: iginx:1.24.0
  5.     environment:
  6.       TEST: 3
  7.     volumes:
  8.       - mytestvolforcomp:/usr/share/nginx/html/
  9. volumes:
  10.   mytestvolforcomp:
复制代码
mytestvolforcomp是存储卷的名称,背面是nginx的目录
docker compose config

docker compose up -d

看到网络卷容器都创建了
docker ps
docker network ls
docker volumes ls
docker compose down

我们发现这个只是清算了容器和网络

存储卷照旧存在的
docker compose down -v
docker volumes ls


可以看到对应的存储卷就清算掉了
run

该命令可以在指定服务容器上实行相关的命令
Shell
例如:启动一个 ubuntu 服务容器,并实行 ping docker.com 命令
docker compose run ubuntu ping docker.com
docker compose run [options] SERVICE [COMMAND] [ARGS…]
• -d 配景运行容器
• --name NAME 为容器指定一个名字
• --entrypoint CMD 覆盖默认的容器启动指令
• -e KEY=VAL 设置环境变量值,可多次使用选项来设置多个环境变量
• -u, --user=“” 指定运行容器的用户名或者 uid
• --rm 运行命令后自动删除容器
• -p, --publish=[] 映射容器端口到当地主机
docker run --help
docker compose run --help

就是在一个服务上运行一个一次性命令,由于他是用服务来启动容器的,而不是用镜像启动容器的
docker run -d --name mynginx1 nginx:1.24.0
我们通过一个镜像来启动容器
docker compose run -d --name mynginx2 nginx:1.24.0

直接就报错了
由于我们要用服务来启动容器
cat docker-compose.yml

docker compose run -d --name mynginx2 web
由于服务名称是web

如许就成功创建了
nginx启动本质也是一个命令
docker compose run --name mynginx22 web curl www.baidu.com
前台运行curl www.baidu.com

就是使用一个服务的容器来跑一个一次性命令
操纵案例

Docker Compose 根本操纵


就是实现这个
cp prj1 prj15 -r
cd prj15
vi docker-compose.yml
  1. version: "3.8"
  2. services:
  3.   web:
  4.     image: iginx:1.24.0
  5.     environment:
  6.       TEST: 3
  7.     ports:
  8.       - 8911:80
  9.     networks:
  10.       - mytestnetwork
  11.     volumes:
  12.       - ./nginxhome:/usr/share/nginx/html
  13.     depends_on:
  14.       mysql:
  15.         condition:service_healthy
  16.       redis:
  17.         condition:service_healthy
  18.   mysql:
  19.     image: mysql:5.7
  20.     environment:
  21.       MYSQL_ROOT_PASSWORD: bit@123
  22.     volumes:
  23.       - ./mysqllib:/var.lib/mysql
  24.     networks:
  25.       - mytestnetwork
  26.     healthcheck:
  27.       test: mysql -u root -pbit@123 -e "select 1;"
  28.       interval: 10s
  29.       timeout: 5s
  30.       retries: 10
  31.   redis:
  32.     image: redis:7
  33.     networks:
  34.       - mytestnetwork
  35.     healthcheck:
  36.       test: redis-cli ping
  37.       interval: 10s
  38.       timeout: 5s
  39.       retries: 10
  40. network:
  41.   mytestnetwork:
复制代码
redis-cli ping就是检查服务是否正常的,redis-cli表示客户端,客户端来ping
三个服务都纳入了自定义网络里面,
然后就是nginx的首页绑定存储卷,这个是映射到宿主机的,目录自动创建,mysql数据也要保存数据,保存到宿主机本目录
由于要访问nginx首页,还要编辑映射端口
docker compose config

现在开始设置nginx首页
或者可以自己创建本宿主机要求目录
mkdir -p nginxhome
cd nginxhome
echo “hello” > index.html
mysql的目录不是空的,就是正常的
现在开始期待服务了
docker compose up -d


docker compose ps

这也是查看本目录下的容器
docker ps这个是查看所有目录下的容器

ll

ll mysqllib

ll nginxhome

末了清算
docker compose down
先清算web,就是nginx,然后是redis,mysql,网络,与刚刚创建是相反的

ll mysqllib
ll nginxhome

然后就是存储卷里面的数据并不会被清算掉
综合案例

Docker Compose 部署自定义服务

简介


系统服务就是我们用springboot实现的微服务
我们要先启动mysql
然后是系统服务,末了才是nginx
写数据库

  1. drop database if exists test;
  2. CREATE DATABASE `test` DEFAULT CHARACTER SET utf8mb4 ;
  3. use `test`;
  4. CREATE TABLE `users` (
  5.                          `sno` int(11) DEFAULT NULL,
  6.                          `sname` varchar(50) DEFAULT NULL
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  8. INSERT INTO users (sno,sname) VALUES
  9.                                   (1,'pony'),
  10.                                   (2,'maxhou');
复制代码
我们先在当地初始化数据库
如何在容器初始化数据库呢
我们要先把这些语句写在sql文件里面

这个就是数据初始化脚本,放在桌面上,init.sql
创建springboot应用,maven设置



这里不选mybatis和plus,由于主要是为了学习docker
编写代码

增长mysql的驱动

然后就是去设置文件里面设置了
我们这里使用的是properties
  1. spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  2. spring.datasource.url=jdbc:mysql://mysql:3306/test
  3. spring.datasource.username=root
  4. spring.datasource.password=root
复制代码

设置的也是连接当地的mysql设置信息
现在写一个控制器
UserController
  1. @RestController
  2. @RequestMapping("/user")
  3. public class UserController {
  4.     @Autowired
  5.     JdbcTemplate jdbcTemplate;
  6.     @RequestMapping("/list")
  7. @ResponseBody
  8. public Object Users(){
  9. return jdbcTemplate.queryForList("select * from users");
  10. }
  11. }
复制代码

这个就是注入jdbc,然后输入sql语句,查询返回
然后就是启动


所有没有问题

刚刚我们输入的是ip所在127.0.0.1,现在我们以后是要输入服务名的,假设服务名为mysql,直接如许写就可以了
由于当地的mysql的服务名就是mysql,就是127.0.0.1,所以也是可以启动成功的

如许就把ip所在消撤消了,直接使用mysql的服务名称就可以了
打包,当地测试


直接点这个打包就可以了

如许就可以用jar包当地运行了,所以没有问题
编写docker-compose.yml

cp -r prj1 prj16
cd prj16
vi docker-compose.yml
  1. version: "3.8"
  2. services:
  3.   web:
  4.     image: iginx:1.24.0
  5.     environment:
  6.       TEST: 3
  7.     volumes:
  8.       - ./nginxconf/:/etc/nginx/conf.d
  9.     depends_on:
  10.       backend:
  11.         condition: service_started
  12.     ports:
  13.       - 8765:80
  14.   backend:
  15.     image: java:8
  16.     command: java -jar /app/testmymysql-0.0.1-SNAPSHOT.jar
  17.     volumes:
  18.       - ./app/:/app/
  19.     depends_on:
  20.       mysql:
  21.         condition: service_healthy
  22.   mysql:
  23.     image: mysql:5.7
  24.     environment:
  25.       MYSQL_ROOT_PASSWORD: root
  26.     volumes:
  27.       - ./mysql/varlib/:/var/lib/mysql
  28.       - ./mysql/initdb/:/docker-entrypoint-initdb.d/
  29.     healthcheck:
  30.       test: mysql -u root -proot -e "select 1;"
  31.       interval: 10s
  32.       timeout: 5s
  33.       retries: 10
复制代码
这个 MYSQL_ROOT_PASSWORD: root和我们jar包里面对应的密码是一样的


  • ./mysql/varlib/:/var/lib/mysql这个是放mysql所有的数据
  • /mysql/initdb/:/docker-entrypoint-initdb.d/这个存储卷的作用就是把/mysql/initdb/里面的sql脚本给运行一遍,相称于数据库的初始化了

mysql是我们最底层的服务
然后是上一层的jdk服务,配景服务,也是微服务
java:8就能启动我们的springboot应用,但是它没有长时间运行的命令,我们直接换掉它的command
/app/testmymysql-0.0.1-SNAPSHOT.jar是指定的jar包,这个是指定在容器里面的,怎么弄进来呢,我们可以用存储卷,用绑定卷,以宿主机目录为准
volumes:
- ./app/:/app/如许就可以了
然后就是java依赖mysql
nginx依赖java也就是backend,依赖java的已经启动了,java要已经启动了才行
nginx要反向署理到我们的配景服务,也要修改我们的设置—》也要绑定一个卷
./nginxconf/:/etc/nginx/conf.d如许写就可以了–》这个记住就可以了,由于这个是nginx的反向署理需要的目录
然后nginx还要对外袒露端口
docker compose config

数据初始化与服务启动

我们先看一下mysql的目录—》放那些表的
mkdir -p ./mysql/varlib/
然后是初始化数据–》放脚本文件
mkdir -p ./mysql/initdb/
然后就是点这个按钮

我们来传输文件

直接传到initdb里面
然后就是创建应用的目录
mkdir ./app
然后把jar拷贝到这个目录里面

如许我们的应用也完成了数据的初始化
末了是nginx的目录
mkdir -p ./nginxconf/
cd nginxconf
vi bit.conf
这个就是设置一个server,80端口进行监听, location进行反向署理,默认访问这个java容器里面的http://mysys:8080/user/;网址,mysys是服务名,默认会进行DNS剖析的,默认会把容器名称剖析成对应ip,这个8080是jar包中决定的
  1. server {
  2.     listen 80;
  3.     access_log off;
  4.     location / {
  5.         proxy_pass http://mysys:8080/user/;
  6.     }
  7. }
复制代码
在打开一个shell,cat docker-compose.yml

我们发现我们现在的服务名是backend,我们就是要访问这个backend服务的额8080端口
user是usercontroller对应的mapping
  1. server {
  2.     listen 80;
  3.     access_log off;
  4.     location / {
  5.         proxy_pass http://backend:8080/user/;
  6.     }
  7. }
复制代码
这个就是反向署理的设置,location /中的/就是默认访问http://backend:8080/user/ 这个路径

如许我们nginx的设置文件也初始化好了
在项目目录下
cd …
docker compose up -d


docker compose ps
docker exec -it prj16-mysql-1 bash
进入这个mysql容器,看有没有初始化数据
mysql -u root -proot
如果只是-p的话,那么就还要输入密码
show database;
use test;
show tables;
select * from users;

exit;
exit
我们现在来访问浏览器看一下

直接如许输入,现实访问的是user路径
实在这个是没有的

我们要输入ip/8765:userlist才行
清算资源

docker compose down
ll
ll app
ll mysql/initdv/
ll mysql/varlib
ll nginxconf


我们发现卷的对应宿主机目录都是正常存在的
我们只是删除了服务,但是数据都还保存着的
nginx往往放我们的前端资源
部署第三方应用-Docker Compose 部署WordPress

什么是WordPress

WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据
库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统
(CMS)来使用。
WordPress是一款个人博客系统,并逐步演化成一款内容管理系统软件,它是使用
PHP语言和MySQL数据库开发的,用户可以在支持 PHP 和 MySQL数据库的服务器
上使用自己的博客。
WordPress有许多第三方开发的免费模板,安装方式简单易用。不外要做一个自己的
模板,则需要你有一定的专业知识。比如你至少要懂的标准通用标记语言下的一个应
用HTML代码、CSS、PHP等相关知识。
WordPress官方支持中文版,同时有爱好者开发的第三方中文语言包,如wopus中文
语言包。WordPress拥有成千上万个各式插件和不计其数的主题模板样式。
WordPress的作用就是用来搭建博客系统的

这个就是架构了
部署WordPress

编写Docker Compose

cp prj1 prj17 -r
cd prj17
vi docker-compose.yml
去官网搜索wordpress

看到这个要指定许多环境变量
分别是数据库的所在,用户,密码,名称

直接拷贝
  1. version: "3.8"
  2. services:
  3.    wordpress:
  4.      #docker compose up 以依赖顺序启动服务,先启动db
  5.      depends_on:
  6.        db:
  7.          condition: service_healthy
  8.      image: wordpress:latest
  9.      # 建立宿主机和容器之间的端口映射关系,容器的 80 端口和宿主机的 8000
  10. 端口建立映射关系
  11.      ports:
  12.        - "8000:80"
  13.      restart: always
  14.      volumes:  
  15.        - ./wordpress:/var/www/html
  16.      environment:
  17.        WORDPRESS_DB_HOST: db
  18.        WORDPRESS_DB_USER: mywordpressuser
  19.        WORDPRESS_DB_PASSWORD: mywordpresspass
  20.        WORDPRESS_DB_NAME: wordpress
  21. db:
  22.   mysql: mysql:5.7
  23.   environment:
  24.     MYSQL_ROOT_PASSWORD: root
  25.     MYSQL_DATABASE: wordpress
  26.     MYSQL_USER: mywordpressuser
  27.     MYSQL_PASSWORD: mywordpresspass
  28.   volumes:
  29.     - ./mysqlvarlib/:/var/lib/mysql
  30.   healthcheck:
  31.     test: mysql -u root -proot -e " select 1;"
  32.     interval: 10s
  33.     timeout:5s
  34.     retries: 10
  35.    
  36.       
复制代码
wordpress:latest 中可以不消latest
restart: always 这个的意思是异常制止了就自动拉起来
- “8000:80” 这个是宿主机的8080端口映射到容器的80
WORDPRESS_DB_HOST表示 mysql服务的名称
WORDPRESS_DB_USER是用户名
WORDPRESS_DB_PASSWORD是密码
WORDPRESS_DB_NAME是数据库的名称
- ./wordpress:/var/www/html 这个用来存储博客系统的html文件,这个也是以容器为主的,以谁为主要看这个镜像是什么
现在开始设置db服务,就是mysql

这个是mysql的环境变量
MYSQL_ROOT_PASSWORD: mywordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
MYSQL_DATABASE是自动创建这个名字的数据库
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress 是单独创建别的一个用户,不是root用户
如许就会自动创建数据库和用户了
还要设置mysql的存储卷
- ./mysqlvarlib/:/var/lib/mysql
然后保证健康 healthcheck:
然后wordpress依赖mysql depends_on:
如许我们就设置好了
docker compose config

上述的过程都可以在docker官网搜索wordpress查看到的
启动服务

docker compose up -d


docker ps

docker compose ps

接下来我们进行安装,安装很简单,直接进入浏览器访问就可以安装了

一回车的话,就变成如许了

这个是安装界面

选择中文继续

点击安装

然后登录

这个就是刚刚输入的邮箱密码

如许我们就成功进入了这个配景,这个站点的安装是可视化安装
发布博客



如许就可以了

清算

docker compose down
docker ps -a | grep prj17

ll mysqlvarlib
ll wordpress/

我们发现数据都是存在的
在官网中,先看tag

然后是这个yml文件

如许就OK了
如许我们就可以打一个自己镜像的tag,发布到堆栈,然后给出yml文件的设置
如许我们就发布自己的微服务了
如果可以我们还可以用k8s来发布的
常见问题


  • up、run和 start之间有什么区别
    通常,你想要docker compose up. 用于up启动或重新启动docker-compose.yml.
    在默认的“附加”模式下,会看到来自所有容器的所有日志。在“分离”模式 ( -d) 中,启
    动容器后 Compose 退出,但容器继续在配景运行。
    该docker compose run 命令用于运行“一次性”或“暂时”任务。它需要您要运行的服
    务名称,并且只为正在运行的服务所依赖的服务启动容器。用于run运行测试或实行
    管理任务,例如从数据卷容器中删除或添加数据。该run命令的作用类似于docker
    run -ti 它打开容器的交互式终端并返回与容器中进程的退出状态匹配的退出状态。
    docker compose start 命令仅对重新启动先前创建但已制止的容器有用。它从不创
    建新容器。
    up—>所有服务的容器都创建
    run—》docker run的退化,用来跑一次性任务
    start—》把制止的容器再次启动,操纵的是project的某个服务

如何在同一主机上运行 Compose 文件的多个副本
Compose 使用项目名称为项目的所有容器和其他资源创建唯一标识符。要运行项目的
多个副本,请使用-p命令行选项 或COMPOSE_PROJECT_NAME环境变量设置自定
义项目名称。
3.
可以控制服务启动序次吗?
可以控制启动序次,通过依赖指定,并且可以配合healthcheck等健康检查成功以后
再启动。
总结


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表