萬字長文帶你入門Docker

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

https://hub.docker.com/

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

使用國內代理下載

wget https://ghproxy.com/https://github.com/goharbor/harbor/releases/download/v2.5.3/harbor-offline-installer-v2.5.3.tgz

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 訪問

http://116.205.133.97:85

賬號 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 訪問測試

http://120.78.214.226:8090

第一次登錄默認是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 訪問測試

http://120.78.214.226:9999/

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://120.46.214.226

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 微信公眾號? 朱嘯毅

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,119評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,382評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,038評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,853評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,616評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,112評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,192評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,355評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,869評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,727評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,928評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,467評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,165評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,570評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,813評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,585評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,892評論 2 372

推薦閱讀更多精彩內容