docker停止容器后配置_整理了一份 Docker系统知识,从安装到熟练操作看这篇就够了 | 原力计划...
作者 | IronmanJay
責(zé)編 | 王曉曼
出品 | CSDN博客
Docker 基礎(chǔ)介紹
下圖為 Docker 圖標(biāo)(是一個(gè)鯨魚上面是集裝箱)。
1、我們?yōu)槭裁匆褂肈ocker
當(dāng)我們?cè)诠ぷ髦?#xff0c;一款產(chǎn)品從開發(fā)設(shè)計(jì)到上線運(yùn)行,其中需要開發(fā)人員和運(yùn)維工程師,開發(fā)人員負(fù)責(zé)代碼編寫,開發(fā)產(chǎn)品,運(yùn)維工程師需要測(cè)試環(huán)境,產(chǎn)品部署。這之間就會(huì)有分歧。
比如開發(fā)人員在自己的電腦上運(yùn)行產(chǎn)品沒(méi)有問(wèn)題,可是換了一個(gè)環(huán)境,運(yùn)維工程師部署的時(shí)候由于操作環(huán)境和開發(fā)人員不一致,其中包括操作系統(tǒng)、開發(fā)環(huán)境、部署文件等等。
開發(fā)人員需要告訴運(yùn)維團(tuán)隊(duì)所需的全部配置文件+所有的軟件環(huán)境,也就導(dǎo)致產(chǎn)品部署出現(xiàn)問(wèn)題,開發(fā)人員和運(yùn)維工程師出現(xiàn)分歧。
就好比我們要開發(fā)一個(gè)電商項(xiàng)目,其中肯定包括 Java 環(huán)境/Tomcat/ MySQL / JDBC 驅(qū)動(dòng)包/相應(yīng) jar 包等,還需要較復(fù)雜的安裝配置,并且不能跨平臺(tái)使用,如果開發(fā)人員在 Windows 上開發(fā),而運(yùn)維工程師部署產(chǎn)品在 Linux 上,就會(huì)導(dǎo)致由于環(huán)境不同的產(chǎn)品部署問(wèn)題,就算不跨系統(tǒng),而是換一臺(tái)同樣操作系統(tǒng)的服務(wù)器,要移植部署依然非常麻煩。為了解決這個(gè)問(wèn)題,我們的 Docker 應(yīng)運(yùn)而生!
2、Docker是什么
說(shuō)了這么多,那么 Docker 到底是什么,能幫我們做什么,且聽我慢慢道來(lái)。
首先我們要知道,Docker 是基于 Go 語(yǔ)言實(shí)現(xiàn)的云開源項(xiàng)目,Docker 的主要目標(biāo)是“Build,Ship and Run Any App,Anywhere”,Docker 其中包括,鏡像、容器、倉(cāng)庫(kù),很簡(jiǎn)單,目的就是通過(guò)對(duì)應(yīng)用組件的封裝、分發(fā)、部署、運(yùn)行等生命周期的管理,使用戶的產(chǎn)品(可以是 web 應(yīng)用或者數(shù)據(jù)庫(kù)應(yīng)用)及其環(huán)境能夠做到“一次封裝,到處運(yùn)行”。
再通俗點(diǎn)說(shuō),就是我們使用 Docker,使得運(yùn)行在 Docker 容器上面的應(yīng)用,配置好一次環(huán)境,換到別的機(jī)器上可以一鍵部署,大大簡(jiǎn)化了操作,實(shí)現(xiàn)了跨平臺(tái),跨服務(wù)器,由下而上打包,達(dá)到應(yīng)用程式跨平臺(tái)間的無(wú)縫接軌運(yùn)作。
一句話,Docker解決了運(yùn)行環(huán)境和配置問(wèn)題軟件容器,方便做持續(xù)集成并有助于整體發(fā)布的容器虛擬化技術(shù)。3、Docker能干什么
這個(gè)需要對(duì)比來(lái)說(shuō),其實(shí)我們常用的虛擬機(jī)就和Docker類似,我將通過(guò)之前的虛擬機(jī)技術(shù)和現(xiàn)在和容器虛擬化技術(shù)做一個(gè)對(duì)比。
(1)之前的虛擬機(jī)技術(shù)
我們對(duì)虛擬機(jī)并不陌生,其實(shí)它也可以看作是一個(gè)Docker,是一種帶環(huán)境安裝的解決方案,可以在一個(gè)操作系統(tǒng)中運(yùn)行另一個(gè)操作系統(tǒng),對(duì)于計(jì)算機(jī)底層來(lái)說(shuō),虛擬機(jī)就是一個(gè)軟件而已,不需要的時(shí)候就可以刪掉,對(duì)其他部分毫無(wú)影響,我們也可以通過(guò)虛擬機(jī)實(shí)現(xiàn)不同產(chǎn)品的打包發(fā)布,但是它也有很多缺點(diǎn),比如:資源占用多、冗余步驟多、啟動(dòng)慢。
(2)容器虛擬化技術(shù)
由于前面虛擬機(jī)存在諸多問(wèn)題,Linux 發(fā)展出了另一種虛擬化技術(shù):Linux 容器,Linux 容器不是模擬一個(gè)完整的操作系統(tǒng)而是對(duì)進(jìn)程進(jìn)行隔離,有了容器,我們就可以將軟件運(yùn)行所需的所有資源打包到一個(gè)隔離的容器中,容器與虛擬機(jī)不同,不需要捆綁一整套操作系統(tǒng),只需要軟件工作所需的庫(kù)資源和設(shè)置。系統(tǒng)因此而變得高效輕量并保證部署在任何環(huán)境中的軟件都能始終如一地運(yùn)行。
(3)小總結(jié)
傳統(tǒng)虛擬機(jī)技術(shù)是虛擬出一套硬件后,在其上運(yùn)行一個(gè)完整操作系統(tǒng),在該系統(tǒng)上再運(yùn)行所需應(yīng)用進(jìn)程。
而容器內(nèi)的應(yīng)用進(jìn)程直接運(yùn)行于宿主的內(nèi)核,容器內(nèi)沒(méi)有自己的內(nèi)核,而且也沒(méi)有進(jìn)行硬件虛擬。因此容器要比傳統(tǒng)虛擬機(jī)更為輕便。
每個(gè)容器之間互相隔離,每個(gè)容器有自己的文件系統(tǒng) ,容器之間進(jìn)程不會(huì)相互影響,能區(qū)分計(jì)算資源。
4、Docker的優(yōu)勢(shì)
更快速的應(yīng)用交付和部署;
更便捷的升級(jí)和擴(kuò)縮容;
更簡(jiǎn)單的系統(tǒng)運(yùn)維;
更高效的計(jì)算資源利用。
Docker安裝
1、前提說(shuō)明
目前,CentOS 僅發(fā)行版本中的內(nèi)核支持 Docker。Docker 運(yùn)行在CentOS-7 上,要求系統(tǒng)為64位、系統(tǒng)內(nèi)核版本為3.10 以上。
Docker 運(yùn)行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系統(tǒng)為64位、系統(tǒng)內(nèi)核版本為 2.6.32-431 或者更高版本。
所以我們需要查看自己的Centos內(nèi)核是否支持Docker,使用下面的命令,可根據(jù)上面對(duì)照看自己的Centos是否符合要求,如不符合請(qǐng)升級(jí)。
[ironmanjay@localhost ~]$ uname -aLinux localhost.localdomain 3.10.0-1062.12.1.el7.x86_64 #1 SMP Tue Feb 4 23:02:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
2、具體安裝步驟
Dcoker安裝比較簡(jiǎn)單,只要按照我的步驟一步一步走,肯定沒(méi)問(wèn)題,請(qǐng)讀者細(xì)心。
(1)更新下載源
1、先備份sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2、更換源
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
(2)更新yum包
sudo yum update
(3)安裝相關(guān)軟件包
sudo yum -y install gcc
sudo yum -y install gcc-c++
sudo yum install -y yum-utils device-mapper-persistent-data lvm2(4)更新yum軟件包索引
sudo yum makecache fast
(5)安裝Dcoker
sudo yum -y install docker-ce
(6)啟動(dòng)Dcoker服務(wù)
systemctl start docker(7)開機(jī)自啟
sudo systemctl enable docker
(8)將Docker加入到組中
sudo groupadd docker
sudo gpasswd -a [本地用戶名] docker
(9)配置鏡像加速
首先進(jìn)入阿里云的容器鏡像服務(wù)網(wǎng)站點(diǎn)擊這個(gè)連接,使用支付寶淘寶登錄都可以,如下圖,復(fù)制加速器地址。
然后按照下面操作修改鏡像加速:
sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json
在打開的文件中按照下面編輯:
{"registry-mirrors": ["剛剛復(fù)制的加速器地址"]
}
加載配置文件:
sudo systemctl daemon-reload重啟Docker服務(wù)
sudo systemctl restart docker
3、測(cè)試
(1)查看版本
docker version
如下圖:
(2)HelloWorld
docker pull hello-world
docker run hello-world如下圖:
至此安裝完畢!
Docker常用命令
1、幫助命令
docker version #查看版本號(hào)docker info #顯示Docker系統(tǒng)信息,包括鏡像和容器數(shù)
docker --help #查看Docker有哪些命令
2、鏡像命令
docker images #查看當(dāng)前Docker中的鏡像docker search 某個(gè)鏡像名字 #查詢某個(gè)鏡像
docker pull 某個(gè)鏡像名字 #拉取(下載)某個(gè)鏡像
docker rmi 某個(gè)鏡像名字ID #刪除某個(gè)鏡像
3、容器基本命令(切記,有鏡像才能創(chuàng)建容器)
docker run [OPTIONS] image [COMMAND] [ARG...] #新建并啟動(dòng)容器docker ps [OPTIONS] #列出當(dāng)前所有正在運(yùn)行的容器
exit #容器停止退出
ctrl+P+Q #容器不停止退出
docker start 容器ID或者容器名 #啟動(dòng)容器
docker restart 容器ID或者容器名 #重啟容器
docker stop 容器ID或者容器名 #停止容器
docker kill 容器ID或者容器名 #強(qiáng)制停止容器
docker rm 容器ID #刪除已停止的容器
docker rm -f $(docker ps -a -q) #一次性刪除多個(gè)容器
docker ps -a -q | xargs docker rm #一次性刪除多個(gè)容器
4、容器重要命令
docker run -d 容器名 #啟動(dòng)守護(hù)式容器docker logs -f -t --tail 容器ID #查看容器日志,-t是加入時(shí)間戳,-f是最新的日志打印,--tail數(shù)字顯示最后多少條
docker top 容器ID #查看容器內(nèi)運(yùn)行的進(jìn)程
docker inspect 容器ID #查看容器內(nèi)部細(xì)節(jié)
docker exec -it 容器ID bashShell #進(jìn)入正在運(yùn)行的容器并以命令行交互
docker attach 容器ID #重新進(jìn)入Docker容器
docker cp 容器ID:容器內(nèi)路徑 目的主機(jī)路徑 #從容器內(nèi)拷貝文件到主機(jī)上
Docker 鏡像
1、Docker鏡像是什么?
是一種UnionFS(聯(lián)合文件系統(tǒng)),是一種分層、輕量級(jí)并且高性能的文件系統(tǒng),它支持對(duì)文件系統(tǒng)的修改作為一次提交來(lái)一層層的疊加,同時(shí)可以將不同目錄掛載到同一個(gè)虛擬文件系統(tǒng)下(unite several directories into a single virtual filesystem)。
Union 文件系統(tǒng)是 Docker 鏡像的基礎(chǔ)。鏡像可以通過(guò)分層來(lái)進(jìn)行繼承,基于基礎(chǔ)鏡像(沒(méi)有父鏡像),可以制作各種具體的應(yīng)用鏡像。
2、Docker鏡像加載原理
Docker的鏡像實(shí)際上由一層一層的文件系統(tǒng)組成,這種層級(jí)的文件系統(tǒng)UnionFS。bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引導(dǎo)加載kernel, Linux剛啟動(dòng)時(shí)會(huì)加載bootfs文件系統(tǒng),在Docker鏡像的最底層是bootfs。
這一層與我們典型的Linux/Unix系統(tǒng)是一樣的,包含boot加載器和內(nèi)核。當(dāng)boot加載完成之后整個(gè)內(nèi)核就都在內(nèi)存中了,此時(shí)內(nèi)存的使用權(quán)已由bootfs轉(zhuǎn)交給內(nèi)核,此時(shí)系統(tǒng)也會(huì)卸載bootfs。
3、Docker鏡像為什么很小
如果我們從倉(cāng)庫(kù)pull一個(gè)centos只有200左右mb,但是我們的鏡像centos文件高達(dá)4G左右,因?yàn)槲覀兊脑趥}(cāng)庫(kù)pull的centos剔除了無(wú)用的東西,只是一個(gè)精簡(jiǎn)的OS,rootfs可以很小,只包含了最基本的命令、工具和程序庫(kù)就可以了,因?yàn)榈讓又苯佑肏ost的kernel,自己只需要提供rootfs 就行了。
4、Docker分層的鏡像
如下圖所見,當(dāng)我們?cè)趥}(cāng)庫(kù)下載tomcat時(shí),是一層一層下載的,這里面包含著運(yùn)行tomcat的環(huán)境,就像洋蔥一樣,一層一層的最終展示給我們鏡像版的tomcat。
5、Docker鏡像為什么要采用分層結(jié)構(gòu)
Docker鏡像最大的一個(gè)好處就是 - 共享資源。
比如:有多個(gè)鏡像都從相同的 base 鏡像構(gòu)建而來(lái),那么宿主機(jī)只需在磁盤上保存一份base鏡像,同時(shí)內(nèi)存中也只需加載一份 base 鏡像,就可以為所有容器服務(wù)了。而且鏡像的每一層都可以被共享。
6、Docker鏡像的特點(diǎn)
Docker鏡像都是只讀的當(dāng)容器啟動(dòng)時(shí),一個(gè)新的可寫層被加載到鏡像的頂部。這一層通常被稱作“容器層”,“容器層”之下的都叫“鏡像層”。
Docker 容器數(shù)據(jù)卷
1、什么是Docker容器數(shù)據(jù)卷
首先我們先明確一個(gè)理念,我們的Redia使用RDB和AOF來(lái)實(shí)現(xiàn)持久化,其實(shí)我們的Docker容器數(shù)據(jù)卷就類似這個(gè),為了實(shí)現(xiàn)Docker的數(shù)據(jù)持久化,當(dāng)我們運(yùn)用與運(yùn)行的環(huán)境打包形成容器,運(yùn)行可以伴隨著容器,但是我們對(duì)數(shù)據(jù)的要求希望是持久化的,而容器之間希望有可能共享數(shù)據(jù),也就是為了能保存數(shù)據(jù)在Docker中我們使用卷。
2、Docker容器數(shù)據(jù)卷能干嗎簡(jiǎn)而言之,容器數(shù)據(jù)卷可以幫我們實(shí)現(xiàn)容器的持久化,和容器間繼承+共享數(shù)據(jù),而什么又是卷呢?
卷就是目錄或文件,存在于一個(gè)或多個(gè)容器中,由docker掛載到容器,但不屬于聯(lián)合文件系統(tǒng),因此能夠繞過(guò)Union File System提供一些用于持續(xù)存儲(chǔ)或共享數(shù)據(jù)的特性,卷的設(shè)計(jì)目的就是數(shù)據(jù)的持久化,完全獨(dú)立于容器的生存周期,因此Docker不會(huì)在容器刪除時(shí)刪除其掛載的數(shù)據(jù)卷。
3、怎么用數(shù)據(jù)卷(容器內(nèi)添加)我們有兩種方式來(lái)添加容器內(nèi)數(shù)據(jù)卷,一種是直接命令添加,另一種是DockerFile添加,下面我們?cè)斀狻?/p>
第一種方式:直接命令添加:
(1)掛載容器內(nèi)數(shù)據(jù)卷
docker run -it -v /宿主機(jī)絕對(duì)路徑目錄:/容器內(nèi)目錄 鏡像名
(2)查看數(shù)據(jù)卷是否掛載成功
docker inspect 容器ID
第二種方式:DockerFile添加:
(1)根目錄下新建mydocker文件夾并進(jìn)入
# 進(jìn)入根目錄cd /
# 新建mydocker
sudo mkdir mydocker
(2)在mydocker中新建Dockerfile文件
sudo touch Dockerfile # 新建sudo vim Dockerfile # 編輯
(3)File構(gòu)建
# volume testFROM centos
VOLUME ["/dataVolumeContainer1
總結(jié)
以上是生活随笔為你收集整理的docker停止容器后配置_整理了一份 Docker系统知识,从安装到熟练操作看这篇就够了 | 原力计划...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 电脑格式化后需要重装系统吗_电脑经常重装
- 下一篇: Python代码画喜羊羊怎么画_智圭谷: