Docker| 让Docker炫起来

Posted 脚丫先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker| 让Docker炫起来相关的知识,希望对你有一定的参考价值。

大家好,我是脚丫先生 (o^^o)

在前面的章节中,我们学习到了Docker的基本知识,同时也Docker run了,算是彻底的体验了一把Docker的牛逼克拉斯。掌握了这些内容,对于Docker容器这个知识点,你已经可以到及格线了。但是,我想你肯定不会满足于此,不满足就跟着脚丫往下学呗,docker-compose的初识、相知、一条龙服务尽在下文。day day up !!!

文章目录


一、 初始docker-compose

也许你在使用docker run 命令的时候,由起初的懵懂与紧张,到之后的老司机run得飞起!经历了多次容器的出生于死亡,就会去思考一个问题。我们每次run去新启动一个容器时候,一旦需要去修改容器的某个配置,总是很麻烦,可能你会想到,官方提供的Docker update命令,然而官网提供的是有限个参数的修改,深入到细节总是短小而不精悍。因此我们要想实现docker容器的快速自定义(个人定制),那么docker-compose的重要性不言而喻。

docker-compose是用于定义和运行多个容器Docker应用程序的工具。通过docker-compose,我们可以使用它来配置docker应用程序的服务。之后,使用一个命令,就可以从配置中创建并启动所有服务 换言之,用一个为yml格式的文件,去管理你需要的容器。更重要的是有了 docker-compose ,你就可以把所有繁复的 docker 操作全都一条命令,自动化的完成。

一条命令,自动化完成docker的操作,够吊够炫酷。docker-compose,解放双手,值得拥有!!!

二、 安装docker-compose

2.1、在线安装docker-compose

使用docker-compose这个容器编排工具,必须下载docker-compose这个命令,那么我们可以去github官方网站搜索“docker/compose”,如下:

接着点击tags

选择自己需要的版本

[root@docker ~]# curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
[root@docker ~]# chmod +x /usr/local/bin/docker-compose 

* 如果网速不佳可以使用以下命令:
[root@docker ~]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
[root@docker ~]# chmod +x /usr/local/bin/docker-compose
//验证
[root@docker ~]# docker-compose -v       //查看工具的版本信息
docker-compose version 1.25.0, build 0a186604

2.2、离线安装docker-compose

由于在很多情况下需要安装docker-compose的虚拟机或服务器无法访问互联网,因此需要离线安装。
1)、下载docker-compose-Linux-x86_64离线包(可以找一个有网的环境下载)

https://github.com/docker/compose/releases
https://github.com/docker/compose/releases/download/1.25.0/docker-compose-Linux-x86_64

2)、将下载下来的“docker-compose-Linux-x86_64”文件上传到服务器上,然后执行如下命令将其移动到 /usr/local/bin,并改名为“docker-compose”

[root@docker ~]# mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose

3)、接着执行如下命令添加可执行权限:

[root@docker ~]# chmod +x /usr/local/bin/docker-compose

4)、最后使用 docker-compose version 命令测试是否安装成功

[root@docker ~]# docker-compose -v       //查看工具的版本信息
docker-compose version 1.25.0, build 0a186604

三、 体验docker-compose

docker run命令新启动了一个服务容器之后,对该容器的各种配置修改,都需要去删除该容器,然后修改我们的docker run命令,最后重新启动。每一次的修改,都需要去重复该过程,执行一串非常长而又难以记忆的docker run命令。真的糟糕透了…

当我们把docker-cmpose工具安装之后,一切就变得那么So easy。

3.1、Docker Compose 部署 Tomcat

1) 创建一个名为 docker-compose.yml 的配置文件,配置内容如下

version: '3.1'
services:
  tomcat:
    restart: always
    image: tomcat
    container_name: tomcat
    ports:
      - 8080:8080
    volumes:
      - ./webapps:/usr/local/tomcat/webapps.dist
    environment:
      TZ: Asia/Shanghai
  • version:指定 docker-compose.yml 文件的写法格式。(Compose 文件格式有3个版本,分别为1, 2.x 和 3.x。 目前主流的为 3.x 其支持 docker 1.13.0 及其以上的版本)。
  • services:多个容器集合。
  • tomcat:该容器的服务名,我这里为tomcat的服务,可以自己定义。(可以理解:services 下面的第一级别的 key 既是一个 service 的名称,和其他容器做区分)。
  • restart: 开机启动,失败也会一直重启。
  • image: 指定服务所使用的镜像。
  • container_name:容器名称。
  • ports:宿主机端口:容器端口(宿主机和容器端口的映射)。
  • volumes:数据卷(宿主机和容器目录或者文件映射)。
  • environment:环境变量配置。

2)启动容器
当我们把docker-compose.yml文件编写完毕之后,只需要执行以下命令就能快速启动该服务容器:

[root@spark1 tomcat]# docker-compose up -d

进行浏览器访问:

3)停止容器
就在这里进行彻底解放双手,当我们需要去修改容器某个配置,只需要去执行以下命令去停止移除容器:

[root@spark1 tomcat]# docker-compose down

当容器移除完毕之后!!!

我们就可以对tomcat的docker-compose.yml进行修改,修改成自己想要的配置之后,然后执行docker-compose up -d命令去重新启动容器即可。

3.2、Docker Compose 部署 mysql

1)创建一个名为 docker-compose.yml 的配置文件,配置内容如下:

version: '3.1'
services:
  db:
    # 目前 latest 版本为 MySQL8.x
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    ports:
      - 3306:3306
    volumes:
      - ./data:/var/lib/mysql

2)启动容器

[root@spark1 tomcat]# docker-compose up -d

3)停止容器

[root@spark1 tomcat]# docker-compose down

docker-compose的体验就如此的美好,我们只需要编写好docker-compose.yml文件,就可以非常清楚的管理好自己的容器。

四、 docker-compose编排

有小伙伴,就在问,docker-compose既然是文件编写的,那么可不可以把多个容器,全部写入docker-compose.yml文件里,就不需要针对每个容器,都去编写对应容器文件的繁琐步骤。哈哈哈…问得好,官方已经把这个问题考虑进去了,这也就是docker-compose的精髓所在。

重新对docker-compose进行定义:

Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。由以下两方面组成:

1)project:它主要管理一个项目(project),这个项目是由一组关联的应用容器组成的一个完整业务单元。
2)service:每个应用容器则对应一个服务(service),当然服务可能只包含一个容器(container)实例,也可能包括若干运行相同镜像的容器(container)实例。

核心:就在于“一个文件”和“一条命令”。所谓“一个文件”,是指docker-compose.yml,在这个文件中我们可以进行项目的配置,包括服务的定义。而“一条命令”则指,我们只需要类似docker-compose up这样简单的命令即可管理项目。

极速体验

我们需要两个容器,一个mysql容器,一个redis容器。mysql容器是依赖于redis容器。(就好比,redis先启动完毕之后,也就是redis容器进入了running状态,mysql才能启动,有先后顺序)

1)创建一个名为 docker-compose.yml 的配置文件,配置内容如下

version: '3.1'
services:
  mysql:
    image: mysql:5.7
    restart: always
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    ports:
      - 3306:3306
	depends_on:
      - redis  
    volumes:
      - ./mysqlData:/var/lib/mysql

  redis:
      image: redis:5.0
      container_name: redis
      restart: always
      environment:
        - TZ=Asia/Shanghai
      ports:
        - 6379:6379
      # 映射持久化目录
      volumes:
        - ./redisData:/data
      # requirepass:配置登录密码
      # 开启 appendonly 持久化
      command: "/usr/local/bin/redis-server --requirepass bigdata@2022 --appendonly yes"

2)启动容器

[root@spark1 tomcat]# docker-compose up -d

首先,会先去启动redis容器,当redis容器进入到running之后,才会去启动mysql容器。

我相信,大家在学习docker-compose进行编排多个容器的时候,会遇到先后顺序问题。也许你可能认为官方给的depends_on能解决,但是其实并不是完全的解决该问题,因为depends_on只能保证依赖的容器进入了running状态,而不是ready状态。

我们之后的文章继续分享…

📢博客主页:https://blog.csdn.net/shujuelin
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正

以上是关于Docker| 让Docker炫起来的主要内容,如果未能解决你的问题,请参考以下文章

halo搭建炫酷个人博客快速部署:docker+docker-compose+nginx

Docker | Docker基本原理不懂吗?看完这篇不是问题

Docker| 轻量级Portainer可视化管理容器用着真的很舒服

Docker| 轻量级Portainer可视化管理容器用着真的很舒服

Docker | 带你快速了解Docker

Docker | Docker基本命令,一篇就够。