萬(wàn)字長(zhǎng)文帶你入門(mén)docker
1 Docker
dockerfiler ?鏡像構(gòu)建
Compose是在單機(jī)進(jìn)行容器編排 Horbor 鏡像倉(cāng)庫(kù) ?
Docker swarm 在多機(jī)進(jìn)行容器編排
Docker swarm缺點(diǎn)是不能同時(shí)編排多個(gè)服務(wù),
Docker Stack,可以在分布式多機(jī)器上同時(shí)編排多個(gè)服務(wù)。
1.1 Docker常用命令
如果在使用 鏡像或者是容器的別名有問(wèn)題的話,就使用它的容器id
docker 服務(wù) 啟動(dòng) ?停止 ?重啟 查看 開(kāi)機(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) 停止 重啟 查看 ?開(kāi)機(jī)自啟 ?
docker run ? -i:表示運(yùn)行容器 ?-t:?jiǎn)?dòng)后會(huì)進(jìn)入其命令行 -d:后臺(tái)運(yùn)行
--name :創(chuàng)建的別名 -v:表示目錄映射關(guān)系 -p:表示端口映射, / ?如果一行寫(xiě)不下用/來(lái)?yè)Q行
exec ?進(jìn)入運(yùn)行時(shí)容器 ? ?示例docker exec -it 容器id /bin/bash ?
logs -f ?容器的日志 ?inspect 容器的信息信息 rm刪除容器
Dockerfiler
FROM 指定基礎(chǔ)鏡像 ? RUN ?運(yùn)行命令 ? EXPOSE 開(kāi)放端口 ?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)持語(yǔ)法是否有問(wè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è)開(kāi)源的應(yīng)用容器引擎,基于 Go 語(yǔ)言開(kāi)發(fā)。Docker 可以讓開(kāi)發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級(jí)、可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口(類似 iPhone 的 app),更重要的是容器性能開(kāi)銷極低。
把環(huán)境和項(xiàng)目進(jìn)行打包,發(fā)布到docker倉(cāng)庫(kù) ?
Docker應(yīng)用場(chǎng)景
Web 應(yīng)用的自動(dòng)化打包和發(fā)布
自動(dòng)化測(cè)試和持續(xù)集成、發(fā)布
在服務(wù)型環(huán)境中部署和調(diào)整數(shù)據(jù)庫(kù)或其他的后臺(tái)應(yīng) ?
docker 通過(guò)鏡像和隔離機(jī)制來(lái)解決
DockerRUN
如果docker run hello-world
開(kāi)始運(yùn)行 ?docker會(huì)在本機(jī)尋找鏡像,如果有就在本機(jī)運(yùn)行,如果沒(méi)有就去Dockerhup上下載,DockerHup是否可以找到,如果能找到就下載,找不到,就返回
Docke 如何工作的 是一個(gè)Client-Server結(jié)構(gòu)系統(tǒng),Docker的守護(hù)運(yùn)行在主機(jī)上,通過(guò)Socket從客戶端訪問(wèn)
DockerSever接收到Docker Client的指令
Docker 為什么比虛擬機(jī)更快
Docker 不需要在重新加載一個(gè)操作系統(tǒng)內(nèi)核,而docker是利用宿主機(jī)的操作系統(tǒng)來(lái)操作的
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ā)送請(qǐng)求給后者。
2 Docker Daemon 作為 Docker 架構(gòu)中的主體部分,首先提供 Docker Server 的功能使其可以接受 Docker Client 的請(qǐng)求。
3 Docker Engine 執(zhí)行 Docker 內(nèi)部的一系列工作,每一項(xiàng)工作都是以一個(gè) Job 的形式的存在。
4 Job 的運(yùn)行過(guò)程中,當(dāng)需要容器鏡像時(shí),則從 Docker Registry 中下載鏡像,并通過(guò)鏡像管理驅(qū)動(dòng) Graphdriver 將下載鏡像以 Graph 的形式存儲(chǔ)。
5 當(dāng)需要為 Docker 創(chuàng)建網(wǎng)絡(luò)環(huán)境時(shí),通過(guò)網(wǎng)絡(luò)管理驅(qū)動(dòng) Networkdriver 創(chuàng)建并配置 Docker容器網(wǎng)絡(luò)環(huán)境。
6 當(dāng)需要限制 Docker 容器運(yùn)行資源或執(zhí)行用戶指令等操作時(shí),則通過(guò) Execdriver 來(lái)完成。
7 Libcontainer 是一項(xiàng)獨(dú)立的容器管理包,Networkdriver 以及 Execdriver 都是通過(guò) Libcontainer 來(lái)實(shí)現(xiàn)具體對(duì)容器進(jìn)行的操作。
2 Docker基礎(chǔ)使用
如果在安裝docker 升級(jí)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)安裝過(guò)Docker,請(qǐng)先卸載,再重新安裝,來(lái)確保整體的環(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è)置鏡像的倉(cāng)庫(kù)
每個(gè)人的鏡像倉(cāng)庫(kù)都不一樣
https://www.aliyun.com/product/kubernetes?utm_content=se_1009652271
?用國(guó)內(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è)置開(kāi)機(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 離線安裝
對(duì)于yum命令不能用的情況下 ?如果進(jìn)行離線安裝 ? systemctl 就查找不到你安裝的路徑和位置 需要先進(jìn)行注冊(cè)到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 編寫(xiě)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)限 ?
意思就是說(shuō),你注冊(cè)了一個(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升級(jí)
有的時(shí)候可能會(huì)越到docker版本不匹配的問(wèn)題
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 升級(jí)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è)人的地址都不一樣可以到阿里云上注冊(cè)一下
{ ? "registry-mirrors": ["https://3sf1ht53.mirror.aliyuncs.com"] } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
修改這個(gè)配置文件要注意 ,如果編寫(xiě)的有問(wèn)題 啟動(dòng)和重啟docker就會(huì)啟動(dòng)不起來(lái) ? ? 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è)置開(kāi)機(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 ?刪除所有版本
鏡像是一種輕量級(jí),可執(zhí)行的獨(dú)立軟件包,包括代碼,運(yùn)行時(shí),庫(kù),環(huán)境變量和配置文件
所有的應(yīng)用,直接打包docker
UnionFs聯(lián)合文件系統(tǒng) ? 是一種分層,輕量級(jí)并且高性能的文件系統(tǒng),鏡像是通過(guò)分層來(lái)進(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)行過(guò)的容器: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 :顯示總的文件大小。
/ ?如果一行寫(xiě)不下用/來(lái)?yè)Q行
-f :根據(jù)條件過(guò)濾顯示的內(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)行映射,這樣我們就可以通過(guò)修改宿主機(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)于對(duì)容器相應(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 # 在容器中查看目錄中是否有對(duì)應(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ù)說(shuō)明 -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è)用來(lái)構(gòu)建鏡像的文本文件,文本內(nèi)容包含了一條條構(gòu)建鏡像所需的指令和說(shuō)明。
開(kāi)始構(gòu)建 ? -f 構(gòu)建文件 -t 指定鏡像名 . 是代表在這一個(gè)文件夾里面
編寫(xiě)規(guī)則
指令大寫(xiě) 后面的參數(shù)小寫(xiě)
Dockerfile 非注釋行第一行必須是 FROM
文件名必須是 Dockerfile ?
每一條指令都會(huì)生成一個(gè)鏡像層,鏡像層多了執(zhí)行效率就慢,能寫(xiě)成一條指定的就寫(xiě)成一條指令
運(yùn)行過(guò)程
把當(dāng)前目錄和子目錄當(dāng)做上下文傳遞給docker服務(wù),命令最后的點(diǎn)表示當(dāng)前上下文。 從當(dāng)前目錄(不包括子目錄)找到Dockerfile文件,如果不指定文件,必須是此文件名。 檢查docker語(yǔ)法。 從基礎(chǔ)鏡像運(yùn)行一個(gè)容器。 執(zhí)行指令,修改容器,如上面操作添加數(shù)據(jù)卷,修改首頁(yè)。 對(duì)修改后的容器提交一個(gè)新的鏡像層,也可叫做中間層鏡像。 針對(duì)中間層生成的鏡像,運(yùn)行新的容器。 重復(fù)執(zhí)行命令修改容器、提交鏡像、運(yùn)行容器指令,直到所有指令執(zhí)行完成
Dockerfile 命令 ? 后面跟的參數(shù)都是小寫(xiě)
菜鳥(niǎo)教程 ?
https://www.runoob.com/docker/docker-dockerfile.html
FROM 指定基礎(chǔ)鏡像 ? 這個(gè)必須要有 MAINTAINER 指定作者 RUN ? ? 執(zhí)行參數(shù)中定義的命令,構(gòu)建鏡像時(shí)需要的命令 EXPOSE ? ?向容器外部公開(kāi)的端口號(hào) 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)的問(wèn)題
1 構(gòu)建的.jar文件小大寫(xiě) ? ?語(yǔ)法結(jié)尾沒(méi)有標(biāo)點(diǎn) " . "
docker build -t reggie_take_out-1.0-SNAPSHOT.jar reggie.jar . ?EXPOSE:8080 ?這個(gè)不要帶:號(hào) ?都會(huì)提升語(yǔ)法錯(cuò)誤

2 如果在用FROM 指定jdk版本的時(shí)候要加上open ? ?如果openjdk:11

tag 打標(biāo)簽的時(shí)候 如果被打的對(duì)象有其他版本 要帶上版本號(hào)
2.7 推送鏡像到倉(cāng)庫(kù)
需要先登錄
這里特別提醒 在推送倉(cāng)庫(kù)的 時(shí)候 ? 你打的鏡像標(biāo)簽要帶前綴 ? 如果是dockerhup 就是 這種形式 ?
就是讓你在推送的時(shí)候找到你的倉(cāng)庫(kù) ?
如果是阿里云要加上你的 阿里云全名
$ docker login --username=規(guī)范辦法給您發(fā) registry.cn-shenzhen.aliyuncs.com $ docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/zhuxiaoyi/docker:[鏡像版本號(hào)] $ docker push registry.cn-shenzhen.aliyuncs.com/zhuxiaoyi/docker:[鏡像版本號(hào)]
這個(gè)zhuxiaoyi是命名空間 docker是這個(gè)倉(cāng)庫(kù)的名字 鏡像版本號(hào)就是你鏡像文件的名字+版本號(hào)
如果是 ?自己搭建的 需要有加上
ip:端口號(hào)/倉(cāng)庫(kù)位置 /鏡像id:版本號(hào)
1 推送到DockHup
賬號(hào)zhuxiaoyizxy
https://hub.docker.com/
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

推送 ?

請(qǐng)求資源被拒絕
是因?yàn)殓R像打標(biāo)簽錯(cuò)誤 ?廠庫(kù)后面就跟著鏡像 用:
拉取
3 推送harbor
自建docker倉(cāng)庫(kù) 需要 在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
使用國(guó)內(nèi)代理下載
wget https://ghproxy.com/https://github.com/goharbor/harbor/releases/download/v2.5.3/harbor-offline-installer-v2.5.3.tgz
3 解壓后進(jìn)入harbor ? ?不要解壓harbor.v2.5.3.tar.gz
然后重命名 harbor.ymll.tmpl 為 harbor.yml

4 修改配置文件和端口
hostname: 需要訪問(wèn)自己的ip 0.0.0.0是所以人都可以訪問(wèn)
修改http的這個(gè) ? port: 85

5 運(yùn)行
./prepare ? ?
報(bào)錯(cuò) docker的版本太低 ?因?yàn)閏entos7默認(rèn)安裝的版本是1.3 所以需要升級(jí)docker

升級(jí)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 升級(jí)docker的版本為最新版本 curl -fsSL https://get.docker.com/ | sh 4 重啟docker systemctl restart docker 5 查看docker版本 docker version 在運(yùn)行./prepare 就沒(méi)問(wèn)題了
./install.sh ? 報(bào)錯(cuò)
翻譯后得知 需要?jiǎng)?chuàng)建一個(gè) /home/harbor/harbor 目錄
在harbor.yml里 如果配置https 還需要配置證書(shū) 所以需要把它注釋掉
再次運(yùn)行
7 啟動(dòng)
docker-compose up -d 啟動(dòng)
docker-compose stop 停止
docker-compose restart 重新啟動(dòng)
一般想這些比較大的軟件 都是有很多組件的,只有都啟動(dòng)成功了才是啟動(dòng)成功了
8 訪問(wèn)
http://116.205.133.97:85
賬號(hào) admin 密碼 Harbor 12345
這是我的賬號(hào)
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ù) ? ?來(lái)實(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指令來(lái)創(chuàng)建鏡像;
-m :提交時(shí)的說(shuō)明文字;
-p :在commit時(shí),將容器暫停。
進(jìn)入運(yùn)行時(shí)容器的幾種方法
http://t.zoukankan.com/-wenli-p-13307542.html
3.2網(wǎng)絡(luò)
服務(wù)名 寫(xiě)死 ? ip不要寫(xiě)死 ?
什么是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ò)來(lái)干什么
容器間的互聯(lián)和通信以及端口映射
容器IP變動(dòng)時(shí)候可以通過(guò)服務(wù)名直接網(wǎng)絡(luò)通信而不受到影響
如果容器ip 寫(xiě)死的話 ?容器重啟后 ?容器內(nèi)的ip就會(huì)重新分配 ?就會(huì)訪問(wèn)不同
網(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ī)和容器之間可以通過(guò)網(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)橋,這樣容器之間就能夠通過(guò)容器的Container-IP直接通信。
2 docker run 的時(shí)候,沒(méi)有指定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用來(lái)表示網(wǎng)卡的IP地址
3 網(wǎng)橋d ?ocker0創(chuàng)建一對(duì)對(duì)等虛擬設(shè)備接口一個(gè)叫veth,另一個(gè)叫eth0,成對(duì)匹配。 ? 3.1 整個(gè)宿主機(jī)的網(wǎng)橋模式都是docker0,類似一個(gè)交換機(jī)有一堆接口,每個(gè)接口叫veth,在本地主機(jī)和容器內(nèi)分別創(chuàng)建一個(gè)虛擬接口,并讓他們彼此聯(lián)通(這樣一對(duì)接口叫veth pair); ? 3.2 每個(gè)容器實(shí)例內(nèi)部也有一塊網(wǎng)卡,每個(gè)接口叫eth0; ? 3.3 docker0上面的每個(gè)veth匹配某個(gè)容器實(shí)例內(nèi)部的eth0,兩兩配對(duì),一一匹配。 通過(guò)上述,將宿主機(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 ? 但并沒(méi)有對(duì)其進(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 過(guò)時(shí)了 ? ?
自定義網(wǎng)絡(luò)本身就維護(hù)好了主機(jī)名和ip的對(duì)應(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官方的開(kāi)源項(xiàng)目 負(fù)責(zé)實(shí)現(xiàn)對(duì)docker容器集群的快速編排
能干什么
以很容易地用一個(gè)配置文件定義一個(gè)多容器的應(yīng)用,然后使用一條指令安裝這個(gè)應(yīng)用的所有依賴,完成構(gòu)建。Docker-Compose 解決了容器與容器之間如何管理編排的問(wèn)題。
相當(dāng)與spring管理對(duì)象 ?而dockercompose管理的是容器 ?容器多了 ?涉及了容器的啟動(dòng)和加載條件及要求,需要來(lái)管理
compose允許用戶通過(guò)一個(gè)單獨(dú)的docker-compose.yml模板文件 來(lái)定義一組關(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 檢查語(yǔ)法是否有問(wèn)題
docker-compose.yml 是dockercompose 的配置文件
一個(gè)文件
docker-compose.yml
兩個(gè)要素
?服務(wù) 一個(gè)一個(gè) 應(yīng)用容器實(shí)例,
工程 ?有一組關(guān)聯(lián)的容器組成的一個(gè)完整的業(yè)務(wù)單元。
三個(gè)步驟
編寫(xiě)dockerfile定義各個(gè)微服務(wù)應(yīng)用并構(gòu)建出對(duì)應(yīng)的鏡像文件
使用docker-compose.yml定義一個(gè)完整的業(yè)務(wù)單元,安排好整體應(yīng)用中的各個(gè)容器服務(wù)
最后執(zhí)行docker-compos up命令 來(lái)啟動(dòng)并運(yùn)行整個(gè)應(yīng)用程序,完成一鍵部署上線
問(wèn)題
如果出現(xiàn)這種問(wè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'
升級(jí)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 編配過(guò)運(yùn)行所有的容器
top 展示compose 編配過(guò)運(yùn)行所有的容器id
logs ?yml里面的服務(wù)id 查看容器輸出日志
confg 檢查配置
restart 重啟
satart 啟動(dòng)
stop 停止
up
-d 在后臺(tái)運(yùn)行服務(wù)容器 –no-color 不使用顏色來(lái)區(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ù)中沒(méi)有在compose文件中定義的容器 –scale SERVICE=NUM 設(shè)置服務(wù)運(yùn)行容器的個(gè)數(shù),將覆蓋在compose中通過(guò)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 #解決外部無(wú)法訪問(wèn) ? networks: ? ? atguigu_net: ? ?
3.4 docker swarm
就是一個(gè)集群
3.5 Docker stack
沒(méi)有kubernetes之前 ?docker三劍客是必須要學(xué)到 但是現(xiàn)在有了kubernetes 就沒(méi)這個(gè)必要了 ?了解一下就行
4 Docker容器部署軟件
需要經(jīng)過(guò)這幾個(gè)步驟
1 查找需要安裝的版本
2 拉取鏡像
3 創(chuàng)建容器 (目錄掛載)
4 開(kāi)放端口 (如果是阿里云需要,開(kāi)放阿里云端口)
5 外部訪問(wèn)
4.0 jdk
dockere pull openjdk:11docker 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)程連接有問(wè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ù)說(shuō)明 -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)不起來(lái) 報(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是沒(méi)有文件是需要自己弄得
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 ?外部訪問(wèn) 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ī)器訪問(wèn)
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 中寫(xiě)入 appendonly yes ?開(kāi)啟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è)置了密碼,我們需要使用密碼來(lái)進(jìn)行驗(yàn)證之后再來(lái)對(duì)redis客戶端進(jìn)行操作,否則我們沒(méi)有操作redis緩存數(shù)據(jù)庫(kù)的權(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.2docker 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.1docker ?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
訪問(wèn)測(cè)試 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)在沒(méi)有配置文件,也不知道配置什么??梢韵葐?dòng)一個(gè)nginx,講他的配置文件拷貝出來(lái)
再作為映射,啟動(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 需要賬號(hào)和密碼
docker run -v /data/dav:/usr/local/nginx/html ?-d -p 88:80 lutixiaya/nwebdav:latest chmod o+w /data/dav
ip+端口訪問(wèn)測(cè)試 需要輸入賬號(hào)和密碼
使用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 無(wú)需賬號(hào)和密碼
在同一個(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; ? ? ? ? ? ? #開(kāi)啟索引功能 ? ? ? ? autoindex_exact_size off; # 關(guān)閉計(jì)算文件確切大小(單位bytes),只顯示大概大?。▎挝籯b、mb、gb) ? ? ? ? autoindex_localtime on; ? # 顯示本機(jī)時(shí)間而非 GMT 時(shí)間 ? ? } }
chmod +x start-nginx.sh && ./start-nginx.sh`
測(cè)試一下:
echo file_server > data/file1.txt
打開(kāi)瀏覽器
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-composesudo 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 訪問(wèn)測(cè)試
http://120.78.214.226:8090
第一次登錄默認(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 訪問(wèn)測(cè)試
http://120.78.214.226:9999/
6 進(jìn)行漢化 ?
在安裝插件頁(yè)面輸入 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 sonarqubedocker 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 修改賬號(hào)和密碼 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測(cè)試訪問(wèn)
瀏覽器輸入http://ip:9090,開(kāi)始初始化數(shù)據(jù)庫(kù)初始化成功后進(jìn)入登錄界面,賬號(hào):admin ?密碼:admin
4.14 Zabbix
docker-compose
1 安裝git
yum -y install git
2 下載 代碼
git clone https://github.com/zabbix/zabbix-docker
注意要把整個(gè)代碼下載下來(lái)不要只下載docker-compose文件否則會(huì)報(bào)錯(cuò) ?因?yàn)槿笔?數(shù)據(jù)庫(kù)文件 ?
3 進(jìn)入到 abbix-docker目錄
4 啟動(dòng)docker-compose
docker-compose -f docker-compose_v3_centos_mysql_latest.yaml up -d
5 web界面訪問(wèn)
http://120.46.214.226
http:ip:端口/zabbix,默認(rèn)端口80,httpd服務(wù)端口
默認(rèn)登錄用戶 Admin ,密碼 zabbix
5 docker可視化工具
輕量級(jí)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
訪問(wèn)測(cè)試 ? http://43.138.137.168:9000/#/home
重量級(jí) 容器監(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í)際操作過(guò)程中如有什么疑問(wèn),可隨時(shí)聯(lián)系本人免費(fèi)幫您解決問(wèn)題
1 V 15938366900 QQ 1576664340
2 微信公眾號(hào) ? 朱嘯毅