map與flatMap
安裝docker
3.清除以前的版本
官網地址:https://docs.docker.com/engine/install/centos/
docker安裝第一步
docker安裝第二步
yum install -y yum-utils
docker安裝第三步
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
docker安裝第四步
更新yum軟體包
yum makecache fast yum install docker-ce docker-ce-cli containerd.io
docke啟動
systemctl start docker
檢視docker程序
檢視安裝的Docker版本:docker version
[root@dalei ~]# ps -ef |grep docker
root 1990 1 0 14:21 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root 2152 30596 0 14:21 pts/0 00:00:00 grep --color=auto docker
執行hello-world
docker run hello-world
檢視映象
docker images
寶塔面板檢視命令
[root@dalei ~]# /etc/init.d/bt default ================================================================== BT-Panel default info! ================================================================== 外網面板地址: http://101.132.144.73:8888/d709a4a2 內網面板地址: http://172.17.5.249:8888/d709a4a2 *以下僅為初始預設賬戶密碼,若無法登入請執行bt命令重置賬戶/密碼登入 username: oru2qlgz password: ee9a0029 If you cannot access the panel, release the following panel port [8888] in the security group 若無法訪問面板,請檢查防火牆/安全組是否有放行面板[8888]埠 ==================================================================
Docker的學習:
3.配置映象加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://79xej63t.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
埠暴露的概念
[root@dalei ~]# docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
Unable to find image 'portainer/portainer:latest' locally
latest: Pulling from portainer/portainer
d1e017099d17: Pull complete
717377b83d5c: Pull complete
Digest: sha256:f8c2b0a9ca640edf508a8a0830cf1963a1e0d2fd9936a64104b3f658e120b868
Status: Downloaded newer image for portainer/portainer:latest
5edb6eee4983ba08d6cccafa0cf30b49b5cdd6aa5e6eb604932e60daa07b129e
[root@dalei ~]# docker commit -a="dalei" -m="add webapps app" 035155329b0e tomcat02:1.0
sha256:887da9a21d606d541471e3de38a8ac76f6e77d5807a3da576ad5c11adbe0531e
[root@dalei ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat02 1.0 887da9a21d60 6 seconds ago 653MB
<none> <none> 04409e160b74 38 seconds ago 653MB
tomcat latest 2703bbe9e9d4 4 days ago 648MB
nginx latest c39a868aad02 10 days ago 133MB
redis latest 62f1d3402b78 2 weeks ago 104MB
mysql 5.7 1b12f2e9257b 3 weeks ago 448MB
centos latest 0d120b6ccaa8 3 months ago 215MB
portainer/portainer latest 62771b0b9b09 3 months ago 79.1MB
hello-world latest bf756fb1ae65 10 months ago 13.3kB
容器資料卷
[root@dalei ~]# cd /home
[root@dalei home]# ls
admin ceshi redis www
[root@dalei home]# docker run -it -v /home/ceshi:/home centos /bin/bash
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
Status: Downloaded newer image for centos:latest
[root@17c4834e900b /]#
[root@dalei home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
17c4834e900b centos "/bin/bash" 54 seconds ago Up 53 seconds distracted_yonath
5edb6eee4983 portainer/portainer "/portainer" 2 hours ago Up 2 hours 0.0.0.0:8088->9000/tcp awesome_elbakyan
035155329b0e 2703bbe9e9d4 "catalina.sh run" 23 hours ago Up 23 hours 0.0.0.0:8081->8080/tcp crazy_williamson
2ffb016291b9 centos "/bin/bash" 27 hours ago Up 27 hours inspiring_tesla
[root@dalei home]# docker rm -f 2ffb016291b9
2ffb016291b9
[root@dalei home]# docker inspect 17c4834e900b
[
{
"Id": "17c4834e900bb5b4b520b36db94074699bee1fd5b4fe2de5440e1dfa729c3fe6",
"Created": "2020-11-16T14:34:46.430772975Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 29512,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-11-16T14:34:46.933422121Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566",
"ResolvConfPath": "/var/lib/docker/containers/17c4834e900bb5b4b520b36db94074699bee1fd5b4fe2de5440e1dfa729c3fe6/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/17c4834e900bb5b4b520b36db94074699bee1fd5b4fe2de5440e1dfa729c3fe6/hostname",
"HostsPath": "/var/lib/docker/containers/17c4834e900bb5b4b520b36db94074699bee1fd5b4fe2de5440e1dfa729c3fe6/hosts",
"LogPath": "/var/lib/docker/containers/17c4834e900bb5b4b520b36db94074699bee1fd5b4fe2de5440e1dfa729c3fe6/17c4834e900bb5b4b520b36db94074699bee1fd5b4fe2de5440e1dfa729c3fe6-json.log",
"Name": "/distracted_yonath",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": [
"/home/ceshi:/home"
],
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"Capabilities": null,
"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/a720637b8461d1be30f95905dc6ac7f3c6abaaa4261232c35848dd51958057ca-init/diff:/var/lib/docker/overlay2/0dd06eeacf2c68d33fc7a1353aa49554ea6375dd3e66f6aa07111f7405e32546/diff",
"MergedDir": "/var/lib/docker/overlay2/a720637b8461d1be30f95905dc6ac7f3c6abaaa4261232c35848dd51958057ca/merged",
"UpperDir": "/var/lib/docker/overlay2/a720637b8461d1be30f95905dc6ac7f3c6abaaa4261232c35848dd51958057ca/diff",
"WorkDir": "/var/lib/docker/overlay2/a720637b8461d1be30f95905dc6ac7f3c6abaaa4261232c35848dd51958057ca/work"
},
"Name": "overlay2"
},
"Mounts": [
{
"Type": "bind",
"Source": "/home/ceshi",
"Destination": "/home",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
"Config": {
"Hostname": "17c4834e900b",
"Domainname": "",
"User": "",
"AttachStdin": true,
"AttachStdout": true,
"AttachStderr": true,
"Tty": true,
"OpenStdin": true,
"StdinOnce": true,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/bash"
],
"Image": "centos",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20200809",
"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": "155c3bdabc6afa8f74c808641222feface45317386e89fdfa24bba2d90527969",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/155c3bdabc6a",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "5e0b974007d8e79bf7307edf881af034b9baa0abbfc19b10dc59c805a830f1f2",
"Gateway": "172.18.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.18.0.5",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:12:00:05",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "eef38011cc7d45533cc62e5e2c8dde9a7c672b1e6736021bb223c7b80e33676c",
"EndpointID": "5e0b974007d8e79bf7307edf881af034b9baa0abbfc19b10dc59c805a830f1f2",
"Gateway": "172.18.0.1",
"IPAddress": "172.18.0.5",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:12:00:05",
"DriverOpts": null
}
}
}
}
]
"Mounts": [
{
"Type": "bind",
"Source": "/home/ceshi",
"Destination": "/home",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
啟動我們的Mysql容器
root@dalei home]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
f478495a78509de1be0c4f61d9079b9264d83834fdbfc726ae8e570165f314be
[root@dalei home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f478495a7850 mysql:5.7 "docker-entrypoint.s…" 6 seconds ago Up 5 seconds 33060/tcp, 0.0.0.0:3310->3306/tcp mysql01
17c4834e900b centos "/bin/bash" 51 minutes ago Up 37 minutes distracted_yonath
5edb6eee4983 portainer/portainer "/portainer" 3 hours ago Up 3 hours 0.0.0.0:8088->9000/tcp awesome_elbakyan
035155329b0e 2703bbe9e9d4 "catalina.sh run" 24 hours ago Up 24 hours 0.0.0.0:8081->8080/tcp crazy_williamson
DockerFile
建立一個自己的centos
實戰Tomcat映象
4.啟動映象
5.訪問測試
6.釋出專案
釋出自己的映象
Docker網路
理解Docker0
移除所有的容器
[root@dalei ~]# docker rm -f $(docker ps -aq)
[root@dalei ~]# docker rmi -f $(docker images -aq)
移除所有的映象
原理
#檢視hosts配置,在這裡配置了tomcat02的配置
[root@dalei ~]# docker exec -it tomcat03 cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.3 tomcat02 104ddec21caa
172.18.0.4 788f10904bcf
[root@dalei ~]#
--link 就是在我們的hosts配置增加了一個172.18.0.3 tomcat02 104ddec21caa
我們真實玩Docker已經不建議使用--link了
自定義網路!不適用docker0!
docker0問題:他不支援容器名連線訪問!
自定義網路
檢視所有的docker網路
網路模式
bridge:橋接docker(預設,自己建立也使用bridge模式)
none:不配置網路
host:和宿主機共享網路
container:容器網路連通!(用的少!侷限很大)
測試
# 我們直接啟動的命令 --net bridge,而這個就是我們的docker0
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net bridge tomcat
# docker0特點,域名不能訪問,--link可以打通連線
# 我們可以自定義一個網路!
# [root@dalei ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
9aa3f1b75ea8478bf2709d504395e8de38642cc40c4eed3c0cbf7e63cc09e7e1
[root@dalei ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
eef38011cc7d bridge bridge local
5a6e12bad5ed host host local
9aa3f1b75ea8 mynet bridge local
ac897d376939 none null local
[root@dalei ~]#
啟動兩個容器
[root@dalei ~]# docker run -d -P --name tomcat-net-01 --net mynet tomcat
Unable to find image 'tomcat:latest' locally
latest: Pulling from library/tomcat
e4c3d3e4f7b0: Pull complete
101c41d0463b: Pull complete
8275efcd805f: Pull complete
751620502a7a: Pull complete
a59da3a7d0e7: Pull complete
9c0f1dffe039: Pull complete
576e3c6f47f8: Pull complete
c7e1b6c3ef84: Pull complete
0d1faf6119dd: Pull complete
2f260a3a72b2: Pull complete
Digest: sha256:95f7ca5b0cb707413ea0127f95f942ad5775e762068978a846b1b540eb3996fb
Status: Downloaded newer image for tomcat:latest
80f35721ca9f791ca911b3f79aa5447cbcb45d9ffd762b76773fefd641e48587
[root@dalei ~]# docker run -d -P --name tomcat-net-02 --net mynet tomcat
3907e262e2dc7d9ac5ba19cc5b758d3802e9c75395de114c3c3814546bf04ea6
[root@dalei ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest b7370dcde632 17 hours ago 649MB
[root@dalei ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3907e262e2dc tomcat "catalina.sh run" 12 seconds ago Up 11 seconds 0.0.0.0:32772->8080/tcp tomcat-net-02
80f35721ca9f tomcat "catalina.sh run" 20 seconds ago Up 18 seconds 0.0.0.0:32771->8080/tcp tomcat-net-01
[root@dalei ~]# docker network inspect mynet
我們自定義的網路docker都已經幫我們維護好了對應的關係,推薦我們平時這樣使用網路!
網路連通
#啟動兩個容器
docker run -d -P --name tomcat02 tomcat
docker run -d -P --name tomcat01 tomcat
# 測試打通 tomcat01 - mynet
#將mynet網路和tomcat01容器打通
#[root@dalei ~]# docker network connect mynet tomcat01
# 連通之後就是將 tomcat01 放到 mynet 網路下?
# docker network inspect mynet
# 01連通
[root@dalei ~]# docker exec -it tomcat01 ping tomcat-net-01
PING tomcat-net-01 (192.168.0.2) 56(84) bytes of data.
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.099 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.096 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=3 ttl=64 time=0.091 ms
#02 是依舊打不通的
[root@dalei ~]# docker exec -it tomcat02 ping tomcat-net-01
ping: tomcat-net-01: Name or service not known
實戰:部署Redis叢集
# 建立網絡卡
[root@dalei ~]# docker network create redis --dubnet 172.38.0.0/16
unknown flag: --dubnet
See 'docker network create --help'.
[root@dalei ~]# docker network create redis --subnet 172.38.0.0/16
3f8608789921aa8a71678d6a0740b533c694dac3f0f99b445136efd838e350b6
[root@dalei ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
eef38011cc7d bridge bridge local
5a6e12bad5ed host host local
9aa3f1b75ea8 mynet bridge local
ac897d376939 none null local
3f8608789921 redis bridge local
[root@dalei ~]# docker network inspect redis
[
{
"Name": "redis",
"Id": "3f8608789921aa8a71678d6a0740b533c694dac3f0f99b445136efd838e350b6",
"Created": "2020-11-18T23:17:29.014293365+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.38.0.0/16"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
# 通過指令碼建立六個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 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} \
-v /mydata/redis/node-${port}/data:/data \
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.1${port} reids:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf; \
docker run -p 6371:6379 -p 16371: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 172.38.0.11 reids:5.0.9-alpine3.11 reids-server /etc/redis/redis.conf
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 172.38.0.12 reids:5.0.9-alpine3.11 reids-server /etc/redis/redis.conf
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 172.38.0.13 reids:5.0.9-alpine3.11 reids-server /etc/redis/redis.conf
# 建立叢集
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1
SpringBoot你服務打包Docker映象
1.構建springboot專案
2.打包應用
3.編寫dockerfie
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port:8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
4.構建映象
[root@dalei idea]# ls
demo-0.0.1-SNAPSHOT.jar Dockerfile
[root@dalei idea]# docker build -t dalei777 .
5.釋出執行
[root@dalei idea]# ls
demo-0.0.1-SNAPSHOT.jar Dockerfile
[root@dalei idea]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dalei666 latest 816e23050745 21 minutes ago 660MB
dalei777 latest 816e23050745 21 minutes ago 660MB
java 8 d23bdf5b1b1b 3 years ago 643MB
[root@dalei idea]# docker run -d -p 8081:32777 --name dalei-springboot-web1 dalei777
6.測試訪問
[root@dalei idea]# curl localhost:32777/hello
解除安裝Docler
-
Uninstall the Docker Engine, CLI, and Containerd packages:
$ sudo yum remove docker-ce docker-ce-cli containerd.io
-
Images, containers, volumes, or customized configuration files on your host are not automatically removed. To delete all images, containers, and volumes:
$ sudo rm -rf /var/lib/docker
Docker Compose
安裝
1.下載
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 這個可能快點
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
2.授權
sudo chmod +x /usr/local/bin/docker-compose
體驗
地址:https://docs.docker.com/compose/gettingstarted/
1.準備工作
yum install python-pip # pip 是python包管理工具
yum -y install epel-release # 報錯的話執行
2.為專案建立目錄
$ mkdir composetest
$ cd composetest
3.的專案的目錄中建立一個名為app.py
的檔案,內容如下:
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
在本例中,redis是應用程式網路上redis容器的主機名,我們使用的Redis是預設埠6379
4.在專案目錄中,建立名為requirements.txt
的檔案,內容
flask
redis
5.在專案目錄中,建立名為Dockerfile
的檔案
FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
6.在專案目錄中建立一個名為docker-compose.yml
的檔案
version: "3.8"
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: "redis:alpine"
[root@izuf6bhe673f5t3au2vpp7z composetest]# ll
total 16
-rw-r--r-- 1 root root 515 Nov 22 15:15 app.py
-rw-r--r-- 1 root root 140 Nov 22 15:22 docker-compose.yml
-rw-r--r-- 1 root root 110 Nov 22 15:17 Dockerfile
-rw-r--r-- 1 root root 12 Nov 22 15:15 requirements.txt
[root@izuf6bhe673f5t3au2vpp7z composetest]#
7.啟動專案執行
Build and run your app with Compose
# docker-compose up
如果在同一個網路下,我們可以直接通過域名訪問。
停止:docker-compose down,ctrl+c,
體驗總結:
yaml規則
docker-compose.yaml核心。!
https://docs.docker.com/compose/compose-file/
https://docs.docker.com/compose/wordpress/
實戰:
1.建立一個springboot的工程,選中web和redis的依賴
2.建立一個控制器,其訪問地址為:/hello
3.application.properties的配置
server.port=8088
spring.redis.host=redis
4.構建一個Dockerfile
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8088"]
EXPOSE 8088
ENTRYPOINT ["java","-jar","/app.jar"]
5.構建一個docker-compose.yaml
version: '3.8'
services:
daleiapp:
build: .
image: kuangapp
depends_on:
- redis
ports:
- "8088:8088"
redis:
image: "library/redis:alpine"
6.專案打包,然後把相關的檔案移動到Linux的home的daleiapp檔案下(/home/daleiapp)
7.在伺服器中,cd到daleiapp的目錄中,然後執行docker-compose up命令,啟動服務
[root@izuf6bhe673f5t3au2vpp7z ~]# curl localhost:8088
{"timestamp":"2020-11-22T10:24:56.439+00:00","status":404,"error":"Not Found","message":"","path":"/"}[root@izuf6bhe673f5t3au2vpp7z ~]# ^C
[root@izuf6bhe673f5t3au2vpp7z ~]# curl localhost:8088/hello
hello,dalei,thank you,views:30[root@izuf6bhe673f5t3au2vpp7z ~]#
Docker Swarm
叢集
購買伺服器
4臺伺服器 2G!
How nodes work
Estimated reading time: 2 minutes
Docker Engine 1.12 introduces swarm mode that enables you to create a cluster of one or more Docker Engines called a swarm. A swarm consists of one or more nodes: physical or virtual machines running Docker Engine 1.12 or later in swarm mode.
There are two types of nodes: managers and workers.
If you haven’t already, read through the swarm mode overview and key concepts.
搭建叢集
初始化節點:[root@iZuf6071etwudh3wzp80qzZ ~]# docker swarm init --advertise-addr 172.30.177.123
docker swarm join 加入一個節點!
# 獲取令牌
docker swarm join-token manager 生成主節點令牌
docker swarm join-token worker 生成工作節點令牌
將其他工作節點也加入到主節點上去
將docker-4變成主節點
把後面的節點都搭建進去!
將其他節點離開命令: docker swarm leave
將工作節點3也變成主節點
動態擴縮容
回滾為1個:
[root@iZuf6071etwudh3wzp80qzZ ~]# docker service update --replicas 1 my-nginx
my-nginx
overall progress: 1 out of 1 tasks
1/1: running
verify: Service converged
[root@iZuf6071etwudh3wzp80qzZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZuf6071etwudh3wzp80qzZ ~]#