一炕置、docker是什么?
1.Docker的三個基本概念:
Image(鏡像)
Container(容器)
Repository(倉庫)
Docker的思想來自于集裝箱欧芽,集裝箱解決了什么問題?
在一艘大船上葛圃,可以把貨物規(guī)整的擺放起來千扔。并且各種各樣的貨物被集裝箱標準化了憎妙,集裝箱和集裝箱之間不會互相影響。那么我就不需要專門運送水果的船和專門運送化學(xué)品的船了曲楚。只要這些貨物在集裝箱里封裝的好好的厘唾,那我就可以用一艘大船把他們都運走。docker就是類似的理念×埽現(xiàn)在都流行云計算了抚垃,云計算就好比大貨輪。docker就是集裝箱.
還不懂得話,在這么理解,docker你理解為快遞車.
那么快遞車是不是有一個個包裹,包裹可以理解為一個鏡像,鏡像可以理解為一個Java類趟大,而容器可以理解為Java類的實例鹤树。
類只有一個,但可以new出千千萬萬個實例對象逊朽。所以罕伯,鏡像只是一個可以生成容器的東西,而容器才能讓程序運行起來叽讳。
倉庫的話,比如說,都應(yīng)該用過git吧,完全可以理解為git,上傳拉取操作
那么docker有什么好處呢?
最簡單的一個例子,比如說,你在剛開始的一臺服務(wù)器部署項目,那么部署項目一定要配置mysql等環(huán)境是吧
那么現(xiàn)在你要吧這個項目遷移到另一臺服務(wù)器上,又要重寫在另一臺服務(wù)器上重寫配置mysql等環(huán)境.可能會出現(xiàn)版本錯亂等錯誤,很麻煩
那么現(xiàn)在第一次部署項目的時候,把項目等環(huán)境直接放進docker里面,下次你要遷移項目到另一臺服務(wù)器上,自己把docker鏡像上傳到docker倉庫上,然后再另一臺服務(wù)器拉取就直接O了,這只是好處之一
二追他、Linux安裝docker
安裝docker
卸載舊版本
sudo yum remove docker \
? ? ? ? ? ? ? ? ? docker-client \
? ? ? ? ? ? ? ? ? docker-client-latest \
? ? ? ? ? ? ? ? ? docker-common \
? ? ? ? ? ? ? ? ? docker-latest \
? ? ? ? ? ? ? ? ? docker-latest-logrotate \
? ? ? ? ? ? ? ? ? docker-logrotate \
? ? ? ? ? ? ? ? ? docker-engine
安裝docker需要依賴的包
sudo yum install -y yum-utils
告訴Linux,Docker安裝地址
sudo yum-config-manager \
? ? --add-repo \
? ? https://download.docker.com/linux/centos/docker-ce.repo
安裝Docker引擎岛蚤,客戶端邑狸,容器
sudo yum install docker-ce docker-ce-cli containerd.io
啟動
sudo systemctl start docker
設(shè)置開機自啟
systemctl enable docker
配置阿里云鏡像加速(CnetOS)
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
執(zhí)行命令重啟
創(chuàng)建文件夾
sudo mkdir -p /etc/docker
配置鏡像加速器地址
sudo tee /etc/docker/daemon.json <<-'EOF'
{
? "registry-mirrors": ["https://這里需要登陸阿里云.com"]
}
EOF
重啟docker的后臺線程
sudo systemctl daemon-reload
重啟docker的服務(wù)
sudo systemctl restart docker
docker安裝mysq
安裝鏡像
docker pull mysql:5.7
查看docker中鏡像
docker images
創(chuàng)建實例并啟動
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
創(chuàng)建mysql配置文件
vi /mydata/mysql/conf/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容器
docker restart mysql
進入mysql容器內(nèi)部,并查看文件目錄
docker exec -it mysql /bin/bash
docker安裝redis
下載最新鏡像
docker pull redis
創(chuàng)建目錄結(jié)構(gòu)
mkdir -p /mydata/redis/conf
創(chuàng)建配置文件
touch /mydata/redis/conf/redis.conf
安裝redis(并掛載配置文件)
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
連接到docker的redis
docker exec -it redis redis-cli
測試redis(exit:退出)
127.0.0.1:6379> set a b
OK
127.0.0.1:6379> get a
"b"
127.0.0.1:6379> exit
docker restart redis
修改redis配置文件(設(shè)置持久化)
appendonly yes
設(shè)置容器在docker啟動的時候啟動
docker update mysql --restart=always
docker update redis --restart=always
docker安裝nginx
首先要cd到mydata文件夾下面涤妒,創(chuàng)建文件夾
mkdir nginx
下載并啟動
docker run -p 80:80 --name nginx -d nginx:1.10
將容器內(nèi)的配置文件拷貝到當前nginx目錄(注意此時我們的位置在mydata文件夾下)
docker container cp nginx:/etc/nginx .
停止nginx容器
docker stop nginx
刪除nginx鏡像
docker rm nginx
重命名nginx文件夾為conf
mv nginx conf
再次創(chuàng)建nginx文件夾
mkdir nginx
將conf移動到nginx
mv conf nginx/
再次創(chuàng)建docker實例
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
設(shè)置開機啟動
docker update nginx --restart=always
訪問http://http://30.37.112.250/
默認訪問html文件夾单雾,在html文件夾下創(chuàng)建index.html,并寫入<h1>hello</h1>届腐,再次訪問就可以訪問到
在html文件夾下創(chuàng)建文件夾es铁坎,在es文件夾創(chuàng)建test.text,寫入張三
頁面訪問http://30.37.112.250/es/test.text即可訪問到
docker安裝RabbitMQ
Producer:消息生產(chǎn)者犁苏,負責生產(chǎn)和發(fā)送消息到Broker硬萍;
Broker:消息處理中心,負責消息存儲围详、確認朴乖、重試等;
Consumer:消息消費中心助赞,負責從Broker中獲取消息并處理
異步性:將耗時的同步任務(wù)通過發(fā)送消息的方式進行異步處理买羞,減少等待時間。
松耦合:不同系統(tǒng)雹食、服務(wù)之間可以通過消息隊列進行通信畜普,不用關(guān)心彼此的實現(xiàn)細節(jié),數(shù)據(jù)格式一致群叶。
分布式:為了防止消息堵塞吃挑,可以對消費者集群進行橫向擴展钝荡,避免單點故障,同樣隊列本身也可以舶衬。
可靠性:將接收到的消息落盤埠通,就算服務(wù)器重啟或者發(fā)生故障,恢復(fù)之后也能重新加載逛犹。
下載并且啟動
docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:management
開機自啟動
docker update rabbitmq --restart=always
訪問rabbitmq
192.168.43.128:15672
賬號:guest
密碼:? guest
查看 docker 容器使用的資源(占用CPU,內(nèi)存的情況)
docker stats
docker 安裝elasticsearch
下載鏡像
docker pull elasticsearch:7.4.2
創(chuàng)建掛載目錄
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
寫入文件,可被遠程任何機器訪問
echo "http.host: 0.0.0.0" > /mydata/elasticsearch/config/elasticsearch.yml
運行端辱,暴漏兩個端口? 9200 訪問端口 9300 節(jié)點通信端口? 單節(jié)點啟動
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 --privileged=true \
-e ``"discovery.type=single-node"`? `\
-e ES_JAVA_OPTS=``"-Xms64m -Xms128m"`? `\
-``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
需求給掛載文件夾授予權(quán)限
chmod -R 777 /mydata/elasticsearch
否則沒法啟動
docker start 26baf8009232
設(shè)置開啟自啟動
docker update Id號 --restart=always
如此就可以訪問了,但是虛擬機需要設(shè)置網(wǎng)絡(luò)端口 阿里云服務(wù)器需要設(shè)置 安全組 開發(fā)9200端口
訪問: 虛擬機ip地址加上 9200
http://192.168.56.1:9200/
安裝kibana
下載鏡像
docker pull kibana:7.4.2
# 一定記得改成自己的虛擬機(服務(wù)器地址)
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.56.1:9200 -p 5601:5601 -d kibana:7.4.2
設(shè)置開啟自啟動
docker update Id號 --restart=always
設(shè)置虛擬機地址映射
訪問 192.168.56.1:5601
需要等一會才能訪問成功
幾個cat命令
GET /_cat/nodes: 查看所有節(jié)點
GET /_cat/health: 查看es健康狀況
GET /_cat/master: 查看主節(jié)點
GET /_cat/indices: 查看所有索引
分詞器 Ik 支持中文分詞
https://gitee.com/jowell-jiawei/elasticsearch-analysis-ik-7.4.2
下載zip直接解壓 放到掛載的plugins文件夾下面
最后重啟Electicsearch
測試如下:
虛擬機平不同外網(wǎng)
1虽画、開啟密碼登錄
vi /etc/ssh/sshd_config
修改 PasswordAuthentication yes
重啟服務(wù) service sshd restart? 這樣就可Xshell登錄了
2舞蔽、修改網(wǎng)卡
cd /etc/sysconfig/network-scripts/
修改eth1
NM_CONTROLLED=yes
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.56.1
NETMASK=255.255.255.0
GATEWAY=192.168.56.1
DNS1=114.114.114.114
DNS2=8.8.8.8
DEVICE=eth1
PEERDNS=no
#VAGRANT-END
重啟網(wǎng)卡
service network restart