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