系統要求: CentOS 7css
經過yum安裝docker, 首先配置yum鏡像源, 使用阿里雲鏡像.linux
curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
而後安裝並設置開機啓動nginx
yum install docker-ce systemctl enable docker
在啓動docker服務前, 配置docker存儲目錄(鏡像/容器), 將其存儲到容量比較大的分區. 這裏假設爲/opt
.redis
mkdir /etc/docker touch /etc/docker/daemon.json
寫入/etc/docker/daemon.json
的內容.sql
{ "data-root": "/opt/docker", "registry-mirrors": [ "https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn" ] }
docker-ce將
graph
字段修改成data-root
docker
其中data-root
字段爲docker全部的鏡像, 容器存放的位置, /opt/docker
目錄沒必要預先存在, 啓動docker服務時會自動建立.json
registry-mirrors
字段爲國內鏡像源加速列表(在火樹
的使用場景中, 因爲沒有網絡鏈接, 其實沒什麼用).後端
最後, 啓動docker服務.centos
systemctl start docker
將bash_docker.sh
文件中的內容追加到/root/.bashrc
文件尾部, 而後source /root/.bashrc
使之生效.bash
該文件中包含了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服務器地址的解析.