江蘇新有建設集團有限公司官方網(wǎng)站中國站長網(wǎng)站
文章目錄
- 1、Docker簡介
- 1.1、Docker能解決什么問題
- 1.2、什么是虛擬機技術(shù)
- 1.2.1、虛擬機的缺點
- 1.3、什么是容器
- 1.3.1、容器與虛擬機比較
- 1.4、分析 Docker 容器架構(gòu)
- 1.4.1、Docker客戶端和服務器
- 1.4.2、Docker 鏡像(Image)
- 1.4.3、Docker 容器(Container)
- 1.4.4、Docker 倉庫(repository)
- 2、VMware和CentOS7安裝
- 2.1、Docker 安裝環(huán)境說明
- 2.2、在VMware Workstation10中安裝CentOS7
- 3、Docker安裝卸載與啟停
- 3.1、查看當前系統(tǒng)的內(nèi)核版本
- 3.2、安裝 Docker 服務
- [解決bug]
- 3.2.1、安裝所需的軟件包
- 3.2.2、設置Docker的鏡像倉庫
- 3.2.3、安裝最新版本的 Docker CE
- 3.2.4、查看安裝的版本
- 3.3、卸載 Docker 服務
- 3.3.1、卸載舊版本:(如果安裝過舊版本的話)
- 3.3.2、卸載 Docker 軟件包
- 3.3.3、刪除鏡像/容器等
- 3.4、啟動與停止Docker服務
- 3.5、Docker 幫助命令
- 4、Docker 鏡像操作
- 4.1、什么是Docker鏡像
- 4.2、拉取鏡像
- 4.2.1、從Docker Hub拉取鏡像
- 4.2.2、配置國內(nèi)鏡像加速器
- 4.3、列出鏡像
- 4.4、搜索鏡像
- 4.5、刪除鏡像
- 5、Docker 容器操作
- 5.1、查看容器
- 5.2、創(chuàng)建與啟動容器
- 5.2.1、創(chuàng)建容器的命令
- 5.2.2、交互式容器
- 5.2.3、創(chuàng)建守護式容器
- 5.3、退出創(chuàng)建守護式容器
- 5.4、啟動與停止容器
- 5.5、登錄容器
- 5.6、拷貝宿主機與容器中的文件
- 5.7、數(shù)據(jù)目錄掛載
- 5.7.1、需求
- 5.7.2、實現(xiàn)
- 5.7.3、目錄掛載只讀(Read-only)權(quán)限
- 5.8、看容器內(nèi)部細節(jié)
- 5.9、查看容器IP地址
- 5.10、刪除容器
1、Docker簡介
1.1、Docker能解決什么問題
難題:
軟件開發(fā)中最麻煩的事之一,就是環(huán)境配置。軟件從開發(fā)到上線,一般都要經(jīng)過開發(fā)、測試、上線。
而每個人的計算機環(huán)境配置可能都不相同,誰能保證自已開發(fā)的軟件,能在每一臺機器上跑起來?
每臺機器必須保證:操作系統(tǒng)的設置,各種依賴和組件的安裝都正確,軟件才能運行起來。
比如,開發(fā)與部署一個 Java 應用,計算機必須安裝 JDK,并配置環(huán)境變量,還必須有各種依賴。
在windows上進行開發(fā),到Linux上進行部署時這些環(huán)境又得重裝,這樣很就麻煩。
而且系統(tǒng)如果需要集群,那每一臺機器都得重新配置環(huán)境。
開發(fā)人員經(jīng)常說:“它在我的機器可以正常運行”,言下之意就是,其他機器很可能跑不了。
環(huán)境配置如此麻煩,換一臺機器,就要重來一次,費力費時。很多人想到,能不能從根本上解決問題,軟件可以帶環(huán)境安裝?
也就是說,安裝的時候,把原始環(huán)境一模一樣地復制過來。
解決:
開發(fā)人員可以使用 Docker 來解決 “它在我的機器可以正常運行” 的問題,它會將運行程序的相關(guān)配置打包(打包成一個鏡像),然后直接搬移到新的機器上運行。
1.2、什么是虛擬機技術(shù)
虛擬機(virtual machine)就是帶環(huán)境安裝的一種解決方案。
它可以在一種操作系統(tǒng)里面運行另一種操作系統(tǒng),比如 VMware workstation 虛擬化產(chǎn)品提供了虛擬的硬件,在Windows 系統(tǒng)里面運行 Linux 系統(tǒng)。
1.2.1、虛擬機的缺點
- 資源占用多
每個虛擬機會獨占一部分內(nèi)存和硬盤空間。哪怕虛擬機里面的應用程序,真正使用的內(nèi)存只有 1MB,虛擬機依然需要幾百 MB 的內(nèi)存才能運行。 - 冗余步驟多
虛擬機是完整的操作系統(tǒng),一些系統(tǒng)級別的操作步驟,往往無法跳過,比如用戶登錄。 - 啟動慢
啟動硬件上的操作系統(tǒng)需要多久,啟動虛擬機就需要多久??赡芤葞追昼?#xff0c;虛擬機才能真正運行。
1.3、什么是容器
由于虛擬機存在這些缺點,Linux 發(fā)展出了另一種虛擬化技術(shù):Linux 容器(Linux Containers,縮寫為 LXC)。
容器技術(shù)可以將軟件需要的環(huán)境配置都打包到一個隔離的容器中。讓多個獨立的容器高效且輕量的運行在同一臺宿主機上。而Docker就是為了實現(xiàn)這一切而生的。
1.3.1、容器與虛擬機比較
虛擬機通過虛擬軟件中間層將一臺或者多臺獨立的虛擬機器運行在物理硬件之上。
容器則是直接運行在操作系統(tǒng)內(nèi)核之上,是進程級別的,并對進程進行了隔離,而不是模擬一個完整的操作系統(tǒng)。
虛擬機:冗余步驟多、啟動慢、資源占用多
容器: 體積小、啟動快(秒級)、資源占用少(只占用需要的資源)
1.4、分析 Docker 容器架構(gòu)
1.4.1、Docker客戶端和服務器
Docker是一個客戶端-服務器(C/S)架構(gòu)程序。
Docker客戶端只需要向Docker服務器或者守護進程發(fā)出請求,服務器或者守護進程將完成所有工作并返回結(jié)果。
Docker提供了一個命令行工具和一整套RESTful API。
你可以在同一臺宿主機上運行Docker守護進程和客戶端,也可以從本地的Docker客戶端連接到運行在另一臺宿主機上的遠程Docker守護進程。
1.4.2、Docker 鏡像(Image)
鏡像(Image)是Docker中的一個模板。通過 Docker鏡像來創(chuàng)建Docker容器,一個鏡像可以創(chuàng)建出多個容器。
鏡像與容器的關(guān)系類似于Java中類與對象的關(guān)系。鏡像體積很小,非常便攜,易于分享、存儲和更新。
Docker | Java |
---|---|
鏡像 | 類 |
容器 | 對象 |
1.4.3、Docker 容器(Container)
容器(Container)是基于鏡像創(chuàng)建的運行實例,一個容器中可以運行一個或多個應用程序(jdk+開發(fā)的java應用程序)。
Docker可以幫助你構(gòu)建和部署容器,你只需要把自己的應用程序或者服務打包放進容器即可。
我們可以認為,鏡像是Docker生命周期中的構(gòu)建或者打包階段,而容器則是啟動或者執(zhí)行階段。
可以理解容器中有包含:一個精簡版的Linux環(huán)境 + 要運行的應用程序
1.4.4、Docker 倉庫(repository)
倉庫(Repository)是集中存放鏡像文件的場所。
實際上,倉庫注冊服務器上往往存放著多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標簽(tag)。
倉庫分為公有倉庫(Public)和私有倉庫(Private)兩種。
- Docker公司運營的公共倉庫叫做 Docker Hub (https://hub.docker.com/),存放了數(shù)量龐大的鏡像供用戶下載。
- 用戶可以在Docker Hub注冊賬號,分享并保存自己的鏡像。(說明:在Docker Hub下載鏡像巨慢)
- 國內(nèi)的公有倉庫包括阿里云 、網(wǎng)易云等,可以提供大陸用戶更穩(wěn)定快速的訪問。
當用戶創(chuàng)建了自己的鏡像之后就可以使用 push 命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上 pull 下來就可以了。
Docker 倉庫的概念跟 Git 類似,注冊服務器可以理解為 GitHub 這樣的托管服務。
2、VMware和CentOS7安裝
2.1、Docker 安裝環(huán)境說明
- Docker官方建議在Ubuntu中安裝,因為 Docker 是基于Ubuntu發(fā)布的,而且一般 Docker 出現(xiàn)的問題Ubuntu是最先更新或者打補丁的。在很多版本的 CentOS 中是不支持更新最新的一些補丁包的。
- 由于很多公司的環(huán)境都使用的是 CentOS ,因此這里我們將 Docker 安裝到 CentOS 上。
- 注意:
- Docker 要求 CentOS 系統(tǒng)的內(nèi)核版本高于 3.10 ,查看此前提條件來驗證你的 CentOS 版本是否支持 Docker 。
- 需要安裝 64位 CentOS7.x 以上的版本,在 CentOS6.x 的版本中,安裝前需要安裝其他很多的環(huán)境而且Docker很多補丁不支持更新。
- docker中文社區(qū),docker幫助,docker手冊,docker教程,docker安裝手冊 - docker中文社區(qū) https://www.docker.org.cn/
2.2、在VMware Workstation10中安裝CentOS7
VMware和CentOS7安裝
a.安裝 VMware Workstation10虛擬軟件
b.安裝 CentOS7
c.開啟CentOS7 采用Xshell終端工具連接CentOS7 服務器
d.把防火墻關(guān)掉: systemctl stop firewalld 并且開機禁用 systemctl disable firewalld
firewalld 防火墻的基本使用
查看狀態(tài): systemctl status firewalld
啟動: systemctl start firewalld
關(guān)閉: systemctl stop firewalld
開機禁用: systemctl disable firewalld
開機啟用: systemctl enable firewalld
3、Docker安裝卸載與啟停
3.1、查看當前系統(tǒng)的內(nèi)核版本
查看當前系統(tǒng)的內(nèi)核版本是否高于 3.10
uname -r
3.2、安裝 Docker 服務
使用鏡像倉庫進行安裝,采用 yum 命令在線安裝(即電腦需要聯(lián)網(wǎng))
[解決bug]
Another app is currently holding the yum lock; waiting for it to exit...
另一個應用程序是:PackageKit
內(nèi)存:194 M RSS (1.1 GB VSZ)
已啟動: Mon Feb 27 18:40:06 2023 - 07:09之前
狀態(tài) :睡眠中,進程ID:2884
解決辦法:
rm -f /var/run/yum.pid原因分析:
可能是系統(tǒng)自動升級正在運行,yum在鎖定狀態(tài)中,要等待那個進程結(jié)束退出:
看報錯的那一段話:Another app is currently holding the yum lock;
3.2.1、安裝所需的軟件包
yum-utils 提供了 yum-config-manager 實用程序,并且 devicemapper 存儲驅(qū)動需要 device-mapper-persistent-data 和 lvm2 。
yum install -y yum-utils device-mapper-persistent-data lvm2
3.2.2、設置Docker的鏡像倉庫
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
上面處可能會報錯 (原因是國內(nèi)訪問不到docker官方鏡像的緣故)
Could not fetch/save url https://download.docker.com/linux/centos/docker-ce.repo to file/etc/yum.repos.d/docker-ce.repo:
解決:使用以下方式:阿里源訪問
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.2.3、安裝最新版本的 Docker CE
# 安札最新版本Docker CE
yum install docker-ce docker-ce-cli containerd.io# 查看Docker歷史版本
yum list docker-ce.x86_64 --showduplicates | sort -r# 安裝指定版本的Docker CE語法: yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
yum install -y docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9-3.el7 containerd.io-1.2.0-3.el7
安裝中出現(xiàn)下面提示, 輸入 y 然后回車
如上面安裝不成功,則卸載Docker 服務再按上面重新安裝
3.2.4、查看安裝的版本
docker version
3.3、卸載 Docker 服務
以 root 用戶運行以下命令:
3.3.1、卸載舊版本:(如果安裝過舊版本的話)
Docker 的早期版本稱為 docker 或 docker-engine 。如果安裝了這些版本,請卸載它們及關(guān)聯(lián)的依賴資源。
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
3.3.2、卸載 Docker 軟件包
yum remove docker-ce docker-ce-cli containerd.io
3.3.3、刪除鏡像/容器等
rm -rf /var/lib/dockerrm -rf /var/lib/containerd
3.4、啟動與停止Docker服務
上面安裝只是安裝好, 但是沒有啟動Docker服務 。
systemctl 命令是系統(tǒng)服務管理器指令,它是 service 和 chkcon?g 兩個命令組合。
啟動docker: systemctl start docker
停止docker: systemctl stop docker
重啟docker: systemctl restart docker
查看docker狀態(tài): systemctl status docker
開機自動啟動docker: systemctl enable docker
3.5、Docker 幫助命令
查看 docker 幫助命令: docker --help
查看 docker 概要信息: docker info
4、Docker 鏡像操作
4.1、什么是Docker鏡像
Docker 鏡像是由文件系統(tǒng)疊加而成(是一種文件的存儲形式)。最底端是一個文件引導系統(tǒng),即bootfs,這很像典型的Linux/Unix的引導文件系統(tǒng)。
Docker容器啟動是需要的一些文件,而這些文件就可以稱為Docker鏡像。
4.2、拉取鏡像
4.2.1、從Docker Hub拉取鏡像
docker官網(wǎng)鏡像搜索:https://hub.docker.com/
命令:
docker pull 鏡像名:標簽名例如:我們拉取 mysql 5.6版本的鏡像
docker pull mysql:5.6
4.2.2、配置國內(nèi)鏡像加速器
目前國內(nèi)訪問 Docker HUB 官方的相關(guān)鏡像下載比較慢,可以使用國內(nèi)的一些鏡像加速器,鏡像保持和官方一致,關(guān)鍵是速度塊,推薦使用。
阿里云鏡像, 需要注冊帳號
- 注冊并登陸阿里云https://www.aliyun.com/,進入“管理控制臺”后,在如下圖找到 容器鏡像服務 或者搜索 容器鏡像服務。
- 通過修改daemon配置文件/etc/docker/daemon.json來使用加速器,如果daemon.json配置文件不存在則手動創(chuàng)建
vim /etc/docker/daemon.json
- 文件加入以下內(nèi)容 鏡像地址 https://u7ln4k0c.mirror.aliyuncs.com是你自己的不要復制我的
{"registry-mirrors": ["https://u7ln4k0c.mirror.aliyuncs.com"]
}
- 一定要重啟docker服務,如果重啟docker后無法加速,可以重新啟動CentOS
systemctl daemon-reload
systemctl restart docker
- 再通過 docker pull 命令下載鏡像:速度杠杠的
docker pull mysql
4.3、列出鏡像
- 列出docker下的已安裝所有鏡像:
docker images
查詢結(jié)果:
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.6 dd3b2a5dcb48 14 months ago 303MBREPOSITORY:鏡像所在倉庫的名稱
TAG:鏡像標簽(一般是版本號)
IMAGE ID:鏡像ID
CREATED:鏡像的創(chuàng)建日期
SIZE:鏡像大小
-
只顯示鏡像ID
docker images -q
查詢結(jié)果:
[root@localhost ~]# docker images -q dd3b2a5dcb48
-
這些鏡像都是存儲在Docker宿主機的 /var/lib/docker 目錄下
ll /var/lib/docker
查詢結(jié)果:
[root@localhost ~]# ll /var/lib/docker 總用量 4 drwx------. 2 root root 24 2月 27 19:01 builder drwx------. 4 root root 92 2月 27 19:01 buildkit drwx------. 2 root root 6 2月 27 19:00 containers drwx------. 3 root root 22 2月 27 19:00 image drwxr-x---. 3 root root 19 2月 27 19:00 network drwx------. 14 root root 4096 2月 27 19:14 overlay2 drwx------. 4 root root 32 2月 27 19:00 plugins drwx------. 2 root root 6 2月 27 19:00 runtimes drwx------. 2 root root 6 2月 27 19:01 swarm drwx------. 2 root root 6 2月 27 19:14 tmp drwx------. 2 root root 6 2月 27 19:00 trust drwx------. 2 root root 25 2月 27 19:00 volumes
-
為了區(qū)分同一個倉庫下的不同鏡像,Docker提供了一種稱為標簽(TAG)的功能。每個鏡像都帶有一個標簽(TAG),例如10.2.1、lastest 等等。這種機制使得同一個倉庫中可以存儲多個鏡像。— 版本號
-
我們可以使用倉庫名后面加上一個冒號和標簽名 ( REPOSITORY:TAG ) 來指定該倉庫中的某一具體的鏡像,如果未指定鏡像的標簽,將下載lastest最新版本,例如:只寫了centos,docker將默認使用 centos:lastest鏡像。
4.4、搜索鏡像
如果你需要從網(wǎng)絡中查找需要的鏡像,可以通過以下命令搜索
docker search [OPTIONS] 鏡像名稱
例如:docker search centos
查詢結(jié)果:
[root@localhost ~]# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
.. .. .. .. ..NAME:倉庫名稱
DESCRIPTION:鏡像描述
STARS:關(guān)注度,反應一個鏡像的受歡迎程度
OFFICIAL:是否官方
AUTOMATED:自動構(gòu)建,表示該鏡像由Docker Hub自動構(gòu)建流程創(chuàng)建的
OPTIONS 選項說明:
- -s 列出關(guān)注數(shù)大于指定值的鏡像 最新版沒有 -s 這個參數(shù)了。
docker search -s 100 centos #列出關(guān)注度大于100的鏡像
- –no-trunc 顯示完整的鏡像描述DESCRIPTION
docker search --no-trunc centos
4.5、刪除鏡像
- 刪除某一個鏡像
docker rmi 鏡像ID
docker rmi 鏡像名稱:版本號
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 4f06b49211c0 3 days ago 530MB
mysql 5.6 dd3b2a5dcb48 14 months ago 303MB
[root@localhost ~]# docker rmi 4f06b49211c0
[root@localhost ~]# docker rmi mysql:5.6
- 刪除所有鏡像 (是 `` 反單引號 )
docker rmi `docker images -q`
其中 docker images -q 獲取所有鏡像id 的意思
5、Docker 容器操作
5.1、查看容器
查看正在運行容器:
docker ps
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
容器 ID 鏡像 初始命令 創(chuàng)建日期 容器狀態(tài) 端口號 容器名字
查看所有的容器(啟動與未啟動的容器):
docker ps -a
查看最后一次運行的容器:
docker ps –l
查看停止的容器
docker ps -f status=exited
5.2、創(chuàng)建與啟動容器
注意:必須先有鏡像,再有容器,下面以CentOS鏡像演示
先拉取一下 CentOS 鏡像
docker pull centos:7
5.2.1、創(chuàng)建容器的命令
docker run [OPTIONS] 鏡像名:標簽名
- 創(chuàng)建容器 [OPTIONS] 常用的參數(shù)說明:
- -i 表示交互式運行容器(就是創(chuàng)建容器后,馬上會啟動容器,并進入容器 ),通常與 -t 同時使用 。
- -t 啟動后會進入其容器命令行, 通常與 -i 同時使用; 加入 -it 兩個參數(shù)后,容器創(chuàng)建就能登錄進去。即分配一個偽終端。
- –name 為創(chuàng)建的容器指定一個名稱 。
- -d 創(chuàng)建一個守護式容器在后臺運行,并返回容器ID;
- 這樣創(chuàng)建容器后不會自動登錄容器,如果加 -i 參數(shù),創(chuàng)建后就會運行容器。
- -v 表示目錄映射, 格式為: -p 宿主機目錄:容器目錄
注意:最好做目錄映射,在宿主機上做修改,然后共享到容器上。 - -p 表示端口映射,格式為: -p 宿主機端口:容器端口
5.2.2、交互式容器
說明: 就是創(chuàng)建容器后,馬上會啟動容器,并進入容器
創(chuàng)建一個交互式容器并取名為 mycentos , ( /bin/bash 是linux中的命令解析器,會進入到容器里面命令行)
docker run -it --name=mycentos centos:7 /bin/bash可以省略 /bin/bash
docker run -it --name=mycentos centos:7
上圖顯示,已經(jīng)進入容器中(上面主機名變成了容器實例編號 )
新開一個 shell 窗口,這時我們通過 docker ps 命令查看,發(fā)現(xiàn)可以看到啟動的容器,狀態(tài)為 Up 啟動狀態(tài)
docker ps
新開一個 shell 窗口,再創(chuàng)建一個 mycentos1 容器(注意:docker 命令是不能在容器里面使用)
docker run -it --name=mycentos1 centos:7 /bin/bash
再通過 docker ps 命令查看,發(fā)現(xiàn)有2個已經(jīng)啟動的容器
總結(jié): 同一個鏡像, 可創(chuàng)建運行多個容器 就像一個Java類,可以創(chuàng)建多個對象
5.2.3、創(chuàng)建守護式容器
如果對于一個需要長期運行的容器來說,我們可以創(chuàng)建一個守護式容器(后臺運行的容器)。
創(chuàng)建(-d)并運行(-i)守護式容器命令如下(容器名稱不能重復):
docker run -id --name=mycentos2 centos:7
5.3、退出創(chuàng)建守護式容器
如果對于一個需要長期運行的容器來說,我們可以創(chuàng)建一個守護式容器(后臺運行的容器)。
創(chuàng)建(-d)并運行(-i)守護式容器命令如下(容器名稱不能重復):
docker run -id --name=mycentos2 centos:7
退出并停止當前容器, 注意在容器內(nèi)部的命令行執(zhí)行
exit
[root@1c8663090976 /]# exit
exit
[root@localhost ~]#
退出不停止當前容器
按鍵盤: Ctrl + p + q ,按一次不行的話,則多按幾次,一般是連兩次即可。
5.4、啟動與停止容器
啟動已停止的容器的容器
docker start 容器名稱|容器id例如: docker start centos
停止正在運行的容器(正常停止)
docker stop 容器名稱|容器id例如: docker stop mycentos
強制停止正在運行的容器(一般不用此,除非卡了)
docker kill 容器名稱|容器id 例如: docker kill mycentos
啟動所有運行過的容器(注意:反單引號
),docker ps -a -q 是查詢所有運行過的容器ID
docker start `docker ps -a -q`
停止所有在運行的容器
docker stop `docker ps -a -q`
5.5、登錄容器
登錄已經(jīng)啟動的在后臺運行的容器方式
使用 docker exec 進入容器中打開命令行終端
docker exec -it 容器名稱|容器id /bin/bash
例如: docker exec -it mycentos2 /bin/bash
注意:exit 針對通過 docker exec 進入的容器,只退出但不停止容器 ,要停止 用 docker stop mycentos2
注意:交互式容器通過 docker exec 進入容器后,使用 exit 也一樣的只退出但不停止容器, 要停止 用 docker stop mycentos
5.6、拷貝宿主機與容器中的文件
如果我們需要將宿主機文件拷貝到容器內(nèi)可以使用 docker cp 命令,也可以將文件從容器內(nèi)拷貝到宿主機
5.6.1、將宿主機文件拷貝到容器內(nèi)
docker cp 要拷貝的宿主機文件或目錄 容器名稱:容器文件或目錄
例如: docker cp /demo.txt mycentos:/demo.txt
- 在宿主機上創(chuàng)建一個demo.txt文件并寫入內(nèi)容
cd / #切換到根目錄/下
echo 123456 > demo.txt #創(chuàng)建并寫入內(nèi)容 demo.txt 文件中
ls #查看是否已創(chuàng)建
cat demo.txt #查看文件內(nèi)容
- 將 demo.txt文件拷貝進 mycentos 容器中的 /opt 目錄下(mycentos要是UP啟動狀態(tài))
docker cp /demo.txt mycentos:/opt/demo.txt
- 登錄 mycentos 容器,查看/opt目錄下是否有 demo.txt 文件
docker exec -it mycentos /bin/bashls /opt/cat /opt/demo.txt
5.6.2、把容器內(nèi)的文件拷貝到宿主機
docker cp 容器名稱:要拷貝的容器文件或目錄 宿主機文件或目錄
- 在 mycentos 容器中的 創(chuàng)建文件 test.txt (要登錄進容器中)
cd /
echo aaaaa > test.txt
ls
-
需要使用 exit 先退出 docker 容器命令行,回到宿主機
-
從容器拷貝 test.txt 文件到宿主機的 /opt 目錄下(在宿主機中操作)
docker cp mycentos:/test.txt /opt/test.txt
注意:文件拷貝 docker cp 命令 均在宿主機中操作
5.7、數(shù)據(jù)目錄掛載
我們可以在創(chuàng)建容器的時候,將宿主機的目錄與容器內(nèi)的目錄進行映射,
這樣我們就可以通過修改宿主機某個目錄的文件從而去影響容器。使用 -v 選項
docker run -id -v /宿主機絕對路徑目錄:/容器內(nèi)目錄 --name=容器名 鏡像名
5.7.1、需求
將宿主機的/opt目錄與容器內(nèi)的/opt目錄進行映射,當在宿主機 /opt 目錄下創(chuàng)建一個文件 test2.txt ,這個 test2.txt 會自動同步到容器映射目錄 /opt
5.7.2、實現(xiàn)
- 創(chuàng)建容器并掛載映射目錄(使用 -v 宿主機目錄:容器目錄 )
創(chuàng)建容器時,將 宿主機目錄/opt 掛載 容器目錄/opt
docker run -id -v /opt:/opt --name=mycentos centos:7
- 在宿主機/opt 目錄下創(chuàng)建一個文件 test2.txt ,這個 test2.txt 會自動同步到容器映射目錄 /opt 目錄下
cd /opt
echo 111111 > test2.txt
- 進入容器的opt目錄看一下
docker exec -it mycentos3 /bin/bash
cat /opt/test.txt
- 當你修改宿主機的 test2.txt 文件中的內(nèi)容,容器中的test2.txt也會同步修改
5.7.3、目錄掛載只讀(Read-only)權(quán)限
實現(xiàn)掛載的目錄只有 只讀(Read-only)權(quán)限,命令如下 : 只需要加個 ro參數(shù)
docker run -id -v /宿主機絕對路徑目錄:/容器內(nèi)目錄:ro --name=容器名 鏡像名
實現(xiàn):
docker run -id -v /dataHost:/dataContainer:ro --name=mycentos4 centos:7注意: dataHost dataContainer 目錄如果沒有會自動創(chuàng)建
然后登錄容器:hehe.txt 文件就只能讀,不能更改
docker exec -it mycentos4 /bin/bash
cd /dataContainer
ls
echo aaabbbb >> hehe.txt
5.8、看容器內(nèi)部細節(jié)
查看容器運行內(nèi)部細節(jié),比如可看容器的IP ,id 等等一些詳細信息
docker inspect mycentos
5.9、查看容器IP地址
直接顯示IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos
5.10、刪除容器
刪除指定的容器:
docker rm 容器名稱 | 容器ID例如:docker rm mycentos
注意,只能刪除停止的容器,沒有停止的容器是刪除不掉的
刪除所有容器(其中運行中的容器無法刪除,所以先停再刪):
docker rm `docker ps -a -q`