1. 程式人生 > 實用技巧 >使用JavaScript進行面向物件程式設計的指南

使用JavaScript進行面向物件程式設計的指南

安裝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

http://101.132.144.73:8088

[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

  1. Uninstall the Docker Engine, CLI, and Containerd packages:

    $ sudo yum remove docker-ce docker-ce-cli containerd.io
    
  2. 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 ~]# 

Docker Stack

Docker Secret

Docker Config