云计算-Docker Compose部署案例

  • 什么是Docker Compose

    Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。

    Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。

    Docker-Compose 通过一个配置文件来管理多个Docker容器,在配置文件(docker-compose.yml)中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

    Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API,就可以在其上利用Compose来进行编排管理。

  • Docker官方提供了一个工具docker-compose,这个工具可以通过配置文件管理一组应用的容器,docker-compose支持容器的自动启动、自动部署、热更新、热升级。

  • 容器技术:容器是一个超轻量的虚拟化技术,通过容器技术我们可以实现在共用操作系统内核的情况下,以资源隔离的方式运行应用程序和其依赖项的。当镜像运行时,它是运行在独立的环境中,并不会和其他的应用共享主机操作系统的内存、CPU或磁盘。这保证了容器内的进程不会影响到容器外的任何进程;

  • 容器技术为应用程序的部署带来了巨大的变化,开发者可以将应用所需的所有必要组件都打包为单个镜像,以镜像的形式发布应用。这个镜像是可以在宿主机之间重复使用,同时和在运行时和宿主机内的其他应用互不冲突。为DevOps自动化运维,云原生技术、微服务架构提供了良好的底层技术支持。

  • Docker:Docker是第一个广泛流行的开源的应用容器引擎。通过Docker开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows机器上,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker底层用的Linux的cgroup和namespace这两项技术来实现应用隔离,一个完整的Docker有以下几个部分组成:—— Docker Client客户端;—— Docker Daemon守护进程;—— Docker Image镜像;—— Docker Container容器;—— Docker Registry仓库;—— Networks网络模型;—— Volumes存储卷模型

云计算-Docker Compose部署案例_第1张图片

 打开链接:https://developer.aliyun.com/adc/scenario/exp/d72359117ef14556a047fbbc19c0d3bc

  1. 在实验室页面,单击创建资源。

  2. 在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息、子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等)

  3. 我们可以在命令行和图形界面直接切换。云计算-Docker Compose部署案例_第2张图片 

  4. 首先安装docker compose,在安装成功后使用vi创建docker-compose.yml文件,在docker-compose.yml文件中加入下列的内容

    yum install -y docker-compose-plugin; vi docker-compose.yml云计算-Docker Compose部署案例_第3张图片

    注意使用vim编辑器时:需要先按i键进入编辑模式;编辑完成之后按esc退出编辑模式;然后按大写的ZZ保存并退出vim。                                                                                                     编写内容:version: "3.9" services: web: container_name: web image: "httpd:latest" ports: - "5000:80" - "6000:8000" db: container_name: db image: "mysql" volumes: - "mysql-vol:/var/lib/mysql" environment: MYSQL_ROOT_PASSWORD: "[MYSQL密码]" volumes: mysql-vol: {}

  5. 配置文件编写完毕后,我们通过docker compose来启动容器,docker compose up -d。云计算-Docker Compose部署案例_第4张图片

  6. 类Docker命令用3条docker compose命令来测试,这3条命令的用法和原生docker命令类似,不同的是如果命令需要指定特定容器,我们需要在命令中使用service名来代替容器名。docker compose exec db ls;                                                                                                        docker compose cp docker-compose.yml db:/root/ ;                                                       docker compose exec db bin/bash -c "cat /root/docker-compose.yml"

  7. 容器的启停删除:用docker compose进行容器服务组暂停/恢复,停止/重开,删除命令,这几条命令类似于docker compose up,只要使用默认配置文件docker-compose.yml,或者十月-f参数指定配置文件即可,不再需要指定容器名。docker compose pause docker compose unpause docker compose stop docker compose restart docker compose down云计算-Docker Compose部署案例_第5张图片

     云计算-Docker Compose部署案例_第6张图片

    云计算-Docker Compose部署案例_第7张图片  

  8. 启动wordpress论坛至少需要创建两个容器,一个mysql数据库容器,和一个运行wordpress的apache容器,除此之外如果安装了redis缓存插件,则还需部署redis容器。第一步定义MySQL配置首先我们先使用vi来编写db.yml作为MySQL的部署文件。在标准MySQL容器中,通过EntryPoint设置了启动命令,因此我们通过command设置启动参数。                       vi db.yml;                                                                                                                                 version: "3" services: db: image: mysql:8.0 command: - "--character-set-server=utf8mb4" - "--collation-server=utf8mb4_unicode_ci" volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: [MySQL root账号密码] MYSQL_DATABASE: wordpress volumes: db_data:云计算-Docker Compose部署案例_第8张图片
  9. 定义Redis配置:使用vi来编写cache.yml作为Redis的部署文件。

 vi cache.yml;version: "3" services: cache: depends_on: - db image: redis network_mode: "service:db" restart: always

云计算-Docker Compose部署案例_第9张图片

10.定义WordPress配置:最后我们使用vi来编写app.yml作为WordPress的部署文件。在WordPress配置中,需要依赖db和cache两个服务。使用Container网络模型,绑定db服务的网卡。

vi app.yml

version: "3" services: db: ports: - "8000:80" environment: MYSQL_ROOT_PASSWORD: &wp_passwd [MySQL wordpress账号密码] app: depends_on: - db - cache image: wordpress:6.0 network_mode: "service:db" restart: always environment: WORDPRESS_DB_HOST: 127.0.0.1 WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: *wp_passwd

云计算-Docker Compose部署案例_第10张图片

11.启动容器:配置文件编写完毕后我们就可以启动Project。

docker compose -f db.yml -f cache.yml -f app.yml -p wp up -d

12. 切换到图形界面:主界面将从web terminal切换到远程桌面

云计算-Docker Compose部署案例_第11张图片

13.启动浏览器:在远程桌面中,有三个图标,我们点击chromium网页浏览器,后续的操作我们都将在浏览器中进行

云计算-Docker Compose部署案例_第12张图片

 14.获得ECS公网地址:在进行配置之前我们还需要获得实验服务器的公网IP。我们在界面的左侧选择云产品资源。然后再下方面找到ECS公网地址。

第一步:在浏览器中访问WordPress

第二步:在浏览器中输入http://[ECS公网地址]:8000,即可进入WordPress初始化界面。

 云计算-Docker Compose部署案例_第13张图片

第三步:初始化WordPress:在初始化界面中我们首先选择wordpress的界面中的中文语言,并且按"继续",继续配置wordpress的相关信息,输入论坛名称,用户名,密码等,在邮箱输入栏输入符合标准的邮箱格式即可。然后按"安装WordPress"

云计算-Docker Compose部署案例_第14张图片

 第四步:登录WordPress,登录之后即可进入wordpress管理后台,后台界面主要由管理员使用。

云计算-Docker Compose部署案例_第15张图片

 第五步:进入wordpress前台浏览界面。输入网址 http://[ECS公网地址]:8000。出现如下浏览界面即说明wordpress安装成功。

云计算-Docker Compose部署案例_第16张图片

 第六步:先点开插件管理;再点安装reids插件;搜索reids;点开Redis Object Cache;Enable Object Cache;Flushc Object Cache

云计算-Docker Compose部署案例_第17张图片

第七步:切换至【WebTerminal】,执行如下命令验证插件生效。

docker exec -it wp-cache-1 redis-cli

keys *

云计算-Docker Compose部署案例_第18张图片

15.出现的问题总结已经解决办法

r r问题一:设备空间不足问题起因:容器在导入或者启动的时候,如果提示磁盘空间不足的,那么多半是真的因为物理磁盘空间真的有问题导致的。如下所示,我们可以看到 / 分区确实满了。

云计算-Docker Compose部署案例_第19张图片

 如果发现真的是物理磁盘空间满了的话,就需要查看到底是什么占据了如此大的空间,导致因为容器没有空间无法启动。其中,docker 自带的命令就是一个很好的能够帮助我们发现问题的工具。

云计算-Docker Compose部署案例_第20张图片

 解决办法:通过查看信息,我们知道正是因为docker 可用的磁盘空间不足,所以导致启动的时候没有足够的空间进行加载启动镜像。一就是清理无效数据文件释放磁盘空间,二就是修改 docker数据的存放路径。

云计算-Docker Compose部署案例_第21张图片

 问题二:还有一种情况也会让容器无法启动,并提示磁盘空间不足,但是使用命令查看发现并不是因为物理磁盘真的不足导致的。而是,因为对于分区的 inode 节点数满了导致的。

 解决方法:因为 ext3 文件系统使用 inode table 存储 inode 信息,而 xfs 文件系统使用 B+ tree 来进行存储。考虑到性能问题,默认情况下这个 B+ tree 只会使用前 1TB 空间,当这 1TB 空间被写满后,就会导致无法写入 inode 信息,报磁盘空间不足的错误。我们可以在 mount 时,指定 inode64 即可将这个 B+ tree 使用的空间扩展到整个文件系统。

云计算-Docker Compose部署案例_第22张图片

 以上就是Docker Compose部署案例以及出现的问题及解决办法了!

希望能对小伙伴有所帮助,有问题可以私信我哦!

你可能感兴趣的:(docker,容器,运维)