实践篇主要以各容器的挂载和附加命令为主。
系列目录
LaoCat带你认识容器与镜像(一)
LaoCat带你认识容器与镜像(二【一章】)
LaoCat带你认识容器与镜像(二【二章】)
LaoCat带你认识容器与镜像(二【三章】)
LaoCat带你认识容器与镜像(三【上】)
LaoCat带你认识容器与镜像(三【下】)
LaoCat带你认识容器与镜像(四【上】)
LaoCat带你认识容器与镜像(四【下】)
LaoCat带你认识容器与镜像(番外一【Harbor】)
LaoCat带你认识容器与镜像(实践篇一上)
LaoCat带你认识容器与镜像(实践篇一下)
LaoCat带你认识容器与镜像(实践篇二上)
LaoCat带你认识容器与镜像(实践篇二下)
本章内容
本文实操全部基于Ubuntu 20.04
宿主机 => linux服务器本身
Docker => 20.10.22
在开始本章内容之前,我解答一个问题,有小伙伴问我说,有的容器DockerHub
官网并没有提供任何可参考的文档,那怎么启动对应的容器呢?
我们一般启动容器首先想到的就是通过DockerHub
官网提供的示例文档来进行对各自目录的挂载配置等等,如图。
当然,也会存在没有详细说明的容器,比如昨天的Gitlab
容器,像这种我们其实可以通过容器本身的官网进行相应的查询,如图。
会存在都没有说明文档的容器吗?会,肯定会,像这种容器如何进行对应的目录的挂载就需要对容器镜像技术有一定的了解了,最差也需要对Dockerfile
有一定的理解,拿本章即将安装的容器Mysql
来说,我们也可以通过其Dockerfile
的内容进行对应目录的挂载,如图。
到此,算是解答了如上的问题,实际工作中技术类内容大部分都是如此去寻找文档。
接上章内容,接下来该章围绕Docker
安装并运行之Mysql
、MongoDB
、Redis
、RabbitMQ
、ElasticSearch
,大部分命令来源于DockerHub
官网,我们将本章分为上下俩节,为演示方便这里我们跟前一章一样新建挂载目录/install_ls
,并对对应的软件本身建立目录。
mkdir -p /install_ls/mysql /install_ls/mongoDB /install_ls/redis /install_ls/rabbitMQ /install_ls/elasticSearch
Docker安装并运行Mysql
Mysql
就不用我过多介绍了吧,家喻户晓的产品,Docker
安装Mysql
需要格外注意各自版本的挂载配置文件路径不同,很多小伙伴无视Mysql
的版本,安装版本8
挂载7
的目录,安装版本7
挂载8
的目录,这样就会导致Mysql
挂载配置文件失效,从而造成配置无效的情况,本文内容以Mysql8
为主进行演示。
-
根据说明,创建对应挂载目录,执行命令
mkdir -p /install_ls/mysql/data /install_ls/mysql/config/conf.d
。
-
根据说明,了解对应环境变量,像
Mysql
我们需要设置root
的密码,通过环境变量MYSQL_ROOT_PASSWORD
来设置,可以看到官网说明也写明了是必须设置的环境变量,如图。
-
复制容器内配置文件到挂载文件目录下,新增
Mysql
初始化配置,不执行该操作则在挂载配置目录下无法获取到该容器的配置文件。
执行命令touch my.cnf
,在该文件添加如下内容,保存并退出。# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # The MySQL Server configuration file. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql symbolic-links=0 max_connections = 2000 max_user_connections = 1900 max_connect_errors = 100000 max_allowed_packet = 50M lower_case_table_names=1 skip-name-resolve sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
-
执行创建并启动,命令如下。
docker run -d \ -p 3306:3306 \ -v /install_ls/mysql/data:/var/lib/mysql \ -v /install_ls/mysql/config/conf.d/my.cnf:/etc/mysql/my.cnf \ -e MYSQL_ROOT_PASSWORD=rooT123 \ --name mysql8 \ mysql:8.0.0
-
通过
Navicat
连接刚刚部署的Mysql
容器,然后我们查看一下我们的配置是否生效,通过``,可以看到我们设置的最大连接数已经生效,到这里mysql
容器的部署完成。
※ 生产环境安装mysql
容器注意的点特别多,这是因为数据是无价的,因此我们部署mysql
容器尤其需要对挂载目录进行不定期的冷备(热备更好啦 ~)并且实际业务逐渐上升以后还需要对mysql
容器要使用到的的资源进行再分配,比如内存大小、运存大小、可分配cpu大小等;最后注意的是安全方面,mysql
容器的登录密码要设置复杂,另外还需要对默认端口进行非默认分配(比如mysql
默认是3306
那就不要映射3306
,redis
默认是6379
那就不要用6379
),切记不可偷懒学我文中设置的端口和密码。
Docker安装并运行MongoDB
MongoDB
是一款文档型非关系型数据库,老实讲这东西非常容易被攻击,且MongoDB
身份验证体系非常复杂,悄悄说一句:“上家公司某某司法调解系统就纯MongoDB一天内做完(狗头)”,文档型还是有其优势的,废话不多说,上示例。
-
首先我们通过访问
DockerHub
官网查找到MongoDB
详细文档,确认需要挂载的目录与配置等,如图。
执行命令创建对应该挂载目录,mkdir /install_ls/mongoDB/data
。 -
通过文档我们可以看到
Mongo
类似我们Mysql
容器一样,也可以设置账号密码,但是Mongo
并不需要强制设置账号密码,当然为了拥有安全的生产环境,账号密码一定是需要设置的(你看并不是我一个人吐槽Mongo
的验证用户体系复杂)。
-
创建并启动容器,执行命令如下。
docker run -d \ -p 27021:27017 \ -v /install_ls/mongoDB/data:/data/db \ -e MONGO_INITDB_ROOT_USERNAME=laocat \ -e MONGO_INITDB_ROOT_PASSWORD=laocat \ --name mongo6 \ mongo:6.0
-
通过
Navicat
进行访问,可以看到通过映射的IP+端口与账号密码成功连接我们刚刚的mongo
容器。
※ 同理,挂载目录需要格外注意备份,另因其Mongo
用户验证体系的复杂,生产使用,一定要进行相应的了解,密码越复杂越好。
Docker安装并运行Redis
作为缓存界大名鼎鼎的Redis
,在其不断的版本更新下,逐步向着事务、多线程下靠近,以其读取速度极快的优势, 成为了互联网公司业务开发必不可少的组件之一,这里我们Redis
容器版本以7.0
为主进行演示。
-
首先我们通过
DockerHub
官网,去了解其配置文件与挂载目录,通过了解我们需要对数据目录与配置文件进行挂载,执行命令新建该挂载目录,mkdir -p /install_ls/redis/data /install_ls/redis/conf
。
然后在conf
目录下创建Redis
配置文件redis.conf
,touch redis.conf
,填入如下配置。#bind 127.0.0.1 protected-mode no #表示开始持久化 appendonly yes #表示密码 requirepass 自行填写密码
-
一切准备好后,我们执行命令创建并启动
Redis
容器。docker run -d \ -p 6377:6379 \ -v /install_ls/redis/data:/data \ -v /install_ls/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \ --name redis7 \ redis:7.0 \ redis-server /usr/local/etc/redis/redis.conf
-
我们通过
RDM
(Redis GUI 管理工具),连接我们刚刚部署的Redis
容器,可以看到连接成功。
※ 对于Redis
容器,需要注意合理分配内存空间,当然也需要对挂载目录进行备份,最后需要注意的是不要像我文中一样设置一个特别简单的密码。
写在后边
系列文章读到这里,一定有细心的小伙伴已经总结出如何创建和启动一个容器的规律了,首先通过各种途径找到需要对应挂载的数据目录并在宿主机创建对应目录,有需要配置文件的在宿主机对应挂载配置目录下新增配置文件,像存储数据一类的容器,都会有账号密码的环境变量,容器需要映射宿主机端口,可以通过其
Dockerfile
来获取,掌握这几点规律,其实大部分的容器已经难不倒你了,小伙伴们可以提前尝试通过我上述的步骤,去提前尝试部署一下下一节内容中的容器RabbitMQ
与ElasticSearch
。
☆ 参考文献:
无
◎ 文中所用到的资源链接:
【Docker Hub Mysql】
https://hub.docker.com/_/mysql
【Docker Hub MongoDB】
https://hub.docker.com/_/mongo
【Docker Hub Redis】
https://hub.docker.com/_/redis