Docker學(xué)習(xí)筆記(一)

Docker應(yīng)用容器

1. 初識 Docker

  • 我們寫的代碼會接觸到好幾個(gè)環(huán)境:開發(fā)環(huán)境、測試環(huán)境以及生產(chǎn)環(huán)境。

  • 這期間可能出現(xiàn)不同環(huán)境下的 “水土不服” 導(dǎo)致正常的程序無法運(yùn)行。這時(shí)就需要將我們的環(huán)境一起打包到容器發(fā)過去。解決:軟件跨環(huán)境遷移的問題。

image.png

1.1 - Docker的概念

  • Docker是一個(gè)開源的應(yīng)用容器引擎。Docker誕生于2013年, dotCloud 公司出品(后改名為Docker Inc)。

  • Docker 可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級、可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上。 - 容器是完全使用沙箱機(jī)制,相互隔離。 - 容器性能開銷極低。

  • Docker 從 17.03 版本之后分為 CE(Community Edition: 社區(qū)版) 和 EE(Enterprise Edition: 企業(yè)版) 。

1.2 安裝Docker

# 1、yum 包更新到最新 
yum update
# 2、安裝需要的軟件包, yum-util 提供yum-config-manager功能,另外兩個(gè)是devicemapper驅(qū)動(dòng)依賴的 
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 設(shè)置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、 安裝docker,出現(xiàn)輸入的界面都按 y 
yum install -y docker-ce
# 5、 查看docker版本,驗(yàn)證是否驗(yàn)證成功
docker -v

1.3 Docker 的架構(gòu)

image.png
  • 鏡像(Image) :Docker 鏡像(Image),就相當(dāng)于是一個(gè) root 文件系統(tǒng)。比如官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統(tǒng)的 root 文件系統(tǒng)。

  • 容器(Container):鏡像(Image)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計(jì)中的類和對象一樣,鏡像是靜態(tài)的定義,容器是鏡像運(yùn)行時(shí)的實(shí)體。容器可以被創(chuàng)建、啟動(dòng)、停止、刪除、暫停等。

  • 倉庫(Repository) :倉庫可看成一個(gè)代碼控制中心,用來保存鏡像。

1.4 配置 Docker 鏡像加速器

  • 默認(rèn)情況下,將來從docker hub(https://hub.docker.com/)上下載docker鏡像,太慢。一般都會配置鏡像加速器:

(1)USTC:中科大鏡像加速器(https://docker.mirrors.ustc.edu.cn
(2)阿里云
(3)網(wǎng)易云
(4)騰訊云

  • 如何在CentOS7 中配置 Docker鏡像加速器
切換到 docker目錄下 :cd /etc/docker 
創(chuàng)建并編輯文件 : vim daemon.json 
編輯文件內(nèi)容:  
{
  "registry-mirrors": ["https://ndirti7e.mirror.aliyuncs.com"]
}
重啟docker服務(wù) : systemctl restart docker 
附加命令 (linux修改文件后綴):mv filename.js filename.json (因?yàn)槲业暮缶Y寫錯(cuò)了一直沒有反應(yīng),hahaha) 

2. Docker 命令 *

2.1 Docker 服務(wù)相關(guān)命令

systemctl start docker : 啟動(dòng)服務(wù)
systemctl start docker : 查看Docker的狀態(tài)
systemctl stop docker : 停止Docker服務(wù)
systemctl restart docker : 重啟Docker服務(wù)
systemctl enable docker : 開機(jī)啟動(dòng)Docker 

2.2 Docker 鏡像相關(guān)命令

1. 查看鏡像(本地):docker images 
2. 搜索鏡像:docker search '軟件名稱'
3. 拉取鏡像:docker pusll redis :版本號
4. 刪除鏡像(本地):docker rmi 鏡像id 
5. 查看當(dāng)前所有鏡像的id: docker images -q
6. 刪除當(dāng)前所有鏡像: docker rmi `docker images -q`
  • 如何查找鏡像的版本號 :https://hub.docker.com/
  • 如果鏡像中存在兩個(gè)id相同的鏡像:如何刪除?
1. 可以通過 鏡像名稱加上版本號 刪除   docker rmi redis:5.0 

2.3 Docker 容器相關(guān)命令 **

  • 容器是有鏡像這個(gè)物理的文件運(yùn)行出來的實(shí)例。命令主要是如何通過鏡像創(chuàng)建出容器。并且去操作容器。
1. 查看容器:docker ps (查看正在運(yùn)行的容器)docker ps -a(查看運(yùn)行或沒有運(yùn)行的容器)
2. 創(chuàng)建容器:docker run  -i(保持一致運(yùn)行) -t (給容器一個(gè)終端)--name=名字(給容器起一個(gè)名字)     centos:7 (指定根據(jù)哪個(gè)鏡像) /bin/bash (進(jìn)入容器的指令)
 案例 docker run -i -t --name=cl centos:7 /bin/bash (通過這種方式創(chuàng)建的容器一旦退出就會關(guān)閉)  使用 exit 退出容器 
docker run -i -d(后臺運(yùn)行容器,但是創(chuàng)建完之后不會自動(dòng)進(jìn)入容器) --name=ct centos:7
3. 進(jìn)入容器: docker exec -it 容器名稱 /bin/bash
4. 啟動(dòng)容器:docker stop 容器名稱 
5. 停止容器:docker start 容器名稱 
6. 刪除容器:docker rm 容器id/容器名稱    刪除所有容器 docker rm `docker ps -aq` 開啟的容器是不能被刪除的。
7. 查看容器信息:docker inspect 容器名稱
image.png

3. Docker的應(yīng)用部署

  1. 在Docker上安裝常見的軟件。

3.1 MySQL部署

  1. 在Docker容器中部署MySQL,并通過外部mysql客戶端操作MySQL Server。
  2. 外部如何訪問到docker容器中的mysql服務(wù)?容器內(nèi)的網(wǎng)絡(luò)服務(wù)不能直接和外部直接通信。
  3. 外部機(jī)器和宿主機(jī)可以直接通信。
  4. 宿主機(jī)和容器可以直接通信。
  5. 當(dāng)容器中的網(wǎng)絡(luò)服務(wù)需要外部機(jī)器訪問時(shí),可以將容器中提供服務(wù)的端口映射到宿主機(jī)的端口上。外部機(jī)器訪問宿主機(jī)的該端口,從而直接訪問容器的服務(wù)。

3.1.1 實(shí)現(xiàn)步驟

  1. 搜索mysql鏡像。
docker search mysql
  1. 拉取mysql鏡像。
docker pull mysql:5.6
  1. 創(chuàng)建容器。
- 首先創(chuàng)建一個(gè)存放mysql數(shù)據(jù)的文件,并切換進(jìn)去 
# 在/root目錄下創(chuàng)建mysql目錄用于存儲mysql數(shù)據(jù)信息
mkdir ~/mysql
cd ~/mysql

# 復(fù)制下面命令到終端執(zhí)行 ,注意 \ 后面不能有空格之類的影響命令的執(zhí)行 

docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6

# 使用命令 進(jìn)入到容器中 docker exec -it  c_mysql /bin/bash

參數(shù)說明:

- -p 3307:3306:將容器的 3306 端口映射到宿主機(jī)的 3307 端口。
- -v $PWD/conf:/etc/mysql/conf.d:將主機(jī)當(dāng)前目錄下的 conf/my.cnf 掛載到容器的 /etc/mysql/my.cnf。配置目錄
- -v $PWD/logs:/logs:將主機(jī)當(dāng)前目錄下的 logs 目錄掛載到容器的 /logs。日志目錄
- -v $PWD/data:/var/lib/mysql :將主機(jī)當(dāng)前目錄下的data目錄掛載到容器的 /var/lib/mysql 。數(shù)據(jù)目錄
- -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用戶的密碼。

  1. 操作容器中的mysql。


    連接到docker容器中的mysql

3.2 Tomcat部署

  1. 需求:在Docker容器中部署Tomcat,并通過外部機(jī)器訪問Tomcat部署的項(xiàng)目。

3.2.1 實(shí)現(xiàn)步驟

  1. 搜索Tomcat鏡像
docker search tomcat
  1. 拉取Tomcat鏡像
docker pull tomcat
  1. 創(chuàng)建容器
  # 在/root目錄下創(chuàng)建tomcat目錄用于存儲tomcat數(shù)據(jù)信息
mkdir ~/tomcat
cd ~/tomcat

docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat 

參數(shù)說明:
- -p 8080:8080:將容器的8080端口映射到主機(jī)的8080端口
- -v $PWD:/usr/local/tomcat/webapps:將主機(jī)中當(dāng)前目錄掛載到容器的webapps

  1. 部署項(xiàng)目
  • 在宿主機(jī)之前創(chuàng)建的tomcat目錄下新建一個(gè)項(xiàng)目文件夾 test
mkdir test
  • 在test文件夾中創(chuàng)建一個(gè) index.html文件
vim index.html 
  1. 測試訪問
  • 使用遠(yuǎn)程主機(jī)IP進(jìn)行訪問。


    訪問遠(yuǎn)程docker容器中的tomcat應(yīng)用成功

3.3 Nginx部署

  1. 在Docker容器中部署Nginx,并通過外部機(jī)器訪問Nginx。

3.3.1 實(shí)現(xiàn)步驟

  1. 搜索Nginx
docker search nginx
  1. 拉取Nginx,并編寫配置文件
docker pull nginx 

# 在/root目錄下創(chuàng)建nginx目錄用于存儲nginx數(shù)據(jù)信息
mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf
# 在~/nginx/conf/下創(chuàng)建nginx.conf文件,粘貼下面內(nèi)容
vim nginx.conf



# nginx.conf 配置文件內(nèi)容 

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}


  1. 創(chuàng)建容器

# 切換到Nginx目錄下執(zhí)行如下命令創(chuàng)建Nginx的容器。

docker run -id --name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx



參數(shù)說明:
- -p 80:80:將容器的 80端口映射到宿主機(jī)的 80 端口。
- -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:將主機(jī)當(dāng)前目錄下的 /conf/nginx.conf 掛載到容器的 :/etc/nginx/nginx.conf。配置目錄
- -v $PWD/logs:/var/log/nginx:將主機(jī)當(dāng)前目錄下的 logs 目錄掛載到容器的/var/log/nginx。日志目錄

  1. 測試訪問
切換到html 文件夾下創(chuàng)建一個(gè)index.html文件之后進(jìn)行訪問測試。
測試訪問Nginx成功!

3.4 Redis部署

  1. 在Docker容器中部署Redis,并通過外部機(jī)器訪問 Redis。

3.4.1 實(shí)現(xiàn)步驟

  1. 搜索Redis鏡像。
docker search redis
  1. 拉取Redis鏡像。
docker pull redis:5.0
  1. 創(chuàng)建容器。
docker run -id --name=c_redis -p 6379:6379 redis:5.0  //注意端口可能被綁定了,需要替換端口
  1. 測試訪問。
redis-cli.exe -h 192.168.149.135 -p 6379

4. 備份與遷移

5. Dockerfile

5.1 Dockerfile的原理

  1. linux文件系統(tǒng)由bootfs和rootfs兩部分組成。

  2. bootfs:包含bootloader(引導(dǎo)加載程序)和kernelkernel(內(nèi)核)。

  3. rootfs:root文件系統(tǒng),包含的就是典型linux系統(tǒng)中的/devproc,/bin、 /etc等標(biāo)準(zhǔn)目錄和文件

  4. 不同的linux發(fā)行版,bootfs基本是一樣的,而rootfs不同,如ubuntu、centos等。

  5. Docker鏡像是由特殊的文件系統(tǒng)疊加而成

  6. 最底端是 bootfs,并使用宿主機(jī)的bootfs

  7. 第二層是 root文件系統(tǒng)rootfs,稱為base image

  8. 然后再往上可以疊加其他的鏡像文件

  9. 統(tǒng)一文件系統(tǒng)(Union File System) 技術(shù)能夠?qū)⒉煌膶诱铣梢粋€(gè)文件系統(tǒng),為這些層提供了一個(gè)。

  10. 統(tǒng)一的視角,這樣就隱藏了多層的存在,在用戶的角度看來,只存在一個(gè)文件系統(tǒng)。

  11. 一個(gè)鏡像可以放在另一個(gè)鏡像的上面。位于下面的鏡像稱為父鏡像,最底部的鏡像成為基礎(chǔ)鏡像。

  12. 當(dāng)從一個(gè)鏡像啟動(dòng)容器時(shí),Docker會在最頂層加載一個(gè)讀寫文件系統(tǒng)作為容器

Docker原理

5.2 Dockerfile概念及作用

  1. Docker的本質(zhì)是啥?
  • 答:是一個(gè)分層文件系統(tǒng)
  1. Docker中一個(gè)centos鏡像為什么只有200MB,而是一個(gè)centos操作系統(tǒng)的iso文件要幾個(gè)G?
  • 答:Centos的iso鏡像文件包含bootfs和rootfs,而docker的centos鏡像復(fù)用操作系統(tǒng)的bootfs,只有rootfs和其他鏡像層
  1. Docker中一個(gè)tomcat鏡像為什么有500mb而一個(gè)tomcat的 安裝包只有70多mb?
  • 答:Centos的iso鏡像文件包含bootfs和rootfs,而docker的centos鏡像復(fù)用操作系統(tǒng)的bootfs,只有rootfs和其他鏡像

5.2.1 鏡像制作

5.2.1.1 容器轉(zhuǎn)為鏡像的方式
docker commit 容器id 鏡像名稱:自定義版本號
 通過commit的方式轉(zhuǎn)化,以數(shù)據(jù)卷的方式掛載的文件是不會生效的。在root目錄下創(chuàng)建的文件夾會打包到鏡像中。會在重新加載的時(shí)候生效。

# 1. 打包一個(gè)鏡像 

docker commit  需要打包的容器id  lyp_tomcat:1.0.0

# 2. 需要將鏡像鏡像壓縮之后才能夠進(jìn)行傳輸 
docker save -o  壓縮文件名稱.tar  鏡像文件名稱:1.0.0

3. 將鏡像的壓縮文件進(jìn)行解壓

docker load -i 壓縮文件名稱

5.2.1.2 Dockerfile的方式制作鏡像

5.2.2 DockerFile的概念

  1. Dockerfile 是一個(gè)文本文件
  2. 包含了一條條的指令
  3. 每一條指令構(gòu)建一層,基于基礎(chǔ)鏡像,最終構(gòu)建出一個(gè)新的鏡像
  4. 對于開發(fā)人員:可以為開發(fā)團(tuán)隊(duì)提供一個(gè)完全一致的開發(fā)環(huán)境
  5. 對于測試人員:可以直接拿開發(fā)時(shí)所構(gòu)建的鏡像或者通過Dockerfile文件構(gòu)建一個(gè)新的鏡像開始工作了
  6. 對于運(yùn)維人員:在部署時(shí),可以實(shí)現(xiàn)應(yīng)用的無縫移植


    dockerfile的概念

5.3 Dockerfile關(guān)鍵字

關(guān)鍵字 作用 備注
FROM 指定父鏡像 指定dockerfile基于那個(gè)image構(gòu)建
MAINTAINER 作者信息 用來標(biāo)明這個(gè)dockerfile誰寫的
LABEL 標(biāo)簽 用來標(biāo)明dockerfile的標(biāo)簽 可以使用Label代替Maintainer 最終都是在docker image基本信息中可以查看
RUN 執(zhí)行命令 執(zhí)行一段命令 默認(rèn)是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"]
CMD 容器啟動(dòng)命令 提供啟動(dòng)容器時(shí)候的默認(rèn)命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"]
ENTRYPOINT 入口 一般在制作一些執(zhí)行就關(guān)閉的容器中會使用
COPY 復(fù)制文件 build的時(shí)候復(fù)制文件到image中
ADD 添加文件 build的時(shí)候添加文件到image中 不僅僅局限于當(dāng)前build上下文 可以來源于遠(yuǎn)程服務(wù)
ENV 環(huán)境變量 指定build時(shí)候的環(huán)境變量 可以在啟動(dòng)的容器的時(shí)候 通過-e覆蓋 格式ENV name=value
ARG 構(gòu)建參數(shù) 構(gòu)建參數(shù) 只在構(gòu)建的時(shí)候使用的參數(shù) 如果有ENV 那么ENV的相同名字的值始終覆蓋arg的參數(shù)
VOLUME 定義外部可以掛載的數(shù)據(jù)卷 指定build的image那些目錄可以啟動(dòng)的時(shí)候掛載到文件系統(tǒng)中 啟動(dòng)容器的時(shí)候使用 -v 綁定 格式 VOLUME ["目錄"]
EXPOSE 暴露端口 定義容器運(yùn)行的時(shí)候監(jiān)聽的端口 啟動(dòng)容器的使用-p來綁定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
WORKDIR 工作目錄 指定容器內(nèi)部的工作目錄 如果沒有創(chuàng)建則自動(dòng)創(chuàng)建 如果指定/ 使用的是絕對地址 如果不是/開頭那么是在上一條workdir的路徑的相對路徑
USER 指定執(zhí)行用戶 指定build或者啟動(dòng)的時(shí)候 用戶 在RUN CMD ENTRYPONT執(zhí)行的時(shí)候的用戶
HEALTHCHECK 健康檢查 指定監(jiān)測當(dāng)前容器的健康監(jiān)測的命令 基本上沒用 因?yàn)楹芏鄷r(shí)候 應(yīng)用本身有健康監(jiān)測機(jī)制
ONBUILD 觸發(fā)器 當(dāng)存在ONBUILD關(guān)鍵字的鏡像作為基礎(chǔ)鏡像的時(shí)候 當(dāng)執(zhí)行FROM完成之后 會執(zhí)行 ONBUILD的命令 但是不影響當(dāng)前鏡像 用處也不怎么大
STOPSIGNAL 發(fā)送信號量到宿主機(jī) 該STOPSIGNAL指令設(shè)置將發(fā)送到容器的系統(tǒng)調(diào)用信號以退出。
SHELL 指定執(zhí)行腳本的shell 指定RUN CMD ENTRYPOINT 執(zhí)行命令的時(shí)候 使用的shell

5.4 案例

5.4.1 自定義centos7鏡像 。

  1. 默認(rèn)登錄路徑為 :/usr.
  2. 可以使用vim
  3. 實(shí)現(xiàn)步驟 :
# 創(chuàng)建文件夾 
mkdir dockerfile

# 創(chuàng)建一個(gè)文件 
vim centos_dockerfile 

# 編寫下面的命令 

# 定義父鏡像 
From centos:7
# 定義作者的信息 
MAINTAINER lyp 
# 執(zhí)行安裝 vim 的命令 
RUN yum install -y vim 
# 設(shè)置工作路徑 
WORKDIR / usr 
# 定義容器啟動(dòng)執(zhí)行的命令 
CMD /bin/bash
# 將上面的命令 統(tǒng)一放到一個(gè)文件中 ,最后使用 命令執(zhí)行該文件 
docker build -f ./存放命令的路徑及文件名 -t 創(chuàng)建的鏡像的名稱 : 版本   .  (最后是一個(gè)點(diǎn))

# 根據(jù)新創(chuàng)建的鏡像創(chuàng)建容器
docker  run -it --name=lyp_centos lyp_centos:1 /bin/bash

5.4.2 定義 dockerfile,發(fā)布springBoot項(xiàng)目

  1. 將事先準(zhǔn)備好的jar文件上傳到linux服務(wù)器上面 。

  2. 將jar添加到容器中去。

  3. 實(shí)現(xiàn)步驟 :

# 定義父鏡像 
FROM java:8 

# 定義作者信息 
MAINTAINER lyp

# 添加jar包到容器中 
ADD  項(xiàng)目名稱 .jar app.jar 

# 執(zhí)行命令 啟動(dòng) 
CMD  java -jar app.jar 

# 使用build命令執(zhí)行上面的命令文件 
docker build -f ./存放命令的路徑及文件名 -t 創(chuàng)建的鏡像的名稱 : 版本   .  (最后是一個(gè)點(diǎn))

6. Docker相關(guān)概念

7. 服務(wù)編排

8. Docker容器數(shù)據(jù)卷

  1. 數(shù)據(jù)卷:是宿主機(jī)中的一個(gè)文件或者目錄 。
  2. 當(dāng)數(shù)據(jù)卷目錄和數(shù)據(jù)卷目錄綁定后,對方的修改會立即同步。
  3. 一個(gè)數(shù)據(jù)卷可以被多個(gè)容器同時(shí)掛載。

8.1 數(shù)據(jù)卷的概念以及作用

  1. 思考:當(dāng)Docker 刪除后在容器中產(chǎn)生的數(shù)據(jù)還存在嗎?
  2. 思考:Docker容器和外部機(jī)器可以直接交換文件嗎?
  3. 思考:容器之間如何進(jìn)行數(shù)據(jù)的交互?

8.1.1數(shù)據(jù)卷的作用

  1. 容器數(shù)據(jù)持久化。
  2. 外部機(jī)器和容器之間的間接通信。
  3. 容器之間數(shù)據(jù)交換。

8.2 配置數(shù)據(jù)卷

  1. 創(chuàng)建啟動(dòng)容器的時(shí)候使用-v設(shè)置數(shù)據(jù)卷 。
  2. 創(chuàng)建的目錄必須是絕對路徑。
  3. 路徑之間使用 ‘:’ 分割不能有空格。
  4. 如果目錄不存在會自動(dòng)創(chuàng)建。
  5. 可以掛在多個(gè)數(shù)據(jù)卷。
docker run -it --name=cf -v /root/data:/root/data-container /centos:7 /bin/bash

8.2.1 操作

1. 創(chuàng)建容器并掛在數(shù)據(jù)卷 : docker run -it --name=cf -v /root/data:/root/data-container :centos:7 /bin/bash
2. 在容器中創(chuàng)建文件 : touch a.txt
3. 在宿主機(jī)中寫入文件 : echo 123 > b.txt 
-------------------------------------------
1. 創(chuàng)建一個(gè)守護(hù)模式的容器并掛載數(shù)據(jù)卷:docker run -id --name=ct -v /root/data:/root/data-container centos:7 
2. 進(jìn)入到容器中 : docker exec -it ct /bin/bash 

-------------------------------------------
1. 創(chuàng)建容器并掛載兩個(gè)以上數(shù)據(jù)卷 : docker run -it --name=cs -v ~/data:/root/data1\  -v ~/data:/root/data-container \ centos:7 /bin/bash      其中~代表 /root (但是只能將宿主機(jī)的路徑寫成這樣) \ 代表沒有寫完命令 換行繼續(xù)寫。

8.2.2 兩個(gè)容器同時(shí)掛載到一個(gè)數(shù)據(jù)卷上實(shí)現(xiàn)兩個(gè)容器之間的數(shù)據(jù)交換

1. 創(chuàng)建第一個(gè)容器綁定到宿主機(jī)的data目錄上 :  docker run -it --name=cp -v /root/data:/root/data centos:7   
2. 創(chuàng)建第二個(gè)容器也綁定到宿主機(jī)的data目錄上:docker -it --name=cd -v /root/data:/root/data centos:7 
3. 在第二個(gè)容器中寫入內(nèi)容到c.txt文件 : echo cd-container > c.txt 
4. 查看該文件 : cat c.txt

8.3 配置數(shù)據(jù)卷容器

8.3.1 多容器進(jìn)行數(shù)據(jù)交換

  1. 多個(gè)容器掛載同一個(gè)數(shù)據(jù)卷,但是工作其來比較麻煩。
  2. 數(shù)據(jù)卷容器。


    容器數(shù)據(jù)卷

8.3.2 操作

1. 創(chuàng)建c3數(shù)據(jù)卷容器,使用-v參數(shù)設(shè)置數(shù)據(jù)卷:docker run -it --name=c3 -v /volume centos:7 /bin/bash
2. 創(chuàng)建并啟動(dòng)c2 容器,使用 -volumes-from 參數(shù)設(shè)置數(shù)據(jù)卷 : docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash 
3. 創(chuàng)建并啟動(dòng)c2容器 ,使用 -volumes-from 參數(shù)設(shè)置數(shù)據(jù)卷:docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash
4. 查看容器詳情 : docker inspect 容器名稱
docker inspect 容器

9. Docker私有倉庫

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容