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