您好,登錄后才能下訂單哦!
系統要求: CentOS 7
通過yum安裝docker, 首先配置yum鏡像源, 使用阿里云鏡像.
curl?-o?/etc/yum.repos.d/docker-ce.repo?https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
然后安裝并設置開機啟動
yum?install?docker-ce systemctl?enable?docker
在啟動docker服務前, 配置docker存儲目錄(鏡像/容器), 將其存儲到容量比較大的分區. 這里假設為/opt
.
mkdir?/etc/docker touch?/etc/docker/daemon.json
寫入/etc/docker/daemon.json
的內容.
{????"data-root":?"/opt/docker",????"registry-mirrors":?[????????"https://registry.docker-cn.com",? ????????"https://docker.mirrors.ustc.edu.cn" ????] }
docker-ce將
graph
字段修改為data-root
其中data-root
字段為docker所有的鏡像, 容器存放的位置,?/opt/docker
目錄不必預先存在, 啟動docker服務時會自動創建.
registry-mirrors
字段為國內鏡像源加速列表(在火樹
的使用場景中, 由于沒有網絡連接, 其實沒什么用).
最后, 啟動docker服務.
systemctl?start?docker
將bash_docker.sh? ?
文件中的內容追加到/root/.bashrc
文件尾部, 然后source?/root/.bashrc
使之生效.
該文件中包含了1個常用命令docker-enter
.
docker-enter 容器名/容器id: 進入目標容器, 將得到一個bash命令行
$?docker?ps CONTAINER?ID????????IMAGE??????????????????????????????????????????COMMAND??????????????????CREATED?????????????STATUS??????????????PORTS??????????????????????NAMES c98790552123????????reg01.sky-mobi.com/huoshu/nginx:1.0.0??????????"/bin/sh?-c?'servi..."???2?hours?ago?????????Up?2?hours??????????0.0.0.0:80-81->80-81/tcp???quizzical_shannon $?docker-enter?c98790552123 [root@c98790552123?~]#
默認每臺宿主機上啟動的docker容器都在一個小型局域網內, 類似于虛擬機, 所有的流量通過宿主機做nat
轉發, 這也是一般路由器的工作方式.
但是這種方式類似于dhcp
, 每次啟動容器所獲取的IP并不確定. 為了保證各工程容器地址固定, 我們需要創建自定義的docker局域網, 并在啟動容器的時候指定該容器的IP.
注意: 這個操作的目的是保持工程容器的地址固定, 比如, 寫在工程配置文件中的redis與oracle地址, nginx配置文件中后端工程監聽的IP與端口地址等, 不方便頻繁變動的情況.
不過目前oracle在一臺單獨的服務器上, 所以并不需要創建的這個網絡. 只在redis與工程容器所在的服務器上執行如下操作即可. 如下
$?docker?network?create?--subnet=172.21.0.0/16?huoshu
在當前宿主機上創建一個小型局域網subnet
, 不與外界連通.?huoshu
即為該網段名稱, 啟動一個docker容器時可以顯示指定--net huoshu
從而自動獲取一個該網段內的IP.
約定redis
運行在172.21.0.3
這個地址, 工程配置文件不再需要再作修改.
自定義網絡環境下, 容器與其宿主機本身的端口無法連通(但默認網絡可以), 我們還需要添加一句如下代碼, 使得容器內可以直接連接宿主機的端口, 無論通過172.21.0.1
還是宿主機的物理IP, 都行.
$?iptables?-I?INPUT_direct?-s?172.21.0.0/16?-j?ACCEPT
一般鏡像的傳播都是通過pull/push
的方式, 通過鏡像倉庫完成轉發. 鑒于火樹
此次的應用場景, 可以將鏡像保存在本地, 然后拷貝于其他擁有docker環境的服務器上, 同樣可以繼續使用.
當前系統中的鏡像列表可以通過docker?images
命令查看, 結果如下.
$?docker?imagesREPOSITORY?????????????????????????TAG??????IMAGE?ID????????????CREATED?????????????SIZE reg01.sky-mobi.com/huoshu/redis????1.0.0????7a0e963024cf????????6?hours?ago?????????370MB reg01.sky-mobi.com/huoshu/nginx????1.0.0????99e4c2104361????????7?days?ago??????????453MB reg01.sky-mobi.com/huoshu/base?????1.0.0????62925dab3a8e????????7?days?ago??????????330MB
使用如下命令可以將nginx
鏡像打包成tar
文件.
$?docker?save?-o?nginx-1.0.0.tar?reg01.sky-mobi.com/huoshu/nginx:1.0.0$?lsnginx-1.0.0.tar
將nginx-1.0.0.tar
文件拷貝到另一臺擁有docker環境的服務器上, 加載它.
$?docker?load?<?./nginx-1.0.0.tar?c97485ea5599:?Loading?layer?[==================================================>]????125MB/125MB 834571917b0e:?Loading?layer?[==================================================>]??3.584kB/3.584kB Loaded?image:?reg01.sky-mobi.com/huoshu/nginx:1.0.0$?docker?imagesREPOSITORY????????????????????????????????TAG?????????????????IMAGE?ID????????????CREATED?????????????SIZE reg01.sky-mobi.com/huoshu/nginx???????????1.0.0???????????????99e4c2104361????????7?days?ago??????????453MB
可以看到**load
之后會保持鏡像名不變, 所以工程升級時, 打的鏡像版本號也要不同, 不然會發生沖突**.
約定在工程中oracle的地址統一寫作jdbc.oracle.addr
這個域名, 然后在有用到oracle的容器啟動時, 在命令行中指定ORACLE_ADDR
這個環境變量為實際oracle所在服務器地址(通過docker的-e
選項可以實現).
在容器啟動過程中, 會將ORACLE_ADDR
變量指定的地址與jdbc.oracle.addr
寫入容器本身的/etc/hosts
文件, 即可實現該域名與oracle服務器地址的解析.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。