幫助檔案:
1.解除安裝舊的
apt-get remove docker docker-engine docker.io containerd runc
2.設定儲存庫
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
3.新增 Docker 的官方 GPG 金鑰:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
4.用以下命令設定儲存庫:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
4.安裝docker相關
ce是社群,ee是企業
apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
5啟動docker 驗證 Docker 引擎是否已正確安裝。
docker run hello-world
6檢視版本
docker version
顯示
Client: Docker Engine - Community
Version: 20.10.17
API version: 1.41
Go version: go1.17.11
Git commit: 100c701
Built: Mon Jun 6 23:02:57 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.17
API version: 1.41 (minimum version 1.12)
Go version: go1.17.11
Git commit: a89b842
Built: Mon Jun 6 23:01:03 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.6
GitCommit: 10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
runc:
Version: 1.1.2
GitCommit: v1.1.2-0-ga916309
docker-init:
Version: 0.19.0
GitCommit: de40ad0
8.檢視image
docker images
9.修改預設的拉取映象地址
/etc/docker/daemon.json
9.解除安裝docker的時候用
apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin
主機上的映像、容器、卷或自定義組態檔不會自動刪除。要刪除所有映像、容器和卷:
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
10.啟動docker
11。停止docker
1.登入阿里雲
2.直接搜尋:映象容器服務,點選進入控制檯->映象工具->映象加速器
使用加速器可以提升獲取Docker官方映象的速度
加速器地址 |
---|
https://cgys1rlc.mirror.aliyuncs.com |
針對Docker使用者端版本大於 1.10.0 的使用者
您可以通過修改daemon組態檔/etc/docker/daemon.json來使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://cgys1rlc.mirror.aliyuncs.com"]
}
sudo systemctl daemon-reload
sudo systemctl restart docker
開始,在本機找映象,有就用,沒有就在dockerhub下載,如果dockerhub找到,下載本地執行,找不到報錯。
docker version #顯示版本資訊
docker info #顯示更詳細資訊
docker --help #幫助資訊
幫助檔案地址:
docker images --help
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 8 months ago 13.3kB
#解釋
REPOSITORY 映象的倉庫源
TAG 映象的標籤
IMAGE ID 映象的id
CREATED 映象的建立時間
SIZE 映象的大小
docker search mysql #搜尋mysql
docker search mysql --filter=STARS=3000 #搜尋出來的大於等於3000
docker pull mysql #下載mysql
docker pull 映象名[:tag]如果不寫是預設latest
採用分層下載,聯合檔案系統,還有簽名 ,docker.io是真實地址
docker pull mysql==docker pull docker.io/library/mysql:latest
docker rmi-f 刪除制定的映象
docker rmi -f id id 刪除多個映象
docker rmi-f $(docker images -aq) 遞迴刪除全部映象
docker run -it centos /bin/bash
--name 給容器的別名
-P 隨機外部埠對映容器內部埠
-p 指定埠 比如: -p 5000:5000
-d 容器後臺執行
exit #容器停止退出
ctrl+p+q#不停止退出
docker ps
docker -ps -a
容器狀態有7種:
created(已建立)
restarting(重啟中)
running(執行中)
removing(遷移中)
paused(暫停)
exited(停止)
dead(死亡)
docker rm 容器id #刪除制定的容器 ,如果刪除正在執行的容器 -f
docker rm -f $(docker ps -aq) #刪除所有容器
docker ps -a -q|xargs docker rm #刪除所有容器
docker start 容器id #啟動容器
docker restart 容器id #重啟容器
docker stop 容器id #停止當前容器
docker kill 容器id #強制停止容器
docker run -d -it 映象名
docker logs -f -t 容器id
docker logs -t -f --tail 20 容器id檢視20條
寫一段指令碼
while true;do echo kuangshen;sleep 1;done
docker top 容器id
UID PID PPID C STIME TTY TIME CMD
root 18275 18256 0 15:17 ? 00:00:00 /bin/sh -c while true;do echo kuangshen;sleep 1;done
root 20274 18275 0 15:31 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
docker inspect 容器id
返回的資料
[
{
"Id": "345af6e6f41f2364d48cb91e66afbf50c994e9a4619e66f0af5ae6a42610ee8d",
"Created": "2022-06-17T07:17:00.304042239Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo kuangshen;sleep 1;done"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 18275,
"ExitCode": 0,
"Error": "",
"StartedAt": "2022-06-17T07:17:00.902769488Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
"ResolvConfPath": "/var/lib/docker/containers/345af6e6f41f2364d48cb91e66afbf50c994e9a4619e66f0af5ae6a42610ee8d/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/345af6e6f41f2364d48cb91e66afbf50c994e9a4619e66f0af5ae6a42610ee8d/hostname",
"HostsPath": "/var/lib/docker/containers/345af6e6f41f2364d48cb91e66afbf50c994e9a4619e66f0af5ae6a42610ee8d/hosts",
"LogPath": "/var/lib/docker/containers/345af6e6f41f2364d48cb91e66afbf50c994e9a4619e66f0af5ae6a42610ee8d/345af6e6f41f2364d48cb91e66afbf50c994e9a4619e66f0af5ae6a42610ee8d-json.log",
"Name": "/vigilant_panini",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "docker-default",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"CgroupnsMode": "host",
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DeviceRequests": null,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/28560556e74af8a61d99ee96d3b98c2defa0774274384161c559187b5fac0473-init/diff:/var/lib/docker/overlay2/fcb5c270854d34709d71337480437be0e69003ebca9daf39fd1796c293b88d2d/diff",
"MergedDir": "/var/lib/docker/overlay2/28560556e74af8a61d99ee96d3b98c2defa0774274384161c559187b5fac0473/merged",
"UpperDir": "/var/lib/docker/overlay2/28560556e74af8a61d99ee96d3b98c2defa0774274384161c559187b5fac0473/diff",
"WorkDir": "/var/lib/docker/overlay2/28560556e74af8a61d99ee96d3b98c2defa0774274384161c559187b5fac0473/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "345af6e6f41f",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/sh",
"-c",
"while true;do echo kuangshen;sleep 1;done"
],
"Image": "centos",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20210915",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "dae4f55d59e869c39417f01d08885567f026c3682c52ef279a2d544fb30e5b63",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/dae4f55d59e8",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "90bf5aedb85730b19d7cfd87f940180253850909f80bd464ca857179becad8ef",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "1e8be48fc967fe40643b0e7ab45fd195182b044fc7e654375cb49dba6af35861",
"EndpointID": "90bf5aedb85730b19d7cfd87f940180253850909f80bd464ca857179becad8ef",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]
docker exec -it 容器id/bin/bash ##進入容器開啟新終端
docker attach 容器id #進入容器在原來的終端,可以看到之前的程式碼
docker cp 容器id:容器內路徑 目的主機路徑
attach 當前shell下attach連線制定執行映象
build 通過dockerfile客製化映象
commit 提交當前容器為新的映象
cp 從容器拷貝制定檔案或者目錄到宿主機
create 建立一個新的容器,不啟動
diff 檢視容器變化
events 從服務獲取容器實時時間
exec 在已存在的容器上執行命令
export 匯出容器的內容流作為一個tar歸檔檔案對應import
history 展示一個映象形成歷史
images 列出系統當前映象
import 從tar包中的內容建立一個新的檔案系統映象
info 顯示系統的相關資訊
inspect 檢視容器詳細資訊
kill kill掉制定容器
load 從一個tar包載入一個映象[對應一個save]
login 註冊或登入一個docker伺服器源
logout 從當前原伺服器退出
logs 輸出當前伺服器紀錄檔
port 檢視對映埠對應的容器源端
pause 暫停容器
ps 列出容器列表
pull 從docker源拉取映象
push 推播到制定映象或者docker源
restart 重啟執行中的映象
rm一處一個或多個容器
rmi 移除映象
run 建立一個容器並執行
save 儲存一個映象為tar包[對應load]
search 在dockerhub搜映象
start 啟動映象
stop 停止映象
tag 給源映象打標籤
top 看容器執行程序
unpause 取消暫停容器
version 檢視docker版本
wait 擷取容器停止時的退出狀態值
status 檢視docker 狀態
1.搜尋映象
2.下載映象
3.啟動映象
4。執行測試:docker run -d --name nginx01 -p 3344:80 nginx
es需要掛載
es需要記憶體
es需要暴露多埠
portainer(先用這個)
docker圖形化管理工具
Rancher(ci/cd再用)
docker commit 提交容器成為一個新副本
docker commit -m "內容" -a "作者" 容器id 目標映象名:[tag]
防止容器刪除後資料丟失,有了資料卷可以儲存到電腦,將容器目錄掛載到linux上面
-v 掛載
docker run -it -v 主機目錄:容器內目錄
掛載完成之後:
Mounts裡就會繫結兩者的關係
source 主機內地址
destination docker容器內的地址
容器內新增可以新增到外部,屬於雙向繫結了是
1.查詢mysql
2.下載映象
3.啟動,需要資料掛載
不指定主機名 直接是容器內的目錄: docker run -d -P --name nginx01 -v /ect/nginx nginx
所有不指定寧docker容器內的卷,在沒有指定 /var/lib/docker/volumes/xxx/_data
區分具名匿名
-v 容器內路徑 是匿名掛載
-v 卷名:容器內路徑 具名掛載
-v /宿主機器路徑::容器內路徑 指定路徑掛載
通過 -v 容器內路徑:ro rw 改變讀寫許可權
ro 唯讀
rw 可讀可寫
一旦設定了這個容器許可權 只能通過宿主機來操作,容器內部無法操作的 ,ro說明只能通過宿主機來操作,容器內部無法操作
docker run -d -p --name nginx01 -v juming-nginx:/etc/nginx:rw nginx
docker run -d -p --name nginx01 -v juming-nginx:/etc/nginx:ro nginx
1編寫映象檔案dockerfile1
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "--------end------------"
CMD /bin/bash
執行docker命令執行檔案注意上全路徑,結尾有個空格點
docker build -f /home/player3/檔案/dockerfile1.Dockerfile -t player3/centos .
3.啟動容器
docker run -it player3/centos /bin/bash
4.檢視檔案
[root@d6bb2b70632d /]# ls
bin etc lib lost+found mnt proc run srv tmp var volume02
dev home lib64 media opt root sbin sys usr volume01
我們生成的目錄自動掛載的
5.在容器內建立一個目錄,檢視容器裡是否有,檢視匿名掛載路徑
docker inspect d6bb2b70632d
"Mounts": [
{
"Type": "volume",
"Name": "d451a845fdd349e203b65f76080c57e070d7fcfecb9744363780ccc13db286b0",
"Source": "/var/lib/docker/volumes/d451a845fdd349e203b65f76080c57e070d7fcfecb9744363780ccc13db286b0/_data",
"Destination": "volume01",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "438fcc6181fde2565c4e8c995a3a1aa7973cc91fa345c2b396415f4453e3f8a9",
"Source": "/var/lib/docker/volumes/438fcc6181fde2565c4e8c995a3a1aa7973cc91fa345c2b396415f4453e3f8a9/_data",
"Destination": "volume02",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
6進入本地目錄看是否出現,本地電腦新增一個都有
root@player3-TM1613:/var/lib/docker/volumes/d451a845fdd349e203b65f76080c57e070d7fcfecb9744363780ccc13db286b0/_data# ls
demo01.txt
7.測試刪除容器,發現這個本地掛載的資料還在
可以實現什麼,比如多個mysql同步資料?
volumes-form 容器名,將容器資料卷掛載到其他的資料捲上,屬於繼承了上一層的資料卷,多個資料卷的資料相互複製,刪除掉源頭docker並不會對現有檔案造成影響
docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
docker run -d -p 3311:3307 -v /etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 mysql:5.7 --volumes-form mysql01
結論:容器之間的生命週期,一直到所有容器都沒有使用為止,本地資料卷的資料是不會刪除的。
1.編寫dockerfile檔案,檔案首字母大寫
2.dockerbuild 構件成一個映象
3.docker run 執行映象
4.docker push 釋出映象 (ducherhub,阿里雲映象倉庫)
dockerFile:構建檔案,定義了一切的步驟,原始碼
dockerimages:通過dockerfile構建生成的映象,最終釋出和執行的產品,原來是jar,war。
docker容器:容器就是映象執行起來提供伺服器
基礎知識:
1.每個保留關鍵字(指令)都是必須大寫的
2.執行從上到下順序執行
3。#表示註釋
4.每個指令都會建立提交一個新的映象層
FROM 指定基本映象,一切映象從這裡開始
MAINTAINER 負責人,一般姓名+郵箱
RUN 構建映象的時候需要執行的命令
ADD 步驟,tomcat映象的化tomcat的壓縮包,新增內容
WORKDIR 映象的工作目錄
VOLUME 掛載的目錄
EXPOSE 對外暴露的埠
CMD 命令列操作
ENTRYPOINT 指定容器啟動的時候要執行的命令,可以追加命令
ONBUILD 當構建一個被繼承dockerfile 這個時候就會執行ONBUILD的指令,觸發指令
COPY 類似add,將檔案拷貝到映象中
ENV 設定構建的環境變數
1.構建一個自己的centos映象
mycentos.Dockerfile
FROM centos
MAINTAINER kuangshen<[email protected]>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo A$MYPATH
CMD /bin/bash
2.build
docker build -f /home/player3/檔案/mycentos.Dockerfile -t player3/mycentos .
3.執行 docker run -it dsoadihaso /bin/bash
檢視映象的構建過程 docker history odsakdlkasjdl
cmd 指定這個容器啟動要執行的命令,之後最後一個會生效,可以被替代
entrypoint 指定這個容器啟動要執行的命令,可以追加命令
cmd的file
FROM centos
CMD ['ls',"-a"]
docker build -f xxx -t cmdtest .
docker run aa1111
會自動將最後的cmd命令執行,如果想追加命令不能在後面直接加應該這樣寫
docker run aa1111 ls-al
entrypoint的file
FROM centos
ENTRYPOINT ['ls',"-a"]
docker build -f xxx -t entrypointtest .
docker run aa1111
會自動將最後的cmd命令執行,如果想追加命令可以直接填上後面
docker run aa1111 l
ducokerhub
1.地址:https://hub.docker.com 註冊自己的賬號
2.確定賬號可以正常登入
3.在伺服器上提交我們的映象
dockerlogin --help
-u -p
使用者名稱,密碼
4登入之後可以提交映象,docker push
本地提交到遠端儘量帶上版本資訊和tag
docker tag 5d0da3dc9764 player3/centos:0.0.1
docker push player3/centos:0.0.1
釋出到阿里雲
1.登入到阿里雲
2.找到容器映象服務
3.找到映象倉庫
4.建立名稱空間
5。建立映象倉庫
6其他參考官方檔案
ip addr
第一個是迴環地址,第二個是內網地址,第三個是docker地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether a0:c5:89:32:9c:d1 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.109/24 brd 192.168.10.255 scope global dynamic noprefixroute wlp2s0
valid_lft 6054sec preferred_lft 6054sec
inet6 fe80::8d0a:e31a:72d0:f111/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:83:6a:8a:86 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
docker是如何處理網路問題
docker 可以ping通容器內部
正常電腦本機192.168.0.1 路由器地址,手機連線WiFi了,192.168.0.2,可以相互ping 可以相互ping通。
原理
1.我們每啟動一個docker容器,docker就會給docker容器分配一個ip,我們只需要安裝docker就會有一個網路卡docker0
使用橋接模式,使用的技術是evth-pair 技術(虛擬裝置介面)。
啟動容器後出現的網路卡是成對出現的,一端連著協定,一端彼此相連。
2.不同容器之間可以ping通的
docker exec -it tomcat2 ping xxx
3.結論,tomcat1和tomcat是公用一個路由,docker0,所有容器不指定網路的情況下,都是使用docker0路由的,docker會給我們的容器分配一個預設的可用ip
4.docker中所有的網路介面都是虛擬的,虛擬轉發效率高(內網傳遞檔案)
只要容器刪除,對應的網橋一對就沒了
場景:編寫了一個微服務,database.rul=ip;; 專案不重啟,ip換掉了,希望處理這個問題,可以名字來存取容器.
想通過服務去ping tomcat02能ping通嗎?
docker exec -it tomcat02 ping tomcat01
ping不通
啟動tomcat03
docker run -d -P --name tomcat3 --link tomcat02 tomcat01
通過—link就解決了這個問題,反向是不可以ping通的
當我們設定容器的時候不設定ip會給容器設定預設ip,我們可以通過docker inspect去看
docker exec -it tomcat03 cat /etc/hosts
通過檢視tomcat03的docker host ,增加了tomcat02,tomcat01的本地對映
現在玩docker的時候已經不建議使用–link了,自定義網路,不適用docker0,docker0的問題,不支援容器名連線存取
docker network ls 檢視所有的溫昂羅
docker network rm id 刪除某個網路
docker create
網路模式
bridge:橋接,預設
none:不設定網路
host:和宿主機共用網路
container:容器網路連線(用的少,侷限很大)
測試
docker run -d -p --name tomcat01 tomcat
docker run -d -p --name tomcat01 tomcat --net bridge tomcat 上面的預設執行了這個
docker0特點;預設,域名不能存取,--link可以打通連線
我們可以自定一個網路
--driver bridge 模式
--subnet 192.168.0.0/16 多少個子網
--gateway 192.168.0.1 +閘道器路由
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
root@player3-TM1613:/home/player3# docker network ls
NETWORK ID NAME DRIVER SCOPE
430c633bd795 bridge bridge local
a288f78f519b host host local
74783c519ad2 mynet bridge local
7d3b1deefd46 none null local
docker run -d -P --name tomcat01 --net mynet tomcat
當你不適用–link也可以ping通名字 了
好處:不同的叢集使用不同的網路,叢集是安全和健康的
我們都知道網段不同是無法ping通的,如何打通docker0和自定義網路呢?
docker network connect 可以打通網路
docker network connect mynet tomcat01
聯通之後就是將tomcat01放到了mynet網路下,一個容器兩個ip
1.建立網路卡
docker network create redis --subnet 192.168.0.0/16
2.檢視服務
docker network ls
docker network inspect redis
3.建立6個redis服務
for port in $(seq 1 6); \
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF > /mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
Cluster-enabled yes
Cluster-config-file nodes.conf
Cluster-node-timeout 5000
Cluster-announce-ip 192.168.0.1${port}
Cluster-announce-port 6379
Cluster-announce-bus-port 16379
appendonly yes
EOF
done
4.啟動redis(6個)
node-1
docker run -p 6379:6379 -p 16379:16379 --name redis-1 \
-v /mydata/redis/node-1/data:/data \
-v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 192.168.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
node-2
docker run -p 6372:6379 -p 16372:16379 --name redis-2 \
-v /mydata/redis/node-2/data:/data \
-v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 192.168.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
node-3
docker run -p 6373:6379 -p 16373:16379 --name redis-3 \
-v /mydata/redis/node-3/data:/data \
-v /mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 192.168.0.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
node-4
docker run -p 6374:6379 -p 16374:16379 --name redis-4 \
-v /mydata/redis/node-4/data:/data \
-v /mydata/redis/node-4/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 192.168.0.14 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
node-5
docker run -p 6375:6379 -p 16375:16379 --name redis-5 \
-v /mydata/redis/node-5/data:/data \
-v /mydata/redis/node-5/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 192.168.0.15 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
node-6
docker run -p 6376:6379 -p 16376:16379 --name redis-6 \
-v /mydata/redis/node-6/data:/data \
-v /mydata/redis/node-6/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 192.168.0.16 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
redis中沒有bash只有 sh
5.進入其中一個容器
docker exec -it redis-1 /bin/sh
6執行叢集命令
redis-cli --cluster create 192.168.0.11:6379 192.168.0.12:6379 192.168.0.13:6379 192.168.0.14:6379 192.168.0.15:6379 192.168.0.16:6379 --cluster-replicas 1
輸入yes
7.連線叢集
redis-cli -c
127.0.0.1:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:209
cluster_stats_messages_pong_sent:229
cluster_stats_messages_sent:438
cluster_stats_messages_ping_received:224
cluster_stats_messages_pong_received:209
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:438
8.設定值
set a b
get a
可以正常獲取
9.檢視主從節點,13的從是14
192.168.0.13:6379> cluster nodes
dda9df6e38727c5ad0667278cb77f96d91973f65 192.168.0.15:6379@16379 slave f6dc83295bb2d7e9a0436fff935dbd6e441ef8cf 0 1655738988807 5 connected
cf8b3f0cc101c2bce9f57d10349676a37ed0538c 192.168.0.14:6379@16379 slave 2c1949dcb59bff7a4cb49b0af04d15978987daaa 0 1655738988507 4 connected
2c1949dcb59bff7a4cb49b0af04d15978987daaa 192.168.0.13:6379@16379 myself,master - 0 1655738986000 3 connected 10923-16383
86ad41983210bdd6fd8c723851820852e57f2c0d 192.168.0.12:6379@16379 master - 0 1655738988306 2 connected 5461-10922
1e1386760e3421384022567658601b9dcae3ef02 192.168.0.16:6379@16379 slave 86ad41983210bdd6fd8c723851820852e57f2c0d 0 1655738988000 6 connected
f6dc83295bb2d7e9a0436fff935dbd6e441ef8cf 192.168.0.11:6379@16379 master - 0 1655738987000 1 connected 0-5460
10.停止docker的node-3節點
docker stop node-3
11.重新獲取,發現卡頓,ctrl+c結束後,重新登入,發現從節點已經切換成功
-> Redirected to slot [15495] located at 192.168.0.14:6379
"b"
192.
1.構建springboot專案
正常編寫web專案並且測試
1.1下載dockerfile外掛
2.打包應用
3.編寫dockerfile
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
4.構建映象
將dockerfile+jar包上傳到伺服器
docker build -t kuangshen666 .
5釋出執行
docker run -d -p 8080:8080 --name kunagshen-springboot-web kuangshen666
本文來自部落格園,作者:三號小玩家,轉載請註明原文連結:https://www.cnblogs.com/q1359720840/p/16395260.html