使用Docker

简介

Docker是一个开源的应用容器引擎

Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;

运行中的这个镜像称为容器,容器启动是非常快速的

核心概念

  • Docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统上的)
  • Docker客户端(Client):连接docker主机进行操作
  • Docker仓库(Registry):用来保存各种打包好的软件镜像
  • Docker镜像(Images):软件打包好的镜像,放在docker仓库中
  • Docker容器(Container):镜像启动后的实例成为一个容器

使用Docker的步骤

  1. 安装Docker
  2. Docker仓库找到相应软件对应的镜像
  3. 使用Docker运行这个镜像,这个镜像就会生成一个Docker容器
  4. 对容器的启动停止就是对软件的启动停止

安装Docker

(1) 检查linux内核版本,docker要求centenos内核版本高于3.0

(2) 安装dockeryum install docker

(3) 输入 Y 确认安装

(4) 启动dockersystemctl start docker

(5) 查看docker版本:docker -v

(6) 开机自动启动dockersystemctl enable docker

(7) 停止dockersystemctl 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

 

posted @ 2018-09-11 16:38  Jin同学  阅读(317)  评论(0编辑  收藏  举报