Linux(CentOS)下安裝docker
Linux(CentOS)安裝Docker
檢視當前核心版本
[docker@localhost ~]$ uname -r
確保yum包更新到最新
[docker@localhost ~]$ sudo yum update
解除安裝舊版本的docker
[docker@localhost ~]$ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
安裝需要的軟體包
# yum-util提供yum-config-manager功能
[docker@localhost ~]$ sudo yum install -y yum-utils
設定yum源
[docker@localhost ~]$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安裝docker
[docker@localhost ~]$ sudo yum install docker-ce docker-ce-cli containerd.io
啟動docker
[docker@localhost ~]$ sudo systemctl start docker
設定阿里雲映象加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hiq0snpp.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
加入開機啟動
[docker@localhost ~]$ sudo systemctl enable docker # 驗證是否安裝成功 [docker@localhost ~]$ docker version
docker安裝MySQL
下載MySQL映象
# 下載MySQL5.7映象
[docker@localhost ~]$ docker pull mysql:5.7
建立MySQL例項並啟動
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
引數說明
-p 3306:3306 將容器的3306埠對映到主機的3306埠
-v /mydata/mysql/conf:/etc/mysql 將配置檔案掛載到主機
-v /mydata/mysql/log:/var/log/mysql 將日誌檔案掛載到主機
-v /mydata/mysql/data:/var/lib/mysql 將資料檔案掛載到主機
-e MYSQL_ROOT_PASSWORD=root 初始化root使用者密碼
-d mysql:5.7 以後臺方式執行
進入MySQL容器
docker exec -it mysql /bin/bash
# 檢視mysql位置
root@c34eeaabe727:/# whereis mysql
mysql: /usr/bin/mysql /usr/lib/mysql /etc/mysql /usr/share/mysql
更改MySQL配置
# 因為上面配置了掛載mysql配置檔案,所以在外部配置檔案目錄更改配置就行 /mydata/mysql/conf
root@c34eeaabe727:/# cd /mydata/mysql/conf
# 修改my.cnf檔案
root@c34eeaabe727:/# vi /mydata/mysql/conf/my.cnf
my.cnf配置檔案
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
重啟MySQL服務
[root@localhost conf]# docker restart mysql
# 容器跟隨docker啟動
[root@localhost conf]# docker update mysql --restart=always
容器跟隨docker啟動
[root@localhost conf]# docker update mysql --restart=always
docker安裝Redis
下載Redis映象
[docker@localhost ~]$ docker pull redis
建立Redis例項並啟動
注意:之後資料夾掛載時會將redis.conf預設成資料夾,所以這個檔案要先新建出來
mkdir -p /mydata/redis/conf
# 往redis.conf中新增 appendonly yes代表redis持久化
touch /mydata/redis/conf/redis.conf
啟動
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
進入Redis容器
docker exec -it redis redis-cli # 開啟redis客戶端
docker安裝elasticsearch
下載elasticsearch映象
docker pull elasticsearch:7.4.2
建立elasticsearch例項並啟動
注意:-e ES_JAVA_OPTS
測試環境下,設定ES的初始記憶體和最大記憶體,否則導致過大啟動不了ES
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
# 執行elasticsearch
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2
docker啟動elasticsearch失敗,使用
docker logs elasticsearch
命令檢視啟動日誌,發現報錯如下:
原因是因為外部掛載的data目錄許可權不足,更改elasticsearch目錄下所有目錄的許可權
chmod -R 777 /mydata/elasticsearch/
重新啟動elasticsearch
docker start elasticsearch
docker logs elasticsearch
瀏覽器訪問elasticsearch9200埠,出現如下資訊就好了。
elasticsearch常用命令
檢視節點資訊
請求路徑:http://192.168.1.199:9200/_cat/nodes
檢視健康狀況
請求路徑:http://192.168.1.199:9200/_cat/health
檢視主節點資訊
請求路徑:http://192.168.1.199:9200/_cat/master
檢視索引資訊
請求方式:get
請求路徑:http://192.168.1.199:9200/_cat/indices
儲存資料(文件)
第一種方式:(必須帶ID)
請求方式:put
請求路徑:http://192.168.1.199:9200/customer/external/1
引數:
{
"name": "John Doe"
}
響應:
{
"_index": "customer",# 索引
"_type": "external",# 型別
"_id": "1",# id
"_version": 1,# 版本
"result": "created",# created代表新增,第二次請求的時候變成updated
"_shards": {# 分片資訊
"total": 2,
"successful": 1,
"failed": 0
},
# 下面可做樂觀鎖
"_seq_no": 0,# 併發控制欄位,每次更新就會+1
"_primary_term": 1# 同上,主分片重新分配,如重啟機會變化
}
索引一條資料到指定索引(customer)下指定型別(external),唯一ID為1,用mysql來說就是插入一條資料到customer庫的external表下
注意:當傳送多次同一請求的時候會變成更新操作。
第二種方式:(可帶可不帶ID)
請求方式:post
請求路徑:http://192.168.1.199:9200/customer/external/
注意:這個請求可帶可不帶ID,帶ID第一次會新增資料,第二次會變成更新資料。
不帶ID代表新增
{
"_index": "customer",
"_type": "external",
"_id": "QTUFC3cB3T_vFaLFpHJW",# 自動生成ID
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 1,
"_primary_term": 1
}
查詢資料(文件)
請求方式:get
請求路徑:http://192.168.1.199:9200/customer/external/1
{
"_index": "customer",
"_type": "external",
"_id": "1",
"_version": 1,
"_seq_no": 0,
"_primary_term": 1,
"found": true,
"_source": {
"name": "John Doe"
}
}
更新資料(文件)
請求方式:post
請求路徑:http://192.168.1.199:9200/customer/external/1/_update
引數:
{
"doc": {
"name": "John"
}
}
響應:
{
"_index": "customer",
"_type": "external",
"_id": "1",
"_version": 3,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 5,
"_primary_term": 1
}
再次請求的響應:
{
"_index": "customer",
"_type": "external",
"_id": "1",
"_version": 3,
"result": "noop",# es對比引數完全一致時提示未做任何更改,版本號也不會增加
"_shards": {
"total": 0,
"successful": 0,
"failed": 0
},
"_seq_no": 5,
"_primary_term": 1
}
這種更新會對比資料
刪除資料(文件)
請求方式:delete
請求路徑:http://192.168.1.199:9200/customer/external/1
響應:
{
"_index": "customer",
"_type": "external",
"_id": "1",
"_version": 4,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 6,
"_primary_term": 1
}
注意:不支援刪除型別,可刪除索引和文件
批量新增
支援以下方式做批量資料處理
- index
- create
- delete
- update
docker安裝kibana
下載kibana映象
docker pull kibana:7.4.2
建立kibana例項並啟動
docker run --name kibana \
-e ELASTICSEARCH_HOSTS=http://192.168.1.199:9200 \
-p 5601:5601 \
-d kibana:7.4.2
docker安裝執行nginx
# 直接執行Nginx會自動下載
docker run -p 80:80 --name nginx -d nginx:1.10
# 將容器內的配置檔案拷貝到當前目錄
docker container cp nginx:/etc/nginx .
# 拷貝之後停止Nginx容器並移除
docker stop nginx
docker rm nginx
# 將/mydata/nginx更改為/mydata/conf
mv nginx conf
# 重新建立nginx目錄並將conf移動到nginx目錄下
mkdir nginx
mv conf nginx/
# 建立新的nginx
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10