<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Docker知識(shí)進(jìn)階與容器編排技術(shù)

          共 29580字,需瀏覽 60分鐘

           ·

          2020-11-06 02:54

          點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

          優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

          ? 作者?|??x1aoda1

          來(lái)源 |? urlify.cn/Rvaa6n

          66套java從入門(mén)到精通實(shí)戰(zhàn)課程分享

          1 使用Dockerfile定制redis鏡像

          Docker基礎(chǔ)知識(shí)總結(jié)參考上篇博客:https://www.cnblogs.com/darope/p/13861840.html。

          1.1 環(huán)境準(zhǔn)備

          • redis安裝包

          • redis配置文件

          • 編寫(xiě)Dockerfile文件

          ??~/opt/docker-redis/?ls
          Dockerfile??????????redis-4.0.14.tar.gz?redis-7000.conf
          ??~/opt/docker-redis/

          配置文件redis-7000.conf:

          port?7000
          bind?0.0.0.0

          1.2 編寫(xiě)Dockerfile文件

          我們需要在一個(gè)干凈的centOs上安裝必要的環(huán)境。由于redis基于c語(yǔ)言開(kāi)發(fā),我們需要安裝c語(yǔ)言編譯環(huán)境gccgcc-c++net-tools為網(wǎng)絡(luò)工具包,make為安裝程序的必備組件。Dockerfile文件如下

          FROM?centos
          RUN?["yum"?,?"install"?,?"-y"?,"gcc","gcc-c++","net-tools","make"]
          WORKDIR?/usr/local
          ADD?redis-4.0.14.tar.gz?.
          WORKDIR?/usr/local/redis-4.0.14/src
          RUN?make?&&?make?install
          WORKDIR?/usr/local/redis-4.0.14
          ADD?redis-7000.conf?.
          EXPOSE?7000
          CMD?["redis-server","redis-7000.conf"]

          解釋?zhuān)?/span>

          • FROM centos表示設(shè)置基準(zhǔn)鏡像為一個(gè)centOS環(huán)境

          • RUN ["yum" , "install" , "-y" ,"gcc","gcc-c++","net-tools","make"]表示為純凈的centOS系統(tǒng)安裝運(yùn)行redis的tar包的必備工具

          • WORKDIR /usr/local切換工作目錄為/usr/local,類(lèi)似于linux的cd命令

          • ADD redis-4.0.14.tar.gz .拷貝并解壓和Dockerfile同級(jí)目錄下的redis的tar包。拷貝的鏡像的當(dāng)前工作目錄下

          • WORKDIR /usr/local/redis-4.0.14/src更換工作目錄到已經(jīng)解壓的redis文件夾的src下

          • RUN make && make install在鏡像中的linux環(huán)境對(duì)源碼包編譯和安裝

          • WORKDIR /usr/local/redis-4.0.14工作目錄切換到redis的解壓目錄

          • ADD redis-7000.conf .把與Dockerfile文件同級(jí)目錄下的redis配置文件拷貝到當(dāng)前鏡像工作空間下

          • EXPOSE 7000開(kāi)放鏡像的7000端口

          • CMD ["redis-server","redis-7000.conf"]啟動(dòng)redis服務(wù)

          1.3 通過(guò)Dockerfile構(gòu)建鏡像

          Last?login:?Tue?Oct?27?00:47:28?on?ttys001
          ??~/?cd?opt
          ??~/opt/?cd?docker-redis
          ??~/opt/docker-redis/?ls
          Dockerfile??????????redis-4.0.14.tar.gz?redis-7000.conf
          ??~/opt/docker-redis/?docker?build?--tag?myredis:1.0?.
          Sending?build?context?to?Docker?daemon??1.745MB
          Step?1/10?:?FROM?centos
          ?--->?0d120b6ccaa8
          Step?2/10?:?RUN?["yum"?,?"install"?,?"-y"?,"gcc","gcc-c++","net-tools","make"]
          ?--->?Running?in?c0234e893495
          CentOS-8?-?AppStream????????????????????????????2.2?MB/s?|?5.8?MB?????00:02
          CentOS-8?-?Base?????????????????????????????????1.5?MB/s?|?2.2?MB?????00:01
          CentOS-8?-?Extras????????????????????????????????14?kB/s?|?8.1?kB?????00:00
          Dependencies?resolved.
          ================================================================================
          ?Package???????????????Arch??????Version?????????????????????Repository????Size
          ================================================================================
          Installing:
          ?gcc???????????????????x86_64????8.3.1-5.el8.0.2?????????????AppStream?????23?M
          ?
          ?...略
          ?...略
          ?...略

          Installed:
          ??cpp-8.3.1-5.el8.0.2.x86_64
          ??gcc-8.3.1-5.el8.0.2.x86_64
          ??gcc-c++-8.3.1-5.el8.0.2.x86_64
          ??glibc-devel-2.28-101.el8.x86_64
          ??glibc-headers-2.28-101.el8.x86_64
          ??isl-0.16.1-6.el8.x86_64
          ??kernel-headers-4.18.0-193.19.1.el8_2.x86_64
          ??libgomp-8.3.1-5.el8.0.2.x86_64
          ??libmpc-1.0.2-9.el8.x86_64
          ??libpkgconf-1.4.2-1.el8.x86_64
          ??libstdc++-devel-8.3.1-5.el8.0.2.x86_64
          ??libxcrypt-devel-4.1.1-4.el8.x86_64
          ??make-1:4.2.1-10.el8.x86_64
          ??net-tools-2.0-0.51.20160912git.el8.x86_64
          ??pkgconf-1.4.2-1.el8.x86_64
          ??pkgconf-m4-1.4.2-1.el8.noarch
          ??pkgconf-pkg-config-1.4.2-1.el8.x86_64

          Complete!
          Removing?intermediate?container?c0234e893495
          ?--->?826ee526b28e
          Step?3/10?:?WORKDIR?/usr/local
          ?--->?Running?in?0f3cfeb79b31
          Removing?intermediate?container?0f3cfeb79b31
          ?--->?c987d8ce6f8c
          Step?4/10?:?ADD?redis-4.0.14.tar.gz?.
          ?--->?f5dad2363617
          Step?5/10?:?WORKDIR?/usr/local/redis-4.0.14/src
          ?--->?Running?in?0bc0c20cbfa3
          Removing?intermediate?container?0bc0c20cbfa3
          ?--->?c520be237ee0
          Step?6/10?:?RUN?make?&&?make?install
          ?--->?Running?in?302720e3f711
          ????CC?Makefile.dep

          ?...略
          ?...略
          ?...略


          ????INSTALL?install
          ????INSTALL?install
          ????INSTALL?install
          ????INSTALL?install
          ????INSTALL?install
          Removing?intermediate?container?302720e3f711
          ?--->?90d3292283bd
          Step?7/10?:?WORKDIR?/usr/local/redis-4.0.14
          ?--->?Running?in?1d48fe8e8a0f
          Removing?intermediate?container?1d48fe8e8a0f
          ?--->?4061f5b591b1
          Step?8/10?:?ADD?redis-7000.conf?.
          ?--->?74aa59023e05
          Step?9/10?:?EXPOSE?7000
          ?--->?Running?in?cba837f6acc3
          Removing?intermediate?container?cba837f6acc3
          ?--->?7a5ebf5ea52c
          Step?10/10?:?CMD?["redis-server","redis-7000.conf"]
          ?--->?Running?in?5f5dedeb0382
          Removing?intermediate?container?5f5dedeb0382
          ?--->?d5e04541d181
          Successfully?built?d5e04541d181
          Successfully?tagged?myredis:1.0
          ??~/opt/docker-redis/?docker?images
          REPOSITORY??????????TAG?????????????????IMAGE?ID????????????CREATED?????????????SIZE
          myredis?????????????1.0?????????????????d5e04541d181????????27?seconds?ago??????497MB
          docker_run??????????latest??????????????ad84f2ed6200????????4?days?ago??????????215MB
          myweb???????????????1.0?????????????????bf912fc6c119????????4?days?ago??????????647MB
          tomcat??????????????latest??????????????891fcd9c5b3a????????12?days?ago?????????647MB
          centos??????????????latest??????????????0d120b6ccaa8????????2?months?ago????????215MB
          ??~/opt/docker-redis/

          1.4 通過(guò)鏡像運(yùn)行容器

          ??~/opt/docker-redis/?docker?run?-p?7000:7000?myredis:1.0
          1:C?26?Oct?16:56:13.709?#?oO0OoO0OoO0Oo?Redis?is?starting?oO0OoO0OoO0Oo
          1:C?26?Oct?16:56:13.709?#?Redis?version=4.0.14,?bits=64,?commit=00000000,?modified=0,?pid=1,?just?started
          1:C?26?Oct?16:56:13.709?#?Configuration?loaded
          1:M?26?Oct?16:56:13.711?*?Running?mode=standalone,?port=7000.
          1:M?26?Oct?16:56:13.711?#?WARNING:?The?TCP?backlog?setting?of?511?cannot?be?enforced?because?/proc/sys/net/core/somaxconn?is?set?to?the?lower?value?of?128.
          1:M?26?Oct?16:56:13.711?#?Server?initialized
          1:M?26?Oct?16:56:13.711?#?WARNING?you?have?Transparent?Huge?Pages?(THP)?support?enabled?in?your?kernel.?This?will?create?latency?and?memory?usage?issues?with?Redis.?To?fix?this?issue?run?the?command?'echo?never?>?/sys/kernel/mm/transparent_hugepage/enabled'?as?root,?and?add?it?to?your?/etc/rc.local?in?order?to?retain?the?setting?after?a?reboot.?Redis?must?be?restarted?after?THP?is?disabled.
          1:M?26?Oct?16:56:13.711?*?Ready?to?accept?connections

          可以看到Ready to accept connections表示我們的redis服務(wù)端已經(jīng)啟動(dòng),等待客戶(hù)端建立連接。啟動(dòng)redis客戶(hù)端驗(yàn)證通過(guò)。

          開(kāi)啟新的終端,進(jìn)入容器,查看工作目錄,文件信息:

          ??~/?docker?ps
          CONTAINER?ID????????IMAGE???????????????COMMAND??????????????????CREATED?????????????STATUS??????????????PORTS????????????????????NAMES
          1f8190d4d1de????????myredis:1.0?????????"redis-server?redis-…"???8?seconds?ago???????Up?7?seconds????????0.0.0.0:7000->7000/tcp???busy_leavitt
          26c97c083e42????????bf912fc6c119????????"catalina.sh?run"????????4?days?ago??????????Up?4?days???????????0.0.0.0:8000->8080/tcp???loving_pasteur
          ??~/?docker?exec?-it?1f8190d4d1de?sh
          sh-4.4#?pwd
          /usr/local/redis-4.0.14
          sh-4.4#?ls
          00-RELEASENOTES??BUGS??CONTRIBUTING??COPYING??INSTALL??MANIFESTO??Makefile??README.md??deps??redis-7000.conf??redis.conf??runtest??runtest-cluster??runtest-sentinel??sentinel.conf??src??tests??utils
          sh-4.4#

          1.5 官方鏡像替代我們構(gòu)建鏡像

          一般dockerhub上都有官方鏡像,我們并不需要每次都自己手動(dòng)構(gòu)建鏡像,對(duì)于官方支持的鏡像我們可以直接運(yùn)行docker pull命令安裝,例如docker pull redis,效果和我們自己構(gòu)建沒(méi)有什么差別

          2 容器間單向通信(Link)

          2.1 虛擬ip概念

          在docker環(huán)境下,容器創(chuàng)建后,都會(huì)默認(rèn)分配一個(gè)虛擬ip,該ip無(wú)法從外界直接訪問(wèn),但是在docker環(huán)境下各個(gè)ip直接是互通互聯(lián)的。下圖假設(shè)Tomcat分配的虛擬ip為107.1.31.22,Mysql分配的虛擬ip為107.1.31.24。

          雖然我們?cè)贒ocker環(huán)境下可以通過(guò)虛擬ip互相訪問(wèn),但是局限性很大,原因是容器是隨時(shí)可能宕機(jī),重啟的,宕機(jī)重啟后會(huì)為容器重新分配ip,這樣原來(lái)直接通信的ip就消失了。所以容器間通信不建議通過(guò)ip進(jìn)行通信

          我們可以通過(guò)為容器命名,通過(guò)名稱(chēng)通信,這樣無(wú)論該容器重啟多少次,ip如何改變,都不會(huì)存在通信不可用的情形。

          • 通過(guò)docker run -d --name myweb tomcat命令,使用tomcat鏡像運(yùn)行一個(gè)名稱(chēng)為myweb的容器。通過(guò)docker run -d --name mydatabases mysql命令,使用mysql鏡像運(yùn)行一個(gè)名稱(chēng)為mydatabases的容器

          • 通過(guò)docker inspect myweb查看myweb容器的詳細(xì)配置。其中NetworkSettings下的IPAddress的信息即為docker為該容器分配的虛擬ip地址

          ??~/?docker?run?-d?--name?myweb?tomcat
          03fc2187d4ef719325f31578ca07438e1cba4257a0abd9d233755bfb8d9812d2
          ??~/?docker?ps
          CONTAINER?ID????????IMAGE???????????????COMMAND??????????????????CREATED?????????????STATUS??????????????PORTS????????????????????NAMES
          03fc2187d4ef????????tomcat??????????????"catalina.sh?run"????????6?seconds?ago???????Up?5?seconds????????8080/tcp?????????????????myweb
          1f8190d4d1de????????myredis:1.0?????????"redis-server?redis-…"???21?hours?ago????????Up?21?hours?????????0.0.0.0:7000->7000/tcp???busy_leavitt
          26c97c083e42????????bf912fc6c119????????"catalina.sh?run"????????5?days?ago??????????Up?5?days???????????0.0.0.0:8000->8080/tcp???loving_pasteur
          ??~/?docker?inspect?myweb
          [
          ????{
          ????????"Id":?"03fc2187d4ef719325f31578ca07438e1cba4257a0abd9d233755bfb8d9812d2",
          ????????"Created":?"2020-10-27T13:48:17.8800933Z",
          ????????"Path":?"catalina.sh",
          ????????"Args":?[
          ????????????"run"
          ????????],
          ????????"State":?{
          ????????????"Status":?"running",
          ????????????"Running":?true,
          ????????????"Paused":?false,
          ????????????"Restarting":?false,
          ????????????"OOMKilled":?false,
          ????????????"Dead":?false,
          ????????????"Pid":?6558,
          ????????????"ExitCode":?0,
          ????????????"Error":?"",
          ????????????"StartedAt":?"2020-10-27T13:48:18.5295188Z",
          ????????????"FinishedAt":?"0001-01-01T00:00:00Z"
          ????????},
          ????????"Image":?"sha256:891fcd9c5b3a174d9ef63832ededae9dc5c986bb1bb66fe35391a4b3a6734804",
          ????????"ResolvConfPath":?"/var/lib/docker/containers/03fc2187d4ef719325f31578ca07438e1cba4257a0abd9d233755bfb8d9812d2/resolv.conf",
          ????????"HostnamePath":?"/var/lib/docker/containers/03fc2187d4ef719325f31578ca07438e1cba4257a0abd9d233755bfb8d9812d2/hostname",
          ????????"HostsPath":?"/var/lib/docker/containers/03fc2187d4ef719325f31578ca07438e1cba4257a0abd9d233755bfb8d9812d2/hosts",
          ????????"LogPath":?"/var/lib/docker/containers/03fc2187d4ef719325f31578ca07438e1cba4257a0abd9d233755bfb8d9812d2/03fc2187d4ef719325f31578ca07438e1cba4257a0abd9d233755bfb8d9812d2-json.log",
          ????????"Name":?"/myweb",
          ????????"RestartCount":?0,
          ????????"Driver":?"overlay2",
          ????????"Platform":?"linux",
          ????????"MountLabel":?"",
          ????????"ProcessLabel":?"",
          ????????"AppArmorProfile":?"",
          ????????"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,
          ????????????"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/fdc6d8ca2570d6bade53746f4db2b36619ef168b83c2f8b31f650943afe477bf-init/diff:/var/lib/docker/overlay2/85b7f801b61243c4b267ca2ad66e60e8739ed444bf78fb06027612a932d1c947/diff:/var/lib/docker/overlay2/74cdb3bef6ede3f9abb989bdc02e374064beebd8aeb7bdf7387f0e3e45d8a088/diff:/var/lib/docker/overlay2/c70ad2ded87f5ab75cc976060f2cce78ee56533b70ce7b06f4be7d8cce6726f5/diff:/var/lib/docker/overlay2/c7bed81095213cd41f384f7fb6dd29f03040fd0dfb22e8e50e9d91fc3166189c/diff:/var/lib/docker/overlay2/93f9bc9528c36bfd401c60a343dec9658ffe4443673474b292cf5f8acbb21954/diff:/var/lib/docker/overlay2/a836c96366b7b5f8c917a53034294a0459f7e6c2ee937ffad66b4f760c690dd1/diff:/var/lib/docker/overlay2/47d65c3061fd960bf4d7f117be0f97c70c270b91d2a6e6e39610b48b90e7f0b0/diff:/var/lib/docker/overlay2/a284464641d4cd773b7c132b05ac0944ecc96bb4348a45b7338d84c73f0209cd/diff:/var/lib/docker/overlay2/f808fbd4a46131f4e7c018f05834422bb6a59035e0c3489daf4908e7f0ef3080/diff:/var/lib/docker/overlay2/7b05a0f542a939883c73f74ee5b71db648dc7ff39108b53566fa160f7c176d4a/diff",
          ????????????????"MergedDir":?"/var/lib/docker/overlay2/fdc6d8ca2570d6bade53746f4db2b36619ef168b83c2f8b31f650943afe477bf/merged",
          ????????????????"UpperDir":?"/var/lib/docker/overlay2/fdc6d8ca2570d6bade53746f4db2b36619ef168b83c2f8b31f650943afe477bf/diff",
          ????????????????"WorkDir":?"/var/lib/docker/overlay2/fdc6d8ca2570d6bade53746f4db2b36619ef168b83c2f8b31f650943afe477bf/work"
          ????????????},
          ????????????"Name":?"overlay2"
          ????????},
          ????????"Mounts":?[],
          ????????"Config":?{
          ????????????"Hostname":?"03fc2187d4ef",
          ????????????"Domainname":?"",
          ????????????"User":?"",
          ????????????"AttachStdin":?false,
          ????????????"AttachStdout":?false,
          ????????????"AttachStderr":?false,
          ????????????"ExposedPorts":?{
          ????????????????"8080/tcp":?{}
          ????????????},
          ????????????"Tty":?false,
          ????????????"OpenStdin":?false,
          ????????????"StdinOnce":?false,
          ????????????"Env":?[
          ????????????????"PATH=/usr/local/tomcat/bin:/usr/local/openjdk-11/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
          ????????????????"LANG=C.UTF-8",
          ????????????????"JAVA_HOME=/usr/local/openjdk-11",
          ????????????????"JAVA_VERSION=11.0.8",
          ????????????????"CATALINA_HOME=/usr/local/tomcat",
          ????????????????"TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib",
          ????????????????"LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib",
          ????????????????"GPG_KEYS=05AB33110949707C93A279E3D3EFE6B686867BA6?07E48665A34DCAFAE522E5E6266191C37C037D42?47309207D818FFD8DCD3F83F1931D684307A10A5?541FBE7D8F78B25E055DDEE13C370389288584E7?61B832AC2F1C5A90F0F9B00A1C506407564C17A3?79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED?9BA44C2621385CB966EBA586F72C284D731FABEE?A27677289986DB50844682F8ACB77FC2E86E29AC?A9C5DF4D22E99998D9875A5110C01C5A2F6059E7?DCFD35E0BF8CA7344752DE8B6FB21E8933C60243?F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE?F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23",
          ????????????????"TOMCAT_MAJOR=9",
          ????????????????"TOMCAT_VERSION=9.0.39",
          ????????????????"TOMCAT_SHA512=307ca646bac267e529fb0862278f7133fe80813f0af64a44aed949f4c7a9a98aeb9bd7f08b087645b40c6fefdd3a7fe519e4858a3dbf0a19c38c53704f92b575"
          ????????????],
          ????????????"Cmd":?[
          ????????????????"catalina.sh",
          ????????????????"run"
          ????????????],
          ????????????"Image":?"tomcat",
          ????????????"Volumes":?null,
          ????????????"WorkingDir":?"/usr/local/tomcat",
          ????????????"Entrypoint":?null,
          ????????????"OnBuild":?null,
          ????????????"Labels":?{}
          ????????},
          ????????"NetworkSettings":?{
          ????????????"Bridge":?"",
          ????????????"SandboxID":?"1ba8bc8211a894e4895e85552eaba33124c85b2efd280c2a8662d1f2683bf6b4",
          ????????????"HairpinMode":?false,
          ????????????"LinkLocalIPv6Address":?"",
          ????????????"LinkLocalIPv6PrefixLen":?0,
          ????????????"Ports":?{
          ????????????????"8080/tcp":?null
          ????????????},
          ????????????"SandboxKey":?"/var/run/docker/netns/1ba8bc8211a8",
          ????????????"SecondaryIPAddresses":?null,
          ????????????"SecondaryIPv6Addresses":?null,
          ????????????"EndpointID":?"1d5195726db2eee73b97ea994d43b1cef17e0918e1c25925de2e9f0b03ba3616",
          ????????????"Gateway":?"172.17.0.1",
          ????????????"GlobalIPv6Address":?"",
          ????????????"GlobalIPv6PrefixLen":?0,
          ????????????"IPAddress":?"172.17.0.4",
          ????????????"IPPrefixLen":?16,
          ????????????"IPv6Gateway":?"",
          ????????????"MacAddress":?"02:42:ac:11:00:04",
          ????????????"Networks":?{
          ????????????????"bridge":?{
          ????????????????????"IPAMConfig":?null,
          ????????????????????"Links":?null,
          ????????????????????"Aliases":?null,
          ????????????????????"NetworkID":?"a31f18ae4b97ed8e84469a6f48aa03de90c59d054f36705c41ef645a6220a68a",
          ????????????????????"EndpointID":?"1d5195726db2eee73b97ea994d43b1cef17e0918e1c25925de2e9f0b03ba3616",
          ????????????????????"Gateway":?"172.17.0.1",
          ????????????????????"IPAddress":?"172.17.0.4",
          ????????????????????"IPPrefixLen":?16,
          ????????????????????"IPv6Gateway":?"",
          ????????????????????"GlobalIPv6Address":?"",
          ????????????????????"GlobalIPv6PrefixLen":?0,
          ????????????????????"MacAddress":?"02:42:ac:11:00:04",
          ????????????????????"DriverOpts":?null
          ????????????????}
          ????????????}
          ????????}
          ????}
          ]
          ??~/

          我們記錄mydatabases容器的ip地址,進(jìn)入myweb容器,用ping命令訪問(wèn)mydatabases的ip。發(fā)現(xiàn)是沒(méi)問(wèn)題的,說(shuō)明docker之間運(yùn)用虛擬ip地址可以直接互相訪問(wèn)。

          2.2 配置容器間通過(guò)名稱(chēng)訪問(wèn)

          • 把之前的myweb容器。運(yùn)用docker rm myweb移除掉,保留mydatabases容器。通過(guò)docker run -d --name myweb --link mydatabases tomcat來(lái)運(yùn)行容器。其中--link是指定該容器需要和名稱(chēng)為databases的容器通信。

          • 我們進(jìn)入myweb容器docker exec -it myweb sh,運(yùn)行命令ping mydatabases,即可通信。我們配置mysql連接的時(shí)候,把ip換成mydatabases即可,docker會(huì)自動(dòng)維護(hù)mydatabases和該容器ip的映射,即使該容器的ip改變也不會(huì)影響訪問(wèn)

          3 容器間雙向通信(bridge)

          通過(guò)上文,我們配置容器間互相l(xiāng)ink,也是可以實(shí)現(xiàn)雙向通信的,但是有點(diǎn)麻煩。docker為我們提供了網(wǎng)橋,用來(lái)快速實(shí)現(xiàn)容器間雙向通信

          3.1 Docker中的虛擬網(wǎng)橋

          docker網(wǎng)橋組件概覽圖

          docker中的網(wǎng)橋也是虛擬出來(lái)的,網(wǎng)橋的主要用途是用來(lái)實(shí)現(xiàn)docker環(huán)境和外部的通信。我們?cè)谀硞€(gè)容器內(nèi)部ping外部的ip例如百度。是可以ping通的。實(shí)際上是容器發(fā)出的數(shù)據(jù)包,通過(guò)虛擬網(wǎng)橋,發(fā)送給宿主機(jī)的物理網(wǎng)卡,實(shí)際上是借助物理網(wǎng)卡與外界通信的,反之物理網(wǎng)卡也會(huì)通過(guò)虛擬網(wǎng)橋把相應(yīng)的數(shù)據(jù)包送回給相應(yīng)的容器。

          3.2 借助網(wǎng)橋進(jìn)行容器間通信

          我們可以借助網(wǎng)橋?qū)崿F(xiàn)容器間的雙向通信。docker虛擬網(wǎng)橋的另一個(gè)作用是為容器在網(wǎng)絡(luò)層面上進(jìn)行分組,把不同容器都綁定到網(wǎng)橋上,這樣容器間就可以天然互聯(lián)互通。

          • docker run -d --name myweb tomcat運(yùn)行myweb容器;docker run -d -it --name mydatabases centos sh交互模式掛起一個(gè)databases容器(這里用一個(gè)linux容器模擬數(shù)據(jù)庫(kù)服務(wù)器)。由于沒(méi)配置網(wǎng)橋,此時(shí)容器間無(wú)法通過(guò)名稱(chēng)互相通信

          • docker network ls列出docker網(wǎng)絡(luò)服務(wù)明細(xì),其中bridge的條目就是docker默認(rèn)的網(wǎng)橋。接著我們新建立一個(gè)網(wǎng)橋docker network create -d bridge my-bridge命名為my-bridge

          • 把容器與我們新建立的my-bridge網(wǎng)橋進(jìn)行綁定:?docker network connect my-bridge myweb,同理:?docker network connect my-bridge mydatabases。需要讓哪些容器互聯(lián)互通,就把容器綁定到該網(wǎng)橋上,用來(lái)標(biāo)識(shí)這些容器同處在my-bridge網(wǎng)橋的分組中。至此容器間可以通過(guò)名稱(chēng)互相訪問(wèn)

          ??~/?docker?network?ls
          NETWORK?ID??????????NAME????????????????DRIVER??????????????SCOPE
          a31f18ae4b97????????bridge??????????????bridge??????????????local
          9e311308c3ce????????host????????????????host????????????????local
          2c5f89509739????????none????????????????null????????????????local
          ??~/?docker?network?create?-d?bridge?my-bridge
          5e678ed577b120f0d95e87ce43d44bab8e15e47f4002428168cad61120c54cc7
          ??~/?docker?network?ls
          NETWORK?ID??????????NAME????????????????DRIVER??????????????SCOPE
          a31f18ae4b97????????bridge??????????????bridge??????????????local
          9e311308c3ce????????host????????????????host????????????????local
          5e678ed577b1????????my-bridge???????????bridge??????????????local
          2c5f89509739????????none????????????????null????????????????local
          ??~/?docker?network?connect?my-bridge?myweb
          ??~/?docker?network?connect?my-bridge?mydatabases
          ??~/?docker?ps
          CONTAINER?ID????????IMAGE???????????????COMMAND?????????????CREATED?????????????STATUS??????????????PORTS???????????????NAMES
          92888ef080a9????????centos??????????????"sh"????????????????2?minutes?ago???????Up?2?minutes????????????????????????????mydatabases
          03fc2187d4ef????????tomcat??????????????"catalina.sh?run"???43?minutes?ago??????Up?43?minutes???????8080/tcp????????????myweb
          ??~/?docker?exec?-it?03fc2187d4ef?sh
          #?ping?mydatabases
          PING?mydatabases?(172.18.0.3)?56(84)?bytes?of?data.
          64?bytes?from?mydatabases.my-bridge?(172.18.0.3):?icmp_seq=1?ttl=64?time=0.278?ms
          64?bytes?from?mydatabases.my-bridge?(172.18.0.3):?icmp_seq=2?ttl=64?time=0.196?ms
          64?bytes?from?mydatabases.my-bridge?(172.18.0.3):?icmp_seq=3?ttl=64?time=0.417?ms
          ^C
          ---?mydatabases?ping?statistics?---
          3?packets?transmitted,?3?received,?0%?packet?loss,?time?55ms
          rtt?min/avg/max/mdev?=?0.196/0.297/0.417/0.091?ms
          #?exit
          ??~/

          3.3 網(wǎng)橋通信原理

          網(wǎng)橋?yàn)槭裁纯梢詫?shí)現(xiàn)容器間的互聯(lián)互通?實(shí)際上,每當(dāng)我們創(chuàng)建一個(gè)網(wǎng)橋,docker都會(huì)在宿主機(jī)上安裝一個(gè)虛擬網(wǎng)卡,該虛擬網(wǎng)卡也充當(dāng)了一個(gè)網(wǎng)關(guān)的作用。與該網(wǎng)橋(虛擬網(wǎng)關(guān))綁定的容器,相當(dāng)于處在一個(gè)局域網(wǎng),所以可以通信。虛擬網(wǎng)卡畢竟是虛擬的,如果容器想要和外部通信,仍然需要借助外部(宿主機(jī))的物理網(wǎng)卡。虛擬網(wǎng)卡的數(shù)據(jù)包進(jìn)行地址轉(zhuǎn)換,轉(zhuǎn)換為物理網(wǎng)卡的數(shù)據(jù)包發(fā)送出去,反之外部和內(nèi)部容器通信,也需要進(jìn)行數(shù)據(jù)包地址轉(zhuǎn)換

          4 容器間共享數(shù)據(jù)(Volume)

          4.1 數(shù)據(jù)卷Volume

          場(chǎng)景:很多情形下,我們的web服務(wù)都是存在多臺(tái)相同的服務(wù)達(dá)到負(fù)載均衡的作用。這些web服務(wù)在webapp下都存在相同的副本。如果我們要更改頁(yè)面,那么每個(gè)服務(wù)都要去更新webapp下的頁(yè)面文件,才能保證所有的web服務(wù)仍然相同。如果我們的服務(wù)比較多,甚至達(dá)到上千個(gè),那么每個(gè)服務(wù)更新太過(guò)繁瑣。為了解決這個(gè)問(wèn)題,我們產(chǎn)生了數(shù)據(jù)共享方案(Volume)

          數(shù)據(jù)共享的原理,是在宿主機(jī)上開(kāi)辟一塊空間,該空間會(huì)被其他容器同時(shí)共享。我們可以把頁(yè)面文件存放一份到宿主機(jī)的這塊磁盤(pán)空間中,其他容器掛載這個(gè)文件即可。以后更新所有的web服務(wù)的頁(yè)面,我們只需要更改宿主機(jī)的這份頁(yè)面文件即可。

          4.2 容器間共享數(shù)據(jù)-掛載

          方法一、docker run --name 容器名 -v 宿主機(jī)路徑:容器內(nèi)掛載路徑 鏡像名。例如docker run --name myweb01 -v /usr/webapps:/usr/local/tomcat/webapps tomcat

          方法二、通過(guò)設(shè)置掛載點(diǎn),我們可以創(chuàng)建一個(gè)用于掛載的容器,其他容器設(shè)置參照該容器的掛載信息,進(jìn)行掛載。例如我們創(chuàng)建一個(gè)webpage的容器,設(shè)置掛載信息,無(wú)需運(yùn)行該容器:docker create --name webpage -v /webapps:/tomcat/webapps tomcat /bin/true,接著我們創(chuàng)建其他容器參照該容器的掛載信息進(jìn)行掛載:docker run --volumes-from webpage --name myweb02 -d tomcat,我們創(chuàng)建的myweb02的容器的掛載信息,就和webpage的掛載信息相同。如果需要修改掛載點(diǎn),只需要修改webpage的掛載信息即可。

          5 容器編排技術(shù)(docker-compose)

          5.1 docker-compose介紹

          我們部署一套應(yīng)用,例如nginx+tomcat+mysql,每個(gè)服務(wù)可以當(dāng)成一個(gè)容器,每個(gè)容器都有自己獨(dú)立的配置文件,每個(gè)容器單獨(dú)部署如果應(yīng)用很多,非常麻煩。docker-compose解決了這個(gè)問(wèn)題

          通過(guò)我們的編排,我們可以自動(dòng)的先安裝mysql容器,再安裝tomcat容器,再安裝nginx容器,被依賴(lài)的容器先安裝,完全自動(dòng)化。這種定義容器安裝先后順序的部署腳本稱(chēng)為容器編排。

          Docker-compose 是單機(jī)多容器部署工具,通過(guò)yml文件定義多容器如何部署,WIN/MAC默認(rèn)提供Docker Compose,Linux需安裝。docker-compose能力有限,只能在一臺(tái)宿主機(jī)上對(duì)容器編排部署。集群部署由另外的工具k8s來(lái)完成

          5.2 安裝docker-compose

          Mac和Win的桌面版docker自帶docker-compose。linux的安裝參考官網(wǎng)https://docs.docker.com/compose/

          1、安裝

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

          2、文件夾授權(quán)

          sudo?chmod?+x?/usr/local/bin/docker-compose?#賦予可執(zhí)行權(quán)限

          3、驗(yàn)證docker-compose

          ??~/?docker-compose?-version
          docker-compose?version?1.27.4,?build?40524192
          ??~/

          5.3 使用docker-compose快速安裝開(kāi)源博客

          參考?https://docs.docker.com/compose/wordpress/

          1、創(chuàng)建名為docker-compose.yml的文件

          2、編輯文件參考官網(wǎng)直接填入

          version:?'3.3'

          services:
          ???db:
          ?????image:?mysql:5.7
          ?????volumes:
          ???????-?db_data:/var/lib/mysql
          ?????restart:?always
          ?????environment:
          ???????MYSQL_ROOT_PASSWORD:?somewordpress
          ???????MYSQL_DATABASE:?wordpress
          ???????MYSQL_USER:?wordpress
          ???????MYSQL_PASSWORD:?wordpress

          ???wordpress:
          ?????depends_on:
          ???????-?db
          ?????image:?wordpress:latest
          ?????ports:
          ???????-?"8000:80"
          ?????restart:?always
          ?????environment:
          ???????WORDPRESS_DB_HOST:?db:3306
          ???????WORDPRESS_DB_USER:?wordpress
          ???????WORDPRESS_DB_PASSWORD:?wordpress
          ???????WORDPRESS_DB_NAME:?wordpress
          volumes:
          ????db_data:?{}

          3、解釋執(zhí)行該docker-compose文件,運(yùn)行docker-compose up -d,其中up表示解析該腳本,-d表示后臺(tái)執(zhí)行

          ??~/opt/docker_compose/?ls
          docker-compose.yml
          ??~/opt/docker_compose/?docker-compose?up?-d
          Creating?network?"docker_compose_default"?with?the?default?driver
          Creating?volume?"docker_compose_db_data"?with?default?driver
          Pulling?db?(mysql:5.7)...
          5.7:?Pulling?from?library/mysql
          bb79b6b2107f:?Pull?complete
          49e22f6fb9f7:?Pull?complete
          842b1255668c:?Pull?complete
          9f48d1f43000:?Pull?complete
          c693f0615bce:?Pull?complete
          8a621b9dbed2:?Pull?complete
          0807d32aef13:?Pull?complete
          f15d42f48bd9:?Pull?complete
          098ceecc0c8d:?Pull?complete
          b6fead9737bc:?Pull?complete
          351d223d3d76:?Pull?complete
          Digest:?sha256:4d2b34e99c14edb99cdd95ddad4d9aa7ea3f2c4405ff0c3509a29dc40bcb10ef
          Status:?Downloaded?newer?image?for?mysql:5.7
          Pulling?wordpress?(wordpress:latest)...
          latest:?Pulling?from?library/wordpress
          bb79b6b2107f:?Already?exists
          80f7a64e4b25:?Pull?complete
          da391f3e81f0:?Pull?complete
          8199ae3052e1:?Pull?complete
          284fd0f314b2:?Pull?complete
          f38db365cd8a:?Pull?complete
          1416a501db13:?Pull?complete
          1a45b5b978cd:?Pull?complete
          c662caa8d2ec:?Pull?complete
          2db216a7247d:?Pull?complete
          c3a7647076e8:?Pull?complete
          e40fcea67f94:?Pull?complete
          7f3f9920f7b8:?Pull?complete
          815cf81de52a:?Pull?complete
          680504ca4ff0:?Pull?complete
          9ffcc5a051ce:?Pull?complete
          b9db15beb1db:?Pull?complete
          d5b4974eafaa:?Pull?complete
          0265b92c6601:?Pull?complete
          3342ef871b20:?Pull?complete
          Digest:?sha256:6bfe0d4bdb581493c2350da80c48fca089d39315d8fa309bdff7984442e13ba9
          Status:?Downloaded?newer?image?for?wordpress:latest
          Creating?docker_compose_db_1?...?done
          Creating?docker_compose_wordpress_1?...?done
          ??~/opt/docker_compose/?docker?ps
          CONTAINER?ID????????IMAGE???????????????COMMAND??????????????????CREATED?????????????STATUS??????????????PORTS??????????????????NAMES
          0afa29639779????????wordpress:latest????"docker-entrypoint.s…"???55?seconds?ago??????Up?54?seconds???????0.0.0.0:8000->80/tcp???docker_compose_wordpress_1
          32333851cdf3????????mysql:5.7???????????"docker-entrypoint.s…"???56?seconds?ago??????Up?54?seconds???????3306/tcp,?33060/tcp????docker_compose_db_1
          ??~/opt/docker_compose/

          可以看到我們自動(dòng)安裝了兩個(gè)容器,一個(gè)是底層數(shù)據(jù)庫(kù),一個(gè)值上層博客應(yīng)用wordpress。并且在應(yīng)用的容器上自動(dòng)做了端口映射。此時(shí)我們可以訪問(wèn)127.0.0.1:8000可以看到wordpress的安裝向?qū)ы?yè)面。填寫(xiě)用戶(hù)名和密碼等注冊(cè)信息,接著登錄,博客系統(tǒng)的后臺(tái)就呈現(xiàn)出來(lái)了。

          6 docker-dompose實(shí)戰(zhàn)

          項(xiàng)目結(jié)構(gòu):

          ??~/opt/?ls
          bsbdj??????????docker?????????docker-redis???docker_compose?docker_run
          ??~/opt/?cd?bsbdj
          ??~/opt/bsbdj/?ls
          bsbdj-app??????????bsbdj-db???????????docker-compose.yml
          ??~/opt/bsbdj/?cd?bsbdj-db
          ??~/opt/bsbdj/bsbdj-db/?ls
          Dockerfile??init-db.sql
          ??~/opt/bsbdj/bsbdj-db/?ls?../bsbdj-app
          Dockerfile??????????application-dev.yml?application.yml?????bsbdj.jar
          ??~/opt/bsbdj/bsbdj-db/

          其中~/opt/bsbdj/bsbdj-db/init-db.sql是項(xiàng)目需要的初始化sql腳本。~/opt/bsbdj/bsbdj-app/babdj.jar是由springboot開(kāi)發(fā)的web應(yīng)用。

          6.1 創(chuàng)建Dockerfile為DB構(gòu)建DB容器

          Dockerfile處在~/opt/bsbdj/bsbdj-db/目錄下,內(nèi)容為:

          FROM?mysql:5.7
          #?該目錄是mysql5.7提供的初始化數(shù)據(jù)庫(kù)的目錄,mysql5.7官方定義的,可以參考官方文檔
          WORKDIR?/docker-entrypoint-initdb.d???
          ADD?init-db.sql?.

          mysql官方鏡像提供,構(gòu)建mysql鏡像時(shí),可以傳入環(huán)境變量用來(lái)設(shè)置mysql的root用戶(hù)的密碼。例如:docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=abc123 -d mysql:5.7。Mysql官方提供了大量的環(huán)境變量的設(shè)置,例如MYSQL_ROOT_PASSWORD表示設(shè)置密碼,MYSQL_DATABASES設(shè)置mysql的數(shù)據(jù)庫(kù),MYSQL_USER和MYSQL_PASSWORD設(shè)置另外一個(gè)用戶(hù)和密碼。文檔還指出,放在/docker-entrypoint-initdb.d目錄下的sql文件,在運(yùn)行容器的過(guò)程中會(huì)被執(zhí)行。詳情參考mysql官方鏡像的文檔(https://hub.docker.com/_/mysql)

          6.2 創(chuàng)建Dockerfile為App構(gòu)建web服務(wù)容器

          Dockerfile處在~/opt/bsbdj/bsbdj-app/目錄下,內(nèi)容為:

          FROM?openjdk:8u222-jre
          WORKDIR?/usr/local/bsbdj
          ADD?bsbdj.jar?.
          ADD?application.yml?.
          ADD?application-dev.yml?.
          EXPOSE?80???#?由于配置文件中端口開(kāi)放是80,我們鏡像也要開(kāi)放相應(yīng)的80端口
          CMD?["java","-jar","bsbdj.jar"]

          6.3 用docker-compose編排容器

          • 在~/optbsbdj/下創(chuàng)建docker-compose.yml并編寫(xiě):

          version:?'3.3'
          services:
          ??db:
          ????build:?./bsbdj-db/
          ????restart:?always
          ????environment:
          ??????MYSQL_ROOT_PASSWORD:?root
          ??app:
          ????build:?./bsbdj-app/
          ????depends_on:
          ??????-?db
          ????ports:
          ??????-?"80:80"
          ????restart:?always

          其中

          1、version:'3.3'是docker-compose最常見(jiàn)的版本,不同版本的配置項(xiàng)使用略有差別。

          2、services是一個(gè)父級(jí)節(jié)點(diǎn),表示該編排存在的各種服務(wù)。

          3、services下級(jí),是各個(gè)容器的服務(wù)信息,我們這里存在db和app兩個(gè)服務(wù),db和app也會(huì)作為容器的名稱(chēng),并且我們可以通過(guò)服務(wù)名替換容器間相互通信的ip(網(wǎng)絡(luò)的主機(jī)名),也可達(dá)到互相訪問(wèn)的效果

          4、build是服務(wù)的子節(jié)點(diǎn),表示該服務(wù)容器通過(guò)哪里的Dockerfile來(lái)構(gòu)建

          5、restart表示服務(wù)重啟的策略,如果容器意外退出,那么docker會(huì)重新啟動(dòng)

          6、environment指定服務(wù)容器的環(huán)境變量

          7、depends_on表示該容器的以來(lái),我們的app容器依賴(lài)于db服務(wù)容器,depends_on下跟服務(wù)名

          8、ports用來(lái)設(shè)置該服務(wù)的端口和宿主機(jī)端口的一個(gè)映射,格式為宿主機(jī)端口:容器暴露的端口

          • 運(yùn)行編排腳本,在~/optbsbdj/下執(zhí)行docker-compose up -d

          ??~/opt/bsbdj/?ls
          bsbdj-app??????????bsbdj-db???????????docker-compose.yml
          ??~/opt/bsbdj/?docker-compose?up?-d
          Creating?network?"bsbdj_default"?with?the?default?driver
          Building?db
          Step?1/3?:?FROM?mysql:5.7
          ?--->?1b12f2e9257b
          Step?2/3?:?WORKDIR?/docker-entrypoint-initdb.d
          ?--->?Running?in?75a8bc4e79e2
          Removing?intermediate?container?75a8bc4e79e2
          ?--->?c66ad7c93eff
          Step?3/3?:?ADD?init-db.sql?.
          ?--->?d5f353210a89

          Successfully?built?d5f353210a89
          Successfully?tagged?bsbdj_db:latest
          WARNING:?Image?for?service?db?was?built?because?it?did?not?already?exist.?To?rebuild?this?image?you?must?use?`docker-compose?build`?or?`docker-compose?up?--build`.
          Building?app
          Step?1/7?:?FROM?openjdk:8u222-jre
          8u222-jre:?Pulling?from?library/openjdk
          9a0b0ce99936:?Pull?complete
          db3b6004c61a:?Pull?complete
          f8f075920295:?Pull?complete
          4901756f2337:?Pull?complete
          9cfcf0e1f584:?Pull?complete
          d6307286bdcd:?Pull?complete
          Digest:?sha256:3d3df6a0e485f9c38236eaa795fc4d2e8b8d0f9305051c1e4f7fbca71129b06a
          Status:?Downloaded?newer?image?for?openjdk:8u222-jre
          ?--->?25073ded58d2
          Step?2/7?:?WORKDIR?/usr/local/bsbdj
          ?--->?Running?in?3f8dfd0f5274
          Removing?intermediate?container?3f8dfd0f5274
          ?--->?c4be1b7c9c34
          Step?3/7?:?ADD?bsbdj.jar?.
          ?--->?e63c66e4097a
          Step?4/7?:?ADD?application.yml?.
          ?--->?e670ee9a6aef
          Step?5/7?:?ADD?application-dev.yml?.
          ?--->?164471f9fdc9
          Step?6/7?:?EXPOSE?80
          ?--->?Running?in?efdae300b488
          Removing?intermediate?container?efdae300b488
          ?--->?91f9d21b9090
          Step?7/7?:?CMD?["java","-jar","bsbdj.jar"]
          ?--->?Running?in?b2cee3ea8900
          Removing?intermediate?container?b2cee3ea8900
          ?--->?5e4ed28267e8

          Successfully?built?5e4ed28267e8
          Successfully?tagged?bsbdj_app:latest
          WARNING:?Image?for?service?app?was?built?because?it?did?not?already?exist.?To?rebuild?this?image?you?must?use?`docker-compose?build`?or?`docker-compose?up?--build`.
          Creating?bsbdj_db_1?...?done
          Creating?bsbdj_app_1?...?done
          ??~/opt/bsbdj/?docker?ps
          CONTAINER?ID????????IMAGE???????????????COMMAND??????????????????CREATED?????????????STATUS??????????????PORTS?????????????????NAMES
          eb5a44f51446????????bsbdj_app???????????"java?-jar?bsbdj.jar"????4?seconds?ago???????Up?4?seconds????????0.0.0.0:80->80/tcp????bsbdj_app_1
          bfc741434b91????????bsbdj_db????????????"docker-entrypoint.s…"???5?seconds?ago???????Up?4?seconds????????3306/tcp,?33060/tcp???bsbdj_db_1
          ??~/opt/bsbdj/
          • docker-compose logs用于查看對(duì)應(yīng)的日志,在~/opt/babdj/下執(zhí)行。docker-compose logs app用來(lái)查看app服務(wù)的日志信息。

          • docker-compose down 用于停止服務(wù),在~/opt/babdj/下執(zhí)行。先停止再移除服務(wù)容器

          ??~/opt/bsbdj/?docker-compose?down
          Stopping?bsbdj_app_1?...?done
          Stopping?bsbdj_db_1??...?done
          Removing?bsbdj_app_1?...?done
          Removing?bsbdj_db_1??...?done
          Removing?network?bsbdj_default
          ??~/opt/bsbdj/
          • 修改app的配置文件,把之前mysql的數(shù)據(jù)庫(kù)連接的地址localhose,換成db服務(wù)名。即可解決數(shù)據(jù)庫(kù)連接不上的問(wèn)題。jdbc:mysql://db:3306/bsbdj?useUnicode=true

          • 訪問(wèn)127.0.0.1,即可看到服務(wù)運(yùn)行情況

          docker-compose命令可以參考官方文檔,由于docker-compose只支持單機(jī)部署,一般大型項(xiàng)目上使用較少,上面的基本命令已經(jīng)大致滿(mǎn)足。如果要應(yīng)對(duì)大型集群的部署,我們可以進(jìn)而學(xué)習(xí)k8s




          粉絲福利:實(shí)戰(zhàn)springboot+CAS單點(diǎn)登錄系統(tǒng)視頻教程免費(fèi)領(lǐng)取

          ???

          ?長(zhǎng)按上方微信二維碼?2 秒
          即可獲取資料



          感謝點(diǎn)贊支持下哈?

          瀏覽 54
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91精品久久久久久久久中文字幕 | 特级AV毛片免费观看 | 免费麻豆国产一区二区三区四区 | 欧日韩另类黄色 | 水蜜桃一区二区AV |