使用Docker
简介
Docker是一个开源的应用容器引擎
Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;
运行中的这个镜像称为容器,容器启动是非常快速的
核心概念
- Docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统上的)
- Docker客户端(Client):连接docker主机进行操作
- Docker仓库(Registry):用来保存各种打包好的软件镜像
- Docker镜像(Images):软件打包好的镜像,放在docker仓库中
- Docker容器(Container):镜像启动后的实例成为一个容器
使用Docker的步骤
- 安装Docker
- 去Docker仓库找到相应软件对应的镜像
- 使用Docker运行这个镜像,这个镜像就会生成一个Docker容器
- 对容器的启动停止就是对软件的启动停止
安装Docker
(1) 检查linux内核版本,docker要求centenos内核版本高于3.0
(2) 安装docker:yum install docker
(3) 输入 Y 确认安装
(4) 启动docker:systemctl start docker
(5) 查看docker版本:docker -v
(6) 开机自动启动docker:systemctl enable docker
(7) 停止docker:systemctl stop docker
Docker常用操作
镜像操作
操作 |
命令 |
说明 |
检索 |
docker search 关键字 eg:docker search redis |
我们经常去docker hub上检索镜像的详细信息,如镜像的TAG。 |
拉取 |
docker pull 镜像名:tag |
:tag是可选的,tag表示标签,多为软件的版本,默认是latest |
列表 |
docker images |
查看所有本地镜像 |
删除 |
docker rmi image-id |
删除指定的本地镜像 |
检索都是去这个网站检索的:https://hub.docker.com/
例:
Docker操作mysql镜像
Docker search mysql --- 回车后回去仓库搜索跟mysql相关的镜像
搜索到镜像后将镜像拉取,镜像名在上面的NAME列可以找到:docker pull NAME
使用docker images可以查看本地所有的docker镜像,最重要的是可以查看到镜像的id,知道镜像的id后就可以对镜像进行删除了,通过docker rmi id即可删除指定的镜像
容器操作
软件镜像 ----> 运行镜像 ----> 产生一个容器(代表正在运行的软件)
步骤:
1、搜索镜像:docker search tomcat
2、拉取镜像:docker pull tomcat
3、根据镜像启动容器:docker run --name mytomcat(自定义) -d(表示后台运行) tomcat:latest(标签)
4、查看已经运行的容器:docker ps
5、查看所有的容器(运行中的跟停止的):docker ps -a
6、停止正在运行的容器:docker stop 容器id/容器名
7、启动容器:docker start 容器id
8、删除容器:docker rm 容器id
9、启动一个做了端口映射的容器:docker run -d -p 8888(虚拟机端口):8080(tomcat端口) 容器名
(1) -d:代表后台运行
(2) -p:将主机端口映射到容器端口
10、查看容器的日志:docker logs 容器id/容器名
更多命令参看
https://docs.docker.com/engine/reference/commandline/docker/
Docker安装mysql
pull好镜像后直接启动即可:
docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
几个高级操作:
docker run --name mysql03 -v /conf/mysql:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag 把主机的/conf/mysql文件夹挂载到 mysqldocker容器的/etc/mysql/conf.d文件夹里面 改mysql的配置文件就只需要把mysql配置文件放在自定义的文件夹下(/conf/mysql) docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci 指定mysql的一些配置参数
Docker安装redis
使用docker镜像加速下载
sudo docker pull registry.docker-cn.com/library/redis
启动容器:
sudo docker run -d // 后台启动 -p 6379:6379 // 映射端口,将虚拟机的6379端口映射容器的6379端口 --name Name // 容器名称 镜像名/镜像id
例:
sudo docker run -d -p 6379:6379 --name myredis registry.docker-cn.com/library/redis
Docker安装RabbitMQ
使用镜像加速下载
sudo docker pull registry.docker-cn.com/library/rabbitmq:3.6-management
启动容器:
rabbitMQ需要映射的端口有很多:有5671 5672 4369 15671 15672 25672
sudo docker run -di // 后台启动 -p 5672:5672 // rabbitmq通信端口 -p 15672:15672 // 访问web页面的端口 -p 5671:5671 -p 4369:4369 -p 15671:15671 -p 25672:25672 --name=myrabbitmq 镜像名/镜像id
例:
docker run -di --name=tensquare_rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 74e8de9467b9
Docker安装Elasticsearch
使用镜像加速下载
sudo docker pull registry.docker-cn.com/library/elasticsearch
启动容器:
sudo docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" // elasticsearch会占用2G的内存,这里制定了初始内存和最大内存都是256M -d // 后台运行 -p 9200:9200 // elasticsearch的端口 -p 9300:9300 // elasticsearch在分布式的情况下各个节点之间的通信端口 --name ES01 镜像名/ID
例:
sudo docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name ES01 362c5cb1669b
解决9300端口不能使用的问题
在代码中使用elasticsearch需要使用9300端口,需要进行配置
首先进入容器
docker exec ‐it tensquare_elasticsearch /bin/bash
此时,我们看到elasticsearch所在的目录为/usr/share/elasticsearch ,进入config看到了
配置文件
elasticsearch.yml
我们通过vi命令编辑此文件,尴尬的是容器并没有vi命令 ,咋办?我们需要以文件挂载的
方式创建容器才行,这样我们就可以通过修改宿主机中的某个文件来实现对容器内配置
文件的修改
拷贝配置文件到宿主机
首先退出容器,然后执行命令:
docker cp elasticsearch_name:/usr/share/elasticsearch/config/elasticsearch.yml /usr/share/elasticsearch.yml
停止和删除原来创建的容器
docker stop tensquare_es
docker rm tensquare_es
重新执行创建容器命令
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name=tensquare_es -v /usr/share/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml 5acf0e8da90b
修改elasticsearch.yml
修改/usr/share/elasticsearch.yml 将 transport.host: 0.0.0.0 前的#去掉后保
存文件退出。其作用是允许任何ip地址访问elasticsearch .开发测试阶段可以这么做,生
产环境下指定具体的IP
重启启动
docker restart elasticsearch_name
重启后发现重启启动失败了,这时什么原因呢?这与我们刚才修改的配置有关,因为
elasticsearch在启动的时候会进行一些检查,比如最多打开的文件的个数以及虚拟内存
区域数量等等,如果你放开了此配置,意味着需要打开更多的文件以及虚拟内存,所以
我们还需要系统调优。
系统调优
我们一共需要修改两处
修改/etc/security/limits.conf ,追加内容
* soft nofile 65536 * hard nofile 65536
nofile是单个进程允许打开的最大文件个数 soft nofile 是软限制 hard nofile是硬限制
修改/etc/sysctl.conf,追加内容
vm.max_map_count=655360
限制一个进程可以拥有的VMA(虚拟内存区域)的数量
执行下面命令 修改内核参数马上生效
sysctl ‐p
重新启动虚拟机,再次启动容器,发现已经可以启动并远程访问
IK分词器安装
(1)首先将ik分词器的目录上传到docker所在的虚拟机
(2)在宿主机中将ik文件夹拷贝到容器内 elasticsearch_name:/usr/share/elasticsearch/plugins 目录下
docker cp ik tensquare_elasticsearch:/usr/share/elasticsearch/plugins/
(3)重新启动,即可加载IK分词器
docker restart elasticsearch_name
Docker安装zookeeper
使用镜像加速下载
sudo docker pull registry.docker-cn.com/library/zookeeper
启动容器:
sudo docker run --name zk1 // 容器名 -p 2181:2181 // 映射与客户及交互的端口 --restart always -d // 后台运行 f0ab213a8e74 // 镜像名/ID
例:
sudo docker run --name zk1 -p 2181:2181 --restart always -d f0ab213a8e74