1 Docker
dockerfiler? 鏡像構建
Compose是在單機進行容器編排 Horbor 鏡像倉庫?
Docker swarm 在多機進行容器編排
Docker Compose缺點是不能在分布式多機器上使用
Docker swarm缺點是不能同時編排多個服務,
Docker Stack,可以在分布式多機器上同時編排多個服務。
1.1 Docker常用命令
如果在使用 鏡像或者是容器的別名有問題的話,就使用它的容器id
docker 服務 啟動? 停止? 重啟 查看 開機自啟
systemctl? ? start |stop | restart | status|enable docker?
docker 鏡像
docker images? 查看鏡像? docker search 搜索鏡像? ? docker pull centos:7 拉取鏡像 docker push 推送鏡像? 在推送鏡像的時候需要先登錄 docker rmi 刪除鏡像? docker rmi docker images -q? 刪除所有版本
docker 容器
docker ps? (-a 查看所有容器)? -l :顯示最近創建的容器。 -n :列出最近創建的n個容器。
docker? start |stop | restart | status|enable? 容器id? ? 啟動 停止 重啟 查看? 開機自啟?
docker run? -i:表示運行容器? -t:啟動后會進入其命令行 -d:后臺運行
--name :創建的別名 -v:表示目錄映射關系 -p:表示端口映射, /? 如果一行寫不下用/來換行
exec? 進入運行時容器? ? 示例docker exec -it 容器id /bin/bash?
logs -f? 容器的日志? inspect 容器的信息信息 rm刪除容器
Dockerfiler?
FROM 指定基礎鏡像? RUN? 運行命令? EXPOSE 開放端口? ADD 復制文件到鏡像 自動解壓 docker build 構建示例? ? docker build -t reggie_take_out-1.0-SNAPSHOT.jar reggie.jar .? (-t表示 構建的文件 .是在當前目錄)
docker-compose? docker-compose.yml? docker-compose config -q 堅持語法是否有問題
docker-compose up 啟動? -d 后臺啟動? docker-compose down 停止
其他
docker cp 復制一個文件到容器內部? 文件路徑 容器名:文件路徑? ? docker cp /root/F.sql mysql:/
1.2什么是docker
Docker 是一個開源的應用容器引擎,基于 Go 語言開發。Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
把環境和項目進行打包,發布到docker倉庫?
Docker應用場景
Web 應用的自動化打包和發布
自動化測試和持續集成、發布
在服務型環境中部署和調整數據庫或其他的后臺應?
docker 通過鏡像和隔離機制來解決
DockerRUN
如果docker run hello-world
開始運行? docker會在本機尋找鏡像,如果有就在本機運行,如果沒有就去Dockerhup上下載,DockerHup是否可以找到,如果能找到就下載,找不到,就返回
Docke 如何工作的 是一個Client-Server結構系統,Docker的守護運行在主機上,通過Socket從客戶端訪問
DockerSever接收到Docker Client的指令
Docker 為什么比虛擬機更快
Docker 不需要在重新加載一個操作系統內核,而docker是利用宿主機的操作系統來操作的
1.3 docker 架構圖
Docker 是一個 C/S 模式的架構,后端是一個松耦合架構,模塊各司其職
Docker Client 是一個客戶端? systemctl start dcker? ? 啟動其客戶端? 進入客戶端 然后才能發送一系列命令
docker run -d? 也是這么一個意思
1 用戶是使用 Docker Client 與 Docker Daemon 建立通信,并發送請求給后者。
2 Docker Daemon 作為 Docker 架構中的主體部分,首先提供 Docker Server 的功能使其可以接受 Docker Client 的請求。
3 Docker Engine 執行 Docker 內部的一系列工作,每一項工作都是以一個 Job 的形式的存在。
4 Job 的運行過程中,當需要容器鏡像時,則從 Docker Registry 中下載鏡像,并通過鏡像管理驅動 Graphdriver 將下載鏡像以 Graph 的形式存儲。
5 當需要為 Docker 創建網絡環境時,通過網絡管理驅動 Networkdriver 創建并配置 Docker容器網絡環境。
6 當需要限制 Docker 容器運行資源或執行用戶指令等操作時,則通過 Execdriver 來完成。
7 Libcontainer 是一項獨立的容器管理包,Networkdriver 以及 Execdriver 都是通過 Libcontainer 來實現具體對容器進行的操作。
2 Docker基礎使用
如果在安裝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一定要先啟動docker? ? ? ? ? docker start
1、使用uname命令驗證 內核版本? ? 內核版本要大于 3.1
[root@localhost docker]# uname -r
3.10.0-1127.el7.x86_64
2、卸載已安裝的Docker
如果已經安裝過Docker,請先卸載,再重新安裝,來確保整體的環境是一致的。
yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate docker-engine
3、安裝yum工具包和存儲驅動
yum install -y yum-utils
4、設置鏡像的倉庫
每個人的鏡像倉庫都不一樣
https://www.aliyun.com/product/kubernetes?utm_content=se_1009652271
用國內的,阿里云docker鏡像
yum-config-manager \
?? --add-repo \
?? https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5、安裝docker
注意 : docker-ce 社區版 而ee是企業版。這里我們使用社區版即可。
yum install docker-ce docker-ce-cli containerd.io
6、啟動docker
systemctl start docker
7、設置開機啟動
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命令不能用的情況下? 如果進行離線安裝? systemctl 就查找不到你安裝的路徑和位置 需要先進行注冊到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 把解壓的文件移動到/usr/bin 目錄里
這個目錄不要隨便改,否則可能出錯
mv? 1.txt 2.txt /usr/bin? 可以移動多個文件
4 創建docker.service文件? 進入/etc/systemd/system/目錄下,創建docker.service
我理解應該就是docker的服務文件
5 編寫docker.service
--insecure-registry=116.62.205.170 此處改為你自己服務器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 添加文件權限
chmod 777 /etc/systemd/system/docker.service
7 刷新權限?
意思就是說,你注冊了一個服務進行所以要刷新一下
systemctl daemon-reload
8 啟動docker
systemctl start docker
一定要先啟動?
9 參考博客
https://blog.csdn.net/weixin_45552405/article/details/119935387
2.1.4 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
3 重啟docker
systemctl restart docker
2.2 設置鏡像加速器
1、 編輯文件/etc/docker/daemon.json? 這個需要自己創建
# 執行如下命令:
mkdir -p /etc/docker && touch /etc/docker/daemon.json
vi /etc/docker/daemon.json
2、在文件中加入下面內容
https://www.aliyun.com/product/kubernetes?utm_content=se_1009652271? 每個人的地址都不一樣可以到阿里云上注冊一下
{
? "registry-mirrors": ["https://3sf1ht53.mirror.aliyuncs.com"]
} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
修改這個配置文件要注意 ,如果編寫的有問題 啟動和重啟docker就會啟動不起來? ? systemctl restart docker 會報錯
2.3 dock公用命令
# 啟動docker服務:
systemctl start docker
# 停止docker服務:
systemctl stop docker
# 重啟docker服務:
systemctl restart docker
# 查看docker服務狀態:
systemctl status docker
# 設置開機啟動docker服務:
systemctl enable docker
2.4 鏡像
docker images? 查看鏡像
REPOSITORY:鏡像名稱? TAG:鏡像標簽? IMAGE ID:鏡像ID CREATED:鏡像的創建日期 SIZE:鏡像大小
docker search 鏡像名稱
docker pull centos:7 拉取鏡像,需要先查看一下鏡像版本,否則拉取的鏡像就不是想要的版本
docker rmi 鏡像id/或者名字+版本? ?
docker rmi docker images -q? 刪除所有版本
鏡像是一種輕量級,可執行的獨立軟件包,包括代碼,運行時,庫,環境變量和配置文件
所有的應用,直接打包docker
UnionFs聯合文件系統? 是一種分層,輕量級并且高性能的文件系統,鏡像是通過分層來進行繼承,制作各種具體的鏡像應用,docker的鏡像是有一層一層的文件系統組成的
2.5 容器
查看正在運行的容器使用命令:
docker ps
查看所有容器使用命令:
docker ps -a
查看容器的日志
docker logs -f 容器名?
查看容器詳細信息
docker inspect ydlcentos3(容器名/容器id)
刪除容器
docker rm 容器名稱(容器ID)
刪除所有容器:docker rm docker ps -a -q
# 停止正在運行的容器:docker stop 容器名稱或者ID
docker stop ydlcentos2
# 啟動已運行過的容器:docker start 容器名稱或者ID
docker start ydlcentos2
進入運行時容器用exec
docker exec -it 容器id /bin/bash
# 啟動所有鏡像
docker start $(docker ps -a -q)
# stop停止所有容器
docker stop $(docker ps -a -q)
# remove刪除所有容器
docker rm $(docker ps -a -q)
創建容器有兩種形式
以**交互式**方式創建并啟動容器,啟動完成后,直接進入當前容器。使用exit命令退出容器。需要注意的是以此種方式啟動容器,如果退出容器,則容器會進入**停止**狀態。
docker run -it --name=ydlcentos1 centos:7 /bin/bash
#創建并啟動守護式容器
docker run -di --name=ydlcentos2 centos:7
#登錄進入容器命令為:
docker exec -it container_name (或者 container_id) /bin/bash
退出命令
exit
參數的意思
-i:表示運行容器
-t:表示容器啟動后會進入其命令行。加入這兩個參數后,容器創建就能登錄進去。即分配一個偽終端。
-d:在run后面加上-d參數,則會創建一個守護式容器在后臺運行(這樣創建容器后不會自動登錄容器,如果只加-i -t兩個參數,創建后就會自動進去容器,但當退出的時候容器就會停止)。
--name :為創建的容器命名。是在創建的時候使用在進入容器內部的時候不行
-v:表示目錄映射關系(前者是宿主機目錄,后者是映射到宿主機上的目錄),可以使用多個-v做多個目錄或文件映射。注意:最好做目錄映射,在宿主機上做修改,然后共享到容器上。
-p:表示端口映射,前者是宿主機端口,:分割 后者是容器內的映射端口。可以使用多個-p做多個端口映射
ps
-e` 指定容器環境變量
-l :顯示最近創建的容器。
-n :列出最近創建的n個容器。
-s :顯示總的文件大小。
/? 如果一行寫不下用/來換行
-f :根據條件過濾顯示的內容
docker run --link? 連接其他容器
文件拷貝
從宿主機到docker容器中
# docker cp 需要拷貝的文件或目錄 容器名稱:容器目錄
# 創建一個文件abc.txt
touch itlils.txt
# 復制abc.txt到mycentos2的容器的 / 目錄下
docker cp itlils.txt ydlcentos2:/root
# 進入mycentos2容器
docker exec -it ydlcentos2 /bin/bash
# 查看容器 / 目錄下文件
ll
從docker容器中拷貝到宿主機中
# docker cp 容器名稱:容器目錄 需要拷貝的文件或目錄
#進入容器后創建文件cba.txt
touch itnanls.log
# 退出容器
exit
# 在Linux宿主機器執行復制;將容器mycentos2的/cba.txt文件復制到宿主機器的/root目錄下
docker cp ydlcentos2:/root/itnanls.log /root
容器數據卷
可以在創建容器的時候,將宿主機的目錄與容器內的目錄進行映射,這樣我們就可以通過修改宿主機某個目錄的文件從而去影響容器,創建容器時添加-v參數,后邊為宿主機目錄:容器目錄
# 創建linux宿主機器要掛載的目錄
mkdir /root/binlog
# 創建并啟動容器ydlcentos3 ,并掛載linux中的/root/binlog 目錄到容器的/root/binlog ;也就是在 linux中的/root/binlog 中操作相當于對容器相應目錄操作
docker run -di -v /root/binlog:/root/binlog --name=ydlcentos3 centos:7
# 在linux下創建文件
touch /root/binlog/mysql.log
# 進入容器 docker exec -it ydlcentos3 /bin/bash
# 在容器中查看目錄中是否有對應文件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
參數說明
-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 用戶的密碼為root
2.5更新容器
https://blog.lanweihong.com/posts/26195/
2.6DockerFile
Dockerfile 是一個用來構建鏡像的文本文件,文本內容包含了一條條構建鏡像所需的指令和說明。
開始構建? -f 構建文件 -t 指定鏡像名 . 是代表在這一個文件夾里面
編寫規則
指令大寫 后面的參數小寫
Dockerfile 非注釋行第一行必須是 FROM
文件名必須是 Dockerfile?
每一條指令都會生成一個鏡像層,鏡像層多了執行效率就慢,能寫成一條指定的就寫成一條指令
運行過程
把當前目錄和子目錄當做上下文傳遞給docker服務,命令最后的點表示當前上下文。
從當前目錄(不包括子目錄)找到Dockerfile文件,如果不指定文件,必須是此文件名。
檢查docker語法。
從基礎鏡像運行一個容器。
執行指令,修改容器,如上面操作添加數據卷,修改首頁。
對修改后的容器提交一個新的鏡像層,也可叫做中間層鏡像。
針對中間層生成的鏡像,運行新的容器。
重復執行命令修改容器、提交鏡像、運行容器指令,直到所有指令執行完成
Dockerfile 命令? 后面跟的參數都是小寫
菜鳥教程?
https://www.runoob.com/docker/docker-dockerfile.html
FROM 指定基礎鏡像? 這個必須要有MAINTAINER 指定作者RUN ? ? 執行參數中定義的命令,構建鏡像時需要的命令EXPOSE ? ? 向容器外部公開的端口號WORKDIR 設置容器內默認工作目錄USER ? ? ? ? 指定用戶ENTROYPOINT 指定一個容器啟動時運行的命令ENV ? ? ? 設置環境變量ADD|COPY 復制文件到鏡像中VOLUME ? 容器數據卷,向鏡像創建的容器添加卷CMD ? ? ? 容器啟動時要運行的命令,可以有多個,但只有最后一個生效
構建命令
docker build -t nginx:v3 .?
.代表的是在當前目錄下? -t 代表的是 需要構建的
在進行構建的時候出現的問題
1 構建的.jar文件小大寫? ? 語法結尾沒有標點 " . "
docker build -t reggie_take_out-1.0-SNAPSHOT.jar reggie.jar .? EXPOSE:8080? 這個不要帶:號? 都會提升語法錯誤
2 如果在用FROM 指定jdk版本的時候要加上open? ? 如果openjdk:11
tag 打標簽的時候 如果被打的對象有其他版本 要帶上版本號
2.7 推送鏡像到倉庫
需要先登錄
這里特別提醒 在推送倉庫的 時候? 你打的鏡像標簽要帶前綴? 如果是dockerhup 就是 這種形式?
就是讓你在推送的時候找到你的倉庫?
如果是阿里云要加上你的 阿里云全名
$ docker login --username=規范辦法給您發 registry.cn-shenzhen.aliyuncs.com
$ docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/zhuxiaoyi/docker:[鏡像版本號]
$ docker push registry.cn-shenzhen.aliyuncs.com/zhuxiaoyi/docker:[鏡像版本號]
這個zhuxiaoyi是命名空間 docker是這個倉庫的名字 鏡像版本號就是你鏡像文件的名字+版本號
如果是? 自己搭建的 需要有加上
ip:端口號/倉庫位置 /鏡像id:版本號
1 推送到DockHup
賬號zhuxiaoyizxy
2 推送到阿里云
登錄
docker login --username=規范辦法給您發 registry.cn-shenzhen.aliyuncs.com
打標簽
docker tag mysql:5.7 registry.cn-shenzhen.aliyuncs.com/zhuxiaoyi/ruggie/mysql:5.7
查看鏡像
docker images
推送?
請求資源被拒絕
是因為鏡像打標簽錯誤? 廠庫后面就跟著鏡像 用:
拉取
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
使用國內代理下載
3 解壓后進入harbor? ? 不要解壓harbor.v2.5.3.tar.gz
然后重命名 harbor.ymll.tmpl 為 harbor.yml
4 修改配置文件和端口
hostname: 需要訪問自己的ip 0.0.0.0是所以人都可以訪問
修改http的這個? port: 85
5 運行
./prepare? ?
報錯 docker的版本太低? 因為centos7默認安裝的版本是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
在運行./prepare 就沒問題了
./install.sh? 報錯
翻譯后得知 需要創建一個 /home/harbor/harbor 目錄
在harbor.yml里 如果配置https 還需要配置證書 所以需要把它注釋掉
再次運行
7 啟動
docker-compose up -d 啟動
docker-compose stop 停止
docker-compose restart 重新啟動
一般想這些比較大的軟件 都是有很多組件的,只有都啟動成功了才是啟動成功了
8 訪問
賬號 admin 密碼 Harbor 12345
這是我的賬號
admin@harbor.local
9 創建項目和用戶
右上角修改密碼
10 在docker中Harbor添加依賴
11 推送和下載docker
3進階
3.1 數據卷
docker volume ls? 列出所有數據卷
docker inspcet? 查看 容器卷別名 容器的詳細信息
docker volume 數據卷名
容器之間可以有一個數據共享技術? docker容器中產生的數據同步到本地,容器的目錄掛載到我們宿主機上
其目的,容器的持久化和同步操作,容器之間的數據也是可以共享的
-v 參數? ? 來實現?
docker run -it -v 主機目錄:容器目錄
如果容器內部修改,也會同步到主機上去
如果在主機上修改也會同步到容器上
MySQL數據同步
commit?
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker commit -a "runoob.com" -m "my apache" a404c6c174a2? mymysql:v1?
-a :提交的鏡像作者;
-c :使用Dockerfile指令來創建鏡像;
-m :提交時的說明文字;
-p :在commit時,將容器暫停。
進入運行時容器的幾種方法
http://t.zoukankan.com/-wenli-p-13307542.html
3.2網絡
服務名 寫死? ip不要寫死?
什么是docker網絡
https://blog.csdn.net/Trollz/article/details/126176819
網絡? 跟物理虛擬機的網絡差不多? docker 默認的是etho
網絡默認情況?
ifconfig
ens33? 宿主機ip
lo? ? 本地回環地址
docker 網絡來干什么
容器間的互聯和通信以及端口映射
容器IP變動時候可以通過服務名直接網絡通信而不受到影響
如果容器ip 寫死的話? 容器重啟后? 容器內的ip就會重新分配? 就會訪問不同
網絡命令
擬網橋? ? 查看網絡默認
? ? 查看網卡? name 網絡模式? docker network ls? ? ? driver 驅動? scope 范圍
docker pull?
docker network inspect? ? 查看網絡數據源
docker network ls? ? ? ? ? ? ? 查看網絡
docker network rm? 網絡名字? 刪除網絡
docker network? ? create? ? ? 創建網絡
網絡模式
bridge? Docker 服務默認會創建一個 docker0 網橋(其上有一個 docker0 內部接口),該橋接網絡的名稱為docker0,它在內核層連通了其他的物理或虛擬網卡,這就將所有容器和本地主機都放到同一個物理網絡。Docker 默認指定了 docker0 接口 的 IP 地址和子網掩碼,讓主機和容器之間可以通過網橋相互通信。
1 Docker使用Linux橋接,在宿主機虛擬一個Docker容器網橋(docker0),Docker啟動一個容器時會根據Docker網橋的網段分配給容器一個IP地址,稱為Container-IP,同時Docker網橋是每個容器的默認網關。因為在同一宿主機內的容器都接入同一個網橋,這樣容器之間就能夠通過容器的Container-IP直接通信。
2 docker run 的時候,沒有指定network的話默認使用的網橋模式就是bridge,使用的就是docker0。在宿主機ifconfig,就可以看到docker0和自己create的network(后面講)eth0,eth1,eth2……代表網卡一,網卡二,網卡三……,lo代表127.0.0.1,即localhost,inet addr用來表示網卡的IP地址
3 網橋d? ocker0創建一對對等虛擬設備接口一個叫veth,另一個叫eth0,成對匹配。? 3.1 整個宿主機的網橋模式都是docker0,類似一個交換機有一堆接口,每個接口叫veth,在本地主機和容器內分別創建一個虛擬接口,并讓他們彼此聯通(這樣一對接口叫veth pair);? 3.2 每個容器實例內部也有一塊網卡,每個接口叫eth0;? 3.3 docker0上面的每個veth匹配某個容器實例內部的eth0,兩兩配對,一一匹配。 通過上述,將宿主機上的所有容器都連接到這個內部網絡上,兩個容器在同一個網絡下,會從這個網關下各自拿到分配的ip,此時兩個容器的網絡是互通的。
host? 容器不會配置自己的ip 使用宿主機的ip和端口
none? 容器有獨立的 network namespance? 但并沒有對其進行任何網絡設置? ? 禁用網絡
? ? ? 直接使用宿主機的 IP 地址與外界進行通信,不再需要額外進行NAT 轉換。
container? 新創建的容器不會創建自己的網卡和配置自己的ip 而是和一個指定的容器共享ip 端口范圍
自定義網絡模式
docker link 過時了? ?
自定義網絡本身就維護好了主機名和ip的對應關系(ip和服務名名都能通)
after 引入自定義網絡?
新建自定義網絡? ?
3.3 dockercompsose
https://baijiahao.baidu.com/s?id=1753599611954609453&wfr=spider&for=pc
dockercompsose是什么
是docker官方的開源項目 負責實現對docker容器集群的快速編排
能干什么
以很容易地用一個配置文件定義一個多容器的應用,然后使用一條指令安裝這個應用的所有依賴,完成構建。Docker-Compose 解決了容器與容器之間如何管理編排的問題。
相當與spring管理對象? 而dockercompose管理的是容器? 容器多了? 涉及了容器的啟動和加載條件及要求,需要來管理
compose允許用戶通過一個單獨的docker-compose.yml模板文件 來定義一組關聯的應用容器為一個項目
下載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 的配置文件
一個文件
docker-compose.yml
兩個要素
? 服務 一個一個 應用容器實例,
工程? 有一組關聯的容器組成的一個完整的業務單元。
三個步驟? ?
編寫dockerfile定義各個微服務應用并構建出對應的鏡像文件
使用docker-compose.yml定義一個完整的業務單元,安排好整體應用中的各個容器服務
最后執行docker-compos up命令 來啟動并運行整個應用程序,完成一鍵部署上線
問題
如果出現這種問題
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 啟動所有的compose服務
-d 啟動所有的服務并后臺運行
down 停止并刪除容器,網絡,卷,鏡像? docker-compose? down
ps 展示compose 編配過運行所有的容器
top 展示compose 編配過運行所有的容器id
logs? yml里面的服務id 查看容器輸出日志
confg 檢查配置
restart 重啟
satart 啟動
stop 停止
up
-d 在后臺運行服務容器 –no-color 不使用顏色來區分不同的服務的控制輸出 –no-deps 不啟動服務所鏈接的容器 –force-recreate 強制重新創建容器,不能與–no-recreate同時使用 –no-recreate 如果容器已經存在,則不重新創建,不能與–force-recreate同時使用 –no-build 不自動構建缺失的服務鏡像 –build 在啟動容器前構建服務鏡像 –abort-on-container-exit 停止所有容器,如果任何一個容器被停止,不能與-d同時使用 -t, --timeout TIMEOUT 停止容器時候的超時(默認為10秒) –remove-orphans 刪除服務中沒有在compose文件中定義的容器 –scale SERVICE=NUM 設置服務運行容器的個數,將覆蓋在compose中通過scale指定的參數
touch docker-compose.yml
version: "3"
services:
? microService:? 定義的服務名不沖突即可
? ? image: zzyy_docker:1.6? 鏡像名
? ? container_name: ms01? 如果不指定這個只是一個名字? 會給你加一個前綴
? ? ports:
? ? ? - "6001:6001"? ? ? ? ? ? ? ? ? 到這的意思是? docker run -d -p 6001:6001
? ? volumes:? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? - /app/microService:/data? ? ? ? ? ? ? ? ? ? -v
? ? networks:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --netwok?
? ? ? - atguigu_net
? ? depends_on:? ? 代表的意思是他依賴于 redis和MySQL 只有他倆先啟動
? ? ? - 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:? 環境變量? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? 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 - 一本正經的搞事情 - 博客園 (cnblogs.com)
就是一個集群
3.5 Docker stack
沒有kubernetes之前? docker三劍客是必須要學到 但是現在有了kubernetes 就沒這個必要了? 了解一下就行
4 Docker容器部署軟件
需要經過這幾個步驟
1 查找需要安裝的版本
2 拉取鏡像
3 創建容器 (目錄掛載)
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? 拉取鏡像
創建容器
# 在/root目錄下創建mysql目錄用于存儲mysql數據信息
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
進入容器
docker exec -it ydl_mysql /bin/bash
進入MySQL?
mysql -uroot -p
123456
遠程連接MySQL
exit退出
如果遠程連接有問題
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 端口映射到宿主機的 3307 端口。
-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=123456:初始化 root 用戶的密碼。
4.1 MySQL5.7
谷粒商城
1 docker pull mysql:5.7? 下載docker鏡像
2 運行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 用戶的密碼為root
3 SQLyong進行遠程連接
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges 刷新權限
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
這個字符編碼不要設置為utf8 MySQL容器會啟動不起來 報錯
Error response from daemon: Container 7819b1b3c5a7f3efe4ec7e8bab59e80ad13f10a57b7b5484f664b205d3c1ce0d is not running
這個是錯誤示范
[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
創建端口映射
# 在/root目錄下創建tomcat目錄用于存儲tomcat數據信息
mkdir /root/tomcat
cd /root/tomcat
docker run -id --name=ydl_tomcat \
-p 8081:8080 \
-v /root/tomcat:/usr/local/tomcat/webapps \
tomcat
外部訪問
http://宿主機ip:8081/
4.3 Nginx
docker search nginx
docker pull nginx
端口映射
# 在/root目錄下創建nginx目錄用于存儲nginx數據信息
mkdir /root/nginx
cd /root/nginx
mkdir conf
cd conf
文件配置
# 在~/nginx/conf/下創建nginx.conf文件,粘貼下面內容
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
外部機器訪問
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
如果不先創建這個conf文件 等會目錄進行掛載的時候會吧redis.conf文件當成一個目錄
mkdir -p /mydata/redis/conf && touch /mydata/redis/conf/redis.conf
2 啟動容器 目錄掛載
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客戶端
3? docker exec -it redis redis-cli
4? 在redis.conf 中寫入
appendonly yes? 開啟AOF 持久化
需要配置密碼 如果不陪著密碼很危險
1在創建容器的時候配置密碼
--requirepass
2 創建容器之后配置密碼
docker exec -it 容器ID bash
進入redis目錄
cd /usr/local/bin
運行命令:
redis-cli
設置redis密碼
config set requirepass 密碼
如出現:(error) NOAUTH Authentication required
這是因為redis設置了密碼,我們需要使用密碼來進行驗證之后再來對redis客戶端進行操作,否則我們沒有操作redis緩存數據庫的權限。
需要用? auth 密碼
如果使用redis? 連接 Another Redis Desktop Manager
報錯? Redis Client On Error: ReplyError: WRONGPASS invalid username-password pair or user is disabled. Con? 就不要設置用戶名
4.5 部署ELK
elasticsearch安裝
1 下載鏡像
docker pull elasticsearch:7.4.2
2? 創建和容器內配置文件映射的文件
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
3 添加配置文件
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
4 添加權限
chmod -R 777 /mydata/elasticsearch/
5 運行容器
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
但是還要進行目錄掛載修改 yml文件 設置中文
IK分詞器
Ik分詞器版本要和ES和Kibana版本保持一致 不然可能啟動不了docker?
進入容器#此命令需要在容器中運行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版本可能會啟動不了
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
由于我們現在沒有配置文件,也不知道配置什么。可以先啟動一個nginx,講他的配置文件拷貝出來
再作為映射,啟動真正的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
然后就可以刪除這個容器了
docker docker rm -f some-nginx
在重新啟動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服務器
1 需要賬號和密碼
docker run -v /data/dav:/usr/local/nginx/html? -d -p 88:80 lutixiaya/nwebdav:latest
chmod o+w /data/dav
ip+端口訪問測試 需要輸入賬號和密碼
使用winscp 進行連接
1、點擊新建站點
2、選擇協議
3、輸入服務器ip
4、輸入端口
5、輸入用戶名,默認用戶:admin
6、輸入密碼,默認密碼:bash.lutixia.cn
7、登錄
https://zhuanlan.zhihu.com/p/573721115? 參考鏈接
2 無需賬號和密碼
在同一個文件目錄下準備好這個三個文件
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; #服務名
? ? # 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; # 關閉計算文件確切大小(單位bytes),只顯示大概大小(單位kb、mb、gb)
? ? ? ? autoindex_localtime on;? # 顯示本機時間而非 GMT 時間
? ? }
}
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 啟動容器
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 進入容器修改配置文件
由于進行了目錄映射 也可以不在容器內部進行修改
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? ? 這個是注釋掉的?
5 重啟服務
這是在容器內部重啟服務
gitlab-ctl restart
gitlab是有很多組件組成的只有這些組件都運行成功了,才啟動成功。
6 訪問測試
第一次登錄默認是root用戶 密碼自己設定? 不要低于8位
4.12 安裝Jenkins
1 下載鏡像
docker pull jenkinsci/blueocean? ? 中文版本
2 創建目錄
# 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 運行容器
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 進行漢化?
在安裝插件頁面輸入 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 創建文件
mkdir -p /opt/postgres/postgresql
mkdir -p /opt/postgres/data
3 創建網絡
docker network create sonarqube
4 運行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 準備文件夾
mkdir -p /opt/sonarqube
echo "vm.max_map_count=262144" > /etc/sysctl.conf
sysctl -p
7 先運行一下拷貝文件
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 添加權限
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 運行容器
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,開始初始化數據庫初始化成功后進入登錄界面,賬號:admin? 密碼:admin
4.14 Zabbix
docker-compose
1 安裝git
yum -y install git
2 下載 代碼
git clone https://github.com/zabbix/zabbix-docker
注意要把整個代碼下載下來不要只下載docker-compose文件否則會報錯? 因為缺失 數據庫文件?
3 進入到 abbix-docker目錄
4 啟動docker-compose
docker-compose -f docker-compose_v3_centos_mysql_latest.yaml up -d
5 web界面訪問
http:ip:端口/zabbix,默認端口80,httpd服務端口
默認登錄用戶 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
重量級 容器監控
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
關于我
我的博客內容步驟是很完整的,也分享源碼和實驗用到的軟件,希望能和大家一起共同進步!
各位小伙伴在實際操作過程中如有什么疑問,可隨時聯系本人免費幫您解決問題
1 V 15938366900 QQ 1576664340
2 微信公眾號? 朱嘯毅