萬字長文帶你入門Docker

1 Docker

dockerfiler? 鏡像構(gòu)建

Compose是在單機(jī)進(jìn)行容器編排 Horbor 鏡像倉庫?

Docker swarm 在多機(jī)進(jìn)行容器編排

Docker Compose缺點(diǎn)是不能在分布式多機(jī)器上使用

Docker swarm缺點(diǎn)是不能同時(shí)編排多個(gè)服務(wù),

Docker Stack檐束,可以在分布式多機(jī)器上同時(shí)編排多個(gè)服務(wù)辫秧。

1.1 Docker常用命令

如果在使用 鏡像或者是容器的別名有問題的話,就使用它的容器id

docker 服務(wù) 啟動(dòng)? 停止? 重啟 查看 開機(jī)自啟

systemctl? ? start |stop | restart | status|enable docker?

docker 鏡像

docker images? 查看鏡像? docker search 搜索鏡像? ? docker pull centos:7 拉取鏡像 docker push 推送鏡像? 在推送鏡像的時(shí)候需要先登錄 docker rmi 刪除鏡像? docker rmi docker images -q? 刪除所有版本

docker 容器

docker ps? (-a 查看所有容器)? -l :顯示最近創(chuàng)建的容器被丧。 -n :列出最近創(chuàng)建的n個(gè)容器盟戏。

docker? start |stop | restart | status|enable? 容器id? ? 啟動(dòng) 停止 重啟 查看? 開機(jī)自啟?

docker run? -i:表示運(yùn)行容器? -t:啟動(dòng)后會(huì)進(jìn)入其命令行 -d:后臺(tái)運(yùn)行

--name :創(chuàng)建的別名 -v:表示目錄映射關(guān)系 -p:表示端口映射绪妹, /? 如果一行寫不下用/來換行

exec? 進(jìn)入運(yùn)行時(shí)容器? ? 示例docker exec -it 容器id /bin/bash?

logs -f? 容器的日志? inspect 容器的信息信息 rm刪除容器

Dockerfiler?

FROM 指定基礎(chǔ)鏡像? RUN? 運(yùn)行命令? EXPOSE 開放端口? ADD 復(fù)制文件到鏡像 自動(dòng)解壓 docker build 構(gòu)建示例? ? docker build -t reggie_take_out-1.0-SNAPSHOT.jar reggie.jar .? (-t表示 構(gòu)建的文件 .是在當(dāng)前目錄)

docker-compose? docker-compose.yml? docker-compose config -q 堅(jiān)持語法是否有問題

docker-compose up 啟動(dòng)? -d 后臺(tái)啟動(dòng)? docker-compose down 停止

其他

docker cp 復(fù)制一個(gè)文件到容器內(nèi)部? 文件路徑 容器名:文件路徑? ? docker cp /root/F.sql mysql:/

1.2什么是docker

Docker 是一個(gè)開源的應(yīng)用容器引擎,基于 Go 語言開發(fā)柿究。Docker 可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級邮旷、可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上蝇摸,也可以實(shí)現(xiàn)虛擬化婶肩。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低貌夕。

把環(huán)境和項(xiàng)目進(jìn)行打包律歼,發(fā)布到docker倉庫?

Docker應(yīng)用場景

Web 應(yīng)用的自動(dòng)化打包和發(fā)布

自動(dòng)化測試和持續(xù)集成、發(fā)布

在服務(wù)型環(huán)境中部署和調(diào)整數(shù)據(jù)庫或其他的后臺(tái)應(yīng)?

docker 通過鏡像和隔離機(jī)制來解決

DockerRUN

如果docker run hello-world

開始運(yùn)行? docker會(huì)在本機(jī)尋找鏡像啡专,如果有就在本機(jī)運(yùn)行险毁,如果沒有就去Dockerhup上下載,DockerHup是否可以找到植旧,如果能找到就下載辱揭,找不到,就返回

Docke 如何工作的 是一個(gè)Client-Server結(jié)構(gòu)系統(tǒng)病附,Docker的守護(hù)運(yùn)行在主機(jī)上问窃,通過Socket從客戶端訪問

DockerSever接收到Docker Client的指令

Docker 為什么比虛擬機(jī)更快

Docker 不需要在重新加載一個(gè)操作系統(tǒng)內(nèi)核,而docker是利用宿主機(jī)的操作系統(tǒng)來操作的

1.3 docker 架構(gòu)圖

Docker 是一個(gè) C/S 模式的架構(gòu)完沪,后端是一個(gè)松耦合架構(gòu)域庇,模塊各司其職

Docker Client 是一個(gè)客戶端? systemctl start dcker? ? 啟動(dòng)其客戶端? 進(jìn)入客戶端 然后才能發(fā)送一系列命令

docker run -d? 也是這么一個(gè)意思

1 用戶是使用 Docker Client 與 Docker Daemon 建立通信,并發(fā)送請求給后者覆积。

2 Docker Daemon 作為 Docker 架構(gòu)中的主體部分听皿,首先提供 Docker Server 的功能使其可以接受 Docker Client 的請求。

3 Docker Engine 執(zhí)行 Docker 內(nèi)部的一系列工作宽档,每一項(xiàng)工作都是以一個(gè) Job 的形式的存在尉姨。

4 Job 的運(yùn)行過程中,當(dāng)需要容器鏡像時(shí)吗冤,則從 Docker Registry 中下載鏡像又厉,并通過鏡像管理驅(qū)動(dòng) Graphdriver 將下載鏡像以 Graph 的形式存儲(chǔ)。

5 當(dāng)需要為 Docker 創(chuàng)建網(wǎng)絡(luò)環(huán)境時(shí)椎瘟,通過網(wǎng)絡(luò)管理驅(qū)動(dòng) Networkdriver 創(chuàng)建并配置 Docker容器網(wǎng)絡(luò)環(huán)境屑那。

6 當(dāng)需要限制 Docker 容器運(yùn)行資源或執(zhí)行用戶指令等操作時(shí)栽渴,則通過 Execdriver 來完成算途。

7 Libcontainer 是一項(xiàng)獨(dú)立的容器管理包履婉,Networkdriver 以及 Execdriver 都是通過 Libcontainer 來實(shí)現(xiàn)具體對容器進(jìn)行的操作。

2 Docker基礎(chǔ)使用

如果在安裝docker 升級yum源 提升yum源找不到的話

? yum clean all? 清理? 然后重新加載一下 yum makecache

2.1 docker安裝

2.1.1 docker安裝

或者使用腳本文件安裝

vim docker.sh

#!/bin/bash

yum install -y yum-utils

yum-config-manager \

?? --add-repo \

?? https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

mkdir -p /etc/docker && touch /etc/docker/daemon.json

cat > /etc/docker/daemon.json <<END

{

? "registry-mirrors": ["https://3sf1ht53.mirror.aliyuncs.com"]

} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

END

yum install docker-ce docker-ce-cli containerd.io

systemctl start docker

chmod +x docker.yml? && ./docker.yml

0、安裝完docker一定要先啟動(dòng)docker? ? ? ? ? docker start

1璧诵、使用uname命令驗(yàn)證 內(nèi)核版本? ? 內(nèi)核版本要大于 3.1

[root@localhost docker]# uname -r

3.10.0-1127.el7.x86_64

2汰蜘、卸載已安裝的Docker

如果已經(jīng)安裝過Docker,請先卸載腮猖,再重新安裝鉴扫,來確保整體的環(huán)境是一致的。

yum remove docker

docker-client

docker-client-latest

docker-common

docker-latest

docker-latest-logrotate

docker-logrotate docker-engine

3澈缺、安裝yum工具包和存儲(chǔ)驅(qū)動(dòng)

yum install -y yum-utils

4坪创、設(shè)置鏡像的倉庫

每個(gè)人的鏡像倉庫都不一樣

https://www.aliyun.com/product/kubernetes?utm_content=se_1009652271

用國內(nèi)的,阿里云docker鏡像

yum-config-manager \

?? --add-repo \

?? https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

5姐赡、安裝docker

注意 : docker-ce 社區(qū)版 而ee是企業(yè)版莱预。這里我們使用社區(qū)版即可。

yum install docker-ce docker-ce-cli containerd.io

6项滑、啟動(dòng)docker

systemctl start docker

7依沮、設(shè)置開機(jī)啟動(dòng)

systemctl enable docker

2.2 docker卸載

卸載docker

yum remove docker \

docker-client \

docker-client-latest \

docker-common \

docker-latest \

docker-latest-logrotate \

docker-logrotate \

docker-engine

2.1.3 離線安裝

對于yum命令不能用的情況下? 如果進(jìn)行離線安裝? systemctl 就查找不到你安裝的路徑和位置 需要先進(jìn)行注冊到systemctl上

1 下載安裝包

鏡像地址

https://download.docker.com/linux/static/stable/x86_64/docker-18.03.1-ce.tgz

wget https://cce-tools.bj.bcebos.com/docker/docker-cce-19.03.13.tar.gz?

2 解壓

tar -zxvf

3 把解壓的文件移動(dòng)到/usr/bin 目錄里

這個(gè)目錄不要隨便改,否則可能出錯(cuò)

mv? 1.txt 2.txt /usr/bin? 可以移動(dòng)多個(gè)文件

4 創(chuàng)建docker.service文件? 進(jìn)入/etc/systemd/system/目錄下枪狂,創(chuàng)建docker.service

我理解應(yīng)該就是docker的服務(wù)文件

5 編寫docker.service

--insecure-registry=116.62.205.170 此處改為你自己服務(wù)器ip

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target

[Service]

Type=notify

# the default is not to use systemd for cgroups because the delegate issues still

# exists and systemd currently does not support the cgroup feature set required

# for containers run by docker

ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=116.62.205.170

ExecReload=/bin/kill -s HUP $MAINPID

# Having non-zero Limit*s causes performance problems due to accounting overhead

# in the kernel. We recommend using cgroups to do container-local accounting.

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

# Uncomment TasksMax if your systemd version supports it.

# Only systemd 226 and above support this version.

#TasksMax=infinity

TimeoutStartSec=0

# set delegate yes so that systemd does not reset the cgroups of docker containers

Delegate=yes

# kill only the docker process, not all processes in the cgroup

KillMode=process

# restart the docker process if it exits prematurely

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s

[Install]

WantedBy=multi-user.target

6 添加文件權(quán)限

chmod 777 /etc/systemd/system/docker.service

7 刷新權(quán)限?

意思就是說危喉,你注冊了一個(gè)服務(wù)進(jìn)行所以要刷新一下

systemctl daemon-reload

8 啟動(dòng)docker

systemctl start docker

一定要先啟動(dòng)?

9 參考博客

https://blog.csdn.net/weixin_45552405/article/details/119935387

2.1.4 docker升級

有的時(shí)候可能會(huì)越到docker版本不匹配的問題

1列出包含docker字段的軟件的信息

rpm -qa | grep docker

2 yum remove移除 docker

yum remove docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64

yum remove docker-client-1.13.1-96.gitb2f74b2.el7.centos.x86_64

yum remove docker-common-1.13.1-96.gitb2f74b2.el7.centos.x86_64

3 升級docker的版本為最新版本

curl -fsSL https://get.docker.com/ | sh

3 重啟docker

systemctl restart docker

2.2 設(shè)置鏡像加速器

1、 編輯文件/etc/docker/daemon.json? 這個(gè)需要自己創(chuàng)建

# 執(zhí)行如下命令:

mkdir -p /etc/docker && touch /etc/docker/daemon.json

vi /etc/docker/daemon.json

2州疾、在文件中加入下面內(nèi)容

https://www.aliyun.com/product/kubernetes?utm_content=se_1009652271? 每個(gè)人的地址都不一樣可以到阿里云上注冊一下

{

? "registry-mirrors": ["https://3sf1ht53.mirror.aliyuncs.com"]

} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

修改這個(gè)配置文件要注意 辜限,如果編寫的有問題 啟動(dòng)和重啟docker就會(huì)啟動(dòng)不起來? ? systemctl restart docker 會(huì)報(bào)錯(cuò)

2.3 dock公用命令

# 啟動(dòng)docker服務(wù):

systemctl start docker

# 停止docker服務(wù):

systemctl stop docker

# 重啟docker服務(wù):

systemctl restart docker

# 查看docker服務(wù)狀態(tài):

systemctl status docker

# 設(shè)置開機(jī)啟動(dòng)docker服務(wù):

systemctl enable docker

2.4 鏡像

docker images? 查看鏡像

REPOSITORY:鏡像名稱? TAG:鏡像標(biāo)簽? IMAGE ID:鏡像ID CREATED:鏡像的創(chuàng)建日期 SIZE:鏡像大小

docker search 鏡像名稱

docker pull centos:7 拉取鏡像,需要先查看一下鏡像版本严蓖,否則拉取的鏡像就不是想要的版本

docker rmi 鏡像id/或者名字+版本? ?

docker rmi docker images -q? 刪除所有版本

鏡像是一種輕量級薄嫡,可執(zhí)行的獨(dú)立軟件包,包括代碼颗胡,運(yùn)行時(shí)毫深,庫,環(huán)境變量和配置文件

所有的應(yīng)用毒姨,直接打包docker

UnionFs聯(lián)合文件系統(tǒng)? 是一種分層哑蔫,輕量級并且高性能的文件系統(tǒng),鏡像是通過分層來進(jìn)行繼承弧呐,制作各種具體的鏡像應(yīng)用鸳址,docker的鏡像是有一層一層的文件系統(tǒng)組成的

2.5 容器

查看正在運(yùn)行的容器使用命令:

docker ps

查看所有容器使用命令:

docker ps -a

查看容器的日志

docker logs -f 容器名?

查看容器詳細(xì)信息

docker inspect ydlcentos3(容器名/容器id)

刪除容器

docker rm 容器名稱(容器ID)

刪除所有容器:docker rm docker ps -a -q

# 停止正在運(yùn)行的容器:docker stop 容器名稱或者ID

docker stop ydlcentos2

# 啟動(dòng)已運(yùn)行過的容器:docker start 容器名稱或者ID

docker start ydlcentos2

進(jìn)入運(yùn)行時(shí)容器用exec

docker exec -it 容器id /bin/bash

# 啟動(dòng)所有鏡像

docker start $(docker ps -a -q)

# stop停止所有容器

docker stop $(docker ps -a -q)

# remove刪除所有容器

docker rm $(docker ps -a -q)

創(chuàng)建容器有兩種形式

以**交互式**方式創(chuàng)建并啟動(dòng)容器,啟動(dòng)完成后泉懦,直接進(jìn)入當(dāng)前容器。使用exit命令退出容器疹瘦。需要注意的是以此種方式啟動(dòng)容器崩哩,如果退出容器,則容器會(huì)進(jìn)入**停止**狀態(tài)。

docker run -it --name=ydlcentos1 centos:7 /bin/bash

#創(chuàng)建并啟動(dòng)守護(hù)式容器

docker run -di --name=ydlcentos2 centos:7

#登錄進(jìn)入容器命令為:

docker exec -it container_name (或者 container_id) /bin/bash

退出命令

exit

參數(shù)的意思

-i:表示運(yùn)行容器

-t:表示容器啟動(dòng)后會(huì)進(jìn)入其命令行邓嘹。加入這兩個(gè)參數(shù)后酣栈,容器創(chuàng)建就能登錄進(jìn)去。即分配一個(gè)偽終端汹押。

-d:在run后面加上-d參數(shù),則會(huì)創(chuàng)建一個(gè)守護(hù)式容器在后臺(tái)運(yùn)行(這樣創(chuàng)建容器后不會(huì)自動(dòng)登錄容器矿筝,如果只加-i -t兩個(gè)參數(shù),創(chuàng)建后就會(huì)自動(dòng)進(jìn)去容器棚贾,但當(dāng)退出的時(shí)候容器就會(huì)停止)窖维。

--name :為創(chuàng)建的容器命名。是在創(chuàng)建的時(shí)候使用在進(jìn)入容器內(nèi)部的時(shí)候不行

-v:表示目錄映射關(guān)系(前者是宿主機(jī)目錄妙痹,后者是映射到宿主機(jī)上的目錄)铸史,可以使用多個(gè)-v做多個(gè)目錄或文件映射。注意:最好做目錄映射怯伊,在宿主機(jī)上做修改琳轿,然后共享到容器上。

-p:表示端口映射耿芹,前者是宿主機(jī)端口崭篡,:分割 后者是容器內(nèi)的映射端口“娠酰可以使用多個(gè)-p做多個(gè)端口映射

ps

-e` 指定容器環(huán)境變量

-l :顯示最近創(chuàng)建的容器琉闪。

-n :列出最近創(chuàng)建的n個(gè)容器。

-s :顯示總的文件大小寇甸。

/? 如果一行寫不下用/來換行

-f :根據(jù)條件過濾顯示的內(nèi)容

docker run --link? 連接其他容器

文件拷貝

從宿主機(jī)到docker容器中

# docker cp 需要拷貝的文件或目錄 容器名稱:容器目錄

# 創(chuàng)建一個(gè)文件abc.txt

touch itlils.txt

# 復(fù)制abc.txt到mycentos2的容器的 / 目錄下

docker cp itlils.txt ydlcentos2:/root

# 進(jìn)入mycentos2容器

docker exec -it ydlcentos2 /bin/bash

# 查看容器 / 目錄下文件

ll

從docker容器中拷貝到宿主機(jī)中

# docker cp 容器名稱:容器目錄 需要拷貝的文件或目錄

#進(jìn)入容器后創(chuàng)建文件cba.txt

touch itnanls.log

# 退出容器

exit

# 在Linux宿主機(jī)器執(zhí)行復(fù)制塘偎;將容器mycentos2的/cba.txt文件復(fù)制到宿主機(jī)器的/root目錄下

docker cp ydlcentos2:/root/itnanls.log /root

容器數(shù)據(jù)卷

可以在創(chuàng)建容器的時(shí)候,將宿主機(jī)的目錄與容器內(nèi)的目錄進(jìn)行映射拿霉,這樣我們就可以通過修改宿主機(jī)某個(gè)目錄的文件從而去影響容器吟秩,創(chuàng)建容器時(shí)添加-v參數(shù),后邊為宿主機(jī)目錄:容器目錄

# 創(chuàng)建linux宿主機(jī)器要掛載的目錄

mkdir /root/binlog

# 創(chuàng)建并啟動(dòng)容器ydlcentos3 ,并掛載linux中的/root/binlog 目錄到容器的/root/binlog 绽淘;也就是在 linux中的/root/binlog 中操作相當(dāng)于對容器相應(yīng)目錄操作

docker run -di -v /root/binlog:/root/binlog --name=ydlcentos3 centos:7

# 在linux下創(chuàng)建文件

touch /root/binlog/mysql.log

# 進(jìn)入容器 docker exec -it ydlcentos3 /bin/bash

# 在容器中查看目錄中是否有對應(yīng)文件def.txt

ll /root/binlog

案例

docker run -p 3306:3306 --name mysql \

-v /mydata/mysql/log:/var/log/mysql \

-v /mydata/mysql/data:/var/lib/mysql \

-v /mydata/mysql/conf:/etc/mysql \

-e MYSQL_ROOT_PASSWORD=root \

-d mysql:5.7

參數(shù)說明

-p 3306:3306:將容器的 3306 端口映射到主機(jī)的 3306 端口

-v /mydata/mysql/conf:/etc/mysql:將配置文件夾掛載到主機(jī)

-v /mydata/mysql/log:/var/log/mysql:將日志文件夾掛載到主機(jī)

-v /mydata/mysql/data:/var/lib/mysql/:將配置文件夾掛載到主機(jī)

-e MYSQL_ROOT_PASSWORD=root:初始化 root 用戶的密碼為root

2.5更新容器

https://blog.lanweihong.com/posts/26195/

2.6DockerFile

Dockerfile 是一個(gè)用來構(gòu)建鏡像的文本文件涵防,文本內(nèi)容包含了一條條構(gòu)建鏡像所需的指令和說明。

開始構(gòu)建? -f 構(gòu)建文件 -t 指定鏡像名 . 是代表在這一個(gè)文件夾里面

編寫規(guī)則

指令大寫 后面的參數(shù)小寫

Dockerfile 非注釋行第一行必須是 FROM

文件名必須是 Dockerfile?

每一條指令都會(huì)生成一個(gè)鏡像層沪铭,鏡像層多了執(zhí)行效率就慢壮池,能寫成一條指定的就寫成一條指令

運(yùn)行過程

把當(dāng)前目錄和子目錄當(dāng)做上下文傳遞給docker服務(wù),命令最后的點(diǎn)表示當(dāng)前上下文杀怠。

從當(dāng)前目錄(不包括子目錄)找到Dockerfile文件椰憋,如果不指定文件,必須是此文件名赔退。

檢查docker語法橙依。

從基礎(chǔ)鏡像運(yùn)行一個(gè)容器证舟。

執(zhí)行指令,修改容器窗骑,如上面操作添加數(shù)據(jù)卷女责,修改首頁。

對修改后的容器提交一個(gè)新的鏡像層创译,也可叫做中間層鏡像抵知。

針對中間層生成的鏡像,運(yùn)行新的容器软族。

重復(fù)執(zhí)行命令修改容器刷喜、提交鏡像、運(yùn)行容器指令互订,直到所有指令執(zhí)行完成

Dockerfile 命令? 后面跟的參數(shù)都是小寫

菜鳥教程?

https://www.runoob.com/docker/docker-dockerfile.html

FROM 指定基礎(chǔ)鏡像? 這個(gè)必須要有MAINTAINER 指定作者RUN ? ? 執(zhí)行參數(shù)中定義的命令吱肌,構(gòu)建鏡像時(shí)需要的命令EXPOSE ? ? 向容器外部公開的端口號WORKDIR 設(shè)置容器內(nèi)默認(rèn)工作目錄USER ? ? ? ? 指定用戶ENTROYPOINT 指定一個(gè)容器啟動(dòng)時(shí)運(yùn)行的命令ENV ? ? ? 設(shè)置環(huán)境變量ADD|COPY 復(fù)制文件到鏡像中VOLUME ? 容器數(shù)據(jù)卷,向鏡像創(chuàng)建的容器添加卷CMD ? ? ? 容器啟動(dòng)時(shí)要運(yùn)行的命令仰禽,可以有多個(gè)氮墨,但只有最后一個(gè)生效

構(gòu)建命令

docker build -t nginx:v3 .?

.代表的是在當(dāng)前目錄下? -t 代表的是 需要構(gòu)建的

在進(jìn)行構(gòu)建的時(shí)候出現(xiàn)的問題

1 構(gòu)建的.jar文件小大寫? ? 語法結(jié)尾沒有標(biāo)點(diǎn) " . "

docker build -t reggie_take_out-1.0-SNAPSHOT.jar reggie.jar .? EXPOSE:8080? 這個(gè)不要帶:號? 都會(huì)提升語法錯(cuò)誤

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

tag 打標(biāo)簽的時(shí)候 如果被打的對象有其他版本 要帶上版本號

2.7 推送鏡像到倉庫

需要先登錄

這里特別提醒 在推送倉庫的 時(shí)候? 你打的鏡像標(biāo)簽要帶前綴? 如果是dockerhup 就是 這種形式?

就是讓你在推送的時(shí)候找到你的倉庫?

如果是阿里云要加上你的 阿里云全名

$ docker login --username=規(guī)范辦法給您發(fā) registry.cn-shenzhen.aliyuncs.com

$ docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/zhuxiaoyi/docker:[鏡像版本號]

$ docker push registry.cn-shenzhen.aliyuncs.com/zhuxiaoyi/docker:[鏡像版本號]

這個(gè)zhuxiaoyi是命名空間 docker是這個(gè)倉庫的名字 鏡像版本號就是你鏡像文件的名字+版本號

如果是? 自己搭建的 需要有加上

ip:端口號/倉庫位置 /鏡像id:版本號

1 推送到DockHup

賬號zhuxiaoyizxy

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

推送?

請求資源被拒絕

是因?yàn)殓R像打標(biāo)簽錯(cuò)誤? 廠庫后面就跟著鏡像 用:

拉取

3 推送harbor

自建docker倉庫 需要 在docker里添加憑證? 才能推送到harbor上

1 下載docker compose

curl -L "https://github.com/docker/compose/releases/download/1.29.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

查看

docker-compose -version是否安裝成功

2 下載Hardorr

使用國內(nèi)代理下載

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: 需要訪問自己的ip 0.0.0.0是所以人都可以訪問

修改http的這個(gè)? port: 85

5 運(yùn)行

./prepare? ?

報(bào)錯(cuò) docker的版本太低? 因?yàn)閏entos7默認(rèn)安裝的版本是1.3 所以需要升級docker

升級docker

1列出包含docker字段的軟件的信息

rpm -qa | grep docker – –

2 yum remove移除 docker

yum remove docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64

yum remove docker-client-1.13.1-96.gitb2f74b2.el7.centos.x86_64

yum remove docker-common-1.13.1-96.gitb2f74b2.el7.centos.x86_64

3 升級docker的版本為最新版本

curl -fsSL https://get.docker.com/ | sh

4 重啟docker

systemctl restart docker

5 查看docker版本

docker version

在運(yùn)行./prepare 就沒問題了

./install.sh? 報(bào)錯(cuò)

翻譯后得知 需要?jiǎng)?chuàng)建一個(gè) /home/harbor/harbor 目錄

在harbor.yml里 如果配置https 還需要配置證書 所以需要把它注釋掉

再次運(yùn)行

7 啟動(dòng)

docker-compose up -d 啟動(dòng)

docker-compose stop 停止

docker-compose restart 重新啟動(dòng)

一般想這些比較大的軟件 都是有很多組件的,只有都啟動(dòng)成功了才是啟動(dòng)成功了

8 訪問

http://116.205.133.97:85

賬號 admin 密碼 Harbor 12345

這是我的賬號

admin@harbor.local

9 創(chuàng)建項(xiàng)目和用戶

右上角修改密碼

10 在docker中Harbor添加依賴

11 推送和下載docker

3進(jìn)階

3.1 數(shù)據(jù)卷

docker volume ls? 列出所有數(shù)據(jù)卷

docker inspcet? 查看 容器卷別名 容器的詳細(xì)信息

docker volume 數(shù)據(jù)卷名

容器之間可以有一個(gè)數(shù)據(jù)共享技術(shù)? docker容器中產(chǎn)生的數(shù)據(jù)同步到本地吐葵,容器的目錄掛載到我們宿主機(jī)上

其目的规揪,容器的持久化和同步操作,容器之間的數(shù)據(jù)也是可以共享的

-v 參數(shù)? ? 來實(shí)現(xiàn)?

docker run -it -v 主機(jī)目錄:容器目錄

如果容器內(nèi)部修改温峭,也會(huì)同步到主機(jī)上去

如果在主機(jī)上修改也會(huì)同步到容器上

MySQL數(shù)據(jù)同步

commit?

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

docker commit -a "runoob.com" -m "my apache" a404c6c174a2? mymysql:v1?

-a :提交的鏡像作者猛铅;

-c :使用Dockerfile指令來創(chuàng)建鏡像;

-m :提交時(shí)的說明文字凤藏;

-p :在commit時(shí)奸忽,將容器暫停。

進(jìn)入運(yùn)行時(shí)容器的幾種方法

http://t.zoukankan.com/-wenli-p-13307542.html

3.2網(wǎng)絡(luò)

服務(wù)名 寫死? ip不要寫死?

什么是docker網(wǎng)絡(luò)

https://blog.csdn.net/Trollz/article/details/126176819

網(wǎng)絡(luò)? 跟物理虛擬機(jī)的網(wǎng)絡(luò)差不多? docker 默認(rèn)的是etho

網(wǎng)絡(luò)默認(rèn)情況?

ifconfig

ens33? 宿主機(jī)ip

lo? ? 本地回環(huán)地址

docker 網(wǎng)絡(luò)來干什么

容器間的互聯(lián)和通信以及端口映射

容器IP變動(dòng)時(shí)候可以通過服務(wù)名直接網(wǎng)絡(luò)通信而不受到影響

如果容器ip 寫死的話? 容器重啟后? 容器內(nèi)的ip就會(huì)重新分配? 就會(huì)訪問不同

網(wǎng)絡(luò)命令

擬網(wǎng)橋? ? 查看網(wǎng)絡(luò)默認(rèn)

? ? 查看網(wǎng)卡? name 網(wǎng)絡(luò)模式? docker network ls? ? ? driver 驅(qū)動(dòng)? scope 范圍

docker pull?

docker network inspect? ? 查看網(wǎng)絡(luò)數(shù)據(jù)源

docker network ls? ? ? ? ? ? ? 查看網(wǎng)絡(luò)

docker network rm? 網(wǎng)絡(luò)名字? 刪除網(wǎng)絡(luò)

docker network? ? create? ? ? 創(chuàng)建網(wǎng)絡(luò)

網(wǎng)絡(luò)模式

bridge? Docker 服務(wù)默認(rèn)會(huì)創(chuàng)建一個(gè) docker0 網(wǎng)橋(其上有一個(gè) docker0 內(nèi)部接口)揖庄,該橋接網(wǎng)絡(luò)的名稱為docker0栗菜,它在內(nèi)核層連通了其他的物理或虛擬網(wǎng)卡,這就將所有容器和本地主機(jī)都放到同一個(gè)物理網(wǎng)絡(luò)蹄梢。Docker 默認(rèn)指定了 docker0 接口 的 IP 地址和子網(wǎng)掩碼疙筹,讓主機(jī)和容器之間可以通過網(wǎng)橋相互通信。

1 Docker使用Linux橋接禁炒,在宿主機(jī)虛擬一個(gè)Docker容器網(wǎng)橋(docker0)而咆,Docker啟動(dòng)一個(gè)容器時(shí)會(huì)根據(jù)Docker網(wǎng)橋的網(wǎng)段分配給容器一個(gè)IP地址,稱為Container-IP幕袱,同時(shí)Docker網(wǎng)橋是每個(gè)容器的默認(rèn)網(wǎng)關(guān)暴备。因?yàn)樵谕凰拗鳈C(jī)內(nèi)的容器都接入同一個(gè)網(wǎng)橋,這樣容器之間就能夠通過容器的Container-IP直接通信们豌。

2 docker run 的時(shí)候馍驯,沒有指定network的話默認(rèn)使用的網(wǎng)橋模式就是bridge阁危,使用的就是docker0。在宿主機(jī)ifconfig,就可以看到docker0和自己create的network(后面講)eth0汰瘫,eth1,eth2……代表網(wǎng)卡一擂煞,網(wǎng)卡二混弥,網(wǎng)卡三……,lo代表127.0.0.1对省,即localhost蝗拿,inet addr用來表示網(wǎng)卡的IP地址

3 網(wǎng)橋d? ocker0創(chuàng)建一對對等虛擬設(shè)備接口一個(gè)叫veth,另一個(gè)叫eth0蒿涎,成對匹配哀托。? 3.1 整個(gè)宿主機(jī)的網(wǎng)橋模式都是docker0,類似一個(gè)交換機(jī)有一堆接口劳秋,每個(gè)接口叫veth仓手,在本地主機(jī)和容器內(nèi)分別創(chuàng)建一個(gè)虛擬接口,并讓他們彼此聯(lián)通(這樣一對接口叫veth pair)玻淑;? 3.2 每個(gè)容器實(shí)例內(nèi)部也有一塊網(wǎng)卡嗽冒,每個(gè)接口叫eth0;? 3.3 docker0上面的每個(gè)veth匹配某個(gè)容器實(shí)例內(nèi)部的eth0补履,兩兩配對添坊,一一匹配。 通過上述箫锤,將宿主機(jī)上的所有容器都連接到這個(gè)內(nèi)部網(wǎng)絡(luò)上贬蛙,兩個(gè)容器在同一個(gè)網(wǎng)絡(luò)下,會(huì)從這個(gè)網(wǎng)關(guān)下各自拿到分配的ip,此時(shí)兩個(gè)容器的網(wǎng)絡(luò)是互通的谚攒。

host? 容器不會(huì)配置自己的ip 使用宿主機(jī)的ip和端口

none? 容器有獨(dú)立的 network namespance? 但并沒有對其進(jìn)行任何網(wǎng)絡(luò)設(shè)置? ? 禁用網(wǎng)絡(luò)

? ? ? 直接使用宿主機(jī)的 IP 地址與外界進(jìn)行通信阳准,不再需要額外進(jìn)行NAT 轉(zhuǎn)換。

container? 新創(chuàng)建的容器不會(huì)創(chuàng)建自己的網(wǎng)卡和配置自己的ip 而是和一個(gè)指定的容器共享ip 端口范圍

自定義網(wǎng)絡(luò)模式

docker link 過時(shí)了? ?

自定義網(wǎng)絡(luò)本身就維護(hù)好了主機(jī)名和ip的對應(yīng)關(guān)系(ip和服務(wù)名名都能通)

after 引入自定義網(wǎng)絡(luò)?

新建自定義網(wǎng)絡(luò)? ?

3.3 dockercompsose

https://baijiahao.baidu.com/s?id=1753599611954609453&wfr=spider&for=pc

dockercompsose是什么

是docker官方的開源項(xiàng)目 負(fù)責(zé)實(shí)現(xiàn)對docker容器集群的快速編排

能干什么

以很容易地用一個(gè)配置文件定義一個(gè)多容器的應(yīng)用五鲫,然后使用一條指令安裝這個(gè)應(yīng)用的所有依賴溺职,完成構(gòu)建。Docker-Compose 解決了容器與容器之間如何管理編排的問題位喂。

相當(dāng)與spring管理對象? 而dockercompose管理的是容器? 容器多了? 涉及了容器的啟動(dòng)和加載條件及要求浪耘,需要來管理

compose允許用戶通過一個(gè)單獨(dú)的docker-compose.yml模板文件 來定義一組關(guān)聯(lián)的應(yīng)用容器為一個(gè)項(xiàng)目

下載dokcer-compose

curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

docker-compose --version?

docker-compose config -q 檢查語法是否有問題

docker-compose.yml 是dockercompose 的配置文件

一個(gè)文件

docker-compose.yml

兩個(gè)要素

? 服務(wù) 一個(gè)一個(gè) 應(yīng)用容器實(shí)例,

工程? 有一組關(guān)聯(lián)的容器組成的一個(gè)完整的業(yè)務(wù)單元塑崖。

三個(gè)步驟? ?

編寫dockerfile定義各個(gè)微服務(wù)應(yīng)用并構(gòu)建出對應(yīng)的鏡像文件

使用docker-compose.yml定義一個(gè)完整的業(yè)務(wù)單元七冲,安排好整體應(yīng)用中的各個(gè)容器服務(wù)

最后執(zhí)行docker-compos up命令 來啟動(dòng)并運(yùn)行整個(gè)應(yīng)用程序,完成一鍵部署上線

問題

如果出現(xiàn)這種問題

ERROR: The Compose file './docker-compose_v3_centos_mysql_latest.yaml' is invalid because:

Unsupported config option for services.zabbix-agent: 'profiles'

Unsupported config option for services.zabbix-java-gateway: 'profiles'

Unsupported config option for services.zabbix-proxy-mysql: 'profiles'

Unsupported config option for services.zabbix-proxy-sqlite3: 'profiles'

Unsupported config option for services.zabbix-snmptraps: 'profiles'

Unsupported config option for services.zabbix-web-apache-mysql: 'profiles'

Unsupported config option for services.zabbix-web-service: 'profiles'

升級docker-compose

curl -L "https://get.daocloud.io/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

docker-compose --version

常用命令

docker-compose

-h 查看幫助

up 啟動(dòng)所有的compose服務(wù)

-d 啟動(dòng)所有的服務(wù)并后臺(tái)運(yùn)行

down 停止并刪除容器规婆,網(wǎng)絡(luò)澜躺,卷蝉稳,鏡像? docker-compose? down

ps 展示compose 編配過運(yùn)行所有的容器

top 展示compose 編配過運(yùn)行所有的容器id

logs? yml里面的服務(wù)id 查看容器輸出日志

confg 檢查配置

restart 重啟

satart 啟動(dòng)

stop 停止

up

-d 在后臺(tái)運(yùn)行服務(wù)容器 –no-color 不使用顏色來區(qū)分不同的服務(wù)的控制輸出 –no-deps 不啟動(dòng)服務(wù)所鏈接的容器 –force-recreate 強(qiáng)制重新創(chuàng)建容器,不能與–no-recreate同時(shí)使用 –no-recreate 如果容器已經(jīng)存在掘鄙,則不重新創(chuàng)建耘戚,不能與–force-recreate同時(shí)使用 –no-build 不自動(dòng)構(gòu)建缺失的服務(wù)鏡像 –build 在啟動(dòng)容器前構(gòu)建服務(wù)鏡像 –abort-on-container-exit 停止所有容器,如果任何一個(gè)容器被停止操漠,不能與-d同時(shí)使用 -t, --timeout TIMEOUT 停止容器時(shí)候的超時(shí)(默認(rèn)為10秒) –remove-orphans 刪除服務(wù)中沒有在compose文件中定義的容器 –scale SERVICE=NUM 設(shè)置服務(wù)運(yùn)行容器的個(gè)數(shù)收津,將覆蓋在compose中通過scale指定的參數(shù)

touch docker-compose.yml

version: "3"

services:

? microService:? 定義的服務(wù)名不沖突即可

? ? image: zzyy_docker:1.6? 鏡像名

? ? container_name: ms01? 如果不指定這個(gè)只是一個(gè)名字? 會(huì)給你加一個(gè)前綴

? ? ports:

? ? ? - "6001:6001"? ? ? ? ? ? ? ? ? 到這的意思是? docker run -d -p 6001:6001

? ? volumes:? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? - /app/microService:/data? ? ? ? ? ? ? ? ? ? -v

? ? networks:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --netwok?

? ? ? - atguigu_net

? ? depends_on:? ? 代表的意思是他依賴于 redis和MySQL 只有他倆先啟動(dòng)

? ? ? - redis

? ? ? - mysql


docker run -d -p 6001:6001 -v /app/microService:/data --networks atguigu_net

--name microService zzyy_docker:1.6

redis:

? ? image: redis:6.0.8

? ? ports:

? ? ? - "6379:6379"

? ? volumes:

? ? ? - /app/redis/redis.conf:/etc/redis/redis.conf

? ? ? - /app/redis/data:/data

? ? networks:

? ? ? - atguigu_net

? ? command: redis-server /etc/redis/redis.conf

? mysql:

? ? image: mysql:5.7

? ? environment:? 環(huán)境變量? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? MYSQL_ROOT_PASSWORD: '123456'

? ? ? MYSQL_ALLOW_EMPTY_PASSWORD: 'no'

? ? ? MYSQL_DATABASE: 'db2021'

? ? ? MYSQL_USER: 'zzyy'

? ? ? MYSQL_PASSWORD: 'zzyy123'

? ? ports:

? ? ? - "3306:3306"

? ? volumes:

? ? ? - /app/mysql/db:/var/lib/mysql

? ? ? - /app/mysql/conf/my.cnf:/etc/my.cnf

? ? ? - /app/mysql/init:/docker-entrypoint-initdb.d

? ? networks:

? ? ? - atguigu_net

? ? command: --default-authentication-plugin=mysql_native_password #解決外部無法訪問

networks:

? atguigu_net:

3.4 docker swarm

Docker三劍客之Docker Swarm - 一本正經(jīng)的搞事情 - 博客園 (cnblogs.com)

就是一個(gè)集群

3.5 Docker stack

沒有kubernetes之前? docker三劍客是必須要學(xué)到 但是現(xiàn)在有了kubernetes 就沒這個(gè)必要了? 了解一下就行

4 Docker容器部署軟件

需要經(jīng)過這幾個(gè)步驟

1 查找需要安裝的版本

2 拉取鏡像

3 創(chuàng)建容器 (目錄掛載)

4 開放端口 (如果是阿里云需要,開放阿里云端口)

5 外部訪問

4.0 jdk

dockere pull openjdk:11

docker run -d -t --name java-11 openjdk:11

4.1 MySQL

可以從docker hup中查找自己想要安裝的版本

docker pull mysql:5.7? 拉取鏡像

創(chuàng)建容器

# 在/root目錄下創(chuàng)建mysql目錄用于存儲(chǔ)mysql數(shù)據(jù)信息

mkdir /root/mysql? ? cd /root/mysql

docker run -id \

-p 3307:3306 \

--name=ydl_mysql \

-v /root/mysql/conf:/etc/mysql/conf.d \

-v /root/mysql/logs:/logs \

-v /root/mysql/data:/var/lib/mysql \

-e MYSQL_ROOT_PASSWORD=123456 \

mysql:5.7

進(jìn)入容器

docker exec -it ydl_mysql /bin/bash

進(jìn)入MySQL?

mysql -uroot -p

123456

遠(yuǎn)程連接MySQL

exit退出

如果遠(yuǎn)程連接有問題

https://www.cnblogs.com/zhangxiaoxia/p/13043508.html

修改MySQL的字符編碼

修改my.cnf 文件

cd /mydata/mysql/conf

vim my.conf

[client]

default-character-set=utf8mb4

[mysql]

default-character-set=utf8mb4

[mysqld]

init_connect='SET collation_connection = utf8mb4_bin'

init_connect='SET NAMES utf8mb4'

character_set_server = utf8mb4

collation_server = utf8mb4_bin

skip-character-set-client-handshake

skip-name-resolve

-p 3307:3306:將容器的 3306 端口映射到宿主機(jī)的 3307 端口浊伙。

-v $PWD/conf:/etc/mysql/conf.d:將主機(jī)當(dāng)前目錄下的 conf/my.cnf 掛載到容器的 /etc/mysql/my.cnf撞秋。配置目錄

-v $PWD/logs:/logs:將主機(jī)當(dāng)前目錄下的 logs 目錄掛載到容器的 /logs。日志目錄

-v $PWD/data:/var/lib/mysql :將主機(jī)當(dāng)前目錄下的data目錄掛載到容器的 /var/lib/mysql 嚣鄙。數(shù)據(jù)目錄

-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用戶的密碼吻贿。

4.1 MySQL5.7

谷粒商城

1 docker pull mysql:5.7? 下載docker鏡像

2 運(yùn)行MySQL 容器

docker run -p 3306:3306 --name mysql \

-v /mydata/mysql/log:/var/log/mysql \

-v /mydata/mysql/data:/var/lib/mysql \

-v /mydata/mysql/conf:/etc/mysql \

-e MYSQL_ROOT_PASSWORD=root \

-d mysql:5.7

參數(shù)說明

-p 3306:3306:將容器的 3306 端口映射到主機(jī)的 3306 端口

-v /mydata/mysql/conf:/etc/mysql:將配置文件夾掛載到主機(jī)

-v /mydata/mysql/log:/var/log/mysql:將日志文件夾掛載到主機(jī)

-v /mydata/mysql/data:/var/lib/mysql/:將配置文件夾掛載到主機(jī)

-e MYSQL_ROOT_PASSWORD=root:初始化 root 用戶的密碼為root

3 SQLyong進(jìn)行遠(yuǎn)程連接

grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;

flush privileges 刷新權(quán)限

4 修改配置文件

cd /mydata/mysql/conf

vim my.conf

[client]

default-character-set=utf8mb4

[mysql]

default-character-set=utf8mb4

[mysqld]

init_connect='SET collation_connection = utf8mb4_bin'

init_connect='SET NAMES utf8mb4'

character_set_server = utf8mb4

collation_server = utf8mb4_bin

skip-character-set-client-handshake

skip-name-resolve

這個(gè)字符編碼不要設(shè)置為utf8 MySQL容器會(huì)啟動(dòng)不起來 報(bào)錯(cuò)

Error response from daemon: Container 7819b1b3c5a7f3efe4ec7e8bab59e80ad13f10a57b7b5484f664b205d3c1ce0d is not running

這個(gè)是錯(cuò)誤示范

[client]

default-character-set=utf8

[mysql]

default-character-set=utf8

[mysqld]

init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8

collation-server=utf8_unicode_ci

skip-character-set-client-handshake

skip-name-resolve

[mysqld]

skip-name-resolve

4.2 Tomcat

官方的webapps是沒有文件是需要自己弄得

docker search tomcat?

docker pull tomcat

創(chuàng)建端口映射

# 在/root目錄下創(chuàng)建tomcat目錄用于存儲(chǔ)tomcat數(shù)據(jù)信息

mkdir /root/tomcat

cd /root/tomcat

docker run -id --name=ydl_tomcat \

-p 8081:8080 \

-v /root/tomcat:/usr/local/tomcat/webapps \

tomcat

外部訪問

http://宿主機(jī)ip:8081/

4.3 Nginx

docker search nginx

docker pull nginx

端口映射

# 在/root目錄下創(chuàng)建nginx目錄用于存儲(chǔ)nginx數(shù)據(jù)信息

mkdir /root/nginx

cd /root/nginx

mkdir conf

cd conf

文件配置

# 在~/nginx/conf/下創(chuàng)建nginx.conf文件,粘貼下面內(nèi)容

vim nginx.conf

user? nginx;

worker_processes? 1;

error_log? /var/log/nginx/error.log warn;

pid? ? ? ? /var/run/nginx.pid;

events {

? ? worker_connections? 1024;

}

http {

? ? include? ? ? /etc/nginx/mime.types;

? ? default_type? application/octet-stream;

? ? log_format? main? '$remote_addr - $remote_user [$time_local] "$request" '

? ? ? ? ? ? ? ? ? ? ? '$status $body_bytes_sent "$http_referer" '

? ? ? ? ? ? ? ? ? ? ? '"$http_user_agent" "$http_x_forwarded_for"';

? ? access_log? /var/log/nginx/access.log? main;

? ? sendfile? ? ? ? on;

? ? #tcp_nopush? ? on;

? ? keepalive_timeout? 65;

? ? #gzip? on;

? ? include /etc/nginx/conf.d/*.conf;

}

docker run -id --name=ydl_nginx \

-p 80:80 \

-v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \

-v /root/nginx/logs:/var/log/nginx \

-v /root/nginx/html:/usr/share/nginx/html \

nginx

外部機(jī)器訪問

4.4 Redis

docker search redis

docker pull redis:5.0

docker run -id --name=ydl_redis -p 6380:6379 redis:5.0

外部連接

谷粒商城

1下載redis

docker pull redis

如果不先創(chuàng)建這個(gè)conf文件 等會(huì)目錄進(jìn)行掛載的時(shí)候會(huì)吧redis.conf文件當(dāng)成一個(gè)目錄

mkdir -p /mydata/redis/conf && touch /mydata/redis/conf/redis.conf

2 啟動(dòng)容器 目錄掛載

docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data \

-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \

-d redis redis-server /etc/redis/redis.conf

啟動(dòng)redis客戶端

3? docker exec -it redis redis-cli

4? 在redis.conf 中寫入

appendonly yes? 開啟AOF 持久化

需要配置密碼 如果不陪著密碼很危險(xiǎn)

1在創(chuàng)建容器的時(shí)候配置密碼

--requirepass

2 創(chuàng)建容器之后配置密碼

docker exec -it 容器ID bash

進(jìn)入redis目錄

cd /usr/local/bin

運(yùn)行命令:

redis-cli

設(shè)置redis密碼

config set requirepass 密碼

如出現(xiàn):(error) NOAUTH Authentication required

這是因?yàn)閞edis設(shè)置了密碼,我們需要使用密碼來進(jìn)行驗(yàn)證之后再來對redis客戶端進(jìn)行操作哑子,否則我們沒有操作redis緩存數(shù)據(jù)庫的權(quán)限舅列。

需要用? auth 密碼

如果使用redis? 連接 Another Redis Desktop Manager

報(bào)錯(cuò)? Redis Client On Error: ReplyError: WRONGPASS invalid username-password pair or user is disabled. Con? 就不要設(shè)置用戶名

4.5 部署ELK

elasticsearch安裝

1 下載鏡像

docker pull elasticsearch:7.4.2

2? 創(chuàng)建和容器內(nèi)配置文件映射的文件

mkdir -p /mydata/elasticsearch/config

mkdir -p /mydata/elasticsearch/data

3 添加配置文件

echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml

4 添加權(quán)限

chmod -R 777 /mydata/elasticsearch/

5 運(yùn)行容器

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \

-e "discovery.type=single-node" \

-e ES_JAVA_OPTS="-Xms256m -Xmx512m" \

-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \

-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \

-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \

-d elasticsearch:7.4.2

kiban

docker pull kibana:7.4.2

docker run --name kibana \

-e ELASTICSEARCH_HOSTS=http://120.78.150.188:9200 -p 5601:5601 \

-d kibana:7.4.2

但是還要進(jìn)行目錄掛載修改 yml文件 設(shè)置中文

IK分詞器

Ik分詞器版本要和ES和Kibana版本保持一致 不然可能啟動(dòng)不了docker?

進(jìn)入容器#此命令需要在容器中運(yùn)行elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.8.0/elasticsearch-analysis-ik-7.8.0.zip

退出容器,重啟容器

exit

docker restart es7.8

4.6 nacos

如果用docker安裝naocs如果是 2版本可能會(huì)啟動(dòng)不了

docker pull nacos/nacos-server:1.3.1

docker? run \

--name nacos -d \

-p 8848:8848 \

--privileged=true \

--restart=always \

-e JVM_XMS=256m \

-e JVM_XMX=256m \

-e MODE=standalone \

-e PREFER_HOST_MODE=hostname \

nacos/nacos-server:1.3.1

訪問測試 http://43.138.137.168:8848/nacos

4.7 MQ

docker run \

-e RABBITMQ_DEFAULT_USER=zhuxiaoyi \

-e RABBITMQ_DEFAULT_PASS=412826zxyZXY \

--name rabbitmq \

--hostname mq1 \

-p 15672:15672 \

-p 5672:5672 \

-d \

rabbitmq:3-management

4.8 Nginx

mkdir /root/docker/nginx

mkdir /root/docker/nginx/conf

由于我們現(xiàn)在沒有配置文件赵抢,也不知道配置什么剧蹂。可以先啟動(dòng)一個(gè)nginx烦却,講他的配置文件拷貝出來

再作為映射宠叼,啟動(dòng)真正的nginx

docker pull nginx:1.17.4

docker run --name some-nginx -d nginx:1.17.4

docker container cp some-nginx:/etc/nginx /root/docker/nginx/conf

然后就可以刪除這個(gè)容器了

docker docker rm -f some-nginx

在重新啟動(dòng)nginx

docker run --name nginx -p 80:80 \

? ? ? ? -v /root/docker/nginx/conf:/etc/nginx \

? ? ? ? -v /root/docker/nginx/html:/usr/share/nginx/html \

? ? ? ? -d nginx:1.17.4

4.9 FTP服務(wù)器

1 需要賬號和密碼

docker run -v /data/dav:/usr/local/nginx/html? -d -p 88:80 lutixiaya/nwebdav:latest

chmod o+w /data/dav

ip+端口訪問測試 需要輸入賬號和密碼

使用winscp 進(jìn)行連接

1、點(diǎn)擊新建站點(diǎn)

2其爵、選擇協(xié)議

3冒冬、輸入服務(wù)器ip

4、輸入端口

5摩渺、輸入用戶名简烤,默認(rèn)用戶:admin

6、輸入密碼摇幻,默認(rèn)密碼:bash.lutixia.cn

7横侦、登錄

https://zhuanlan.zhihu.com/p/573721115? 參考鏈接

2 無需賬號和密碼

在同一個(gè)文件目錄下準(zhǔn)備好這個(gè)三個(gè)文件

start-nginx.sh

#!/bin/bash

mkdir data

docker stop nginx_file_server

docker rm nginx_file_server

docker run -d -p 8081:8080\

? ? ? ? --name nginx_file_server \

? ? ? ? -v $(pwd)/data:/data \

? ? ? ? -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf \

? ? ? ? -v $(pwd)/default.conf:/etc/nginx/conf.d/default.conf \

? ? ? ? nginx:stable-alpine

nginx.conf

nginx.conf

user? root;

worker_processes? 1;

error_log? /var/log/nginx/error.log warn;

pid? ? ? ? /var/run/nginx.pid;

events {

? ? worker_connections? 1024;

}

http {

? ? include? ? ? /etc/nginx/mime.types;

? ? default_type? application/octet-stream;

? ? log_format? main? '$remote_addr - $remote_user [$time_local] "$request" '

? ? ? ? ? ? ? ? ? ? ? '$status $body_bytes_sent "$http_referer" '

? ? ? ? ? ? ? ? ? ? ? '"$http_user_agent" "$http_x_forwarded_for"';

? ? access_log? /var/log/nginx/access.log? main;

? ? sendfile? ? ? ? on;

? ? #tcp_nopush? ? on;

? ? keepalive_timeout? 65;

? ? #gzip? on;

? ? include /etc/nginx/conf.d/*.conf;

}

default.conf

default.conf

server {

? ? listen 8080; #端口

? ? server_name localhost; #服務(wù)名

? ? # for SSL listen port only

? ? #ssl_certificate? ? ? ? ? ? ? ? /etc/nginx/conf.d/server.pem;

? ? #ssl_certificate_key? ? ? ? ? ? /etc/nginx/conf.d/server-key.pem;

? ? #ssl_protocols? ? ? ? ? ? ? ? ? TLSv1.2;

? ? #ssl_prefer_server_ciphers? ? ? on;

? ? #ssl_session_timeout? ? ? ? ? ? 5m;

? ? #ssl_ciphers? ? ? ? ? ? ? ? ? ? ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

? ? #underscores_in_headers? ? ? ? on;

? ? charset utf-8; # 避免中文亂碼

? ? root /data; #顯示的根索引目錄,注意這里要改成你自己的绰姻,目錄要存在

? ? location / {

? ? ? ? autoindex on;? ? ? ? ? ? #開啟索引功能

? ? ? ? autoindex_exact_size off; # 關(guān)閉計(jì)算文件確切大型鞑唷(單位bytes),只顯示大概大锌裼蟆(單位kb榨馁、mb、gb)

? ? ? ? autoindex_localtime on;? # 顯示本機(jī)時(shí)間而非 GMT 時(shí)間

? ? }

}

chmod +x start-nginx.sh && ./start-nginx.sh`

測試一下:

echo file_server > data/file1.txt

打開瀏覽器 http://127.0.0.1:8081/

4.10 DockerCompose

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version

4.11 安裝GitLab

1 下載鏡像

docker pull twang2218/gitlab-ce-zh

2 啟動(dòng)容器

docker run -d -p 8443:443 -p 8090:80 -p 8022:22 --restart always --name gitlab -v /usr/local/gitlab/etc:/etc/gitlab -v /usr/local/gitlab/log:/var/log/gitlab -v /usr/local/gitlab/data:/var/opt/gitlab --privileged=true twang2218/gitlab-ce-zh

3 進(jìn)入容器修改配置文件

由于進(jìn)行了目錄映射 也可以不在容器內(nèi)部進(jìn)行修改

docker exec -it gitlab bash

cd /etc/gitlab

vim /etc/gitlab/gitlab.yml

4 修改配置文件

搜索URL

external_url 'http://gitlab.example.com'

把url換成自己的

external_url 'http://116.205.133.97/'? ? ? ?

nginx['listen_port'] = nil

nginx['listen_port'] = 82? ? 這個(gè)是注釋掉的?

5 重啟服務(wù)

這是在容器內(nèi)部重啟服務(wù)

gitlab-ctl restart

gitlab是有很多組件組成的只有這些組件都運(yùn)行成功了帜矾,才啟動(dòng)成功翼虫。

6 訪問測試

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

http://120.78.214.226:9999/

6 進(jìn)行漢化?

在安裝插件頁面輸入 chinese

7 替換插件下載地址

https://blog.csdn.net/weixin_45878889/article/details/123867587

4.13 安裝SonarQube

https://blog.csdn.net/OfficerGoodbody/article/details/126662724

新版SonarQube不支持MySQL

1 下載postgres鏡像

docker pull postgres

2 創(chuàng)建文件

mkdir -p /opt/postgres/postgresql

mkdir -p /opt/postgres/data

3 創(chuàng)建網(wǎng)絡(luò)

docker network create sonarqube

4 運(yùn)行postgres 容器

docker run --name postgres -d -p 5432:5432 --net sonarqube \

-v /opt/postgres/postgresql:/var/lib/postgresql \

-v /opt/postgres/data:/var/lib/postgresql/data \

-v /etc/localtime:/etc/localtime:ro \

-e POSTGRES_USER=sonar \

-e POSTGRES_PASSWORD=sonar \

-e POSTGRES_DB=sonar \

-e TZ=Asia/Shanghai \

--restart always \

--privileged=true \

--network-alias postgres \

postgres:latest

5 安裝 sonarQube

docker pull sonarqube

6 準(zhǔn)備文件夾

mkdir -p /opt/sonarqube

echo "vm.max_map_count=262144" > /etc/sysctl.conf

sysctl -p

7 先運(yùn)行一下拷貝文件

docker run -d --name sonarqube sonarqube

docker cp sonarqube:/opt/sonarqube/conf /opt/sonarqube

docker cp sonarqube:/opt/sonarqube/data /opt/sonarqube

docker cp sonarqube:/opt/sonarqube/logs /opt/sonarqube

docker cp sonarqube:/opt/sonarqube/extensions /opt/sonarqube

8 刪除容器

docker stop? sonarqube

docker rm? sonarqube

9 添加權(quán)限

chmod -R 777 /opt/sonarqube/

10 修改配置文件

vim /opt/sonarqube/conf/ sonar.properties

修改賬號和密碼

sonar.jdbc.username=sonar

sonar.jdbc.password=sonar

sonar.jdbc.url=jdbc:postgresql://postgres:5432/sonar

11 運(yùn)行容器

docker run -d --name sonarqube -p 9090:9000 \

-e ALLOW_EMPTY_PASSWORD=yes \

-e SONARQUBE_DATABASE_USER=sonar \

-e SONARQUBE_DATABASE_NAME=sonar \

-e SONARQUBE_DATABASE_PASSWORD=sonar \

-e SONARQUBE_JDBC_URL="jdbc:postgresql://postgres:5432/sonar" \

--net sonarqube \

--privileged=true \

--restart always \

-v /opt/sonarqube/logs:/opt/sonarqube/logs \

-v /opt/sonarqube/conf:/opt/sonarqube/conf \

-v /opt/sonarqube/data:/opt/sonarqube/data \

-v /opt/sonarqube/extensions:/opt/sonarqube/extensions\

sonarqube

12測試訪問

瀏覽器輸入http://ip:9090屑柔,開始初始化數(shù)據(jù)庫初始化成功后進(jìn)入登錄界面,賬號:admin? 密碼:admin

4.14 Zabbix

docker-compose

1 安裝git

yum -y install git

2 下載 代碼

git clone https://github.com/zabbix/zabbix-docker

注意要把整個(gè)代碼下載下來不要只下載docker-compose文件否則會(huì)報(bào)錯(cuò)? 因?yàn)槿笔?數(shù)據(jù)庫文件?

3 進(jìn)入到 abbix-docker目錄

4 啟動(dòng)docker-compose

docker-compose -f docker-compose_v3_centos_mysql_latest.yaml up -d

5 web界面訪問

http://120.46.214.226

http:ip:端口/zabbix,默認(rèn)端口80珍剑,httpd服務(wù)端口

默認(rèn)登錄用戶 Admin 掸宛,密碼 zabbix

5 docker可視化工具

輕量級portanier

? 下載? docker pull lihaixin/portainer

docker run -d -p 9000:9000 --restart=always \

-v /var/run/docker.sock:/var/run/docker.sock \

--name portainer lihaixin/portainer

訪問測試? http://43.138.137.168:9000/#/home

重量級 容器監(jiān)控

docker-compose.yml配置?

version: '3.1'

volumes:

? grafana_data: {}

services:

influxdb:

? image: tutum/influxdb:0.9

? restart: always

? environment:

?? - PRE_CREATE_DB=cadvisor

? ports:

?? - "8083:8083"

?? - "8086:8086"

? volumes:

?? - ./data/influxdb:/data

cadvisor:

? image: google/cadvisor

? links:

?? - influxdb:influxsrv

? command:

? -storage_driver=influxdb - storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086

? restart: always

? ports:

?? - "8080:8080"

? volumes:

?? - /:/rootfs:ro

?? - /var/run:/var/run:rw

?? - /sys:/sys:ro

?? - /var/lib/docker/:/var/lib/docker:ro

grafana:

? user: "104"

? image: grafana/grafana

? user: "104"

? restart: always

? links:

?? - influxdb:influxsrv

? ports:

?? - "3000:3000"

? volumes:

?? - grafana_data:/var/lib/grafana

? environment:

?? - HTTP_USER=admin

?? - HTTP_PASS=admin

?? - INFLUXDB_HOST=influxsrv

?? - INFLUXDB_PORT=8086

?? - INFLUXDB_NAME=cadvisor

?? - INFLUXDB_USER=root

?? - INFLUXDB_PASS=root

關(guān)于我

我的博客內(nèi)容步驟是很完整的,也分享源碼和實(shí)驗(yàn)用到的軟件招拙,希望能和大家一起共同進(jìn)步旁涤!

各位小伙伴在實(shí)際操作過程中如有什么疑問,可隨時(shí)聯(lián)系本人免費(fèi)幫您解決問題

1 V 15938366900 QQ 1576664340

2 微信公眾號? 朱嘯毅

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末迫像,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瞳遍,更是在濱河造成了極大的恐慌闻妓,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掠械,死亡現(xiàn)場離奇詭異由缆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)猾蒂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門均唉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肚菠,你說我怎么就攤上這事舔箭。” “怎么了蚊逢?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵层扶,是天一觀的道長。 經(jīng)常有香客問我烙荷,道長镜会,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任终抽,我火速辦了婚禮戳表,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘昼伴。我一直安慰自己匾旭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布亩码。 她就那樣靜靜地躺著季率,像睡著了一般。 火紅的嫁衣襯著肌膚如雪描沟。 梳的紋絲不亂的頭發(fā)上飒泻,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天鞭光,我揣著相機(jī)與錄音,去河邊找鬼泞遗。 笑死惰许,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的史辙。 我是一名探鬼主播汹买,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼聊倔!你這毒婦竟也來了晦毙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤耙蔑,失蹤者是張志新(化名)和其女友劉穎见妒,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甸陌,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡须揣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钱豁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耻卡。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖牲尺,靈堂內(nèi)的尸體忽然破棺而出卵酪,到底是詐尸還是另有隱情,我是刑警寧澤秸谢,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布凛澎,位于F島的核電站,受9級特大地震影響估蹄,放射性物質(zhì)發(fā)生泄漏塑煎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一臭蚁、第九天 我趴在偏房一處隱蔽的房頂上張望最铁。 院中可真熱鬧,春花似錦垮兑、人聲如沸冷尉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雀哨。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間雾棺,已是汗流浹背膊夹。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捌浩,地道東北人放刨。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像尸饺,于是被迫代替她去往敵國和親进统。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容