CentOS 7 x64 docker 使用點滴

丶小炒肉發表於2016-06-01

CentOS 7 安裝 docker

 

yum search docker  檢視是否 有docker包

yum info docker  版本為1.3.2

yum -y install docker 安裝docker

 

docker --version

Docker version 1.3.2, build 39fa2fa/1.3.2

 

關閉 firewalld  與 Selinux

 

service docker start 啟動

 

systemctl enable docker 設定開機啟動

 

 

開啟 Linux 核心 轉發 新增:

 

vi /etc/sysctl.conf

 

net.ipv4.ip_forward = 1 

 

儲存 執行 sysctl -p 生效

 

 

修改docker 環境變數 docker 容器儲存路徑 ( 預設路徑為 /var/lib/docker

 

docker info    檢視環境變數

 

vi /etc/sysconfig/docker

 

OPTIONS=--selinux-enabled -H fd://

 

修改為如下

 

OPTIONS=--selinux-enabled --graph=/opt/docker/images -H fd://

 

重啟docker    

 

systemctl restart docker.service

 

docker info  檢視是否已經變更

 

 

獲取CentOS 映象

 

docker pull centos:latest    下載最新版本的映象

或者

docker pull centos:centos6   下載centos6映象等

 

 

檢視安裝映象的情況

 

docker images

 

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

centos              7                   8efe422e6104        2 weeks ago         224 MB

centos              centos7             8efe422e6104        2 weeks ago         224 MB

centos              latest              8efe422e6104        2 weeks ago         224 MB

 

 

在docker下執行 shell bash

 

docker run -i -t <IMAGE ID>  /bin/bash      //<IMAGE ID> 通過docker images命令獲取,這裡為510cf09a7986

 

docker run -i -t 8efe422e6104 /bin/bash   

 

docker run -i -t <IMAGE ID>  /bin/bash    //此方式執行的容器,退出後容器就會自動關閉, 此方式是建立一個新的容器.

 

docker run -i -t -v /opt/software:/opt/software <IMAGE ID> /bin/bash    //-v 為掛載本地目錄, 第一個/opt/software 為本地目錄 : 後面為容器目錄,目錄不存在會自動建立

 

 

執行以後切換到 

 

[root@8efe422e6104 /]#

 

在容器下安裝 ssh  passwd  

 

yum -y install tar unzip openssh-server passwd lrzsz bzip2 

 

安裝完畢以後 修改root 密碼

 

passwd  

 

 

修改 時區 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

 

修改字元編碼  echo 'LANG="en_US.UTF-8"' >> /etc/locale.conf

-------------------------------------------------------------------------------

centos 7 啟動sshd 提示如下:

 

Could not load host key: /etc/ssh/ssh_host_rsa_key

Could not load host key: /etc/ssh/ssh_host_ecdsa_key

 

 

建立key

 

ssh-keygen -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key

 

ssh-keygen -t ecdsa -b 521 -f /etc/ssh/ssh_host_ecdsa_key

 

-------------------------------------------------------------------------------

 

 

然後再 安 裝jdk 和 tomcat !!  

 

 

安裝過程與物理機安裝過程相同 安裝完畢以後

 

 

返回 物理機  

 

 

docker ps -a  可檢視執行的docker shell 

 

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS               

c6291c68a800        centos:7            "/bin/bash"         3 hours ago         Exited (0) 3 minutes ago        

 

 

 

docker commit <CONTAINER ID> <name>      //修改映象IMAGE名稱

 

 

docker commit c6291c68a800 tomcat     //將此映象的名稱儲存為 tomcat

 

 

docker images

 

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

tomcat-1            latest              983e0f7ea1fd        37 minutes ago      779.8 MB

 

docker ps -a

 

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                  

ed1efc2c7d01        tomcat:latest     "/bin/bash"         9 minutes ago       Exited (0) 3 minutes ago     

 

 

docker start <CONTAINER ID>         //<CONTAINER ID> 通過docker ps -a命令獲取 啟動此容器

 

docker attach <CONTAINER ID>        //返回到此容器中

 

docker start -i <CONTAINER ID>      // 啟動此容器後連線到此容器中

 

 

啟動容器的SSH 並對映埠

 

docker run -d -p 50001:22 <IMAGE ID> /usr/sbin/sshd -D    //<IMAGE ID> 為docker images 獲取 需要獲取tomcat的IMAGE ID

 

ssh -p 50001 127.0.0.1    進入容器

 

啟動tomcat    檢視容器ip

 

返回物理機

 

curl -I 容器ip:8080  檢視是否正常 

 

 

-------------------------------------------------------------------------------------------------------

其他執行命令

 

檢視 docker 執行日誌

 

docker logs -f <CONTAINER ID>        

 

刪除某個容器

docker rm  <CONTAINER ID>                //<CONTAINER ID> 通過docker ps -a命令獲取

 

 

刪除所有容器

docker rm `docker ps -a -q`

 

停止所有容器

docker stop `docker ps -a -q`

 

 

刪除某個映象

docker rmi <IMAGE ID >                  //<IMAGE ID> 通過docker images命令獲取

 

匯出某個映象

docker save <IMAGE ID> > /tmp/myimage.tar

 

匯入某個映象

docker load < /tmp/myimage.tar

-------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

-------------------------------------------------------------------------------------------------------------------------------------

docker 設定獨立IP 並對映埠          ( 必須開啟 Linux 核心轉發 net.ipv4.ip_forward )

 

物理機 單網路卡 繫結多IP ..  如 em1   繫結 em1:1     

 

(CentOS 7  繫結網路卡  必須有 DEVICE=em1:1  這種名稱)

    

 

em1  ip 為 172.24.0.11       繫結em1:1  IP 為 172.24.0.100     em1:2  IP 為 172.24.0.101  以SSH 埠 為例操作如下

 

物理機 不能與容器埠衝突, 容器與容器之間可以。  

 

修改 172.24.0.11 的SSH 埠為 999    對映 IP 172.24.0.100  與  172.24.0.101 埠

 

docker run -h="web1" --name web1 -d -p 172.24.0.100:22:22 <images ID> /etc/rc.local

 

docker run -h="web2" --name web2 -d -p 172.24.0.101:22:22 <images ID> /etc/rc.local

 

 

-------------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

docker 自建私有倉庫

 

首先建立儲存 映象的目錄 

 

mkdir -p /opt/registry

 

預設情況下,會將倉庫存放於容器內的/tmp/registry目錄下,這樣如果容器被刪除,則存放於容器中的映象也會丟失,所以我們一般情況下會指定本地一個目錄掛載到容器內的/tmp/registry下.

 

 

執行

docker pull registry                 #安裝docker私有倉庫

 

啟動 registry

docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry -v /opt/registry:/tmp/registry -p 5000:5000 registry

 

--------------------------------------------------------------------------

 可用 http://ip:5000    來訪問 

---------------------------------------------------

 提示如下 表示啟動完成

"\"docker-registry server\""

----------------------------------------------------

 

在客戶機上面:

#docker images

dev                    latest              a7efdd5c0690        5 days ago          989.2 MB

 

 

#docker tag a7efdd5c0690 172.24.0.14:5000/dev  

 

#docker images

dev                    latest              a7efdd5c0690        5 days ago          989.2 MB

172.24.0.14:5000/dev   latest              a7efdd5c0690        5 days ago          989.2 MB

 

 

 

 

 

 

#docker push 172.24.0.14:5000/dev

-------------------------------------------------------------------------------------------------------------------------------------------------

提示如下:

2015/03/16 15:34:35 Error: Invalid registry endpoint https://172.24.0.12:5000/v1/: Get https://172.24.0.12:5000/v1/_ping: dial tcp 172.24.0.12:5000: connection refused. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry 172.24.0.12:5000` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/172.24.0.12:5000/ca.crt

-------------------------------------------------------------------------------------------------------------------------------------------------

 

解決辦法 禁用https 驗證

vi /etc/sysconfig/docker

 

在 OPTIONS=--selinux-enabled 後面新增  --insecure-registry 172.24.0.14:5000  

 

然後重啟 docker !! 

 

 

在次執行

#docker push 172.24.0.14:5000/dev

 

 

提示如下 為成功

----------------------------------------------------------------------------------------------------------------------

The push refers to a repository [172.24.0.14:5000/dev] (len: 1)

Sending image list

Pushing repository 172.24.0.14:5000/dev (1 tags)

511136ea3c5a: Image successfully pushed 

5b12ef8fd570: Image successfully pushed 

88f9454e60dd: Image successfully pushed 

a7efdd5c0690: Image successfully pushed 

Pushing tag for rev [a7efdd5c0690] on {http://172.24.0.14:5000/v1/repositories/dev/tags/latest}

-------------------------------------------------------------------------------------------------------------------------

 

 

 

私有倉庫查詢方法

curl http://172.24.0.14:5000/v1/search

 

如下所示  有 dev 表示 上傳成功

--------------------------------------------------------------------------------------------------------------------------

{"num_results": 1, "query": "", "results": [{"description": "", "name": "library/dev"}]}

--------------------------------------------------------------------------------------------------------------------------

 

 

在其他客戶機上訪問和下載私有倉庫的映象

docker pull 172.24.0.14:5000/dev

 

 

----------------------------------------------------------------------------------------------------------------------------

docker pull 172.24.0.14:5000/dev

Pulling repository 172.24.0.14:5000/dev

88f9454e60dd: Download complete 

511136ea3c5a: Download complete 

5b12ef8fd570: Download complete 

Status: Image is up to date for 172.24.0.14:5000/dev:latest

----------------------------------------------------------------------------------------------------------------------------

 

 

 

docker 使用 crontab 服務

 

 

yum 安裝 crontab

 

yum -y install cronie

 

啟動服務

 

/usr/sbin/crond

 

 

crontab -e   新增服務

 

 

 

 

 

 

 

 

 

docker 下使用 logrotate 服務 切割日誌

 

安裝 logrotate 服務

 

yum -y install logrotate

 

建立 切割規則 

 

 

cd /etc/logrotate.d

 

 

vi  nginx

 

------------------------------------------------------------------

 

/opt/local/nginx/logs/*.log

{

daily                 #每天輪詢一次

create 644 upload upload

dateext               #使用日期作為輪轉後的日誌檔案的字尾

delaycompress         #推遲壓縮

rotate 7              #一次將儲存7個歸檔日誌。對於第8個歸檔,時間最久的歸檔將被刪除。

sharedscripts         #只為整個日誌組執行一次的指令碼

postrotate            #引入在輪換過日誌之後要執行的指令碼

    if [ -f /opt/local/nginx/nginx.pid ]; then

        kill -USR1 `cat /opt/local/nginx/nginx.pid`

    fi

endscript

}

 

-------------------------------------------------------------------

 

 

ps:  docker 下不預設沒有crond 必須啟動crond 才能自動輪詢

 

 

yum -y install cronie

 

啟動服務

 

/usr/sbin/crond

 

logrotate 的啟動指令碼為

 

/etc/cron.daily/logrotate

相關文章