在熟悉完Docker的安装及基本命令使用之后,我们开始学习下Docker的进阶操作:包括但不限于新建Docker镜像,数据卷的挂载,以及Docker的可视化等。

Docker提交镜像

启动镜像

我们先安装一个tomcat

docker run -d -p 8080:8080 tomcat

然后访问:http://192.168.88.71:8080/

容器虽然启动了,但页面404,其实是默认没有访问页面

[root@hadoop101 ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND                 CREATED         STATUS         PORTS                                                                                 NAMES
7f7e60ca6bf5   tomcat                "catalina.sh run"        6 seconds ago   Up 4 seconds    0.0.0.0:8080->8080/tcp, :::8080->8080/tcp                                             wonderful_satoshi

修改容器

tomcat为了简化启动流程,省略了加载页面的操作,所以访问404,我们可以进入容器,修改一下相关配置

[root@hadoop101 ~]# docker exec -it 7f7e60ca6bf5 /bin/bash
root@7f7e60ca6bf5:/usr/local/tomcat# ls
BUILDING.txt     LICENSE README.md     RUNNING.txt conf logs           temp     webapps.dist
CONTRIBUTING.md NOTICE   RELEASE-NOTES bin         lib   native-jni-lib webapps work
root@7f7e60ca6bf5:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@7f7e60ca6bf5:/usr/local/tomcat#

tomcat的静态页面备份在了webapps.dist目录下,我们将其复制到webapps下即可。

再次访问:http://192.168.88.71:8080/ ,我们熟悉的页面正常显示了。

提交镜像

然后把我修改后的容器重新提交成一个新的镜像。

docker commit -m "cp webapps files" -a "zhangbao" 7f7e60ca6bf5 tomcat001:1.0

[root@hadoop101 ~]# docker commit -m "cp webapps files" -a "zhangbao" 7f7e60ca6bf5  tomcat001:1.0
sha256:1bcaa367798ccbea30337645a4839db5878a40eaed92e5c5d66c3df13edae738
[root@hadoop101 ~]# docker images
REPOSITORY           TAG       IMAGE ID       CREATED         SIZE
tomcat001             1.0       1bcaa367798c   7 seconds ago   684MB
tomcat               latest   fb5657adc892   2 months ago   680MB

发现比之前大了一点点。

启动新镜像

我们再启动新提交后的镜像

docker run -d -p 8081:8080 tomcat001:1.0

访问http://192.168.88.71:8081/,直接显示正常页面。

容器数据卷

背景

启动一个容器后,容器内的配置或者数据也在容器中,当我们删掉容器,整个容器及内部的配置及数据都会丢失,这是不正常的,所以Docker提供了数据卷的功能,即把容器内的配置或数据映射到宿主机上,实现双向绑定,当我们要删掉一个容器的时候,其数据还可保留,当我们修改容器的配置,也不需要进入容器,可直接在映射文件中修改。

启动镜像并添加数据卷

docker run -it -p 8080:8080 -v /opt/test:/opt tomcat001:1.0 /bin/bash

此命令表示运行一个tomcat001镜像,宿主机端口和容器端口都是8080,-v /opt/test:/opt 表示把容器内目录 /opt 目录挂载到宿主机 /opt/test 目录下,这样两边就实现了双向绑定。

验证

注:上个命令不可 ctrl+c 或者 exit退出,否则容器也直接退出了,用 ctrl+p+q 后台启动

我们直接在宿主机的/opt/test目录下新建文件test.txt,然后查看容器内的/opt目录下的变化

# 宿主机
[root@hadoop101 opt]# cd /opt/test
[root@hadoop101 test]# touch test.txt
[root@hadoop101 test]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 19 22:33 test.txt

#容器内
[root@hadoop101 ~]# docker ps
CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS         PORTS                                       NAMES
04331e8ef590   tomcat001:1.0   "/bin/bash"   7 minutes ago   Up 7 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   crazy_mclaren
[root@hadoop101 ~]# docker attach 04331e8ef590
root@04331e8ef590:/usr/local/tomcat# cd /opt/
root@04331e8ef590:/opt# ls
test.txt

同样的,我们在容器内修改文件内容,在宿主机也可以实时查看文件内容,并且在停止容器后,我们在宿主机上修改文件,然后再启动容器,容器内的文件同样被修改了。

安装msyql

docker run -d -p 3301:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql001 mysql:5.7

-p 宿主机端口:容器端口

-v 宿主机目录:容器目录,可多个-v

-e 变量配置

--name 容器名字

这里我们将mysql容器的配置文件和数据目录挂载到宿主机的/home/mysql目录下

[root@hadoop101 ~]# cd /home/mysql/
[root@hadoop101 mysql]# ll
total 0
drwxr-xr-x 2 root   root   6 Mar 19 23:13 conf
drwxr-xr-x 5 polkitd root 328 Mar 19 23:13 data
[root@hadoop101 mysql]# cd data
[root@hadoop101 data]# ls
auto.cnf   client-cert.pem ibdata1     ibtmp1             private_key.pem server-key.pem
ca-key.pem client-key.pem   ib_logfile0 mysql               public_key.pem   sys
ca.pem     ib_buffer_pool   ib_logfile1 performance_schema server-cert.pem
[root@hadoop101 data]#

然后我们通过Navicat连接,并新建数据库test,再次查看数据目录

[root@hadoop101 data]# ls
auto.cnf   client-cert.pem ibdata1     ibtmp1             private_key.pem server-key.pem
ca-key.pem client-key.pem   ib_logfile0 mysql               public_key.pem   sys
ca.pem     ib_buffer_pool   ib_logfile1 performance_schema server-cert.pem test
[root@hadoop101 data]#

数据卷挂载

在熟悉了容器数据卷的功能后,我们再来看下数据卷的挂载,数据卷挂载有多种方式,上面我们使用是其中一种方式:指定路径挂载。其实还有其他挂载方式,不同场景可使用不同方式的挂载,可根据自身需要选择。

匿名挂载

-v 后面直接跟容器内的路径

docker run -d -v /etc/nginx --name nginx001 nginx

[root@hadoop101 ~]# docker inspect nginx001
## 这里只列出挂载信息,将容器内的路径/etc/nginx挂载到宿主机/var/lib/docker/volumes下
"Mounts": [
          {
               "Type": "volume",
               "Name": "cc9ff269b7ad67fab8866e7a446009207d2a3af24395003a8cb75f3981022eec",
               "Source": "/var/lib/docker/volumes/cc9ff269b7ad67fab8866e7a446009207d2a3af24395003a8cb75f3981022eec/_data",
               "Destination": "/etc/nginx",
               "Driver": "local",
               "Mode": "",
               "RW": true,
               "Propagation": ""
          }
      ],

具名挂载

-v 数据卷名称:容器内路径

docker run -d -v zhangbao_nginx:/etc/nginx --name nginx002 nginx


[root@hadoop101 ~]# docker volume ls
DRIVER   VOLUME NAME
local     511511317ef0256d2d1570104e11a6ce897ba387267fbeec0192326dd6156067
local     cc9ff269b7ad67fab8866e7a446009207d2a3af24395003a8cb75f3981022eec
local     e5303012839aa87faef7719a0407f690a9da8af1fcf6dfc2ef51cf20a5aa441f
local     zhangbao_nginx
[root@hadoop101 ~]# docker volume inspect zhangbao_nginx
[
  {
       "CreatedAt": "2022-03-21T23:09:43+08:00",
       "Driver": "local",
       "Labels": null,
       "Mountpoint": "/var/lib/docker/volumes/zhangbao_nginx/_data",
       "Name": "zhangbao_nginx",
       "Options": null,
       "Scope": "local"
  }
]

上面就是匿名挂载和具名挂载了,我们经常用的还有一种就是指定路径

指定路径挂载

-v 宿主机路径:容器路径

docker run -d -v /etc/nginx:/etc/nginx --name nginx003 nginx

[root@hadoop101 ~]# docker inspect nginx003
"Mounts": [
          {
               "Type": "bind",
               "Source": "/etc/nginx",
               "Destination": "/etc/nginx",
               "Mode": "",
               "RW": true,
               "Propagation": "rprivate"
          }
      ],

Docker可视化

portainer

一个提供web页面的Docker管理工具,命令如下:

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

访问:http://192.168.88.71:8088

添加超管账号:admin / 88888888

然后选择本地的docker环境

连接之后,我们可以查看有7个镜像,然后点击进去

可以看到本地环境有7个镜像,13个容器,10个数据卷。

查看有哪7个镜像,可以看到有我们之前测试使用的镜像,包括我们自己提交的一个修改后的新镜像tomcat001:1.0

数据卷列表,包括我们创建的匿名数据卷,以及具名数据卷。

lazydocker

一个基于终端的Docker可视化查询工具。

github:https://github.com/jesseduffield/lazydocker

docker run --rm -it -v \
/var/run/docker.sock:/var/run/docker.sock \
-v /.config/lazydocker:/.config/jesseduffield/lazydocker \
lazyteam/lazydocker

鼠标和方向键都可控制查看信息框,在整个屏幕底部也有提示

鼠标和方向键演示

每次查看都需要很长的命令,我们可以简化下

echo "alias lzd='docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -v /.config/lazydocker:/.config/jesseduffield/lazydocker lazyteam/lazydocker'" >> ~/.zshrc

更多请在某公号平台搜索:选手一号位,本文编号:2002,回复即可获取。

Docker提交镜像-数据卷-可视化的更多相关文章

  1. docker学习5--docker数据卷(volume)

    https://blog.csdn.net/dream_broken/article/details/52314993 1.什么是数据卷volume 为了了解什么是Docker Volume,首先我们 ...

  2. Docker容器的数据卷(data volume),数据卷容器,数据卷的备份和还原。

    Docker容器的数据卷(data volume),数据卷容器,数据卷的备份和还原. 数据卷就是数据(一个文件或者文件夹). Docker的理念之一是将应用与其运行的环境打包,docker容器的生命周 ...

  3. docker仓库及数据卷

    docker help rmi, 删除本地镜像 docker run -it --name=centos centos:latest /bin/sh  --name的选项可以方便我们以后引用此imag ...

  4. Docker 容器的数据卷

    数据卷的特点: 1. 数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中 2. 数据卷可以在容器之间共享和重用 3. 可以对数据卷里的内容直接进行修改 ...

  5. window7下docker toolbox 启用数据卷报错: Error response from daemon: invalid mode:

    场景:希望把d:\dockerShare文件夹作为数据卷 ,和docker中的centos镜像生成的容器关联. 原来的命令: docker run -d -it --name=edc-centos7 ...

  6. 《Docekr入门学习篇》——Docker网络及数据卷

    Docker网络设置 默认情况下docker会创建一个桥接网卡[docker 0],docker有两种映射方式,一种是随机映射,一种是指定映射. 提示:生产场景一般不使用随机映射,但是随机映射的好处是 ...

  7. Docker系列八: 数据卷

    什么是数据卷 生成环境中使用docker的过程中,往往需要对数据进行持久化,或者需要多个容器之间进行数据共享,这个就涉及到了容器数据管理 容器中管理数据主要有两种方式: 数据卷:容器内数据之间映射到本 ...

  8. docker基础_数据卷

    docker数据卷 为什么要使用数据卷 如果数据都在容器中,那么容器一旦删除,数据就会丢失!docker容器需要将产生的数据同步到本地.容器与容器之间也需要有一个数据共享的技术 将某些文件共享.这就是 ...

  9. Docker容器的数据卷

    一.数据卷概念 1.数据卷是宿主机中的一个目录或文件 2.当容器目录和数据卷目录绑定后,对方的修改会立即同步 3.一个数据卷可以被多个容器同时挂载 4.一个容器也可以挂载多个数据卷 简单理解:有点类似 ...

随机推荐

  1. code-server服务端开发利器,再也不用vim装逼了!!!

    一直有个需求,就是万不得已在服务修改代码的时候能有个好的工具,至少比vim要强吧!虽然vim也还行,但是如果比vscode那一定是差了点!这个微软洗心革面的新工具着实不错!从刚开始的鄙视到真香我用了不 ...

  2. ESXI 7.0.0 U2 部署

    文章目录 什么是ESXI? ESXi 的优势 功能特性 部署ESXI 创建虚拟机 开始安装 打开浏览器输入ip进行管理 什么是ESXI? ESXI官网:https://www.vmware.com/c ...

  3. 《深度探索C++对象模型》第二章 | 构造函数语意学

    默认构造函数的构建操作 默认构造函数在需要的时候被编译器合成出来.这里"在需要的时候"指的是编译器需要的时候. 带有默认构造函数的成员对象 如果一个类没有任何构造函数,但是它包含一 ...

  4. PostgreSQL VACUUM 之深入浅出 (二)

    AUTOVACUUM AUTOVACUUM 简介 PostgreSQL 提供了 AUTOVACUUM 的机制. autovacuum 不仅会自动进行 VACUUM,也会自动进行 ANALYZE,以分析 ...

  5. oracle数据库表导出

    寻找一个测试table,清空,将需要导出的表导入表中的任意一列,写导出语句,导出. EXPDP USERID='user/account@orcl11 as sysdba' schemas=temp ...

  6. 『德不孤』Pytest框架 — 5、Pytest失败重试

    Pytest失败重试就是,在执行一次测试脚本时,如果一个测试用例执行结果失败了,则重新执行该测试用例. 前提: Pytest测试框架失败重试需要下载pytest-rerunfailures插件. 安装 ...

  7. HttpClient的使用(get、post请求)

    添加pom依赖 <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <d ...

  8. (二)scrapy 中如何自定义 pipeline 下载图片

    这里以一个很简单的小爬虫为例,爬取 壹心理 网站的阅读页面第一页的所有文章及其对应的图片,文章页面如下: 创建项目 首先新建一个 scrapy 项目,安装好相关依赖(步骤可参考:scrapy 安装及新 ...

  9. linux系统挂载磁盘

    linux系统挂载磁盘 ## 将硬盘挂载到/mnt/disk1下 # 检查磁盘状态,确认分区 fdisk -l # 格式化磁盘(分区) mkfs.ext4 /dev/sda #根据机器上的命名 以sd ...

  10. 给页面添加Canvas鼠标光标星星跟随动画特效

    素材来源:https://www.lanrenzhijia.com/others/5024.html 简单说下我自己的步骤: 把<script type="text/javascrip ...