Docker培訓

學習參考資料

注意:學習技術(shù)已慢,最好的是官方文檔,而且要多練多操作

Docker官網(wǎng): 
http://www.docker.com
https://hub.docker.com
https://docs.docker.com/install/linux/docker-ce/centos/

參考資料:
1霹购、《Docker從入門到實踐》
2佑惠、菜鳥教程: 
http://www.runoob.com/docker/docker-tutorial.html

一、Docker簡介

1、簡介


容器定義
容器是一種輕量級、可移植、自包含的軟件打包技術(shù)虱痕,使應用程序可以在幾乎任何地方以相同的方式運行擎宝。開發(fā)人員在自己筆記本上創(chuàng)建并測試好的容器,無需任何修改就能夠在生產(chǎn)系統(tǒng)的虛擬機魔眨、物理服務器或公有云主機上運行。

Docker 是一個開源的應用容器引擎,基于 Go 語言 并遵從Apache2.0協(xié)議開源请垛。

Docker 可以讓開發(fā)者打包他們的應用以及依賴包到一個輕量級、可移植的容器中洽议,然后發(fā)布到任何流行的 Linux 機器上宗收,也可以實現(xiàn)虛擬化。

容器是完全使用沙箱機制亚兄,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低混稽。

Docker 從 17.03 版本之后分為 CE(Community Edition: 社區(qū)版) 和 EE(Enterprise Edition: 企業(yè)版),我們用社區(qū)版就可以了审胚。

2匈勋、Docker的應用場景

1)簡化配置
虛擬機的最大好處是能在你的硬件設施上運行各種配置不一樣的平臺(軟件, 系統(tǒng)), Docker在降低額外開銷的情況下提供了同樣的功能. 它能讓你將運行環(huán)境和配置放在代碼匯總?cè)缓蟛渴? 同一個Docker的配置可以在不同的環(huán)境環(huán)境中使用, 這樣就降低了硬件要求和應用環(huán)境之間耦合度.

2)代碼流水線管理
代碼從開發(fā)者的機器到最終在生產(chǎn)環(huán)境上的部署, 需要經(jīng)過很多的中堅環(huán)境. 而每一個中間環(huán)境都有自己微小的差別, Docker給應用提供了一個從開發(fā)到上線均一致的環(huán)境, 讓代碼的流水線變得簡單不少.

3)提升開發(fā)效率
不同環(huán)境中, 開發(fā)者的共同目標:
    a.想讓開發(fā)環(huán)境盡量貼近生產(chǎn)環(huán)境.
    b.想快速搭建開發(fā)環(huán)境

開發(fā)環(huán)境的機器通常內(nèi)存比較小, 之前使用虛擬的時候, 我們經(jīng)常需要為開發(fā)環(huán)境的機器加內(nèi)存, 而現(xiàn)在Docker可以輕易的讓幾十個服務在Docker中跑起來.

4)隔離應用
開發(fā)時會在一個臺機器上運行不同的應用.
    a.為了降低成本, 進行服務器整合
    b.將一個整體式的應用拆分成低耦合的單個服務(微服務架構(gòu))

5)整合服務器
Docker隔離應用的能力使得Docker可以整合多個服務器以降低成本. 由于沒有多個操作系統(tǒng)的內(nèi)存占用, 以及能在多個實例之間共享沒有使用的內(nèi)存, Docker可以比虛擬機提供更好的服務器整合解決方案.

6)調(diào)試能力
Docker提供了很多的工具, 這些工具不一定只是針對容器, 但是卻適用于容器. 他們提供了很多功能, 包括可以為容器設置檢查點, 設置版本, 查看兩個容器之間的差別, 這些特性可以幫助調(diào)試Bug.

7)多租戶環(huán)境
多租戶環(huán)境的應用中, 它可以避免關(guān)鍵應用的重寫.我們一個特別的關(guān)于這個場景的例子是為loT(物聯(lián)網(wǎng))的應用開發(fā)一個快速, 易用的多租戶環(huán)境. 這種多租戶的基本代碼非常復雜, 很難處理, 重新規(guī)劃以應用不但消耗時間, 也浪費金錢.
使用Docker, 可以為每一個租戶的應用層的多個實例創(chuàng)建隔離的環(huán)境, 這不僅簡單而且成本低廉, 因為Docker環(huán)境啟動的速度快, diff命令很高效.

8)快速部署
Docker為進程創(chuàng)建一個容器, 不需要啟動一個操作系統(tǒng), 時間縮短為秒級別.
可以在數(shù)據(jù)中心創(chuàng)建銷毀資源而無須擔心重新啟動帶來的開銷. 通常數(shù)據(jù)中心的資源利用率只有30% , 通過使用Docker并進行有效的資源分配可以提高資源的利用率.

3、Docker 的優(yōu)點

1)簡化程序:
Docker讓開發(fā)者可以打包他們的應用以及依賴包到一個可移植的容器中膳叨,然后發(fā)布到任何流行的 Linux 機器上洽洁,便可以實現(xiàn)虛擬化。Docker改變了虛擬化的方式菲嘴,使開發(fā)者可以直接將自己的成果放入Docker中進行管理饿自。方便快捷已經(jīng)是 Docker的最大優(yōu)勢,過去需要用數(shù)天乃至數(shù)周的   任務龄坪,在Docker容器的處理下昭雌,只需要數(shù)秒就能完成。

2)避免選擇恐懼癥:
如果你有選擇恐懼癥健田,還是資深患者烛卧。Docker幫你打包你的糾結(jié)!比如Docker鏡像抄课;Docker鏡像中包含了運行環(huán)境和配置唱星,所以Docker可以簡化部署多種應用實例工作。比如Web應用跟磨、后臺應用间聊、數(shù)據(jù)庫應用、大數(shù)據(jù)應用比如Hadoop集群抵拘、消息隊列等等都可以打包成一個鏡像部署哎榴。

3)節(jié)省開支:
一方面,云計算時代到來,使開發(fā)者不必為了追求效果而配置高額的硬件尚蝌,Docker改變了高性能必然高價格的思維定勢迎变。Docker與云的結(jié)合,讓云空間得到更充分的利用飘言。不僅解決了硬件管理的問題衣形,也改變了虛擬化的方式。

3姿鸿、docker的缺點

Docker的安裝非常容易.目前,Docker支持所有的Linux系列系統(tǒng),(Ubuntu,RHEL,Debian等).通過Boot2Docker虛擬工具,在OS X和Windows下也能夠正常運行Docker.
注: Docker運行環(huán)境的限制:
    1)必須是64位機器上運行,目前僅支持 x86_64和AMD64,32系統(tǒng)不支持.
    2)系統(tǒng)的Linux內(nèi)核必須是3.8或者更高,內(nèi)核支持Device Mapper,AUFS,VFS,btrfs等存儲格式.
    3)內(nèi)核必須支持cgroups和命名空間.

4谆吴、docker的相關(guān)知識點

Docker組件(核心):鏡像、容器苛预、庫句狼。

采用C/S架構(gòu):客戶端(執(zhí)行程序)→通過命令行和API形式和守候程序(提供Docker服務)進行通訊。

鏡像:一個只讀的靜態(tài)模板(框架體系)热某;包含環(huán)境和應用執(zhí)行代碼(框架語言)腻菇;采用分層機制。將新增數(shù)據(jù)通過聯(lián)合文件系統(tǒng)附加在原基礎上昔馋。

容器:一個運行時環(huán)境筹吐,是鏡像的運行狀態(tài),是鏡像執(zhí)行的一種動態(tài)表現(xiàn)秘遏。

庫:使用注冊服務器(共有的or私有的)存儲和共享用戶的鏡像骏令,是某個特定用戶存儲鏡像的目錄。

*Docker特性:

*隔離性:libcontainer(默認容器)=>內(nèi)核命名空間垄提。

*安全性:內(nèi)部(cgroups)| 容器和宿主主機(內(nèi)核能力機制)。

*可度量性:cgroups(控制組)→資源度量和分配(用戶)周拐。

*移植性:AUFS(快速更新)→層的概念铡俐。

-----使用AUFS作為Docker容器的文件系統(tǒng),提供的好處:
    1)節(jié)省存儲空間:多個容器可以共享一個基礎鏡像存儲.
    2)快速部署:當要部署多個來自同一個基礎鏡像的容器時,避免多次復制操作.
    3)升級方便:升級一個基礎鏡像即可影像到所有基于它的容器.
    4)增量修改:可以在不改變基礎鏡像的同時修改其他目錄文件,所有的操作都發(fā)生在最上層的寫操作層,增加了基礎鏡像的可共享內(nèi)容.

二妥粟、準備

1审丘、使用Centos7系統(tǒng)

注意:root用戶執(zhí)行命令不用加sudo

1)設置普通用戶的sudo權(quán)限
# yum install -y sudo
# chmod u+w /etc/sudoers
# echo 'wym    ALL=(ALL)       ALL' >> /etc/sudoers

2)檢查selinux和防火墻是否關(guān)閉

改配置文件禁用SELINUX
# vim /etc/selinux/config
SELINUX=disabled

# setenforce 0  #臨時關(guān)閉
# getenforce  #查看狀態(tài)

# systemctl disable firewalld.service   #禁止防火墻自啟動
# systemctl stop firewalld.service      #停止防火墻
# systemctl status firewalld.service    #查看防火墻狀態(tài)

2、更換阿里yum源勾给,需要連外網(wǎng)

建立備份目錄
# sudo mkdir -p /etc/yum.repos.d/repobak
備份原有文件
# sudo mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repobak
拉取阿里源文件
# sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# sudo curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# sudo curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

清除并生成緩存
# sudo yum clean all && yum makecache
查看
#sudo yum repolist

3滩报、公司內(nèi)網(wǎng)yum源

自己搭建的內(nèi)網(wǎng)yum源配置文件
# sudo curl http://192.168.102.3/CentOS-YUM/centos/repo/CentOS-7.repo > /etc/yum.repos.d/Centos-7.repo
# sudo curl http://192.168.102.3/CentOS-YUM/centos/repo/epel-7.repo > /etc/yum.repos.d/epel-7.repo
# sudo curl http://192.168.102.3/CentOS-YUM/centos/repo/docker-ce1806.repo > /etc/yum.repos.d/docker-ce.repo
# sudo yum clean all && yum makecache

三、安裝Docker

1播急、官方安裝

官方文檔:
https://docs.docker.com/install/linux/docker-ce/centos/

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum repolist
sudo yum install epel-release   #安裝第三方源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

sudo yum list docker-ce --showduplicates | sort -r
sudo yum install docker-ce docker-ce-cli containerd.io

# yum install -y docker-ce-18.06.1.ce
# yum install -y docker-ce-18.09.3-3.el7

sudo systemctl start docker
sudo systemctl enable docker

查看是否安裝Docker軟件包
# yum list installed | grep docker
# rpm -qa|grep docker
# docker version


$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh

如果您想將Docker用作非root用戶脓钾,您現(xiàn)在應該考慮將您的用戶添加到“docker”組,例如:
sudo groupadd docker
sudo usermod -aG docker $USER

$ sudo yum remove docker-ce
$ sudo rm -rf /var/lib/docker

1.1安裝低版本桩警,解決依賴問題

通過這個地址我們查看和我們安裝docker版本一致的rpm包
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

要先安裝docker-ce-selinux-17.03.2.ce可训,否則安裝docker-ce會報錯
sudo yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm 

然后再安裝 docker-ce-17.03.2.ce,就能正常安裝
sudo yum -y install docker-ce-17.03.2.ce docker-ce-cli-17.03.2.ce containerd.io

2、離線安裝包

請注意:--downloadonly參數(shù)將自動下載程序包安裝時所需要的所有依賴握截,所以建議在全新的系統(tǒng)中使用本命令飞崖,因為在已經(jīng)安裝過部分依賴的系統(tǒng)上,yum不會將所有需要的依賴下載完全谨胞,例如下面這幅圖所示

1)使用--downloadonly參數(shù)之后固歪,yum在下載完程序包后就會顯示一句“exiting because "Download Only" specified”并自動退出,此時要下載的程序包已經(jīng)被放置到了yum的默認存放位置胯努,在CentOS 7 x64下牢裳,這個默認路徑是:

/var/cache/yum/x86_64/7/<repo>/packages/

2)如果要指定yum的下載目錄,還需要一個“--downloaddir”參數(shù)康聂,例如我要將nginx程序包下載到當前文件夾下贰健,就使用下面的命令:

yum install -y --downloadonly --downloaddir=. nginx

下載離線的docker安裝包
# yum install -y --downloadonly --downloaddir=/rpmpackage/docker-ce docker-ce-18.06.1.ce 

3)yum離線安裝
在剛剛第二步中我們使用了yum --downloadonly命令離線下載了想要的程序包安裝文件,現(xiàn)在我們有一臺因為種種原因而不能上網(wǎng)的系統(tǒng)恬汁,我們現(xiàn)在要把剛剛下載下來的程序包安裝到這臺電腦上該怎么辦呢伶椿?

很簡單,用yum localinstall命令氓侧。

首先將我們下載下來的程序包及其依賴去使用U盤等方式拷貝到這臺不能上網(wǎng)的電腦中脊另,然后進入程序包存放目錄,執(zhí)行下面的命令(以supervisor為例):

yum localinstall -y --nogpgcheck supervisor-3.1.4-1.el7.noarch.rpm \
       python-backports-1.0-8.el7.x86_64.rpm \
       python-backports-ssl_match_hostname-3.4.0.2-4.el7.noarch.rpm \
       python-meld3-0.6.10-1.el7.x86_64.rpm \
       python-setuptools-0.9.8-7.el7.noarch.rpm
 
1.使用yum localinstall命令需要的程序包時需要同時安裝程序包所有的依賴項目约巷,否則還是會嘗試聯(lián)網(wǎng)去下載缺少的依賴項目偎痛;
2.“--nogpgcheck”參數(shù)主要是為了不讓yum對程序包進行GPG驗證;
3.除了yum localinstall命令以外独郎,還可以使用rpm -ivh命令安裝rpm包踩麦,這里不再單獨討論。

或者構(gòu)建本地yum庫來安裝氓癌。

需要說明的是谓谦,為了在離線環(huán)境建軟件源,createrepo是必不可少的模塊贪婉,因此需要下載createrepo相關(guān)模塊反粥。

# yum install --downloadonly --downloaddir=/rpmpackage/createrepo createrepo
 
一般會下載三個包,一個是createrepo疲迂,另外兩個是依賴包才顿。

# rpm -ivh python-deltarpm-3.6-3.el7.x86_64.rpm 
# rpm -ivh createrepo-0.9.9-28.el7.noarch.rpm

centos7.4默認已經(jīng)安裝的
deltarpm-3.6-3.el7.x86_64
libxml2-python-2.9.1-6.el7_2.3.x86_64

createrepo構(gòu)建本地軟件源

假設安裝包在目標機的/rpmpackage/createrepo目錄下。

# createrepo  /rpmpackage/docker-ce/

修改yum軟件源

移除現(xiàn)有的軟件源
# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bk
 
開啟本地軟件源
# vim /etc/yum.repos.d/CentOS-Media.repo
[docker-ce]
name=local docker-ce
baseurl=file:////rpmpackage/docker-ce/
enabled=1
gpgcheck=0

這樣就可以使yum采用本地源安裝軟件尤蒿。

輸入yum repolist看是否可以看到自己構(gòu)建的本地源 

清除緩存 #yum clean all
創(chuàng)建緩存 #yum makecache

查看本地源是否成功郑气,通過yum list是否輸出新的rpm包。查詢到則證明成功
查看包信息
# yum info docker-ce


在目標機安裝目標軟件
使用yum正常安裝軟件即可优质。

# yum install -y docker-ce
# yum install -y docker-ce-18.06.1.ce #docker-ce-18.09.2
 
如果用的是純凈的虛擬機環(huán)境竣贪,并且和目標機保持一致军洼,那么依賴包就會都安裝,yum安裝就會很順利演怎。除非個別包會有依賴沖突匕争,A依賴B,B又依賴A爷耀,導致無法安裝甘桑,此時可以用rpm命令強制安裝其中一個,再用yum安裝軟件即可歹叮。

# rpm -ivh demo.rpm --nodeps --force

如果安裝中出現(xiàn)類似下面的錯誤:
 Package fglrx-glc22-4.1.0-3.2.5.i586.rpm is not signed

需要加個 --nogpgcheck 參數(shù)跑杭。
# yum localinstall fglrx-glc22-4.1.0-3.2.5.i586.rpm --nogpgcheck

3、選擇需要安裝docker版本

# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# sudo yum list docker-ce --showduplicates
# sudo yum install -y docker-ce 或安裝特定版本

# yum install -y docker-ce-18.09.3-3.el7

# sudo systemctl start docker
# sudo systemctl enable docker

# yum list docker-ce --showduplicates
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Determining fastest mirrors
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Installed Packages
docker-ce.x86_64                  18.03.1.ce-1.el7.centos                   @docker-ce-stable
Available Packages
docker-ce.x86_64                  17.03.0.ce-1.el7.centos                   docker-ce-stable 
docker-ce.x86_64                  17.03.1.ce-1.el7.centos                   docker-ce-stable 
docker-ce.x86_64                  17.03.2.ce-1.el7.centos                   docker-ce-stable 
docker-ce.x86_64                  17.03.3.ce-1.el7                          docker-ce-stable 
docker-ce.x86_64                  17.06.0.ce-1.el7.centos                   docker-ce-stable 
docker-ce.x86_64                  17.06.1.ce-1.el7.centos                   docker-ce-stable 
docker-ce.x86_64                  17.06.2.ce-1.el7.centos                   docker-ce-stable 
docker-ce.x86_64                  17.09.0.ce-1.el7.centos                   docker-ce-stable 
docker-ce.x86_64                  17.09.1.ce-1.el7.centos                   docker-ce-stable 
docker-ce.x86_64                  17.12.0.ce-1.el7.centos                   docker-ce-stable 
docker-ce.x86_64                  17.12.1.ce-1.el7.centos                   docker-ce-stable 
docker-ce.x86_64                  18.03.0.ce-1.el7.centos                   docker-ce-stable 
docker-ce.x86_64                  18.03.1.ce-1.el7.centos                   docker-ce-stable 
docker-ce.x86_64                  18.06.0.ce-3.el7                          docker-ce-stable 
docker-ce.x86_64                  18.06.1.ce-3.el7                          docker-ce-stable 
docker-ce.x86_64                  18.06.2.ce-3.el7                          docker-ce-stable 
docker-ce.x86_64                  18.06.3.ce-3.el7                          docker-ce-stable 
docker-ce.x86_64                  3:18.09.0-3.el7                           docker-ce-stable 
docker-ce.x86_64                  3:18.09.1-3.el7                           docker-ce-stable 
docker-ce.x86_64                  3:18.09.2-3.el7                           docker-ce-stable 
docker-ce.x86_64                  3:18.09.3-3.el7                           docker-ce-stable 
docker-ce.x86_64                  3:18.09.4-3.el7                           docker-ce-stable 
docker-ce.x86_64                  3:18.09.5-3.el7                           docker-ce-stable 

4咆耿、刪除Docker

# yum remove docker-ce
# rm -rf /var/lib/docker

# yum -y remove docker docker-common docker-selinux docker-engine docker-engine-selinux container-selinux docker-ce

# yum -y remove docker-ce-cli


查看是否安裝Docker軟件包
# yum list installed | grep docker
# rpm -qa|grep docker

5德谅、鏡像加速

鑒于國內(nèi)網(wǎng)絡問題,后續(xù)拉取Docker鏡像十分緩慢萨螺,我們可以需要配置加速器來解決窄做。

新版的Docker使用/etc/docker/daemon.json(Linux)來配置守護進程。

請在該配置文件中加入(沒有該文件的話慰技,請先建一個):

如果沒有椭盏,就建立docker文件夾
sudo mkdir -p /etc/docker

可以選擇多個加速器,建議阿里吻商,但是需要注冊
# https://xxxx.mirror.aliyuncs.com
# http://hub-mirror.c.163.com 
# http://f1361db2.m.daocloud.io

默認沒有daemon.json,自己用下面的一種方法新建
# vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}

或
# sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["http://hub-mirror.c.163.com"]
}
EOF

或
# sudo echo -e "{\n \"registry-mirrors\": [\"http://hub-mirror.c.163.com\"]\n}" > /etc/docker/daemon.json
#sudo echo -e '{"registry-mirrors": ["https://7bezldxe.mirror.aliyuncs.com/"],"insecure-registries": ["http://192.168.113.38"]}' > /etc/docker/daemon.json
或
# sudo curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

注意查看格式是否正確
# cat /etc/docker/daemon.json

重新加載并啟動
# systemctl daemon-reload
# systemctl restart docker

6掏颊、Windows Docker 安裝

win7、win8 等需要利用 docker toolbox 來安裝艾帐,國內(nèi)可以使用阿里云的鏡像來下載乌叶,下載地址:
http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/

docker toolbox 是一個工具集,它主要包含以下一些內(nèi)容:
    Docker CLI 客戶端柒爸,用來運行docker引擎創(chuàng)建鏡像和容器
    Docker Machine. 可以讓你在windows的命令行中運行docker引擎命令
    Docker Compose. 用來運行docker-compose命令
    Kitematic. 這是Docker的GUI版本
    Docker QuickStart shell. 這是一個已經(jīng)配置好Docker的命令行環(huán)境
    Oracle VM Virtualbox. 虛擬機

四枉昏、docker常用命令

1、docker命令

docker   # docker 命令幫助

Commands:
    attach    Attach to a running container                 # 當前 shell 下 attach 連接指定運行鏡像
    build     Build an image from a Dockerfile              # 通過 Dockerfile 定制鏡像
    commit    Create a new image from a container's changes # 提交當前容器為新的鏡像
    cp        Copy files/folders from the containers filesystem to the host path
              # 從容器中拷貝指定文件或者目錄到宿主機中
    create    Create a new container                        # 創(chuàng)建一個新的容器揍鸟,同 run,但不啟動容器
    diff      Inspect changes on a container's filesystem   # 查看 docker 容器變化
    events    Get real time events from the server          # 從 docker 服務獲取容器實時事件
    exec      Run a command in an existing container        # 在已存在的容器上運行命令
    export    Stream the contents of a container as a tar archive   
              # 導出容器的內(nèi)容流作為一個 tar 歸檔文件[對應 import ]
    history   Show the history of an image                  # 展示一個鏡像形成歷史
    images    List images                                   # 列出系統(tǒng)當前鏡像
    import    Create a new filesystem image from the contents of a tarball  
              # 從tar包中的內(nèi)容創(chuàng)建一個新的文件系統(tǒng)映像[對應 export]
    info      Display system-wide information               # 顯示系統(tǒng)相關(guān)信息
    inspect   Return low-level information on a container   # 查看容器詳細信息
    kill      Kill a running container                      # kill 指定 docker 容器
    load      Load an image from a tar archive              # 從一個 tar 包中加載一個鏡像[對應 save]
    login     Register or Login to the docker registry server   
              # 注冊或者登陸一個 docker 源服務器
    logout    Log out from a Docker registry server         # 從當前 Docker registry 退出
    logs      Fetch the logs of a container                 # 輸出當前容器日志信息
    port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
              # 查看映射端口對應的容器內(nèi)部源端口
    pause     Pause all processes within a container        # 暫停容器
    ps        List containers                               # 列出容器列表
    pull      Pull an image or a repository from the docker registry server
              # 從docker鏡像源服務器拉取指定鏡像或者庫鏡像
    push      Push an image or a repository to the docker registry server
              # 推送指定鏡像或者庫鏡像至docker源服務器
    restart   Restart a running container                   # 重啟運行的容器
    rm        Remove one or more containers                 # 移除一個或者多個容器
    rmi       Remove one or more images                 
              # 移除一個或多個鏡像[無容器使用該鏡像才可刪除句旱,否則需刪除相關(guān)容器才可繼續(xù)或 -f 強制刪除]
    run       Run a command in a new container
              # 創(chuàng)建一個新的容器并運行一個命令
    save      Save an image to a tar archive                # 保存一個鏡像為一個 tar 包[對應 load]
    search    Search for an image on the Docker Hub         # 在 docker hub 中搜索鏡像
    start     Start a stopped containers                    # 啟動容器
    stop      Stop a running containers                     # 停止容器
    tag       Tag an image into a repository                # 給源中鏡像打標簽
    top       Lookup the running processes of a container   # 查看容器中運行的進程信息
    unpause   Unpause a paused container                    # 取消暫停容器
    version   Show the docker version information           # 查看 docker 版本號
    wait      Block until a container stops, then print its exit code   
              # 截取容器停止時的退出狀態(tài)值
Run 'docker COMMAND --help' for more information on a command.

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS說明:
-a stdin: 指定標準輸入輸出內(nèi)容類型阳藻,可選 STDIN/STDOUT/STDERR 三項;
-d: 后臺運行容器谈撒,并返回容器ID腥泥;
-i: 以交互模式運行容器,通常與 -t 同時使用啃匿;
-p: 端口映射蛔外,格式為:主機(宿主)端口:容器端口
-t: 為容器重新分配一個偽輸入終端蛆楞,通常與 -i 同時使用;
--name="nginx-lb": 為容器指定一個名稱夹厌;
--dns 8.8.8.8: 指定容器使用的DNS服務器豹爹,默認和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名矛纹,默認和宿主一致臂聋;
-h "mars": 指定容器的hostname;
-e username="ritchie": 設置環(huán)境變量或南;
--env-file=[]: 從指定文件讀入環(huán)境變量孩等;
--cpuset="0-2" or --cpuset="0,1,2": 綁定容器到指定CPU運行;
-m :設置容器使用內(nèi)存最大值采够;
--net="bridge": 指定容器的網(wǎng)絡連接類型肄方,支持 bridge/host/none/container: 四種類型;
--link=[]: 添加鏈接到另一個容器蹬癌;
--expose=[]: 開放一個端口或一組端口权她;


實例:
# docker run -itd --name box1 busybox
# docker ps
# docker exec -it 802 /bin/sh

2、docker常用命令

$ sudo docker #顯示docker命令
$ sudo docker -v #顯示 Docker 版本信息
$ sudo docker version #顯示 Docker 版本信息
$ sudo docker info #顯示 Docker 系統(tǒng)信息冀瓦,包括鏡像和容器數(shù)

$ sudo docker search centos
$ sudo docker search centos --no-trunc #可顯示完整的鏡像描述
$ sudo docker search -s 10 tomcat    # 搜索10星以上的tomcat鏡像

$ sudo docker pull tomcat #拉取指定鏡像伴奥,可以加版本
$ sudo docker pull nginx:1.15.9-alpine
$ sudo docker run -itd --name nginx1 -p 8081:80 nginx:1.15.9-alpine

$ sudo docker images #顯示所有鏡像

把鏡像保存成一個tar文件,注意如果目錄沒有翼闽,需要提前建立一下拾徙,docker不會幫你建立目錄的
$ sudo docker save 鏡像名 -o /imagesbak/xxx.tar

篩選關(guān)鍵字批量打包
# docker save $(docker images | grep 關(guān)鍵字 | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o /imagesbak/dockerimages.tar

加載鏡像備份
$ sudo docker load -i /imagesbak/xxx.tar

$ sudo docker rmi 鏡像ID

拷貝docker容器里的文件
$ docker cp nginx1:/etc/nginx/nginx.conf /home/w/tool/nginx/conf/nginx.conf

$ sudo docker ps #列出所有運行中容器
$ sudo docker ps -a #列出所有容器(含沉睡鏡像)
$ sudo docker ps -l #僅列出最新創(chuàng)建的一個容器
$ sudo docker ps -n=3 #列出最近創(chuàng)建的3個容器
$ sudo docker ps -s #顯示容器大小

$ sudo docker stop 停止容器名或ID
$ sudo docker start 啟動容器名或ID
$ sudo docker restart 重啟容器名或ID

進入容器
$ sudo docker exec -it 容器ID /bin/sh

# 進入docker 容器的小腳本

下面是一個通過nsenter進入docker容器的例子腳本: 
文件名字:ns 
使用方法:將文件放入系統(tǒng)PATH路徑下,進入容器方式ns <container-name/container-id>

如果docker容器沒有提供ssh,那么進入docker容器的方法感局,一般是 attach ,exec,nsenter
attach 進入后再退出尼啡,會引起docker 容器停止。exec 每次輸入比較麻煩询微。
比較方便的是用 nsenter . nsenter 進入需要查docker 容器的pid 崖瞭。所以,寫了下面的腳本撑毛,方便進入书聚。

#!/bin/bash  
docker ps  
echo "======================================\r"  
read -p "input docker name:" did  
PID=$(docker inspect --format "{{.State.Pid}}" $did)  
nsenter --target $PID --mount --uts --ipc --net --pid 
 
該腳本會提示當前運行的docker容器,然后輸入docker 的id 后藻雌,就進入了docker容器


刪除雌续,容器要先停止
$ sudo docker rm 容器ID
-f 強行移除該容器,即使其正在運行胯杭;
-l 移除容器間的網(wǎng)絡連接驯杜,而非容器本身;
-v 移除與容器關(guān)聯(lián)的空間做个。

查看
$ sudo docker top #查看一個正在運行容器進程
$ sudo docker inspect 鏡像或容器ID  #檢查鏡像或者容器的參數(shù)鸽心,默認返回 JSON 格式
$ sudo docker logs -f 容器ID #查看指定容器的日志記錄

$ docker stats 容器ID #查看容器的性能
$ docker system df #查看Docker的磁盤使用情況
$ sudo du -hs /var/lib/docker/ #查看docker目錄空間


其他命令

#獲取Container IP地址(Container狀態(tài)必須是Up)
$ sudo docker inspect 容器ID | grep IPAddress | cut -d '"' -f 4    

#獲取環(huán)境變量
$ sudo docker exec 677 env  
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=3863f1da45f4
HOME=/root

3滚局、批量操作docker命令

篩選關(guān)鍵字
# docker save $(docker images | grep geerlingguy | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o /home/wym/wymdockerimagesgeerlingguy.tar

批量刪除沒有啟動的容器
# docker rm $(docker ps --all -q -f status=exited)

刪除沒有使用的鏡像
# docker rmi -f $(docker images | grep "<none>" | awk "{print \$3}")

docker批量刪除容器、鏡像
1顽频、刪除所有容器
# docker rm `docker ps -a -q`
2藤肢、刪除所有鏡像
# docker rmi --force `docker images -q`
3、按條件刪除鏡像
  沒有打標簽
# docker rmi `docker images -q | awk '/^<none>/ { print $3 }'`

鏡像名包含關(guān)鍵字
# docker rmi --force `docker images | grep doss-api | awk '{print $3}'`    //其中doss-api為關(guān)鍵字
根據(jù)鏡像名刪除冲九,不用鏡像ID
# docker rmi --force `docker images|grep wymproject|awk '{print $1":"$2}'`

docker批量改tag
# docker images | grep 113 | sed 's/192.168.113.38\/wymproject/192.168.102.3:8001\/wymproject/g' | awk '{print "docker tag"" " $3" "$1":"$2}'|sh

批量建立100個docker容器谤草,并綁定端口
# for i in 'seq 2201 2299';do docker run -itd -p $i:22 -p 1$i:80 centos68 /bin/bash

批量開啟容器的sshd服務
# for i in 'docker ps -aq';do docker exec $i /etc/init.d/sshd start;done

篩選出ubuntu容器,print $1表示輸出第一列
# docker ps -a|grep ubuntu|awk '{print $1}'
篩選出ubuntu容器莺奸,并停止
# docker ps -a|grep ubuntu|awk '{print $1}'|xargs docker stop
篩選出ubuntu容器丑孩,并刪除
# docker ps -a|grep ubuntu|awk '{print $1}'|xargs docker rm
篩選出ubuntu鏡像ID,print $1表示輸出第三列
# docker images|grep ubuntu|awk '{print $3}'
篩選出ubuntu鏡像ID灭贷,并刪除鏡像
# docker images|grep ubuntu|awk '{print $3}'|xargs docker rmi


查看某鏡像所有標簽
#!/bin/sh
# ./list_img_tags.sh tensorflow/tensorflow
repo_url=https://registry.hub.docker.com/v1/repositories
image_name=$1

curl -s ${repo_url}/${image_name}/tags | json_reformat | grep name | awk '{print $2}' | sed -e 's/"http://g'


六温学、Docker實戰(zhàn)

1、docker使用tomcat環(huán)境

# docker pull tomcat:8.5.38-jre8-alpine
# docker inspect tomcat:8.5.38-jre8-alpine  #查看鏡像信息甚疟,比如查看tomcat的路徑CATALINA_HOME=/usr/local/tomcat

啟動容器仗岖,映射到主機8018端口,掛載/home/wym/tomcat/test目錄览妖,如果沒有轧拄,則會自動創(chuàng)建
# docker run -dit -p 8018:8080 --name tomcat01 -v /home/wym/tomcat/test:/usr/local/tomcat/webapps/test tomcat:8.5.38-jre8-alpine

$ docker ps -l #查看最新的容器
$ docker exec -it 677 /bin/bash  #進入容器

查看tomcat
http://192.168.113.37:8018/

查看相關(guān)頁面
http://192.168.113.37/test/helloworld.html

在本機操作,編寫helloworld.html文件讽膏,容器里同時也有檩电,頁面也同時顯示
# cd /home/wym/tomcat/test
# echo "<h1> Hello World !<h1>" > hello.html


測試nginx
$ docker cp nginx1:/etc/nginx/nginx.conf /home/w/tool/nginx/conf/nginx.conf

# sudo docker run -itd --name nginx1 -p 8081:80 -v /home/w/tool/nginx/conf:/etc/nginx -v /home/w/tool/nginx//html/test:/usr/share/nginx/html/test nginx:1.15.9-alpine




2、docker使用mysql

# docker pull mysql:5.7
# docker run --name mysql01 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=newcapec -d mysql:5.7.25

# docker inspect mysql01
# docker exec mysql01 env

使用數(shù)據(jù)庫工具就可以遠程連接mysql01府树,主機IP俐末,端口3306,用戶名root奄侠,密碼newcapec

# docker exec -it mysql01 /bin/sh
# mysql -u root -p
mysql> show databases;

3卓箫、docker使用oracle

3.1數(shù)據(jù)庫訪問



使用sath89/oracle-12c鏡像,5.7G
$ docker pull 192.168.113.38/library/sath89/oracle-12c
# mkdir -p /u01/app/oracle
# chmod -R 777 /u01/app/oracle

# docker run -d --restart=always -p 8080:8080 -p 5500:5500 -p 1521:1521 -v /u01/app/oracle:/u01/app/oracle -e DBCA_TOTAL_MEMORY=1024 --name oracle12c 192.168.113.38/library/sath89/oracle-12c

wym@rancher12:/u01/app/oracle$ docker exec -it 23e /bin/bash
root@23e5750b5330:/# su oracle
oracle@23e5750b5330:/$ cd $ORACLE_HOME

oracle@23e5750b5330:/u01/app/oracle/product/12.1.0/xe$ bin/sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Tue May 28 00:50:06 2019
Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
設置密碼不限時間
SQL> alter profile default limit password_life_time unlimited;
解鎖system用戶
SQL> alter user system account unlock;
修改system用戶的密碼為oracle
SQL> alter user system identified by oracle;










hostname: localhost
port: 1521
sid: xe
service name: xe
username: system
Password: oracle

sqlplus system/oracle@//localhost:1521/xe
Password for SYS & SYSTEM:
oracle

http://localhost:8080/em
user: sys
password: oracle
connect as sysdba: true


navicat premium亂碼解決
2018年12月14日 12:13:38 x_xuyuan 閱讀數(shù):339
1.將安裝目錄下的./start_navicat中的字符集改為zh_CN.UTF-8
2.在工具選項中將常規(guī)垄潮、編輯器烹卒、記錄的字體都改為Noto Sans mono CJK SC Regular
3.重啟

注意:因為顯示亂碼,直接復制“Noto Sans mono CJK SC Regular”弯洗,工具->選項->字體->界面字體等所有字體都粘貼即可


試用過期甫题,先把鏈接、試圖拷貝出來涂召,刪除~/.navicat64,重新打開navicat即可敏沉,退出果正,再把鏈接拷貝回去

# w @ uw in ~/.navicat64/Navicat [13:10:46] 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

在ubuntu下破解Navicat Premium炎码,無限次使用,保留原有的視圖sql

破解方案:

第一次執(zhí)行start_navicat時秋泳,會在用戶主文件夾下生成一個名為.navicat的隱藏文件夾潦闲,該文件夾下的Navicat/Mysql就是所有數(shù)據(jù)庫的視圖sql。

第一步:先備份.navicat目錄
mv .navicat .navicat_bak

第二步:運行navicat迫皱,會自動生成.navicat目錄歉闰,這時已經(jīng)再次試用30天了
./start_navicat

第三步:創(chuàng)建之前的各種連接

第四步:將視圖的sql導入

cp -R .navicat_bak/Navicat/MySQL .navicat/Navicat

第五步:重啟navicat或刷新,搞定卓起。





3.2使用Docker創(chuàng)建oracle數(shù)據(jù)庫

使用sath89/oracle-12c鏡像和敬,5.7G
# mkdir -p /u01/app/oracle
# chmod -R 777 /u01/app/oracle

# docker run -d --restart=always -p 8080:8080 -p 5500:5500 -p 1521:1521 -v /u01/app/oracle:/u01/app/oracle -e DBCA_TOTAL_MEMORY=1024 --name oracle12c 192.168.113.38/library/sath89/oracle-12c

查看日志 # docker logs -f bf2,發(fā)現(xiàn)正在創(chuàng)建數(shù)據(jù)庫實例戏阅,安裝成功

Database not initialized. Initializing database.
Starting tnslsnr
Copying database files
1% complete
Completing Database Creation
100% complete

Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/xe/xe.log" for further details.
Configuring Apex console
Database initialized. Please visit http://#containeer:8080/em http://#containeer:8080/apex for extra configuration if needed
Starting web management console

PL/SQL procedure successfully completed.

Starting import from '/docker-entrypoint-initdb.d':
    ls: cannot access /docker-entrypoint-initdb.d/*: No such file or directory
    Import finished

    Database ready to use. Enjoy! ;)

# docker exec -it 23e /bin/bash

# netstat -nlpt
# su oracle
$ cd $ORACLE_HOME
oracle@3da2d9cc1972:/u01/app/oracle/product/12.1.0/xe$ bin/sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Tue May 17 12:11:19 2016
Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production

SQL> select database_status from v$instance;
DATABASE_STATUS
----------------
ACTIVE

oracle@23e5750b5330:/u01/app/oracle/product/12.1.0/xe$ bin/lsnrctl status

LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 24-MAY-2019 16:07:50

Copyright (c) 1991, 2014, Oracle.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.1.0.2.0 - Production
Start Date                24-MAY-2019 15:57:33
Uptime                    0 days 0 hr. 10 min. 17 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /u01/app/oracle/diag/tnslsnr/23e5750b5330/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=23e5750b5330)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=23e5750b5330)(PORT=8080))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "xe" has 1 instance(s).
  Instance "xe", status READY, has 1 handler(s) for this service...
Service "xeXDB" has 1 instance(s).
  Instance "xe", status READY, has 1 handler(s) for this service...
The command completed successfully

$ curl -v localhost:8080/apex

$ curl -v localhost:8080/apex/apex

默認Oracle的實例叫xe昼弟,沒有配置環(huán)境變量,需要先運行.oraenv設置環(huán)境變量奕筐。

oracle@81d5d58574c0:~$ . oraenv
ORACLE_SID = [oracle] ? xe
The Oracle base has been set to /u01/app/oracle
oracle@81d5d58574c0:~$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Thu May 3 13:52:31 2018

Copyright (c) 1982, 2014, Oracle. All rights reserved.

Connected to:
Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production

SQL> select name,open_mode from v$database;

NAME OPEN_MODE
--------- --------------------
XE READ WRITE
當然你還可以在外面查看em舱痘。
http://localhost:8080/em/




相關(guān)鏈接

    ·  docker-oracle-12c 其GitHub主頁: https://github.com/MaksymBilenko/docker-oracle-12c
    ·  Apex 詳情 :http://https://github.com/MaksymBilenko/docker-oracle-apex

    ·  docker 的 Github主頁:https://github.com/docker

   · Oracle Database 12c 使用文檔:http://www.oracle.com/technetwork/cn/database/enterprise-edition/documentation/index.html

oracle
維護者
https://hub.docker.com/r/sath89/oracle-12c/

Run with data on host and reuse it:
-e ORACLE_ALLOW_REMOTE=true 遠程連接 -e DEFAULT_SYS_PASS=

docker run -dit –name test_oracle -p 8080:8080 -p 1521:1521 -v /opt/oracle/data:/u01/app/oracle sath89/oracle-12c

自動導入 sh sql and dmp files: -v /my/oracle/init/sh_sql_dmp_files:/docker-entrypoint-initdb.d

Run with Custom DBCA_TOTAL_MEMORY (in Mb):
docker run -d -p 8080:8080 -p 1521:1521 -v /my/oracle/data:/u01/app/oracle -e DBCA_TOTAL_MEMORY=1024 sath89/oracle-12c

連接數(shù)據(jù)庫的設置
Connect database with following setting:

hostname: localhost
port: 1521
sid: xe
service name: xe
username: system
password: oracle

修改Oracle密碼

-- 查看用戶的proifle是哪個,一般是default:
SELECT username,PROFILE FROM dba_users;

-- 查看指定概要文件(如default)的密碼有效期設置:
SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';

-- 將密碼有效期由默認的180天修改成“無限制”:修改之后不需要重啟動數(shù)據(jù)庫离赫,會立即生效芭逝。
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

-- 修改用戶SYSTEM 密碼
alter user SYSTEM identified by "****password****";

-- 解鎖方法
alter user SYSTEM account unlock;


登錄映像后,切換到oracle用戶渊胸,然后登錄oracle旬盯。

su oracle
$ cd $ORACLE_HOME
$ORACLE_HOME/bin/sqlplus / as sysdba

SQL>ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
SQL>alter user SYSTEM account unlock;
SQL>alter user system identified by system;

其他電腦訪問oracle
如果你的系統(tǒng)防火墻開著,那需要將19000和1521開放蹬刷∑白剑回到宿主機,執(zhí)行防火墻命令办成。
oracle-12c 數(shù)據(jù)庫sid: xe, 如果你沒有修改密碼泡态,system默認密碼為oracle。

firewall-cmd --permanent --zone=public --add-port=19000/tcp
firewall-cmd --permanent --zone=public --add-port=1521/tcp
firewall-cmd --reload


https://blog.csdn.net/qq_23315711/article/details/80995970
http://IP:8080/apex
使用以下設置連接到Oracle Application Express Web管理控制臺:

http://IP:8080/apex
workspace: INTERNAL
user: ADMIN
password: 0Racle$

Apex升級到v 5. *

docker run -it --rm --volumes-from ${DB_CONTAINER_NAME} --link ${DB_CONTAINER_NAME}:oracle-database -e PASS=YourSYSPASS sath89/apex install

使用以下設置連接到Oracle企業(yè)管理控制臺:

http://IP:8080/em
user: sys
password: oracle
connect as sysdba: true

七迂卢、使用docker-compose

1某弦、安裝

https://docs.docker.com/compose/install/

在Linux系統(tǒng)上安裝Compose
在Linux上,您可以從GitHub上的Compose存儲庫發(fā)行頁面下載Docker Compose二進制文件而克。按照鏈接中的說明進行操作靶壮,該鏈接涉及curl在終端中運行命令以下載二進制文件。這些分步說明也包含在下面员萍。

運行此命令以下載Docker Compose的當前穩(wěn)定版本:

# sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
要安裝不同版本的Compose腾降,請?zhí)鎿Q1.24.0 為要使用的Compose版本。

對二進制文件應用可執(zhí)行權(quán)限:
# sudo chmod +x /usr/local/bin/docker-compose
注意:如果docker-compose安裝后命令失敗碎绎,請檢查您的路徑螃壤。您還可以創(chuàng)建/usr/bin路徑中的符號鏈接或任何其他目錄抗果。

例如:
# sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

測試安裝。
# docker-compose --version
docker-compose version 1.24.0, build 1110ad01

2奸晴、常用docker-compose命令

首先要進入docker-compose.yml所在目錄冤馏,再執(zhí)行命令

其它命令(修改配置文件后最好把容器刪除再創(chuàng)建):
docker-compose up -d               ###后臺啟動,如果容器不存在根據(jù)鏡像自動創(chuàng)建
docker-compose down -v         ###停止容器并刪除容器
docker-compose start                 ###啟動容器寄啼,容器不存在就無法啟動逮光,不會自動創(chuàng)建鏡像
docker-compose stop                 ###停止容器
docker-compose logs        ###查看日志(harbor日志存放地址 /var/logs/harbor)
docke-compose ps             ###查看容器

如果用的不是標準yml名稱docker-compose.yml,就要用-f參數(shù)指定自定義的yml文件
$ docker-compose -f docker-wordpress.yml ps

3墩划、docker-compose 命令

Commands:
  build              Build or rebuild services #構(gòu)建或重建服務
  bundle             Generate a Docker bundle from the Compose file
  config             Validate and view the compose file
  create             Create services
  down               Stop and remove containers, networks, images, and volumes
  events             Receive real time events from containers
  exec               Execute a command in a running container
  help               Get help on a command #命令幫助
  kill               Kill containers #殺掉容器
  logs               View output from containers #顯示容器的輸出內(nèi)容
  pause              Pause services
  port               Print the public port for a port binding #打印綁定的開放端口
  ps                 List containers #顯示容器
  pull               Pull service images #拉取服務鏡像
  push               Push service images
  restart            Restart services #重啟服務
  rm                 Remove stopped containers #刪除停止的容器
  run                Run a one-off command #運行一個一次性命令
  scale              Set number of containers for a service #設置服務的容器數(shù)目
  start              Start services #開啟服務
  stop               Stop services #停止服務
  top                Display the running processes
  unpause            Unpause services
  up                 Create and start containers #創(chuàng)建并啟動容器
  version            Show the Docker-Compose version information

3涕刚、例子

docker-compose 如何配置
先看看我自己寫的一個 docker-compose.yml

version: '2'
services:
    nginx:
            image: bitnami/nginx:latest
            ports:
                - '80:80'
                - '1443:443'
            volumes:
                - /root/wp_yunlan/nginx/:/bitnami/nginx/
    mariadb:
            image: bitnami/mariadb:latest
            volumes:
                - /root/wp_yunlan/mariadb:/bitnami/mariadb
    wordpress:
            image: bitnami/wordpress:latest
            depends_on:
                - mariadb
                - nginx
            environment:
                - WORDPRESS_USERNAME=neptunemoon    #這個賬戶你是自己設定的
                - WORDPRESS_PASSWORD=123123         #這個密碼是你自己設定的
            ports:
                - '8080:80'
                - '8081:443'
            volumes:
                - /root/wp_yunlan/wordpress:/bitnami/wordpress
                - /root/wp_yunlan/apache:/bitnami/apache
                - /root/wp_yunlan/php:/bitnami/php
nginx 和 mariadb,wordpress 是要啟動的三個服務

順序不是重要的,我們看見wordpress中有個 depends_on: 的屬性

depends_on: 依賴
代表wordpress 依賴于
- mariadb
- nginx
兩個服務走诞, 所以他們兩個會先啟動

image: 鏡像副女,就是你的 docker 鏡像

# docker search mariadb 找到我們需要的鏡像

八、Docker私有倉庫使用說明

https://github.com/goharbor/harbor/releases

https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.5.tgz

https://github.com/goharbor/harbor/blob/release-1.8.0/docs/installation_guide.md

1.安裝harbor

安裝步驟歸結(jié)為以下內(nèi)容

1)下載安裝程序:
可以從發(fā)布頁面下載安裝程序的二進制文件蚣旱。選擇在線或離線安裝程序碑幅。使用tar命令提取包。

在線安裝:
    $ tar xvf harbor-online-installer-<version>.tgz
脫機安裝:
    $ tar xvf harbor-offline-installer-<version>.tgz

2)配置harbor.cfg ;
必需參數(shù):
hostname:目標主機的主機名或IP地址塞绿,比如192.168.113.37
harbor_admin_password:管理員的初始密碼沟涨。此密碼僅在Harbor首次啟動時生效。之后异吻,將忽略此設置裹赴,并且應在Portal中設置管理員密碼。請注意诀浪,默認用戶名/密碼為admin/Harbor12345棋返。
    $ sudo vi harbor.cfg

3)運行install.sh安裝并啟動Harbor;
一旦harbor.cfg和存儲后端(可選)配置,安裝和使用的啟動港install.sh腳本雷猪。請注意睛竣,在線安裝程序可能需要一些時間才能從Docker hub下載Harbor映像。

    $ sudo ./install.sh

4)登錄http://192.168.113.37求摇,使用admin登錄

5)要更改Harbour的配置射沟,請先停止現(xiàn)有的Harbor實例并進行更新harbor.cfg。然后運行prepare腳本以填充配置与境。最后重新創(chuàng)建并啟動Harbor的實例:

    $ sudo docker-compose down -v
    $ vim harbor.cfg
    $ sudo prepare
    $ sudo docker-compose up -d

2.使用harbor

 1)訪問路徑:http://192.168.102.37
 2)首先验夯,自己注冊,然后登錄摔刁,密碼必須包含大小寫挥转、數(shù)字
 3)登錄后,可以看到公開的項目和自己的私有項目,可以自己新建私有項目
 4)本地的Docker配置鏡像倉庫地址

問題:
docker1.3.2版本開始默認docker registry使用的是https绑谣,我們設置Harbor默認http方式准潭,所以當執(zhí)行用docker login、pull域仇、push等命令操作非https的docker regsitry的時就會報錯。

解決辦法:

- 1)寺擂、 如果系統(tǒng)是MacOS暇务,則可以點擊“Preference”里面的“Advanced”在“InsecureRegistry”里加上192.168.102.37,重啟Docker客戶端就可以了怔软。
- 2)垦细、 如果系統(tǒng)是Ubuntu,則修改配置文件/lib/systemd/system/docker.service挡逼,修改[Service]下ExecStart參數(shù)括改,增加– insecure-registry 192.168.102.37
- 3)、 如果系統(tǒng)是Centos家坎,可以修改配置/etc/sysconfig/docker嘱能,將OPTIONS增加 –insecure-registry 192.168.102.37
- 4)、 如果是新版本的docker,在/etc/sysconfig/ 沒有docker這個配置文件的情況下,在/etc/docker/目錄下虱疏,如果沒有daemon.json則新建惹骂,有了就添加insecure-registries。

# sudo vim /etc/docker/daemon.json
{
  "insecure-registries": ["http://192.168.102.37"]
}

配置完daemon.json做瞪,需要重新加載然后重啟

# sudo systemctl daemon-reload
# sudo systemctl restart docker
# systemctl enable docker

登錄公開的倉庫

公開的倉庫不需要登錄对粪,在頁面查看需要的鏡像名稱,通過pull命令下載
# sudo docker pull 192.168.102.37/library/busybox


私有倉庫装蓬,首先要用自己的賬號登錄

# sudo docker login 192.168.102.37
Username: wym
Password: newcapec
Login Succeeded

# sudo docker login -u admin -p admin 192.168.102.37

給要上傳的鏡像打標簽著拭,注意必須包括私有倉庫IP、端口和項目名稱
# sudo docker tag busybox 192.168.102.37/wymproject/busybox

上傳鏡像
# sudo docker push 192.168.102.37/wymproject/busybox

下載鏡像
# sudo docker pull 192.168.102.37/wymproject/busybox

項目管理員可以添加項目成員牍帚,刪除鏡像等操作

九儡遮、管理工具

# docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name prtainer-test portainer/portainer

http://192.168.113.37:9000 ,登錄admin履羞,設置密碼admin

鏡像weaveworks/scope 
scope launch 將以容器方式啟動 Weave Scope峦萎。
http://127.0.0.1:4040

十、docker常見問題

1忆首、CentOS7中Docker-ce的卸載和安裝

2爱榔、centos 安裝docker時出現(xiàn)依賴關(guān)系問題的解決辦法

我們在安裝老版本的docker時可能會出現(xiàn):
“正在處理依賴關(guān)系 docker-ce-selinux >= 17.03.0.ce-1.el7.centos,它被軟件包 docker-ce-17.03.0.ce-1.el7.centos.x86_64 需要
軟件包 docker-ce-selinux 已經(jīng)被 docker-ce-cli 取代糙及,但是取代的軟件包并未滿足需求”

等一大串的問題

這時我們需要通過 yum install 安裝一個rpm包

通過這個地址我們查看和我們安裝docker版本一直的rpm包
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/


要先安裝docker-ce-selinux-17.03.2.ce详幽,否則安裝docker-ce會報錯

yum install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm 

然后再安裝 docker-ce-17.03.2.ce,就能正常安裝

sudo yum install docker-ce-17.03.2.ce-1.el7.centos

無法安裝軟件包 docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch 。被已安裝軟件包 1:docker-ce-cli-18.09.0-3.el7.x86_64 標記為廢除
錯誤:無須任何處理
[root@k8sm ~]# yum -y remove docker-ce-cli

3唇聘、讓docker 容器開機自動啟動

docker run 指令中加入 --restart=always 就行版姑。
# sudo docker run --restart=always .....  

如果創(chuàng)建時未指定 --restart=always ,可通過update 命令設置
# docker update --restart=always 容器ID

如果你想取消掉
# docker update --restart=no <CONTAINER ID>

4、遷移 /var/lib/docker 目錄

/var/lib/docker/overlay2 占用很大迟郎,清理Docker占用的磁盤空間剥险,遷移 /var/lib/docker 目錄

遷移 /var/lib/docker 目錄

4.1 停止docker服務。
# systemctl stop docker

4.2 創(chuàng)建新的docker目錄宪肖,執(zhí)行命令df -h,找一個大的磁盤表制。 我在 /home目錄下面建了 /home/docker/lib目錄,執(zhí)行的命令是:
# mkdir -p /home/docker/lib

4.3 遷移/var/lib/docker目錄下面的文件到 /home/docker/lib:
# rsync -avz /var/lib/docker /home/docker/lib/

mv /var/lib/docker /home/y/docker/lib/docker/

4.4 配置 /etc/systemd/system/docker.service.d/devicemapper.conf控乾。
查看 devicemapper.conf 是否存在么介。如果不存在,就新建蜕衡。
# mkdir -p /etc/systemd/system/docker.service.d/
# vim /etc/systemd/system/docker.service.d/deivcemapper.conf

4.5 然后在 devicemapper.conf 寫入:(同步的時候把父文件夾一并同步過來壤短,實際上的目錄應在 /home/docker/lib/docker )

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd  --graph=/home/y/docker/lib/docker

ExecStart=/usr/bin/dockerd --insecure-registry=私服地址 --graph=/home/docker/lib
 
# 注意:如果/etc/systemd/system/docker.service.d/devicemapper.conf,這個路徑找不到的話慨仿,就新建久脯,新建之后加入內(nèi)容,沒有私服地址的話就可以去掉”--insecure-registry=私服地址”镶骗。

4.6 重新加載 docker

# systemctl daemon-reload
# systemctl restart docker
# systemctl enable docker

4.7 為了確認一切順利桶现,運行
# docker info
命令檢查Docker 的根目錄.它將被更改為  /home/y/docker/lib/docker

Docker Root Dir: /home/docker/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/

4.8 啟動成功后,再確認之前的鏡像還在:
# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
AAA/AAA               v2                  7331b8651bcc        27 hours ago        3.85GB
BBB/BBB               v1                  da4a80dd8424        28 hours ago        3.47GB

4.9 確定容器沒問題后刪除/var/lib/docker/目錄中的文件鼎姊。
# rm -rf /var/lib/docker

5骡和、配置centos8解決 docker Failed to get D-Bus connection 報錯

原因及解決方式:
在創(chuàng)建docker容器時添加--privileged
這個的原因是因為dbus-daemon沒能啟動。其實systemctl并不是不可以使用相寇。將你的CMD或者entrypoint設置為/usr/sbin/init即可慰于。會自動將dbus等服務啟動起來。
然后就可以使用systemctl了唤衫。命令如下

# docker run -it --name cobbler --privileged=true jasonlix/docker-cobbler /usr/sbin/init

6婆赠、不使用sudo命令執(zhí)行docker

為什么需要創(chuàng)建docker用戶組?
Docker守候進程綁定的是一個unix socket佳励,而不是TCP端口赂乐。這個套接字默認的屬主是root逆屡,其他是用戶可以使用sudo命令來訪問這個套接字文件淤袜。因為這個原因赘被,docker服務進程都是以root帳號的身份運行的。
為了避免每次運行docker命令的時候都需要輸入sudo瞧剖,可以創(chuàng)建一個docker用戶組拭嫁,并把相應的用戶添加到這個分組里面可免。當docker進程啟動的時候,會設置該套接字可以被docker這個分組的用戶讀寫做粤。這樣只要是在docker這個組里面的用戶就可以直接執(zhí)行docker命令了浇借。
警告:該dockergroup等同于root帳號,具體的詳情可以參考這篇文章:Docker Daemon Attack Surface.
操作步驟:
使用有sudo權(quán)限的帳號登錄系統(tǒng)怕品。
創(chuàng)建docker分組妇垢,并將相應的用戶添加到這個分組里面。
sudo usermod -aG docker your_username
退出肉康,然后重新登錄修己,以便讓權(quán)限生效。
確認你可以直接運行docker命令迎罗。
$ docker run hello-world

7、Docker 容器中運行 Docker 命令

# docker run -dit --name ubuntu1604 ubuntu:16.04

通常您可以通過安裝Docker套接字從容器內(nèi)管理主機容器片仿。
# docker run -it -v /var/run/docker.sock:/var/run/docker.sock --name ubuntu1604 ubuntu:16.04 sh -c "apt-get update ; apt-get install docker.io -y ; bash"

# docker run -dit --name c761810 --privileged=true centos:7.6.1810 /usr/sbin/init

Docker里運行Docker docker in docker(dind)

Docker 容器中運行 Docker 命令
在使用 GitLab/Jenkins 等 CI 軟件的時候需要使用 Docker 命令來構(gòu)建鏡像纹安,需要在容器中使用 Docker 命令;通過將宿主機的 Docker 共享給容器即可

在啟動容器時添加以下命令:
     --privileged \
     -v /var/run/docker.sock:/var/run/docker.sock \
     -v $(which docker)r:/bin/docker \
--privileged 表示該容器真正啟用 root 權(quán)限
-v /var/run/docker.sock:/var/run/docker.sock和-v $(which docker)r:/bin/docker命令將相關(guān)的 Docker 文件掛載到容器

# docker run -dit --name c761810 --privileged=true -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker)r:/bin/docker centos:7.6.1810 /usr/sbin/init

# docker rm -f 容器ID

初始化常用運行命令

配置SSH登錄砂豌,關(guān)閉SElinux和防火墻
# sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config && systemctl restart sshd && systemctl stop firewalld && setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && sed -i 's/SELINUX=permissive/SELINUX=disabled/g' /etc/selinux/config

配置阿里yum源并安裝
# mkdir -p /etc/yum.repos.d/repobak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repobak && curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo && curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo && yum clean all && yum makecache && yum install -y wget vim tree net-tools zip unzip tmux bash-completion && yum install -y docker-ce

配置內(nèi)網(wǎng)yum源并安裝
# mkdir -p /etc/yum.repos.d/repobak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repobak && curl http://192.168.102.3/CentOS-YUM/centos/repo/CentOS-7.repo > /etc/yum.repos.d/Centos-7.repo && curl http://192.168.102.3/CentOS-YUM/centos/repo/epel-7.repo > /etc/yum.repos.d/epel-7.repo && curl http://192.168.102.3/CentOS-YUM/centos/repo/docker-ce1806.repo > /etc/yum.repos.d/docker-ce.repo && yum clean all && yum makecache && yum install -y wget vim tree net-tools zip unzip tmux bash-completion dstat && yum install -y docker-ce

啟動docker
# systemctl start docker && systemctl enable docker 

配置加速器和私有鏡像倉庫
# mkdir -p /etc/docker && echo -e '{"registry-mirrors": ["https://7bezldxe.mirror.aliyuncs.com"],"insecure-registries": ["http://192.168.102.37"]}' > /etc/docker/daemon.json && systemctl daemon-reload && systemctl restart docker
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厢岂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子阳距,更是在濱河造成了極大的恐慌塔粒,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筐摘,死亡現(xiàn)場離奇詭異卒茬,居然都是意外死亡,警方通過查閱死者的電腦和手機咖熟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門圃酵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人馍管,你說我怎么就攤上這事郭赐。” “怎么了确沸?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵捌锭,是天一觀的道長。 經(jīng)常有香客問我罗捎,道長观谦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任宛逗,我火速辦了婚禮坎匿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己替蔬,他們只是感情好告私,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著承桥,像睡著了一般驻粟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凶异,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天蜀撑,我揣著相機與錄音,去河邊找鬼剩彬。 笑死酷麦,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的喉恋。 我是一名探鬼主播沃饶,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼轻黑!你這毒婦竟也來了糊肤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤氓鄙,失蹤者是張志新(化名)和其女友劉穎馆揉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抖拦,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡升酣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了态罪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拗踢。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖向臀,靈堂內(nèi)的尸體忽然破棺而出巢墅,到底是詐尸還是另有隱情,我是刑警寧澤券膀,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布君纫,位于F島的核電站,受9級特大地震影響芹彬,放射性物質(zhì)發(fā)生泄漏蓄髓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一舒帮、第九天 我趴在偏房一處隱蔽的房頂上張望会喝。 院中可真熱鬧陡叠,春花似錦、人聲如沸肢执。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽预茄。三九已至兴溜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間耻陕,已是汗流浹背拙徽。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诗宣,地道東北人膘怕。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像召庞,于是被迫代替她去往敵國和親淳蔼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容