1 Docker
dockerfiler? 鏡像構(gòu)建
Compose是在單機(jī)進(jìn)行容器編排 Horbor 鏡像倉庫?
Docker swarm 在多機(jī)進(jìn)行容器編排
Docker Compose缺點(diǎn)是不能在分布式多機(jī)器上使用
Docker swarm缺點(diǎn)是不能同時(shí)編排多個(gè)服務(wù),
Docker Stack檐束,可以在分布式多機(jī)器上同時(shí)編排多個(gè)服務(wù)辫秧。
1.1 Docker常用命令
如果在使用 鏡像或者是容器的別名有問題的話,就使用它的容器id
docker 服務(wù) 啟動(dòng)? 停止? 重啟 查看 開機(jī)自啟
systemctl? ? start |stop | restart | status|enable docker?
docker 鏡像
docker images? 查看鏡像? docker search 搜索鏡像? ? docker pull centos:7 拉取鏡像 docker push 推送鏡像? 在推送鏡像的時(shí)候需要先登錄 docker rmi 刪除鏡像? docker rmi docker images -q? 刪除所有版本
docker 容器
docker ps? (-a 查看所有容器)? -l :顯示最近創(chuàng)建的容器被丧。 -n :列出最近創(chuàng)建的n個(gè)容器盟戏。
docker? start |stop | restart | status|enable? 容器id? ? 啟動(dòng) 停止 重啟 查看? 開機(jī)自啟?
docker run? -i:表示運(yùn)行容器? -t:啟動(dòng)后會(huì)進(jìn)入其命令行 -d:后臺(tái)運(yùn)行
--name :創(chuàng)建的別名 -v:表示目錄映射關(guān)系 -p:表示端口映射绪妹, /? 如果一行寫不下用/來換行
exec? 進(jìn)入運(yùn)行時(shí)容器? ? 示例docker exec -it 容器id /bin/bash?
logs -f? 容器的日志? inspect 容器的信息信息 rm刪除容器
Dockerfiler?
FROM 指定基礎(chǔ)鏡像? RUN? 運(yùn)行命令? EXPOSE 開放端口? ADD 復(fù)制文件到鏡像 自動(dòng)解壓 docker build 構(gòu)建示例? ? docker build -t reggie_take_out-1.0-SNAPSHOT.jar reggie.jar .? (-t表示 構(gòu)建的文件 .是在當(dāng)前目錄)
docker-compose? docker-compose.yml? docker-compose config -q 堅(jiān)持語法是否有問題
docker-compose up 啟動(dòng)? -d 后臺(tái)啟動(dòng)? docker-compose down 停止
其他
docker cp 復(fù)制一個(gè)文件到容器內(nèi)部? 文件路徑 容器名:文件路徑? ? docker cp /root/F.sql mysql:/
1.2什么是docker
Docker 是一個(gè)開源的應(yīng)用容器引擎,基于 Go 語言開發(fā)柿究。Docker 可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級邮旷、可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上蝇摸,也可以實(shí)現(xiàn)虛擬化婶肩。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低貌夕。
把環(huán)境和項(xiàng)目進(jìn)行打包律歼,發(fā)布到docker倉庫?
Docker應(yīng)用場景
Web 應(yīng)用的自動(dòng)化打包和發(fā)布
自動(dòng)化測試和持續(xù)集成、發(fā)布
在服務(wù)型環(huán)境中部署和調(diào)整數(shù)據(jù)庫或其他的后臺(tái)應(yīng)?
docker 通過鏡像和隔離機(jī)制來解決
DockerRUN
如果docker run hello-world
開始運(yùn)行? docker會(huì)在本機(jī)尋找鏡像啡专,如果有就在本機(jī)運(yùn)行险毁,如果沒有就去Dockerhup上下載,DockerHup是否可以找到植旧,如果能找到就下載辱揭,找不到,就返回
Docke 如何工作的 是一個(gè)Client-Server結(jié)構(gòu)系統(tǒng)病附,Docker的守護(hù)運(yùn)行在主機(jī)上问窃,通過Socket從客戶端訪問
DockerSever接收到Docker Client的指令
Docker 為什么比虛擬機(jī)更快
Docker 不需要在重新加載一個(gè)操作系統(tǒng)內(nèi)核,而docker是利用宿主機(jī)的操作系統(tǒng)來操作的
1.3 docker 架構(gòu)圖
Docker 是一個(gè) C/S 模式的架構(gòu)完沪,后端是一個(gè)松耦合架構(gòu)域庇,模塊各司其職
Docker Client 是一個(gè)客戶端? systemctl start dcker? ? 啟動(dòng)其客戶端? 進(jìn)入客戶端 然后才能發(fā)送一系列命令
docker run -d? 也是這么一個(gè)意思
1 用戶是使用 Docker Client 與 Docker Daemon 建立通信,并發(fā)送請求給后者覆积。
2 Docker Daemon 作為 Docker 架構(gòu)中的主體部分听皿,首先提供 Docker Server 的功能使其可以接受 Docker Client 的請求。
3 Docker Engine 執(zhí)行 Docker 內(nèi)部的一系列工作宽档,每一項(xiàng)工作都是以一個(gè) Job 的形式的存在尉姨。
4 Job 的運(yùn)行過程中,當(dāng)需要容器鏡像時(shí)吗冤,則從 Docker Registry 中下載鏡像又厉,并通過鏡像管理驅(qū)動(dòng) Graphdriver 將下載鏡像以 Graph 的形式存儲(chǔ)。
5 當(dāng)需要為 Docker 創(chuàng)建網(wǎng)絡(luò)環(huán)境時(shí)椎瘟,通過網(wǎng)絡(luò)管理驅(qū)動(dòng) Networkdriver 創(chuàng)建并配置 Docker容器網(wǎng)絡(luò)環(huán)境屑那。
6 當(dāng)需要限制 Docker 容器運(yùn)行資源或執(zhí)行用戶指令等操作時(shí)栽渴,則通過 Execdriver 來完成算途。
7 Libcontainer 是一項(xiàng)獨(dú)立的容器管理包履婉,Networkdriver 以及 Execdriver 都是通過 Libcontainer 來實(shí)現(xiàn)具體對容器進(jìn)行的操作。
2 Docker基礎(chǔ)使用
如果在安裝docker 升級yum源 提升yum源找不到的話
? yum clean all? 清理? 然后重新加載一下 yum makecache
2.1 docker安裝
2.1.1 docker安裝
或者使用腳本文件安裝
vim docker.sh
#!/bin/bash
yum install -y yum-utils
yum-config-manager \
?? --add-repo \
?? https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
mkdir -p /etc/docker && touch /etc/docker/daemon.json
cat > /etc/docker/daemon.json <<END
{
? "registry-mirrors": ["https://3sf1ht53.mirror.aliyuncs.com"]
} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
END
yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
chmod +x docker.yml? && ./docker.yml
0、安裝完docker一定要先啟動(dòng)docker? ? ? ? ? docker start
1璧诵、使用uname命令驗(yàn)證 內(nèi)核版本? ? 內(nèi)核版本要大于 3.1
[root@localhost docker]# uname -r
3.10.0-1127.el7.x86_64
2汰蜘、卸載已安裝的Docker
如果已經(jīng)安裝過Docker,請先卸載腮猖,再重新安裝鉴扫,來確保整體的環(huán)境是一致的。
yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate docker-engine
3澈缺、安裝yum工具包和存儲(chǔ)驅(qū)動(dòng)
yum install -y yum-utils
4坪创、設(shè)置鏡像的倉庫
每個(gè)人的鏡像倉庫都不一樣
https://www.aliyun.com/product/kubernetes?utm_content=se_1009652271
用國內(nèi)的,阿里云docker鏡像
yum-config-manager \
?? --add-repo \
?? https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5姐赡、安裝docker
注意 : docker-ce 社區(qū)版 而ee是企業(yè)版莱预。這里我們使用社區(qū)版即可。
yum install docker-ce docker-ce-cli containerd.io
6项滑、啟動(dòng)docker
systemctl start docker
7依沮、設(shè)置開機(jī)啟動(dòng)
systemctl enable docker
2.2 docker卸載
卸載docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.1.3 離線安裝
對于yum命令不能用的情況下? 如果進(jìn)行離線安裝? systemctl 就查找不到你安裝的路徑和位置 需要先進(jìn)行注冊到systemctl上
1 下載安裝包
鏡像地址
https://download.docker.com/linux/static/stable/x86_64/docker-18.03.1-ce.tgz
wget https://cce-tools.bj.bcebos.com/docker/docker-cce-19.03.13.tar.gz?
2 解壓
tar -zxvf
3 把解壓的文件移動(dòng)到/usr/bin 目錄里
這個(gè)目錄不要隨便改,否則可能出錯(cuò)
mv? 1.txt 2.txt /usr/bin? 可以移動(dòng)多個(gè)文件
4 創(chuàng)建docker.service文件? 進(jìn)入/etc/systemd/system/目錄下枪狂,創(chuàng)建docker.service
我理解應(yīng)該就是docker的服務(wù)文件
5 編寫docker.service
--insecure-registry=116.62.205.170 此處改為你自己服務(wù)器ip
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=116.62.205.170
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
6 添加文件權(quán)限
chmod 777 /etc/systemd/system/docker.service
7 刷新權(quán)限?
意思就是說危喉,你注冊了一個(gè)服務(wù)進(jìn)行所以要刷新一下
systemctl daemon-reload
8 啟動(dòng)docker
systemctl start docker
一定要先啟動(dòng)?
9 參考博客
https://blog.csdn.net/weixin_45552405/article/details/119935387
2.1.4 docker升級
有的時(shí)候可能會(huì)越到docker版本不匹配的問題
1列出包含docker字段的軟件的信息
rpm -qa | grep docker
2 yum remove移除 docker
yum remove docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
yum remove docker-client-1.13.1-96.gitb2f74b2.el7.centos.x86_64
yum remove docker-common-1.13.1-96.gitb2f74b2.el7.centos.x86_64
3 升級docker的版本為最新版本
curl -fsSL https://get.docker.com/ | sh
3 重啟docker
systemctl restart docker
2.2 設(shè)置鏡像加速器
1、 編輯文件/etc/docker/daemon.json? 這個(gè)需要自己創(chuàng)建
# 執(zhí)行如下命令:
mkdir -p /etc/docker && touch /etc/docker/daemon.json
vi /etc/docker/daemon.json
2州疾、在文件中加入下面內(nèi)容
https://www.aliyun.com/product/kubernetes?utm_content=se_1009652271? 每個(gè)人的地址都不一樣可以到阿里云上注冊一下
{
? "registry-mirrors": ["https://3sf1ht53.mirror.aliyuncs.com"]
} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
修改這個(gè)配置文件要注意 辜限,如果編寫的有問題 啟動(dòng)和重啟docker就會(huì)啟動(dòng)不起來? ? systemctl restart docker 會(huì)報(bào)錯(cuò)
2.3 dock公用命令
# 啟動(dòng)docker服務(wù):
systemctl start docker
# 停止docker服務(wù):
systemctl stop docker
# 重啟docker服務(wù):
systemctl restart docker
# 查看docker服務(wù)狀態(tài):
systemctl status docker
# 設(shè)置開機(jī)啟動(dòng)docker服務(wù):
systemctl enable docker
2.4 鏡像
docker images? 查看鏡像
REPOSITORY:鏡像名稱? TAG:鏡像標(biāo)簽? IMAGE ID:鏡像ID CREATED:鏡像的創(chuàng)建日期 SIZE:鏡像大小
docker search 鏡像名稱
docker pull centos:7 拉取鏡像,需要先查看一下鏡像版本严蓖,否則拉取的鏡像就不是想要的版本
docker rmi 鏡像id/或者名字+版本? ?
docker rmi docker images -q? 刪除所有版本
鏡像是一種輕量級薄嫡,可執(zhí)行的獨(dú)立軟件包,包括代碼颗胡,運(yùn)行時(shí)毫深,庫,環(huán)境變量和配置文件
所有的應(yīng)用毒姨,直接打包docker
UnionFs聯(lián)合文件系統(tǒng)? 是一種分層哑蔫,輕量級并且高性能的文件系統(tǒng),鏡像是通過分層來進(jìn)行繼承弧呐,制作各種具體的鏡像應(yīng)用鸳址,docker的鏡像是有一層一層的文件系統(tǒng)組成的
2.5 容器
查看正在運(yùn)行的容器使用命令:
docker ps
查看所有容器使用命令:
docker ps -a
查看容器的日志
docker logs -f 容器名?
查看容器詳細(xì)信息
docker inspect ydlcentos3(容器名/容器id)
刪除容器
docker rm 容器名稱(容器ID)
刪除所有容器:docker rm docker ps -a -q
# 停止正在運(yùn)行的容器:docker stop 容器名稱或者ID
docker stop ydlcentos2
# 啟動(dòng)已運(yùn)行過的容器:docker start 容器名稱或者ID
docker start ydlcentos2
進(jìn)入運(yùn)行時(shí)容器用exec
docker exec -it 容器id /bin/bash
# 啟動(dòng)所有鏡像
docker start $(docker ps -a -q)
# stop停止所有容器
docker stop $(docker ps -a -q)
# remove刪除所有容器
docker rm $(docker ps -a -q)
創(chuàng)建容器有兩種形式
以**交互式**方式創(chuàng)建并啟動(dòng)容器,啟動(dòng)完成后泉懦,直接進(jìn)入當(dāng)前容器。使用exit命令退出容器疹瘦。需要注意的是以此種方式啟動(dòng)容器崩哩,如果退出容器,則容器會(huì)進(jìn)入**停止**狀態(tài)。
docker run -it --name=ydlcentos1 centos:7 /bin/bash
#創(chuàng)建并啟動(dòng)守護(hù)式容器
docker run -di --name=ydlcentos2 centos:7
#登錄進(jìn)入容器命令為:
docker exec -it container_name (或者 container_id) /bin/bash
退出命令
exit
參數(shù)的意思
-i:表示運(yùn)行容器
-t:表示容器啟動(dòng)后會(huì)進(jìn)入其命令行邓嘹。加入這兩個(gè)參數(shù)后酣栈,容器創(chuàng)建就能登錄進(jìn)去。即分配一個(gè)偽終端汹押。
-d:在run后面加上-d參數(shù),則會(huì)創(chuàng)建一個(gè)守護(hù)式容器在后臺(tái)運(yùn)行(這樣創(chuàng)建容器后不會(huì)自動(dòng)登錄容器矿筝,如果只加-i -t兩個(gè)參數(shù),創(chuàng)建后就會(huì)自動(dòng)進(jìn)去容器棚贾,但當(dāng)退出的時(shí)候容器就會(huì)停止)窖维。
--name :為創(chuàng)建的容器命名。是在創(chuàng)建的時(shí)候使用在進(jìn)入容器內(nèi)部的時(shí)候不行
-v:表示目錄映射關(guān)系(前者是宿主機(jī)目錄妙痹,后者是映射到宿主機(jī)上的目錄)铸史,可以使用多個(gè)-v做多個(gè)目錄或文件映射。注意:最好做目錄映射怯伊,在宿主機(jī)上做修改琳轿,然后共享到容器上。
-p:表示端口映射耿芹,前者是宿主機(jī)端口崭篡,:分割 后者是容器內(nèi)的映射端口“娠酰可以使用多個(gè)-p做多個(gè)端口映射
ps
-e` 指定容器環(huán)境變量
-l :顯示最近創(chuàng)建的容器琉闪。
-n :列出最近創(chuàng)建的n個(gè)容器。
-s :顯示總的文件大小寇甸。
/? 如果一行寫不下用/來換行
-f :根據(jù)條件過濾顯示的內(nèi)容
docker run --link? 連接其他容器
文件拷貝
從宿主機(jī)到docker容器中
# docker cp 需要拷貝的文件或目錄 容器名稱:容器目錄
# 創(chuàng)建一個(gè)文件abc.txt
touch itlils.txt
# 復(fù)制abc.txt到mycentos2的容器的 / 目錄下
docker cp itlils.txt ydlcentos2:/root
# 進(jìn)入mycentos2容器
docker exec -it ydlcentos2 /bin/bash
# 查看容器 / 目錄下文件
ll
從docker容器中拷貝到宿主機(jī)中
# docker cp 容器名稱:容器目錄 需要拷貝的文件或目錄
#進(jìn)入容器后創(chuàng)建文件cba.txt
touch itnanls.log
# 退出容器
exit
# 在Linux宿主機(jī)器執(zhí)行復(fù)制塘偎;將容器mycentos2的/cba.txt文件復(fù)制到宿主機(jī)器的/root目錄下
docker cp ydlcentos2:/root/itnanls.log /root
容器數(shù)據(jù)卷
可以在創(chuàng)建容器的時(shí)候,將宿主機(jī)的目錄與容器內(nèi)的目錄進(jìn)行映射拿霉,這樣我們就可以通過修改宿主機(jī)某個(gè)目錄的文件從而去影響容器吟秩,創(chuàng)建容器時(shí)添加-v參數(shù),后邊為宿主機(jī)目錄:容器目錄
# 創(chuàng)建linux宿主機(jī)器要掛載的目錄
mkdir /root/binlog
# 創(chuàng)建并啟動(dòng)容器ydlcentos3 ,并掛載linux中的/root/binlog 目錄到容器的/root/binlog 绽淘;也就是在 linux中的/root/binlog 中操作相當(dāng)于對容器相應(yīng)目錄操作
docker run -di -v /root/binlog:/root/binlog --name=ydlcentos3 centos:7
# 在linux下創(chuàng)建文件
touch /root/binlog/mysql.log
# 進(jìn)入容器 docker exec -it ydlcentos3 /bin/bash
# 在容器中查看目錄中是否有對應(yīng)文件def.txt
ll /root/binlog
案例
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
參數(shù)說明
-p 3306:3306:將容器的 3306 端口映射到主機(jī)的 3306 端口
-v /mydata/mysql/conf:/etc/mysql:將配置文件夾掛載到主機(jī)
-v /mydata/mysql/log:/var/log/mysql:將日志文件夾掛載到主機(jī)
-v /mydata/mysql/data:/var/lib/mysql/:將配置文件夾掛載到主機(jī)
-e MYSQL_ROOT_PASSWORD=root:初始化 root 用戶的密碼為root
2.5更新容器
https://blog.lanweihong.com/posts/26195/
2.6DockerFile
Dockerfile 是一個(gè)用來構(gòu)建鏡像的文本文件涵防,文本內(nèi)容包含了一條條構(gòu)建鏡像所需的指令和說明。
開始構(gòu)建? -f 構(gòu)建文件 -t 指定鏡像名 . 是代表在這一個(gè)文件夾里面
編寫規(guī)則
指令大寫 后面的參數(shù)小寫
Dockerfile 非注釋行第一行必須是 FROM
文件名必須是 Dockerfile?
每一條指令都會(huì)生成一個(gè)鏡像層沪铭,鏡像層多了執(zhí)行效率就慢壮池,能寫成一條指定的就寫成一條指令
運(yùn)行過程
把當(dāng)前目錄和子目錄當(dāng)做上下文傳遞給docker服務(wù),命令最后的點(diǎn)表示當(dāng)前上下文杀怠。
從當(dāng)前目錄(不包括子目錄)找到Dockerfile文件椰憋,如果不指定文件,必須是此文件名赔退。
檢查docker語法橙依。
從基礎(chǔ)鏡像運(yùn)行一個(gè)容器证舟。
執(zhí)行指令,修改容器窗骑,如上面操作添加數(shù)據(jù)卷女责,修改首頁。
對修改后的容器提交一個(gè)新的鏡像層创译,也可叫做中間層鏡像抵知。
針對中間層生成的鏡像,運(yùn)行新的容器软族。
重復(fù)執(zhí)行命令修改容器刷喜、提交鏡像、運(yùn)行容器指令互订,直到所有指令執(zhí)行完成
Dockerfile 命令? 后面跟的參數(shù)都是小寫
菜鳥教程?
https://www.runoob.com/docker/docker-dockerfile.html
FROM 指定基礎(chǔ)鏡像? 這個(gè)必須要有MAINTAINER 指定作者RUN ? ? 執(zhí)行參數(shù)中定義的命令吱肌,構(gòu)建鏡像時(shí)需要的命令EXPOSE ? ? 向容器外部公開的端口號WORKDIR 設(shè)置容器內(nèi)默認(rèn)工作目錄USER ? ? ? ? 指定用戶ENTROYPOINT 指定一個(gè)容器啟動(dòng)時(shí)運(yùn)行的命令ENV ? ? ? 設(shè)置環(huán)境變量ADD|COPY 復(fù)制文件到鏡像中VOLUME ? 容器數(shù)據(jù)卷,向鏡像創(chuàng)建的容器添加卷CMD ? ? ? 容器啟動(dòng)時(shí)要運(yùn)行的命令仰禽,可以有多個(gè)氮墨,但只有最后一個(gè)生效
構(gòu)建命令
docker build -t nginx:v3 .?
.代表的是在當(dāng)前目錄下? -t 代表的是 需要構(gòu)建的
在進(jìn)行構(gòu)建的時(shí)候出現(xiàn)的問題
1 構(gòu)建的.jar文件小大寫? ? 語法結(jié)尾沒有標(biāo)點(diǎn) " . "
docker build -t reggie_take_out-1.0-SNAPSHOT.jar reggie.jar .? EXPOSE:8080? 這個(gè)不要帶:號? 都會(huì)提升語法錯(cuò)誤
2 如果在用FROM 指定jdk版本的時(shí)候要加上open? ? 如果openjdk:11
tag 打標(biāo)簽的時(shí)候 如果被打的對象有其他版本 要帶上版本號
2.7 推送鏡像到倉庫
需要先登錄
這里特別提醒 在推送倉庫的 時(shí)候? 你打的鏡像標(biāo)簽要帶前綴? 如果是dockerhup 就是 這種形式?
就是讓你在推送的時(shí)候找到你的倉庫?
如果是阿里云要加上你的 阿里云全名
$ docker login --username=規(guī)范辦法給您發(fā) registry.cn-shenzhen.aliyuncs.com
$ docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/zhuxiaoyi/docker:[鏡像版本號]
$ docker push registry.cn-shenzhen.aliyuncs.com/zhuxiaoyi/docker:[鏡像版本號]
這個(gè)zhuxiaoyi是命名空間 docker是這個(gè)倉庫的名字 鏡像版本號就是你鏡像文件的名字+版本號
如果是? 自己搭建的 需要有加上
ip:端口號/倉庫位置 /鏡像id:版本號
1 推送到DockHup
賬號zhuxiaoyizxy
2 推送到阿里云
登錄
docker login --username=規(guī)范辦法給您發(fā) registry.cn-shenzhen.aliyuncs.com
打標(biāo)簽
docker tag mysql:5.7 registry.cn-shenzhen.aliyuncs.com/zhuxiaoyi/ruggie/mysql:5.7
查看鏡像
docker images
推送?
請求資源被拒絕
是因?yàn)殓R像打標(biāo)簽錯(cuò)誤? 廠庫后面就跟著鏡像 用:
拉取
3 推送harbor
自建docker倉庫 需要 在docker里添加憑證? 才能推送到harbor上
1 下載docker compose
curl -L "https://github.com/docker/compose/releases/download/1.29.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
查看
docker-compose -version是否安裝成功
2 下載Hardorr
使用國內(nèi)代理下載
3 解壓后進(jìn)入harbor? ? 不要解壓harbor.v2.5.3.tar.gz
然后重命名 harbor.ymll.tmpl 為 harbor.yml
4 修改配置文件和端口
hostname: 需要訪問自己的ip 0.0.0.0是所以人都可以訪問
修改http的這個(gè)? port: 85
5 運(yùn)行
./prepare? ?
報(bào)錯(cuò) docker的版本太低? 因?yàn)閏entos7默認(rèn)安裝的版本是1.3 所以需要升級docker
升級docker
1列出包含docker字段的軟件的信息
rpm -qa | grep docker – –
2 yum remove移除 docker
yum remove docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
yum remove docker-client-1.13.1-96.gitb2f74b2.el7.centos.x86_64
yum remove docker-common-1.13.1-96.gitb2f74b2.el7.centos.x86_64
3 升級docker的版本為最新版本
curl -fsSL https://get.docker.com/ | sh
4 重啟docker
systemctl restart docker
5 查看docker版本
docker version
在運(yùn)行./prepare 就沒問題了
./install.sh? 報(bào)錯(cuò)
翻譯后得知 需要?jiǎng)?chuàng)建一個(gè) /home/harbor/harbor 目錄
在harbor.yml里 如果配置https 還需要配置證書 所以需要把它注釋掉
再次運(yùn)行
7 啟動(dòng)
docker-compose up -d 啟動(dòng)
docker-compose stop 停止
docker-compose restart 重新啟動(dòng)
一般想這些比較大的軟件 都是有很多組件的,只有都啟動(dòng)成功了才是啟動(dòng)成功了
8 訪問
賬號 admin 密碼 Harbor 12345
這是我的賬號
admin@harbor.local
9 創(chuàng)建項(xiàng)目和用戶
右上角修改密碼
10 在docker中Harbor添加依賴
11 推送和下載docker
3進(jìn)階
3.1 數(shù)據(jù)卷
docker volume ls? 列出所有數(shù)據(jù)卷
docker inspcet? 查看 容器卷別名 容器的詳細(xì)信息
docker volume 數(shù)據(jù)卷名
容器之間可以有一個(gè)數(shù)據(jù)共享技術(shù)? docker容器中產(chǎn)生的數(shù)據(jù)同步到本地吐葵,容器的目錄掛載到我們宿主機(jī)上
其目的规揪,容器的持久化和同步操作,容器之間的數(shù)據(jù)也是可以共享的
-v 參數(shù)? ? 來實(shí)現(xiàn)?
docker run -it -v 主機(jī)目錄:容器目錄
如果容器內(nèi)部修改温峭,也會(huì)同步到主機(jī)上去
如果在主機(jī)上修改也會(huì)同步到容器上
MySQL數(shù)據(jù)同步
commit?
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker commit -a "runoob.com" -m "my apache" a404c6c174a2? mymysql:v1?
-a :提交的鏡像作者猛铅;
-c :使用Dockerfile指令來創(chuàng)建鏡像;
-m :提交時(shí)的說明文字凤藏;
-p :在commit時(shí)奸忽,將容器暫停。
進(jìn)入運(yùn)行時(shí)容器的幾種方法
http://t.zoukankan.com/-wenli-p-13307542.html
3.2網(wǎng)絡(luò)
服務(wù)名 寫死? ip不要寫死?
什么是docker網(wǎng)絡(luò)
https://blog.csdn.net/Trollz/article/details/126176819
網(wǎng)絡(luò)? 跟物理虛擬機(jī)的網(wǎng)絡(luò)差不多? docker 默認(rèn)的是etho
網(wǎng)絡(luò)默認(rèn)情況?
ifconfig
ens33? 宿主機(jī)ip
lo? ? 本地回環(huán)地址
docker 網(wǎng)絡(luò)來干什么
容器間的互聯(lián)和通信以及端口映射
容器IP變動(dòng)時(shí)候可以通過服務(wù)名直接網(wǎng)絡(luò)通信而不受到影響
如果容器ip 寫死的話? 容器重啟后? 容器內(nèi)的ip就會(huì)重新分配? 就會(huì)訪問不同
網(wǎng)絡(luò)命令
擬網(wǎng)橋? ? 查看網(wǎng)絡(luò)默認(rèn)
? ? 查看網(wǎng)卡? name 網(wǎng)絡(luò)模式? docker network ls? ? ? driver 驅(qū)動(dòng)? scope 范圍
docker pull?
docker network inspect? ? 查看網(wǎng)絡(luò)數(shù)據(jù)源
docker network ls? ? ? ? ? ? ? 查看網(wǎng)絡(luò)
docker network rm? 網(wǎng)絡(luò)名字? 刪除網(wǎng)絡(luò)
docker network? ? create? ? ? 創(chuàng)建網(wǎng)絡(luò)
網(wǎng)絡(luò)模式
bridge? Docker 服務(wù)默認(rèn)會(huì)創(chuàng)建一個(gè) docker0 網(wǎng)橋(其上有一個(gè) docker0 內(nèi)部接口)揖庄,該橋接網(wǎng)絡(luò)的名稱為docker0栗菜,它在內(nèi)核層連通了其他的物理或虛擬網(wǎng)卡,這就將所有容器和本地主機(jī)都放到同一個(gè)物理網(wǎng)絡(luò)蹄梢。Docker 默認(rèn)指定了 docker0 接口 的 IP 地址和子網(wǎng)掩碼疙筹,讓主機(jī)和容器之間可以通過網(wǎng)橋相互通信。
1 Docker使用Linux橋接禁炒,在宿主機(jī)虛擬一個(gè)Docker容器網(wǎng)橋(docker0)而咆,Docker啟動(dòng)一個(gè)容器時(shí)會(huì)根據(jù)Docker網(wǎng)橋的網(wǎng)段分配給容器一個(gè)IP地址,稱為Container-IP幕袱,同時(shí)Docker網(wǎng)橋是每個(gè)容器的默認(rèn)網(wǎng)關(guān)暴备。因?yàn)樵谕凰拗鳈C(jī)內(nèi)的容器都接入同一個(gè)網(wǎng)橋,這樣容器之間就能夠通過容器的Container-IP直接通信们豌。
2 docker run 的時(shí)候馍驯,沒有指定network的話默認(rèn)使用的網(wǎng)橋模式就是bridge阁危,使用的就是docker0。在宿主機(jī)ifconfig,就可以看到docker0和自己create的network(后面講)eth0汰瘫,eth1,eth2……代表網(wǎng)卡一擂煞,網(wǎng)卡二混弥,網(wǎng)卡三……,lo代表127.0.0.1对省,即localhost蝗拿,inet addr用來表示網(wǎng)卡的IP地址
3 網(wǎng)橋d? ocker0創(chuàng)建一對對等虛擬設(shè)備接口一個(gè)叫veth,另一個(gè)叫eth0蒿涎,成對匹配哀托。? 3.1 整個(gè)宿主機(jī)的網(wǎng)橋模式都是docker0,類似一個(gè)交換機(jī)有一堆接口劳秋,每個(gè)接口叫veth仓手,在本地主機(jī)和容器內(nèi)分別創(chuàng)建一個(gè)虛擬接口,并讓他們彼此聯(lián)通(這樣一對接口叫veth pair)玻淑;? 3.2 每個(gè)容器實(shí)例內(nèi)部也有一塊網(wǎng)卡嗽冒,每個(gè)接口叫eth0;? 3.3 docker0上面的每個(gè)veth匹配某個(gè)容器實(shí)例內(nèi)部的eth0补履,兩兩配對添坊,一一匹配。 通過上述箫锤,將宿主機(jī)上的所有容器都連接到這個(gè)內(nèi)部網(wǎng)絡(luò)上贬蛙,兩個(gè)容器在同一個(gè)網(wǎng)絡(luò)下,會(huì)從這個(gè)網(wǎng)關(guān)下各自拿到分配的ip,此時(shí)兩個(gè)容器的網(wǎng)絡(luò)是互通的谚攒。
host? 容器不會(huì)配置自己的ip 使用宿主機(jī)的ip和端口
none? 容器有獨(dú)立的 network namespance? 但并沒有對其進(jìn)行任何網(wǎng)絡(luò)設(shè)置? ? 禁用網(wǎng)絡(luò)
? ? ? 直接使用宿主機(jī)的 IP 地址與外界進(jìn)行通信阳准,不再需要額外進(jìn)行NAT 轉(zhuǎn)換。
container? 新創(chuàng)建的容器不會(huì)創(chuàng)建自己的網(wǎng)卡和配置自己的ip 而是和一個(gè)指定的容器共享ip 端口范圍
自定義網(wǎng)絡(luò)模式
docker link 過時(shí)了? ?
自定義網(wǎng)絡(luò)本身就維護(hù)好了主機(jī)名和ip的對應(yīng)關(guān)系(ip和服務(wù)名名都能通)
after 引入自定義網(wǎng)絡(luò)?
新建自定義網(wǎng)絡(luò)? ?
3.3 dockercompsose
https://baijiahao.baidu.com/s?id=1753599611954609453&wfr=spider&for=pc
dockercompsose是什么
是docker官方的開源項(xiàng)目 負(fù)責(zé)實(shí)現(xiàn)對docker容器集群的快速編排
能干什么
以很容易地用一個(gè)配置文件定義一個(gè)多容器的應(yīng)用五鲫,然后使用一條指令安裝這個(gè)應(yīng)用的所有依賴溺职,完成構(gòu)建。Docker-Compose 解決了容器與容器之間如何管理編排的問題位喂。
相當(dāng)與spring管理對象? 而dockercompose管理的是容器? 容器多了? 涉及了容器的啟動(dòng)和加載條件及要求浪耘,需要來管理
compose允許用戶通過一個(gè)單獨(dú)的docker-compose.yml模板文件 來定義一組關(guān)聯(lián)的應(yīng)用容器為一個(gè)項(xiàng)目
下載dokcer-compose
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version?
docker-compose config -q 檢查語法是否有問題
docker-compose.yml 是dockercompose 的配置文件
一個(gè)文件
docker-compose.yml
兩個(gè)要素
? 服務(wù) 一個(gè)一個(gè) 應(yīng)用容器實(shí)例,
工程? 有一組關(guān)聯(lián)的容器組成的一個(gè)完整的業(yè)務(wù)單元塑崖。
三個(gè)步驟? ?
編寫dockerfile定義各個(gè)微服務(wù)應(yīng)用并構(gòu)建出對應(yīng)的鏡像文件
使用docker-compose.yml定義一個(gè)完整的業(yè)務(wù)單元七冲,安排好整體應(yīng)用中的各個(gè)容器服務(wù)
最后執(zhí)行docker-compos up命令 來啟動(dòng)并運(yùn)行整個(gè)應(yīng)用程序,完成一鍵部署上線
問題
如果出現(xiàn)這種問題
ERROR: The Compose file './docker-compose_v3_centos_mysql_latest.yaml' is invalid because:
Unsupported config option for services.zabbix-agent: 'profiles'
Unsupported config option for services.zabbix-java-gateway: 'profiles'
Unsupported config option for services.zabbix-proxy-mysql: 'profiles'
Unsupported config option for services.zabbix-proxy-sqlite3: 'profiles'
Unsupported config option for services.zabbix-snmptraps: 'profiles'
Unsupported config option for services.zabbix-web-apache-mysql: 'profiles'
Unsupported config option for services.zabbix-web-service: 'profiles'
升級docker-compose
curl -L "https://get.daocloud.io/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
常用命令
docker-compose
-h 查看幫助
up 啟動(dòng)所有的compose服務(wù)
-d 啟動(dòng)所有的服務(wù)并后臺(tái)運(yùn)行
down 停止并刪除容器规婆,網(wǎng)絡(luò)澜躺,卷蝉稳,鏡像? docker-compose? down
ps 展示compose 編配過運(yùn)行所有的容器
top 展示compose 編配過運(yùn)行所有的容器id
logs? yml里面的服務(wù)id 查看容器輸出日志
confg 檢查配置
restart 重啟
satart 啟動(dòng)
stop 停止
up
-d 在后臺(tái)運(yùn)行服務(wù)容器 –no-color 不使用顏色來區(qū)分不同的服務(wù)的控制輸出 –no-deps 不啟動(dòng)服務(wù)所鏈接的容器 –force-recreate 強(qiáng)制重新創(chuàng)建容器,不能與–no-recreate同時(shí)使用 –no-recreate 如果容器已經(jīng)存在掘鄙,則不重新創(chuàng)建耘戚,不能與–force-recreate同時(shí)使用 –no-build 不自動(dòng)構(gòu)建缺失的服務(wù)鏡像 –build 在啟動(dòng)容器前構(gòu)建服務(wù)鏡像 –abort-on-container-exit 停止所有容器,如果任何一個(gè)容器被停止操漠,不能與-d同時(shí)使用 -t, --timeout TIMEOUT 停止容器時(shí)候的超時(shí)(默認(rèn)為10秒) –remove-orphans 刪除服務(wù)中沒有在compose文件中定義的容器 –scale SERVICE=NUM 設(shè)置服務(wù)運(yùn)行容器的個(gè)數(shù)收津,將覆蓋在compose中通過scale指定的參數(shù)
touch docker-compose.yml
version: "3"
services:
? microService:? 定義的服務(wù)名不沖突即可
? ? image: zzyy_docker:1.6? 鏡像名
? ? container_name: ms01? 如果不指定這個(gè)只是一個(gè)名字? 會(huì)給你加一個(gè)前綴
? ? ports:
? ? ? - "6001:6001"? ? ? ? ? ? ? ? ? 到這的意思是? docker run -d -p 6001:6001
? ? volumes:? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? - /app/microService:/data? ? ? ? ? ? ? ? ? ? -v
? ? networks:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --netwok?
? ? ? - atguigu_net
? ? depends_on:? ? 代表的意思是他依賴于 redis和MySQL 只有他倆先啟動(dòng)
? ? ? - redis
? ? ? - mysql
docker run -d -p 6001:6001 -v /app/microService:/data --networks atguigu_net
--name microService zzyy_docker:1.6
redis:
? ? image: redis:6.0.8
? ? ports:
? ? ? - "6379:6379"
? ? volumes:
? ? ? - /app/redis/redis.conf:/etc/redis/redis.conf
? ? ? - /app/redis/data:/data
? ? networks:
? ? ? - atguigu_net
? ? command: redis-server /etc/redis/redis.conf
? mysql:
? ? image: mysql:5.7
? ? environment:? 環(huán)境變量? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? MYSQL_ROOT_PASSWORD: '123456'
? ? ? MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
? ? ? MYSQL_DATABASE: 'db2021'
? ? ? MYSQL_USER: 'zzyy'
? ? ? MYSQL_PASSWORD: 'zzyy123'
? ? ports:
? ? ? - "3306:3306"
? ? volumes:
? ? ? - /app/mysql/db:/var/lib/mysql
? ? ? - /app/mysql/conf/my.cnf:/etc/my.cnf
? ? ? - /app/mysql/init:/docker-entrypoint-initdb.d
? ? networks:
? ? ? - atguigu_net
? ? command: --default-authentication-plugin=mysql_native_password #解決外部無法訪問
networks:
? atguigu_net:
3.4 docker swarm
Docker三劍客之Docker Swarm - 一本正經(jīng)的搞事情 - 博客園 (cnblogs.com)
就是一個(gè)集群
3.5 Docker stack
沒有kubernetes之前? docker三劍客是必須要學(xué)到 但是現(xiàn)在有了kubernetes 就沒這個(gè)必要了? 了解一下就行
4 Docker容器部署軟件
需要經(jīng)過這幾個(gè)步驟
1 查找需要安裝的版本
2 拉取鏡像
3 創(chuàng)建容器 (目錄掛載)
4 開放端口 (如果是阿里云需要,開放阿里云端口)
5 外部訪問
4.0 jdk
dockere pull openjdk:11
docker run -d -t --name java-11 openjdk:11
4.1 MySQL
可以從docker hup中查找自己想要安裝的版本
docker pull mysql:5.7? 拉取鏡像
創(chuàng)建容器
# 在/root目錄下創(chuàng)建mysql目錄用于存儲(chǔ)mysql數(shù)據(jù)信息
mkdir /root/mysql? ? cd /root/mysql
docker run -id \
-p 3307:3306 \
--name=ydl_mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/logs:/logs \
-v /root/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
進(jìn)入容器
docker exec -it ydl_mysql /bin/bash
進(jìn)入MySQL?
mysql -uroot -p
123456
遠(yuǎn)程連接MySQL
exit退出
如果遠(yuǎn)程連接有問題
https://www.cnblogs.com/zhangxiaoxia/p/13043508.html
修改MySQL的字符編碼
修改my.cnf 文件
cd /mydata/mysql/conf
vim my.conf
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
init_connect='SET collation_connection = utf8mb4_bin'
init_connect='SET NAMES utf8mb4'
character_set_server = utf8mb4
collation_server = utf8mb4_bin
skip-character-set-client-handshake
skip-name-resolve
-p 3307:3306:將容器的 3306 端口映射到宿主機(jī)的 3307 端口浊伙。
-v $PWD/conf:/etc/mysql/conf.d:將主機(jī)當(dāng)前目錄下的 conf/my.cnf 掛載到容器的 /etc/mysql/my.cnf撞秋。配置目錄
-v $PWD/logs:/logs:將主機(jī)當(dāng)前目錄下的 logs 目錄掛載到容器的 /logs。日志目錄
-v $PWD/data:/var/lib/mysql :將主機(jī)當(dāng)前目錄下的data目錄掛載到容器的 /var/lib/mysql 嚣鄙。數(shù)據(jù)目錄
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用戶的密碼吻贿。
4.1 MySQL5.7
谷粒商城
1 docker pull mysql:5.7? 下載docker鏡像
2 運(yùn)行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
參數(shù)說明
-p 3306:3306:將容器的 3306 端口映射到主機(jī)的 3306 端口
-v /mydata/mysql/conf:/etc/mysql:將配置文件夾掛載到主機(jī)
-v /mydata/mysql/log:/var/log/mysql:將日志文件夾掛載到主機(jī)
-v /mydata/mysql/data:/var/lib/mysql/:將配置文件夾掛載到主機(jī)
-e MYSQL_ROOT_PASSWORD=root:初始化 root 用戶的密碼為root
3 SQLyong進(jìn)行遠(yuǎn)程連接
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges 刷新權(quán)限
4 修改配置文件
cd /mydata/mysql/conf
vim my.conf
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
init_connect='SET collation_connection = utf8mb4_bin'
init_connect='SET NAMES utf8mb4'
character_set_server = utf8mb4
collation_server = utf8mb4_bin
skip-character-set-client-handshake
skip-name-resolve
這個(gè)字符編碼不要設(shè)置為utf8 MySQL容器會(huì)啟動(dòng)不起來 報(bào)錯(cuò)
Error response from daemon: Container 7819b1b3c5a7f3efe4ec7e8bab59e80ad13f10a57b7b5484f664b205d3c1ce0d is not running
這個(gè)是錯(cuò)誤示范
[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
[mysqld]
skip-name-resolve
4.2 Tomcat
官方的webapps是沒有文件是需要自己弄得
docker search tomcat?
docker pull tomcat
創(chuàng)建端口映射
# 在/root目錄下創(chuàng)建tomcat目錄用于存儲(chǔ)tomcat數(shù)據(jù)信息
mkdir /root/tomcat
cd /root/tomcat
docker run -id --name=ydl_tomcat \
-p 8081:8080 \
-v /root/tomcat:/usr/local/tomcat/webapps \
tomcat
外部訪問
http://宿主機(jī)ip:8081/
4.3 Nginx
docker search nginx
docker pull nginx
端口映射
# 在/root目錄下創(chuàng)建nginx目錄用于存儲(chǔ)nginx數(shù)據(jù)信息
mkdir /root/nginx
cd /root/nginx
mkdir conf
cd conf
文件配置
# 在~/nginx/conf/下創(chuàng)建nginx.conf文件,粘貼下面內(nèi)容
vim nginx.conf
user? nginx;
worker_processes? 1;
error_log? /var/log/nginx/error.log warn;
pid? ? ? ? /var/run/nginx.pid;
events {
? ? worker_connections? 1024;
}
http {
? ? include? ? ? /etc/nginx/mime.types;
? ? default_type? application/octet-stream;
? ? log_format? main? '$remote_addr - $remote_user [$time_local] "$request" '
? ? ? ? ? ? ? ? ? ? ? '$status $body_bytes_sent "$http_referer" '
? ? ? ? ? ? ? ? ? ? ? '"$http_user_agent" "$http_x_forwarded_for"';
? ? access_log? /var/log/nginx/access.log? main;
? ? sendfile? ? ? ? on;
? ? #tcp_nopush? ? on;
? ? keepalive_timeout? 65;
? ? #gzip? on;
? ? include /etc/nginx/conf.d/*.conf;
}
docker run -id --name=ydl_nginx \
-p 80:80 \
-v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /root/nginx/logs:/var/log/nginx \
-v /root/nginx/html:/usr/share/nginx/html \
nginx
外部機(jī)器訪問
4.4 Redis
docker search redis
docker pull redis:5.0
docker run -id --name=ydl_redis -p 6380:6379 redis:5.0
外部連接
谷粒商城
1下載redis
docker pull redis
如果不先創(chuàng)建這個(gè)conf文件 等會(huì)目錄進(jìn)行掛載的時(shí)候會(huì)吧redis.conf文件當(dāng)成一個(gè)目錄
mkdir -p /mydata/redis/conf && touch /mydata/redis/conf/redis.conf
2 啟動(dòng)容器 目錄掛載
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
啟動(dòng)redis客戶端
3? docker exec -it redis redis-cli
4? 在redis.conf 中寫入
appendonly yes? 開啟AOF 持久化
需要配置密碼 如果不陪著密碼很危險(xiǎn)
1在創(chuàng)建容器的時(shí)候配置密碼
--requirepass
2 創(chuàng)建容器之后配置密碼
docker exec -it 容器ID bash
進(jìn)入redis目錄
cd /usr/local/bin
運(yùn)行命令:
redis-cli
設(shè)置redis密碼
config set requirepass 密碼
如出現(xiàn):(error) NOAUTH Authentication required
這是因?yàn)閞edis設(shè)置了密碼,我們需要使用密碼來進(jìn)行驗(yàn)證之后再來對redis客戶端進(jìn)行操作哑子,否則我們沒有操作redis緩存數(shù)據(jù)庫的權(quán)限舅列。
需要用? auth 密碼
如果使用redis? 連接 Another Redis Desktop Manager
報(bào)錯(cuò)? Redis Client On Error: ReplyError: WRONGPASS invalid username-password pair or user is disabled. Con? 就不要設(shè)置用戶名
4.5 部署ELK
elasticsearch安裝
1 下載鏡像
docker pull elasticsearch:7.4.2
2? 創(chuàng)建和容器內(nèi)配置文件映射的文件
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
3 添加配置文件
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
4 添加權(quán)限
chmod -R 777 /mydata/elasticsearch/
5 運(yùn)行容器
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms256m -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
kiban
docker pull kibana:7.4.2
docker run --name kibana \
-e ELASTICSEARCH_HOSTS=http://120.78.150.188:9200 -p 5601:5601 \
-d kibana:7.4.2
但是還要進(jìn)行目錄掛載修改 yml文件 設(shè)置中文
IK分詞器
Ik分詞器版本要和ES和Kibana版本保持一致 不然可能啟動(dòng)不了docker?
進(jìn)入容器#此命令需要在容器中運(yùn)行elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.8.0/elasticsearch-analysis-ik-7.8.0.zip
退出容器,重啟容器
exit
docker restart es7.8
4.6 nacos
如果用docker安裝naocs如果是 2版本可能會(huì)啟動(dòng)不了
docker pull nacos/nacos-server:1.3.1
docker? run \
--name nacos -d \
-p 8848:8848 \
--privileged=true \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
nacos/nacos-server:1.3.1
訪問測試 http://43.138.137.168:8848/nacos
4.7 MQ
docker run \
-e RABBITMQ_DEFAULT_USER=zhuxiaoyi \
-e RABBITMQ_DEFAULT_PASS=412826zxyZXY \
--name rabbitmq \
--hostname mq1 \
-p 15672:15672 \
-p 5672:5672 \
-d \
rabbitmq:3-management
4.8 Nginx
mkdir /root/docker/nginx
mkdir /root/docker/nginx/conf
由于我們現(xiàn)在沒有配置文件赵抢,也不知道配置什么剧蹂。可以先啟動(dòng)一個(gè)nginx烦却,講他的配置文件拷貝出來
再作為映射宠叼,啟動(dòng)真正的nginx
docker pull nginx:1.17.4
docker run --name some-nginx -d nginx:1.17.4
docker container cp some-nginx:/etc/nginx /root/docker/nginx/conf
然后就可以刪除這個(gè)容器了
docker docker rm -f some-nginx
在重新啟動(dòng)nginx
docker run --name nginx -p 80:80 \
? ? ? ? -v /root/docker/nginx/conf:/etc/nginx \
? ? ? ? -v /root/docker/nginx/html:/usr/share/nginx/html \
? ? ? ? -d nginx:1.17.4
4.9 FTP服務(wù)器
1 需要賬號和密碼
docker run -v /data/dav:/usr/local/nginx/html? -d -p 88:80 lutixiaya/nwebdav:latest
chmod o+w /data/dav
ip+端口訪問測試 需要輸入賬號和密碼
使用winscp 進(jìn)行連接
1、點(diǎn)擊新建站點(diǎn)
2其爵、選擇協(xié)議
3冒冬、輸入服務(wù)器ip
4、輸入端口
5摩渺、輸入用戶名简烤,默認(rèn)用戶:admin
6、輸入密碼摇幻,默認(rèn)密碼:bash.lutixia.cn
7横侦、登錄
https://zhuanlan.zhihu.com/p/573721115? 參考鏈接
2 無需賬號和密碼
在同一個(gè)文件目錄下準(zhǔn)備好這個(gè)三個(gè)文件
start-nginx.sh
#!/bin/bash
mkdir data
docker stop nginx_file_server
docker rm nginx_file_server
docker run -d -p 8081:8080\
? ? ? ? --name nginx_file_server \
? ? ? ? -v $(pwd)/data:/data \
? ? ? ? -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf \
? ? ? ? -v $(pwd)/default.conf:/etc/nginx/conf.d/default.conf \
? ? ? ? nginx:stable-alpine
nginx.conf
nginx.conf
user? root;
worker_processes? 1;
error_log? /var/log/nginx/error.log warn;
pid? ? ? ? /var/run/nginx.pid;
events {
? ? worker_connections? 1024;
}
http {
? ? include? ? ? /etc/nginx/mime.types;
? ? default_type? application/octet-stream;
? ? log_format? main? '$remote_addr - $remote_user [$time_local] "$request" '
? ? ? ? ? ? ? ? ? ? ? '$status $body_bytes_sent "$http_referer" '
? ? ? ? ? ? ? ? ? ? ? '"$http_user_agent" "$http_x_forwarded_for"';
? ? access_log? /var/log/nginx/access.log? main;
? ? sendfile? ? ? ? on;
? ? #tcp_nopush? ? on;
? ? keepalive_timeout? 65;
? ? #gzip? on;
? ? include /etc/nginx/conf.d/*.conf;
}
default.conf
default.conf
server {
? ? listen 8080; #端口
? ? server_name localhost; #服務(wù)名
? ? # for SSL listen port only
? ? #ssl_certificate? ? ? ? ? ? ? ? /etc/nginx/conf.d/server.pem;
? ? #ssl_certificate_key? ? ? ? ? ? /etc/nginx/conf.d/server-key.pem;
? ? #ssl_protocols? ? ? ? ? ? ? ? ? TLSv1.2;
? ? #ssl_prefer_server_ciphers? ? ? on;
? ? #ssl_session_timeout? ? ? ? ? ? 5m;
? ? #ssl_ciphers? ? ? ? ? ? ? ? ? ? ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
? ? #underscores_in_headers? ? ? ? on;
? ? charset utf-8; # 避免中文亂碼
? ? root /data; #顯示的根索引目錄,注意這里要改成你自己的绰姻,目錄要存在
? ? location / {
? ? ? ? autoindex on;? ? ? ? ? ? #開啟索引功能
? ? ? ? autoindex_exact_size off; # 關(guān)閉計(jì)算文件確切大型鞑唷(單位bytes),只顯示大概大锌裼蟆(單位kb榨馁、mb、gb)
? ? ? ? autoindex_localtime on;? # 顯示本機(jī)時(shí)間而非 GMT 時(shí)間
? ? }
}
chmod +x start-nginx.sh && ./start-nginx.sh`
測試一下:
echo file_server > data/file1.txt
打開瀏覽器 http://127.0.0.1:8081/
4.10 DockerCompose
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
4.11 安裝GitLab
1 下載鏡像
docker pull twang2218/gitlab-ce-zh
2 啟動(dòng)容器
docker run -d -p 8443:443 -p 8090:80 -p 8022:22 --restart always --name gitlab -v /usr/local/gitlab/etc:/etc/gitlab -v /usr/local/gitlab/log:/var/log/gitlab -v /usr/local/gitlab/data:/var/opt/gitlab --privileged=true twang2218/gitlab-ce-zh
3 進(jìn)入容器修改配置文件
由于進(jìn)行了目錄映射 也可以不在容器內(nèi)部進(jìn)行修改
docker exec -it gitlab bash
cd /etc/gitlab
vim /etc/gitlab/gitlab.yml
4 修改配置文件
搜索URL
external_url 'http://gitlab.example.com'
把url換成自己的
external_url 'http://116.205.133.97/'? ? ? ?
nginx['listen_port'] = nil
nginx['listen_port'] = 82? ? 這個(gè)是注釋掉的?
5 重啟服務(wù)
這是在容器內(nèi)部重啟服務(wù)
gitlab-ctl restart
gitlab是有很多組件組成的只有這些組件都運(yùn)行成功了帜矾,才啟動(dòng)成功翼虫。
6 訪問測試
第一次登錄默認(rèn)是root用戶 密碼自己設(shè)定? 不要低于8位
4.12 安裝Jenkins
1 下載鏡像
docker pull jenkinsci/blueocean? ? 中文版本
2 創(chuàng)建目錄
# mkdir /home/jenkins_home
# chown -R 1000:1000 /home/jenkins_home/
# chown -R 1000:1000 /usr/local/src/jdk/jdk1.8/
# chown -R 1000:1000 /opt/apache-maven-3.5.0/
3 運(yùn)行容器
docker run \
-d \
--name jenkins \
-p 9999:8080 \
-p 8888:8888 \
-p 50000:50000 \
-v /usr/local/src/jdk/jdk1.8:/usr/local/src/jdk/jdk1.8 \
-v /opt/apache-maven-3.5.0:/opt/apache-maven-3.5.0 \
-v/home/jenkins_home:/var/jenkins_home \
jenkins/jenkins:2.222.3-centos
4 查看密碼
docker exec -it jenkins bash
cat /var/jenkins_home/secrets/initialAdminPassword
b0468f2eb870422abf509fe59f74e003
5 訪問測試
6 進(jìn)行漢化?
在安裝插件頁面輸入 chinese
7 替換插件下載地址
https://blog.csdn.net/weixin_45878889/article/details/123867587
4.13 安裝SonarQube
https://blog.csdn.net/OfficerGoodbody/article/details/126662724
新版SonarQube不支持MySQL
1 下載postgres鏡像
docker pull postgres
2 創(chuàng)建文件
mkdir -p /opt/postgres/postgresql
mkdir -p /opt/postgres/data
3 創(chuàng)建網(wǎng)絡(luò)
docker network create sonarqube
4 運(yùn)行postgres 容器
docker run --name postgres -d -p 5432:5432 --net sonarqube \
-v /opt/postgres/postgresql:/var/lib/postgresql \
-v /opt/postgres/data:/var/lib/postgresql/data \
-v /etc/localtime:/etc/localtime:ro \
-e POSTGRES_USER=sonar \
-e POSTGRES_PASSWORD=sonar \
-e POSTGRES_DB=sonar \
-e TZ=Asia/Shanghai \
--restart always \
--privileged=true \
--network-alias postgres \
postgres:latest
5 安裝 sonarQube
docker pull sonarqube
6 準(zhǔn)備文件夾
mkdir -p /opt/sonarqube
echo "vm.max_map_count=262144" > /etc/sysctl.conf
sysctl -p
7 先運(yùn)行一下拷貝文件
docker run -d --name sonarqube sonarqube
docker cp sonarqube:/opt/sonarqube/conf /opt/sonarqube
docker cp sonarqube:/opt/sonarqube/data /opt/sonarqube
docker cp sonarqube:/opt/sonarqube/logs /opt/sonarqube
docker cp sonarqube:/opt/sonarqube/extensions /opt/sonarqube
8 刪除容器
docker stop? sonarqube
docker rm? sonarqube
9 添加權(quán)限
chmod -R 777 /opt/sonarqube/
10 修改配置文件
vim /opt/sonarqube/conf/ sonar.properties
修改賬號和密碼
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:postgresql://postgres:5432/sonar
11 運(yùn)行容器
docker run -d --name sonarqube -p 9090:9000 \
-e ALLOW_EMPTY_PASSWORD=yes \
-e SONARQUBE_DATABASE_USER=sonar \
-e SONARQUBE_DATABASE_NAME=sonar \
-e SONARQUBE_DATABASE_PASSWORD=sonar \
-e SONARQUBE_JDBC_URL="jdbc:postgresql://postgres:5432/sonar" \
--net sonarqube \
--privileged=true \
--restart always \
-v /opt/sonarqube/logs:/opt/sonarqube/logs \
-v /opt/sonarqube/conf:/opt/sonarqube/conf \
-v /opt/sonarqube/data:/opt/sonarqube/data \
-v /opt/sonarqube/extensions:/opt/sonarqube/extensions\
sonarqube
12測試訪問
瀏覽器輸入http://ip:9090屑柔,開始初始化數(shù)據(jù)庫初始化成功后進(jìn)入登錄界面,賬號:admin? 密碼:admin
4.14 Zabbix
docker-compose
1 安裝git
yum -y install git
2 下載 代碼
git clone https://github.com/zabbix/zabbix-docker
注意要把整個(gè)代碼下載下來不要只下載docker-compose文件否則會(huì)報(bào)錯(cuò)? 因?yàn)槿笔?數(shù)據(jù)庫文件?
3 進(jìn)入到 abbix-docker目錄
4 啟動(dòng)docker-compose
docker-compose -f docker-compose_v3_centos_mysql_latest.yaml up -d
5 web界面訪問
http:ip:端口/zabbix,默認(rèn)端口80珍剑,httpd服務(wù)端口
默認(rèn)登錄用戶 Admin 掸宛,密碼 zabbix
5 docker可視化工具
輕量級portanier
? 下載? docker pull lihaixin/portainer
docker run -d -p 9000:9000 --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
--name portainer lihaixin/portainer
訪問測試? http://43.138.137.168:9000/#/home
重量級 容器監(jiān)控
docker-compose.yml配置?
version: '3.1'
volumes:
? grafana_data: {}
services:
influxdb:
? image: tutum/influxdb:0.9
? restart: always
? environment:
?? - PRE_CREATE_DB=cadvisor
? ports:
?? - "8083:8083"
?? - "8086:8086"
? volumes:
?? - ./data/influxdb:/data
cadvisor:
? image: google/cadvisor
? links:
?? - influxdb:influxsrv
? command:
? -storage_driver=influxdb - storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086
? restart: always
? ports:
?? - "8080:8080"
? volumes:
?? - /:/rootfs:ro
?? - /var/run:/var/run:rw
?? - /sys:/sys:ro
?? - /var/lib/docker/:/var/lib/docker:ro
grafana:
? user: "104"
? image: grafana/grafana
? user: "104"
? restart: always
? links:
?? - influxdb:influxsrv
? ports:
?? - "3000:3000"
? volumes:
?? - grafana_data:/var/lib/grafana
? environment:
?? - HTTP_USER=admin
?? - HTTP_PASS=admin
?? - INFLUXDB_HOST=influxsrv
?? - INFLUXDB_PORT=8086
?? - INFLUXDB_NAME=cadvisor
?? - INFLUXDB_USER=root
?? - INFLUXDB_PASS=root
關(guān)于我
我的博客內(nèi)容步驟是很完整的,也分享源碼和實(shí)驗(yàn)用到的軟件招拙,希望能和大家一起共同進(jìn)步旁涤!
各位小伙伴在實(shí)際操作過程中如有什么疑問,可隨時(shí)聯(lián)系本人免費(fèi)幫您解決問題
1 V 15938366900 QQ 1576664340
2 微信公眾號? 朱嘯毅