1. 程式人生 > >docker基本命令及安裝

docker基本命令及安裝

Docker三大核心元件:
• Docker 映象 - Docker images 
• Docker 倉庫 - Docker registeries
• Docker 容器 - Docker containers 
私有庫:
docker在國內沒有伺服器 
docker國內倉庫:ali、網易蜂巢、daocloud
安裝docker
# yum install docker   
啟動docker
# systemctl start docker.service
# systemctl enable docker.service 
確定docker服務在執行
# docker version  
檢視docker基本資訊
# docker info   
 (只適用於官方源)
# docker search centos -s 100    (檢視centos的映象星大於100的)
# docker pull ....     (下載....)
下載sentos7的映象
# docker pull daocloud.io/centos:7 
檢視所有的映象
# docker images   
執行容器並進入容器操作
# docker run -it daocloud.io/centos  /bin/bash
(-i 捕獲標準輸入輸出   -t 分配一個終端或控制檯 -d執行在後臺)
建立一個容器但不進入容器
# docker create -it daocloud.io/centos:7 /bin/bash
rm 刪除容器
rmi 刪除映象
刪除一個或多個,多個之間用空格隔開
# docker rmi daocloud.io/library/mysql
# docker rmi ed9c93747fe1
強制刪除:–force
如果映象正在被使用中可以使用--force強制刪除 
# docker rmi docker.io/ubuntu:latest --force
刪除所有映象:
# docker rmi $(docker images -q)
只檢視所有映象的id:
# docker images -q 
檢視容器:
只檢視執行狀態的容器:
#docker ps

#docker ps -a
-a 檢視所有容器
只檢視所有容器id:
# docker ps -a -q
刪除容器:
# docker rm 容器id或名稱
根據格式刪除所有容器:
# docker rm $(docker ps -qf status=exited)
執行一個 Docker 容器:
# docker run -it centos /bin/bash
如果執行成功,說明CentOS 容器已經被啟動,並且應該已經得到了 bash 提示符。
-i 捕獲標準輸入輸出
-t 分配一個終端或控制檯
若要斷開與容器的連線,並且關閉容器:
容器內部執行如下命令
[[email protected] /]#exit
重新啟動docker
# docker start ...
重新進去容器
# docker attach id號
不進入容器在容器中建立一個檔案
# docker exec elated_lovelace touch /testfile
如果只想斷開和容器的連線而不關閉容器:
快捷鍵:ctrl+p+q
執行遠端機器上的容器:
[[email protected] ~]# docker run -it 
-h test.up.com daocloud.io/centos:7
在其他視窗列出正在執行的容器:
[[email protected] ~]# docker ps
列出所有的容器(包括正在執行的容器和已經退出的容器):
[[email protected] ~]# docker ps -a
# docker ps -q 查詢已執行的docker容器的ID
# docker ps -a -q 查詢所有的docker容器的ID
列出最近一次啟動的容器
# docker ps -l 
恢復容器內暫停的程序,與pause引數相對應
# unpause Unpause a paused container 
查詢某一個執行中容器的id,然後使用docker inspect命令檢視容器的資訊
docker inspect id號
容器卷
# docker run -it -v /abc:/abc   1ae9
宿主機的目錄:容器的目錄
共享bc4181容器的卷:
# docker run -it --volumes-from bc4181 daocloud.io/library/centos:5 /bin/bash
刪除容器
# docker rm trusting_newton
如果要刪除一個執行中的容器,可以新增 -f 引數。Docker 會發送 SIGKILL 訊號給容器。
殺死所有running狀態的容器
# docker kill $(docker ps -q)
檢視容器內發生變化的檔案
# docker diff 容器名稱
實時輸出容器的事件
# docker events
建立自己的映象
1.將容器的檔案系統打包成tar檔案
第一種:
# docker export -o elated_lovelace.tar elated_lovelace

第二種:
# docker export 容器名稱 > 映象.tar

匯入映象歸檔檔案到其他宿主機
# docker import elated_lovelace.tar elated_lovelace:v1

如果匯入映象時沒有起名字,隨後可以單獨起名字(沒有名字和tag),可以手動加tag:
# docker tag 映象ID mycentos:7

2.將映象打包
#docker save -o nginx.tar nginx
#docker load < nginx.tar

3.通過容器建立本地映象
# docker commit -a ll -m ll b1cce61d2c19 ll:11
-a  製作者  -m  描述資訊
4.通過docker file建立映象
建立映象所在的資料夾和Dockerfile檔案 
命令: 
# mkdir 名字 
# cd 名字 
# vim Dockerfile 
# This is a comment 
FROM ubuntu:14.04 
MAINTAINER wing [email protected]
RUN apt-get update 
RUN gem install Sinatra

格式說明: 
每行命令都是以 INSTRUCTION statement 形式,就是命令+ 清單的模式。命令要大寫,"#"是註解。 
FROM 命令是告訴docker 我們的映象什麼。 
MAINTAINER 是描述 映象的建立人。 
RUN 命令是在映象內部執行。就是說他後面的命令應該是針對映象可以執行的命令。

# docker build -t wing/名字:v2 
部署私有倉庫
1.拉取映象
# docker pull daocloud.io/library/registry:latest

注:如果建立容器不成功,報錯防火牆,解決方案如下
#systemctl stop firewalld
#yum install iptables*
#systemctl start iptables
#iptables -F
#systemctl restart docker

2.將宿主機埠對映到容器中去,容器的5000埠是不能更改的
# docker run -d -p 5000:5000 daocloud.io/library/registry 

3.進入到私有倉庫容器中去
# docker exec -it a9a0dfaea6ad /bin/sh
/ # netstat -lnp

在上傳前需要將映象做個tag ,註明ip和埠 即:
# docker tag daocloud.io/library/mysql:latest 192.168.245.136:5000/daocloud.io/library/mysql:latest

4.在本機檢視能否訪問該私有倉庫,看看狀態碼是不是200
# curl -I 127.0.0.1:5000

如果報錯:

改/etc/sysconfig/docker
OPTIONS='--selinux-enabled --insecure-registry 192.168.137.17:5000'
注:紅色IP為修改的部分

5.上傳映象到私有倉庫
# docker push 192.168.245.136:5000/daocloud.io/library/mysql

報錯:

6.如果上傳映象時發生以下錯誤:
http: server gave HTTP response to HTTPs client
方法1:
在"/etc/docker/"目錄下,建立"daemon.json"檔案。在檔案中寫入:
{ "insecure-registries":["192.168.245.136:5000"] }儲存退出後,重啟docker。問題解決

方法2:
報錯:
[[email protected]~]#docker run -it mytest1 /bin/bash -d WARNING: IPv4 forwarding is disabled. Networking will not work.
解決:
[[email protected]/]#cat /etc/docker/daemon.json
{
"dns":["10.18.47.1","8.8.8.8","10.18.47.100"],
"live-restore": true
}
[[email protected]/]#cat /usr/lib/sysctl.d/99-docker.conf
fs.may_detach_mounts=1
net.ipv4.ip_forward=1

7.檢視私有倉庫裡的所有映象
# curl 192.168.245.136:5000/v2/_catalog

#vim /etc/sysconfig/docker-network
DOCKER_NETWORK_OPTIONS= --bip=172.18.42.1/16
#reboot

docker 130上:
#route add -net 172.18.0.0/16 gw 192.168.18.128

docker 128上:
#route add -net 172.17.0.0/16 gw 192.168.18.130

現在兩臺宿主機裡的容器就可以通訊了

</font>