Docker入门到精通《安装镜像》

650 阅读3分钟

一、Docker 介绍

从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用。Docker CE 是免费的 Docker 产品的新名称,Docker CE 包含了完整的 Docker 平台,非常适合开发人员和运维团队构建容器 APP。

二、安装 Docker

CentOS 7更换yum源为阿里云镜像源并更新系统

// step 0: 备份源
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.back

// step 1: 下载 yum 源
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

// step 2: 清理缓存
sudo yum clean all

// step 3: 生成新的缓存
sudo yum makecache

// step 4: 生成新的缓存
sudo yum update

CentOS 7 安装Docker(使用 yum 进行安装)

// step 0: 如果有旧版本Docker,先移除旧版本
$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

// Step 1: 安装必要的一些系统工具,安装yum-utils是为方便添加yum源使用的,device-mapper-persistent-data和lvm2是储存设备映射(devicemapper)必须的两个软件包。
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

// Step 2: 添加软件源信息,由于默认是国外的yum源基本不可用,我们这边修改为阿里源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

// PS:如果出现如下错误信息
//Loaded plugins: fastestmirror
//adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
//grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to ///etc/yum.repos.d/docker-ce.repo
//Could not fetch/save url https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to file /etc/yum.repos.d/docker-ce.repo: [Errno 14] curl#60 - "Peer's Certificate issuer is not recognized."
// 编辑 /etc/yum.conf 文件, 在 [main] 下面添加 sslverify=0 参数
//vi /etc/yum.conf
// 配置如下----------------------
//[main]
//sslverify=0
// -----------------------------

// Step 3: 更新Docker-CE
sudo yum makecache fast

// Step 4: 安装Docker-CE
sudo yum -y install docker-ce

// Step 5: 启动Docker服务
sudo systemctl start docker

// Step 6: 设置Docker服务开机启动
sudo systemctl enable docker

// Step 7: 配置镜像加速地址:进入`https://cr.console.aliyun.com/cn-chengdu/instances/mirrors`网址根据教程配置阿里云加速。

// Step 8: 校验镜像加速地址是否配置成功
cat /etc/docker/daemon.json
//{
//  "registry-mirrors": ["https://5tm8ezf6.mirror.aliyuncs.com"]
//}

// Step 9: 校验Docker是够安装成功
//docker version
//Client: Docker Engine - Community
// Version:           26.1.0
// API version:       1.45
// Go version:        go1.21.9
// Git commit:        9714adc
// Built:             Mon Apr 22 17:09:57 2024
// OS/Arch:           linux/amd64
// Context:           default
//
//Server: Docker Engine - Community
// Engine:
//  Version:          26.1.0
//  API version:      1.45 (minimum version 1.24)
//  Go version:       go1.21.9
//  Git commit:       c8af8eb
//  Built:            Mon Apr 22 17:08:46 2024
//  OS/Arch:          linux/amd64
//  Experimental:     false
// containerd:
//  Version:          1.6.31
//  GitCommit:        e377cd56a71523140ca6ae87e30244719194a521
// runc:
//  Version:          1.1.12
//  GitCommit:        v1.1.12-0-g51d5e94
// docker-init:
//  Version:          0.19.0
//  GitCommit:        de40ad0
  
// 注意:
// 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
vim /etc/yum.repos.d/docker-ee.repo
// 将[docker-ce-test]下方的enabled=0修改为enabled=1
//
// 安装指定版本的Docker-CE:
//
// Step 1: 查找Docker-CE的版本:
yum list docker-ce.x86_64 --showduplicates | sort -r
//   Loading mirror speeds from cached hostfile
//   Loaded plugins: branch, fastestmirror, langpacks
//   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
//   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
//   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
//   Available Packages
//
// Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
sudo yum -y install docker-ce-[VERSION]


// 查看Docker安装目录
which docker
// 执行结果
/var/lib/docker

// 进入Docker目录
cd /var/lib/docker

// 查看Docker目录
ll
// 执行结果:
//total 44
//drwx--x--x 4 root root 4096 Apr 23 11:06 buildkit
//drwx--x--- 2 root root 4096 Apr 23 11:06 containers
//-rw------- 1 root root   36 Apr 23 11:06 engine-id
//drwx------ 3 root root 4096 Apr 23 11:06 image
//drwxr-x--- 3 root root 4096 Apr 23 11:06 network
//drwx--x--- 3 root root 4096 Apr 23 11:17 overlay2
//drwx------ 4 root root 4096 Apr 23 11:06 plugins
//drwx------ 2 root root 4096 Apr 23 11:17 runtimes
//drwx------ 2 root root 4096 Apr 23 11:06 swarm
//drwx------ 2 root root 4096 Apr 23 11:17 tmp
//drwx-----x 2 root root 4096 Apr 23 11:17 volumes

vim /etc/docker/daemon.json

# 目前可以拉取所有镜像  2025/12/4
{
       "registry-mirrors": [
          "https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
          "https://docker.m.daocloud.io",
          "https://hub-mirror.c.163.com",
          "https://mirror.baidubce.com",
          "https://your_preferred_mirror",
          "https://dockerhub.icu",
          "https://docker.registry.cyou",
          "https://docker-cf.registry.cyou",
          "https://dockercf.jsdelivr.fyi",
          "https://docker.jsdelivr.fyi",
          "https://dockertest.jsdelivr.fyi",
          "https://mirror.aliyuncs.com",
          "https://dockerproxy.com",
          "https://mirror.baidubce.com",
          "https://docker.m.daocloud.io",
          "https://docker.nju.edu.cn",
          "https://docker.mirrors.sjtug.sjtu.edu.cn",
          "https://docker.mirrors.ustc.edu.cn",
          "https://mirror.iscas.ac.cn",
          "https://docker.rainbond.cc"
          ]
      }

三、Docker安装使用mysql

// 先让服务器开放3306端口

// 搜索镜像
docker search mysql

// 拉去镜像
docker pull mysql

//查看已经下载好的镜像
docker images

//启动容器
docker run -p 3306:3306 --name sysmysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

//docker run -p 3306:3306 --name symysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v //$PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:latest
//-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
//-v -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 ///etc/mysql/my.cnf。
//-v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。
//-v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。
//-e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码,密码为root。

//设置自启动
docker update --restart=always 容器id

//docker进入到Mysql容器
docker exec -it 容器id /bin/bash

//进入后就和在linux的操作一致了
mysql -u root -p

四、Docker安装使用 ElasticSearch、Kibana、IK

4.1 安装ElasticSearch

 // Step 1:高版本安装`Kibana`的时候需要和`ElasticSearch`在同一网段内,
 // 所以采用`docker`安装首先要确认网段,为了方便操作,我们直接创建一个网络,创建脚本如下:
 docker network create itmentu-net

// Step 2:Docker 安装`ElasticSearch`脚本
docker run -d \
	--name elasticsearch \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "discovery.type=single-node" \
    -v es-data:/usr/share/elasticsearch/data \
    -v es-plugins:/usr/share/elasticsearch/plugins \
    -v es-config:/usr/share/elasticsearch/config \
    --privileged \
    --network itmentu-net \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.12.1
//命令说明:
//-   `-e "cluster.name=es-docker-cluster"`:设置集群名称
//-   `-e "http.host=0.0.0.0"`:监听的地址,可以外网访问
//-   `-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"`:内存大小
//-   `-e "discovery.type=single-node"`:非集群模式
//-   `-v es-data:/usr/share/elasticsearch/data`:挂载逻辑卷,绑定`elasticsearch`的数据目录
//-   `-v es-logs:/usr/share/elasticsearch/logs`:挂载逻辑卷,绑定`elasticsearch`的日志目录
//-   `-v es-plugins:/usr/share/elasticsearch/plugins`:挂载逻辑卷,绑定`elasticsearch`的插件目录
//-   `--privileged`:授予逻辑卷访问权
//-   `--network itmentu-net` :加入一个名为`itmentu-net`的网络中
//-   `-p 9200:9200`:向外暴露端口映射
//-   `-p 9300:9300`:该节点端口映射配置,集群模式下其它节点可以根据该端口进行访问该节点

//  Step 2:安装完成后访问`http://47.109.156.181:9200/`即可看到`elasticsearch`的响应结果:
//{
    //"name": "faea4773fc6b",
    //"cluster_name": "docker-cluster",
    //"cluster_uuid": "2QUlgKGSSFSs9udFj0lvRQ",
    //"version": {
        //"number": "7.12.1",
        //"build_flavor": "default",
        //"build_type": "docker",
        //"build_hash": "3186837139b9c6b6d23c3200870651f10d3343b7",
        //"build_date": "2021-04-20T20:56:39.040728659Z",
        //"build_snapshot": false,
        //"lucene_version": "8.8.0",
        //"minimum_wire_compatibility_version": "6.8.0",
        //"minimum_index_compatibility_version": "6.0.0-beta1"
    //},
    //"tagline": "You Know, for Search"
//}

//注意:访问前,打开服务器的端口限制9200 或者 9300。

4.2 安装Kibana

Kibana 是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化,并让您在 Elastic Stack 中进行导航。您可以进行各种操作,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。

// Step 1: 执行命令需要注意`Kibana`操作的`ElasticSearch`地址,因为`Kibana`是需要连`ElasticSearch`进行操作的,命令如下:
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://47.109.156.181:9200 \
--network itmentu-net \
-p 5601:5601  \
kibana:7.12.1
//命令说明:
//-   `--network itmentu-net` :加入一个名为`itmentu-net`的网络中,与`elasticsearch`在同一个网络中
//-   `-e ELASTICSEARCH_HOSTS=http://192.168.211.130:9200"`:设置`elasticsearch`的地址,因为`kibana`已经与`elasticsearch`在一个网络,因此可以用容器名直接访问`elasticsearch`,也可以写IP地址实现访问。
//-   `-p 5601:5601`:端口映射配置

// Step 2: 下载安装完成,如果想实时知道服务安装运行的状态,可以通过查看日志实现,查看日志如下:
docker logs -f kibana

// Step 3: 访问`http://47.109.156.181:5601`即可访问`Kibana`页面。


# `Kibana`控制台默认英文面板,但`Kibana`是支持中文配置,所以我们可以把`Kibana`配置成中文版,便于我们操作。

# Step 1: 进入容器
docker exec -it kibana /bin/bash

# Step 2: 进入配置文件目录
cd /usr/share/kibana/config

# Step 3:  编辑文件kibana.yml
vi kibana.yml

# Step 4: 点击i,进入insert模式, 在最后一行添加如下配置
i18n.locale: zh-CN

# Step 5: 点击Esc,输入:wq 保存并推出kibana.yml

# Step 6: 退出kibana容器
exit

# Step 7:  并重启容器
docker restart kibana

# 访问`http://47.109.156.181:5601`即可访问`Kibana`中文页面。

4.3安装IK分词器插件

IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了多个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。IK Analyzer则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。

ElasticSearch内核其实就是基于Lucene,所以我们可以直接在ElasticSearch中集成IK分词器,IK分词器集成ElasticSearch下载地址:github.com/medcl/elast…

4.3.1、在线安装

# Step 1: 进入容器内部
docker exec -it elasticsearch /bin/bash

# Step 2: 在线下载并安装
./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip

# Step 3: 退出
exit

# Step 4:重启容器
docker restart elasticsearch

4.3.2、离线安装

Step 1: 查看数据卷目录

安装插件需要知道elasticsearchplugins目录位置,而我们用了数据卷挂载,因此需要查看elasticsearch的数据卷目录,通过下面命令查看:

docker volume inspect es-plugins

显示结果:说明plugins目录被挂载到了:/var/lib/docker/volumes/es-plugins/_data这个目录中。

[
    {
        "CreatedAt": "2022-05-06T10:06:34+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/es-plugins/_data",
        "Name": "es-plugins",
        "Options": null,
        "Scope": "local"
    }
]

Step 2: 下载安装包elasticsearch-analysis-ik-7.12.1.zip后,并解压,目录如下 image.png

Step 3: 先将解压后的elasticsearch-analysis-ik-7.12.1拷贝云服务器中。 image.png

// Step1: 为了方便配置,我们将elasticsearch-analysis-ik-7.12.1改成ik文件夹
mv elasticsearch-analysis-ik-7.12.1 ik

// Step2: 将ik文件夹拷贝到elasticsearch容器的`plugins`目录中
docker cp ik elasticsearch:/usr/share/elasticsearch/plugins/_data

// Step3: 重启容器
docker restart elasticsearch

// 查看es日志 
docker logs -f es

4.4、测试IK分词器

IK分词器包含两种模式:

  • ik_smart:最少切分
  • ik_max_word:最细切分

kibanaDev tools中输入以下代码:

analyzer 就是选择分词器模式

GET /_analyze
{
  "analyzer": "ik_max_word",
  "text": "黑马程序员学习java太棒了"
}

结果:

{
  "tokens" : [
    {
      "token" : "黑马",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "程序员",
      "start_offset" : 2,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "程序",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "员",
      "start_offset" : 4,
      "end_offset" : 5,
      "type" : "CN_CHAR",
      "position" : 3
    },
    {
      "token" : "学习",
      "start_offset" : 5,
      "end_offset" : 7,
      "type" : "CN_WORD",
      "position" : 4
    },
    {
      "token" : "java",
      "start_offset" : 7,
      "end_offset" : 11,
      "type" : "ENGLISH",
      "position" : 5
    },
    {
      "token" : "太棒了",
      "start_offset" : 11,
      "end_offset" : 14,
      "type" : "CN_WORD",
      "position" : 6
    },
    {
      "token" : "太棒",
      "start_offset" : 11,
      "end_offset" : 13,
      "type" : "CN_WORD",
      "position" : 7
    },
    {
      "token" : "了",
      "start_offset" : 13,
      "end_offset" : 14,
      "type" : "CN_CHAR",
      "position" : 8
    }
  ]
}
4.4.1、扩展词词典

随着互联网的发展,造词运动也越发的频繁。出现了很多新的词语,在原有的词汇列表中并不存在。比如:“奥力给”,“白嫖” 等。所以我们的词汇也需要不断的更新,IK分词器提供了扩展词汇的功能。

1、打开IK分词器config目录: image

2、在IK Analyzer.cfg.xml配置文件内容添加:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 *** 添加扩展词典-->
        <entry key="ext_dict">ext.dic</entry>
</properties>

3、新建一个 ext.dic,可以参考config目录下复制一个配置文件进行修改

白嫖
奥力给

4、重启elasticsearch

docker restart es

# 查看 日志
docker logs -f elasticsearch

image 日志中已经成功加载ext.dic配置文件

5、测试效果:

GET /_analyze
{
  "analyzer": "ik_max_word",
  "text": "传智播客Java就业超过90%,奥力给!"
}

注意当前文件的编码必须是 UTF-8 格式,严禁使用Windows记事本编辑

4.4.2、停用词词典

在互联网项目中,在网络间传输的速度很快,所以很多语言是不允许在网络上传递的,如:关于宗教、政治等敏感词语,那么我们在搜索时也应该忽略当前词汇。IK分词器也提供了强大的停用词功能,让我们在索引时就直接忽略当前的停用词汇表中的内容。

1、IK Analyzer.cfg.xml配置文件内容添加:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典-->
        <entry key="ext_dict">ext.dic</entry>
         <!--用户可以在这里配置自己的扩展停止词字典  *** 添加停用词词典-->
        <entry key="ext_stopwords">stopword.dic</entry>
</properties>

2、在 stopword.dic 添加停用词

大帅逼

4、重启elasticsearch

# 重启服务
docker restart es
docker restart kibana

# 查看 日志
docker logs -f elasticsearch

日志中已经成功加载stopword.dic配置文件

5、测试效果:

GET /_analyze
{
  "analyzer": "ik_max_word",
  "text": "我是真的会谢Java就业率超过95%,大帅逼都点赞白嫖,奥力给!"
}

注意当前文件的编码必须是 UTF-8 格式,严禁使用Windows记事本编辑。