Docker使用大全(親測總結)
1、安裝docker先決條件
①必須是64位CPU架構的計算機,docker目前不支援32位的CPU
②執行Linux3.8或更高版本核心,CentOS的核心版本不能低於3.10;
③核心必須支援一種合適的儲存驅動,可以是Device Manager、AUFS、vfs、btrfs、以及預設的驅動Device Mapper中的一個;
④核心必須支援並開啟cgroup和名稱空間namespace功能。
2、centos7安裝docker
① Centos7安裝docker非常簡單,只需要:
#yum install docker
#systemctl start docker.service //開啟docker服務
#systemctl enable docker.service //設定為開機自動啟動docker服務
② 不行的話再用下面步驟:
#yum update
#yum -y remove docker docker-common docker-selinux docker-engine //解除安裝舊版本
#yum install -y yum-utils device-mapper-persistent-data lvm2 //設定yum源
#yum-config-manager --add-repo
#yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo//不行用阿里源
#yum list docker-ce --showduplicates | sort -r //檢視所有倉庫docker版本,並選擇安裝版本(此處是社群版)
#yum install docker-ce //
#yum install docker-ce-<VERSION_STRING> //指定安裝版本
#systemctl start docker //重啟命令 systemctl restart docker
#systemctl enable docker //開機啟動
#docker version //檢視docker版本號
#docker run hello-world //驗證是否安裝成功
Docker安裝參考連結:https://blog.csdn.net/qq_25838777/article/details/80491923
Docker手冊參考連結:http://www.runoob.com/docker/docker-container-usage.html
3、docker中使用Centos7映象
①
#systrmctl start docker.service //啟動容器服務
#docker pull centos:7.2.1511
#docker images //如下圖
#docker run -ti 4cb /bin/bash //4cb是IMAGE ID前3個字母,能區分是哪個image即可,不必全寫
#exit //退出centos系統
#docker ps -l //最近容器檢視
②
#docker pull mysql //獲取一個叫mysql的映象,預設從docker hub映象倉庫下載
#docker images //顯示本地已經有的映象
#docker run -t -i <映象名,如centos> /bin/bash //以centos映象為基礎建立一個容器並進入
#exit //退出容器
#docker ps //檢視所有正在執行中的容器
4、docker常用命令
#yum install docker //安裝服務
#systemctl start docker.service //啟動服務
#systemctl enable docker.service //開機啟動服務
#docker pull centos //下載映像到本地
#docker run -i -t IMAGEID /bin/bash //以互動式啟動容器,其中-t指讓docker分配一個偽終端並繫結在容器的標準輸入上,-i讓容器的標準輸入保持開啟
#docker run --name IMAGEID -itd centos:latest //利用映象建立容器,其中-i表示讓容器的標準輸入開啟,-t表示分配一個偽終端,-d表示後臺啟動,--name指定容器名
#docker attach CONTAINERID //進入一個已經開啟的容器
#docker exec -it CONTAINERID /bin/sh
#docker run centos echo ‘Hello World’
#docker ps //檢視正在執行的容器
#docker ps -l //查詢最後一次建立的容器
#docker ps -a //檢視所有容器
#docker port <ID或者名字> //容器資訊可通過docker ps檢視
#docker logs -f <ID或者名字> //檢視對應容器log,輸出形式和tail -f一樣
#docker top <ID或者名字> //檢視容器內部執行程序
#docker stop <ID或者名字> //停止容器
#docker start <ID或者名字> //啟動容器
#docker info
#docker search
#docker tag //修改標籤
#docker push //上傳image
#docker save //儲存image
#docker commit //提交image
#docker build //編譯Dockerfile檔案
#docker import //將tar.gz格式的映象檔案匯入docker
#docker load --input image.tar.gz //也是匯入,用於刪除後的恢復
#docker load < image.tar.gz //docker load命令另一種寫法
#docker start/stop/restart CONTAINERNAME //啟動、停止、重啟容器
#docker attach CONTAINERID //進入剛剛啟動的容器
#docker logs <imageID> //檢視對應容器日誌
#docker exec -ti <containname> /bin/bash //進入後臺執行的容器
#docker stop $(docker ps -a -q) //停止所有容器
#docker -rm CONTAINERID //刪除容器
#docker -rm -f CONTAINERID //強制刪除容器
#docker rm $(docker ps -a -q) //刪除所有容器
#docker container prune //刪除所有停止的容器
#docker rmi <imageID> //刪除本地映象,刪除映象前記得停止所有該映象的容器
#docker rmi -f IMAGEID //強制刪除本地映象
#docker rmi $(docker images -q) //刪除全部image
#docker image prune --force --all //刪除所有不使用的映象
#docker rename old_CONTAINERNAME new_CONTAINERNAME //重新命名一個容器
#docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq) //獲取所有容器名稱及其IP地址
#cat /etc/hosts //進入容器內部後獲取目前容器IP
在docker容器和宿主機之間複製檔案(需要root許可權):
#docker cp host_path containerID:container_path //從宿主機複製檔案到容器
#docker cp containerID:container_path host_path //從容器複製檔案到宿主機
#怎樣退出容器但是不關閉容器:按鍵ctrl+p+q
5、docker常見使用場景
5.1、建立映象
5.1.1、修改已有映象並重新打包
#docker pull training/sinatra //下載映象
#docker images //顯示本地已經有的映象
#docker run -t -i training/sinatra /bin/bash //開啟並進入容器
#gem install json //嘗試安裝一些東西,下面好準備打包新的容器
#exit //退出容器
#docker commit -m ‘add json gem’ -a ‘Docker Container’ 7b789b19757d my/sinatra:v2 //這是提交命令,其中-m代表提交註釋,-a代表維護者的資訊,7b789b19757d代表映象倉庫的ID(容器ID,進入容器後會顯示),my/sinatra:v2代表給這個映象命名為另外一個名字,my指所屬者,sinatra指映象名字,v2是個tag標籤,注意my/sinatra代表倉庫名,必須都是小寫字母。
5.1.2、用Dockerfile建立映象
#mkdir centos //比如先建立一個名為centos的資料夾
#touch Dockerfile //建立Dockerfile檔案,注意首字母為大寫
Dockerfile內容如下:
-----------------------------------------------------------------------
#註解
FROM centos
MAINTAINER REGAN [email protected]
RUN yum -qqy install python
-----------------------------------------------------------------------
其中:
FROM告訴Docker使用哪個映象作為基礎(也可以是docker images產生的對應的image ID)。
MAINTAINER是維護者資訊。
RUN開頭的指令會在建立中執行,例如安裝一些軟體包,這裡使用python安裝python,注意使用yum需要定製引數-qqy,不然可能會報錯。注意每個命令代表映象一層,一共不能操作127層。
#docker build -t=’arvin/python:v1.0.2’ . //-t引數表示新增tag,指定新的映象的使用者資訊,”.”點引數很重要,代表Dockerfile在當前路徑,這個引數也可以替換為具體Dockerfile的路徑。
#docker tag 5725c0d57443 mysql/centos:v1.0.1 //docker tag命令可以用來修改images名字和標籤
5.2、本地匯入映象
比如本地有一個ubuntu_eml.tar.gz的映象檔案需要匯入,用docker import命令:
#cat ubuntu_eml.tar.gz | docker import - my/ubuntu_eml:v1.1.0
注意:這裡被匯入映象的名字必須是.tar.gz或者.tar格式結尾。
#docker push my/ubuntu_eml //上傳映象,預設上傳到公有倉庫docker hub,其中my/ubuntu_eml用docker tag命令改為提前在docker hub建立的使用者,否則上傳失敗。
5.3、儲存、載入、刪除映象
#docker save -o mysql.tar.gz arvin/mysql //將名為arvin/mysql的映象儲存在當前目錄,命名為mysql.tar.gz
#docker rmi <imageID> //刪除本地映象docker rmi -f 為強制刪除
#docker load --input image.tar.gz //匯入以tar.gz結尾的本地映象,用於刪除後的恢復
5.4、docker容器的建立、啟動、和停止
#docker run -t -i <imageID> /bin/bash //這是一種與容器的互動方式,其中-t指讓docker分配一個偽終端並繫結在容器的標準輸入上,-i讓容器的標準輸入保持開啟
#docker run <imageID> cal //檢視image日曆,這是另一種與容器互動方式
當執行docker run命令來啟動容器,docker在後臺執行的標準操作包括:
①檢查本地是否存在指定的映象,不存在則從私有倉庫下載
②使用映象建立並啟動容器
③分配一個檔案系統,並在只讀的映象層外面掛載一層可讀可寫層
④從宿主機配置的網橋介面中橋接一個虛擬介面到容器中去
⑤從地址池分配一個IP地址給容器
⑥執行使用者指定的應用程式
⑦執行完畢之後容器被終止
#docker stop <imageID> //停止容器
#docker ps //檢視正再啟動的容器有哪些
#docker start <imageID> //啟動容器
守護狀態執行:很多時候我們希望容器在後臺以守護狀態執行,此時可以新增-d引數來實現(d是daemon的首字母),例如我們啟動centos後臺容器,每隔一秒列印當天日曆:
#docker run -d centos /bin/sh -c “while true;do echo hello docker;sellp 1;done”
#docker ps //檢查效果
#docker logs <imageID> //檢視對應容器日誌
5.5、docker私有倉庫
5.5.1、建立私有倉庫
安裝並啟動docker
#docker run -d -p 5000:5000 --name registry registry:2
#docker pull centos
#docker image tag centos localhost:5000/myfirstimage
#docker push localhost:5000/myfirstimage
#docker pull localhost:5000/myfirstimage
#docker container stop registry && docker container rm -v registry //停止registry並刪除所有資料
#docker push 172.16.1.118:5000/myfirstimage //在另一臺主機下載118主機倉庫裡的映象
注意:客戶機上報錯:(此處舉例:118為倉庫伺服器,117為客戶機)
Get https://172.16.1.118:5000/v2/_ping: http: server gave HTTP response to HTTPS client
解決方案:開啟客戶機cd /etc/docker目錄
#vi daemon.json,寫入:
{“insecure-registries”:[“172.16.1.118:5000”]} //寫完儲存退出
#systemctl restart docker.service //重啟docker服務生效
#docker run -d -p 5000:5000 -v /opt/ata/registry:/tmp/registry registry
再push映象成功
#curl http://172.16.1.118:5000/v2/_catalog //檢視118主機倉庫的所有映象
Docker官方手冊:https://docs.docker.com/registry/#requirements
5.6、docker共享目錄
#docker run -it -v /test:/soft centos /bin/bash //啟動一個centos容器,宿主機的/test目錄掛載到容器的/soft目錄,注意目錄必須為絕對路徑
5.7、製作docker映象
參考連結:https://www.jb51.net/article/114023.htm
https://www.cnblogs.com/zhengah/p/4935459.html
此處以製作centos6為例:
需要找一個centos6.5的系統,因為centos7已不再提供febootstrap相關包的下載了
但是centos6.5上安裝docker不能直接yum install docker,具體步驟如下:
①先在centos6.5上安裝docker
#rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
#yum -y install yum -priorities
#yum -y install docker-io
#service docker start
#chkconfig docker on
②安裝febootstrap
#yum -y install febootstrap
③設定Docker映象源
#yum install -y yum-priorities && rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
④製作centos映象檔案centos6-image目錄
#febootstrap -i bash -i wget -i yum -i iputils -i iproute -i man -i vim -i openssh-server -i openssh-clients -i tar -i gzip centos6 centos6-image http://mirrors.aliyun.com/centos/6/os/x86_64/
注意:
製作centos6.5命令:
febootstrap -i bash -i wget -i yum -i iputils -i iproute centos65 centos65-image http://archive.kernel.org/centos-vault/6.5/os/x86_64/
製作centos7.5命令:
febootstrap -i bash -i wget -i yum -i iputils -i iproute centos75 centos75-image http://mirrors.aliyun.com/centos/7.5.1804/os/x86_64/
⑤此時會生成一個centos6-image檔案目錄,上面命令中引數 -i 後面的都是基礎映象中安裝的一些服務。如果你不想要這麼多服務(因為把所有服務安裝後鏡像會變的非常大)可以只安裝一些基本的,必不可少的服務。centos6是指版本,centos6-image是生成的目錄名稱。
⑥
#cd centos6-image
#cp etc/skel/.bash* root/
#tar -c .|docker import - centos6-base
#docker images //檢視有無剛剛建立的名為centos6-base的映象
#docker run -ti centos6-base /bin/bash
#docker tag IMAGEID localhost:5000/myfirstimage
#docker save -o image.tar.gz arvin/mysql //匯出映象
#docker load --input image.tar.gz //匯入映象(換一臺機器)
5.8、docker容器執行監測
#docker ps -a //檢視所有容器,包括不在執行的容器,找到CONTAINERID
#ps -ef | grep CONTAINERID //檢視對應容器的程序號
#top -p CONTAINERPID //檢視記憶體佔用情況