1. 程式人生 > >Docker使用大全(親測總結)

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

https://download.docker.com/linux/centos/docker-ce.repo//報錯是yum源問題

#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.4docker容器的建立、啟動、和停止

#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.5docker私有倉庫

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.6docker共享目錄

#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.8docker容器執行監測

#docker ps -a     //檢視所有容器,包括不在執行的容器,找到CONTAINERID

#ps -ef | grep CONTAINERID    //檢視對應容器的程序號

#top -p CONTAINERPID        //檢視記憶體佔用情況