IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Docker入门(二) -> 正文阅读

[系统运维]Docker入门(二)

目录

1. 前提:Docker与容器的数据交互方式

(1)文件拷贝:docker cp

(2)数据卷:docker volumes

(3)挂载:docker mounts

2. docker cp 复制

(1)把容器外的内容传到容器里

(2)把容器里的内容导出容器外

(3)延伸:如何修改端口 9090:8080

3. docker commit 提交更新

4. docker inspect 查看容器或镜像的详情

练习一

5. docker volume 数据卷

5.1 数据卷特点

练习二

练习三

练习四

6. docker mount 挂载


1. 前提:Docker与容器的数据交互方式

(1)文件拷贝:docker cp

(2)数据卷:docker volumes

(3)挂载:docker mounts

2. docker cp 复制

(1)把容器外的内容传到容器里

docker cp 源路径/文件名 容器名:绝对路径? (注意:这里必须是绝对路径,容器里的)

(2)把容器里的内容导出容器外

docker cp 容器名:绝对路/文件名 目的路径/文件名 ? (不指定目的路径的话,拷贝出来的文件就放到容器外当前所在的路径,即实行docker时的当下路径)

(3)延伸:如何修改端口 9090:8080

修改映射端口9090 ?

销毁当前容器,重新起一个容器(无法在一个已经定义端口的容器的状态下去修改外面的端口)

修改镜像?容器端口8080?

失败:

进到容器里(exec),cd bin, sh shutdown.sh 不能这样,这样会销毁掉。容器还在,只是没起?

成功:

1)重启: docker start 容器名或者容器id

2)进容器,找端口的配置文件:cd conf/ ,修改端口号:vim server.xml(包含端口信息)

3)此时发现2)不成功,因为容器里没有vim命令。 怎么处理?cp server.xml到容器外,修改好之后,再cp回容器里 conf/ 路径下,会覆盖原来的

以上,只是修改了该容器的端口,要是从镜像中再起一个容器,端口就还是原来的,未受更改影响。若要使镜像也变,就涉及到 commit了

3. docker commit 提交更新

1)在容器中更新好信息之后,退出容器

2)#docker commit -m "描述更改的句子,随意定" 容器id 镜像名:tag名 ? (最后这个,将会是生成的新镜像的名称和tag)

docker commit -a "runoob.com" -m "my apache" a404c6c174a2? mymysql:v1

3)用 docker images查看是否已经生成一个新的镜像,镜像名称和tag在2)中定义了

4)用新镜像来启动一个新的容器,然后在新容器里,是不是有上面旧容器做的更改

docker run -itd - -name "新容器名" -p 9091:8888 镜像名:tag名? ? (镜像名和tag名是上面新生成的,8888是新的端口)

小结:在容器内部的任何操作,都不影响镜像本身。要把操作和更改固化,需要用commit。

4. docker inspect 查看容器或镜像的详情

docker inspect 容器id

比如挂载内容,挂载的类型(Mounts:[ ])等等

docker inspect 镜像id

比如可以获取环境变量等信息

练习一

1)自己修改tomcat镜像,要求把tomcat启动端口改成8888并启动容器

思路:据tomcat原始镜像启动一个tomcat容器

使用docker cp把 server.xml 复制出来,修改端口成8888 -->

把修改后的server.xml cp回去 -->

使用docker commit生成新的镜像 -->

使用新镜像启动容器

2)为什么Docker镜像的修改要这么麻烦?

docker 是一种服务,为了保护服务器的稳定性。不支持很多命令和操作,即不允许直接在容器上修改一些东西,为了保证服务器的统一。所以把一些操作做得很复杂。

5. docker volume 数据卷

5.1 数据卷特点

1)数据卷存在于宿主机的文件系统中,独立于容器,和容器的生命周期是分离的

2)数据卷可以是目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了容器间的数据共享和交换

3)容器启动初始化时,如果容器使用的镜像包含了数据,这些数据会拷贝到数据卷中

4)容器对数据卷的修改是实时进行的

5)数据卷的变化不会影响镜像的更新。数据卷是独立于联合文件系统,镜像是基于联合文件系统。镜像和数据卷之间不会相互影响。

练习二

启动mysql镜像:

docker pull mysql

docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PATHWORD=123456 mysql

docker exec -it mysql-test /bin/bash

mysql -u root -p

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'

哪儿查环境变量:docker inspect mysql | grep 'MYSQL_ROOT_PASSWORD'

先登录root然后再授权:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

思考:如何确保mysql的业务数据不丢失?---用数据卷

练习三

使用数据卷来实时更新mysql

1)创建数据卷

docker volume create --name 数据卷名称(自定义)

2)启动mysql容器,使用数据卷

docker run -itd --name mysql-test -p 3306:3306 -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql

mysql_data是上面创建的数据卷名称

/var/lib/mysql 是容器中的路径

3)进入容器,授权(不授权的话,外部客户端无法访问,需要在容器里手动敲命令。所以,授权客户端来操作表格,比较方便)

docker exec -it mysql-test /bin/bash

mysql -u root -p

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'

4)在客户端远程访问,创建库和表

5)删除容器,用数据卷重新创建一个新容器

???多个容器共用同一个数据卷,这样当第二个容器尝试使用数据卷时,失败。因为数据卷被占用了。

??? 先把其他容器都stop, rm掉。再手动的起一个新的容器。

6)验证看看之前在数据卷中更新的信息,是否体现在新容器里

mysql -u root -p

use test ? (test是数据库名)

练习四

使用数据卷来练习tomcat

1) docker volume create webapps_volume

2) cd /var/lib/docker/volumes/webapps_volume ? ? (!!这是存放数据卷的位置)

mkdir file

cd /

cp ca.txt /var/lib/docker/volumes/webapps_volume/file/

3)docker run -itd -p 8080:8080 -v webapps_volume:/usr/local/tomcat/webapps/ --name=ckl_tomcat02 tomcat

4) cd /var/lib/docker/volumes/webapps_volume/ ? (该目录下有_data目录和file目录)

cd file

cp ca.txt ../_data/? ? (建一个数据卷,数据默认放在_data目录下)

5) 再起一个容器:docker run -itd -p 8081:8080 -v webapps_volume:/usr/local/tomcat/webapps/ --name=ckl_tomcat04 tomcat

在两个会话中起来上面两个容器,更新一边,从另一边看看是否有同步更新。

两边数据时互通的,共享的

容器消失后,数据卷和数据都还是存在的,可供后续的容器使用。

问题补充

不新建数据卷,在run启动容器时,加 -v 参数,则自动创建数据卷。 起来之后,进var/lib/docker/volumes/下看看是不是有新的数据卷

22,80,443, 等都是高危端口,云服务时是使用受限的,需要开防火墙

rm 删容器, rmi 删镜像。有容器依赖的镜像 删不掉。

6. docker mount 挂载

(1)run的时候,若-v带的是文件夹,比如 -v /root/ckl_001: /usr/local/tomcat/webapps

此时,也能创建成功。再进去 /var/lib/docker/volumes 没看到数据卷,因为这种方式,其实是实现了挂载,而非数据卷

(2)运维的角度,更建议用数据卷,便于将所有数据放到同一个地方

(3)bind mount 和 volume的对比

Source位置: 用户指定 vs /var/lib/docker/volumes/

Source为空:覆盖dest为空 vs 保留dest内容

Source非空:覆盖dest内容 vs 覆盖dest内容

Source种类:文件或目录 vs 只能是目录

可移植性:一般(自行维护)vs 强(docker托管)

宿主直接访问:容易(仅需chown)vs 受限(需登录root用户)

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:36:42  更:2021-08-25 12:37:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 11:36:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码