轻量化部署工具Docker:参数化启动容器与数据卷挂载的综合应用

docker run中的常见参数

以mysql安装为例子

docker run -d \
 --name mysql \
 -p 3306:3306 \
 -e TZ=Asia/Shanghai \
 -e MYSQL_ROOT_PASSWORD=123456 \
 mysql

-d 表示后台执行

–name 容器的名字

-p 宿主机和容器映射的端口

-e 环境变量的设置 此处设置了时区和密码

最下方的mysql指此镜像名字(官方名字)

一般此处的镜像名称结构是 Repository:TAG 镜像名+版本号

若像此处没有写上版本号 就默认是安装最新版本镜像的容器

docker操作镜像常见命令

轻量化部署工具Docker:参数化启动容器与数据卷挂载的综合应用_第1张图片

  • docker pull 将镜像从远端拉取到本地
  • docker push 与拉取对应的 将镜像从本地推送到远端

远端指的是dockerHub

  • docker images 查看所有的镜像

  • docker ps 查看所有的容器及其状态

  • docker build 构建自己的镜像 通过Dockerfile

  • docker save 保存镜像为本地文件

  • docker load 加载本地镜像

  • docker rmi 移除镜像

  • docker run 运行镜像 创建容器 如果本地找不到对应的镜像文件 会到远端去找

  • docker logs 查看docker日志

  • docker exec 运行docker容器

  • docker stop 停止(暂停)运行中的镜像

  • docker start 重新运行构建容器

docker支持类似断点续传的功能 当构建容器的过程中意外暂停了传输 可以通过docker start重新运行起这个过程 并可以通过docker ps来查看容器的安装状态

补充:

docker ps --format "table {{ID}\t{{.Image}r\t{{.Ports}}\t{{.Status}]\t{{.Names}}"

在查看容器状态的时候 自定义容器的格式

数据卷相关

docker容器具有多个特点,是一个在最大程度上最小化依赖和相关组件的单位。这一特点使docker更加的轻量化,提高操作的效率。但同时也带来了某些不便,因为在开发中,我们通常需要修改对应容器的配置。例如修改mysql的端口,在通常情况下,我们需要通过vim等编辑器进入配置文件的内部进行手动修改。但是在docker包装的linux环境中,由于最小化依赖的要求,我们通常不能通过vi进入文件内部编辑。

试使用docker exec + vi

[root@localhost ~]# docker exec -it nginx bash

root@6f6dd1f6932d:/# cd /usr/share/nginx/html

root@6f6dd1f6932d:/usr/share/nginx/html# ls
50x.html  index.html

root@6f6dd1f6932d:/usr/share/nginx/html# vi index.html
bash: vi: command not found

所以为了解决日常开发中的这一类需求 docker引出了数据卷挂载的概念。顾名思义,就是在宿主机的建立对应的目录及文件,映射到容器当中去

轻量化部署工具Docker:参数化启动容器与数据卷挂载的综合应用_第2张图片

宿主机和nginx中的对应目录是双向绑定的,当在宿主机的映射文件中做修改时,会同步到容器当中去。相反,在容器内部进行修改的时候,也会同步到宿主机的文件系统中去。

了解概念之后,学习如何操作数据卷

指令 作用
docker volume create 创建数据卷
docker volume ls 查看所有数据卷
docker volume rm 删除指定数据卷
docker volume inspect 查看某个数据卷
docker volume prune 清除数据卷

以下以nginx创建容器时手动挂载为例

nginx中存放静态资源的目录是/usr/share/nginx/html

确认挂载目录的写法是否正确

在执行docker run命令时,使用-v 本地目录:容器内目录可以完成本地目录挂载

本地目录必须以“”或"/"开头,如果直接以名称开头,会被识别为数据卷而非本地目录

  • -v mysql:var/ib/mysql 会被识别为一个数据卷叫mysql docker会默认存放到宿主机中数据卷的目录 如上nginx中的/var/lib/docker/volumes/html/_data
  • -v./mysql:Nar/Iib/mysql会被识别为当前目录下的mysql目录
  1. 创建容器并确定挂载的目录及其名字
[root@localhost ~]# docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html
c25c429f3e8ed1470bc27df6ffcdb41d224bfb19087ec66624e24d1c6f8c323d

创建容器并返回容器的id 可使用docker ps观察容器状态

  1. 查看数据卷
[root@localhost ~]# docker volume ls
DRIVER    VOLUME NAME
local     html
  1. 查看挂载的数据卷的详情
[root@localhost ~]# docker volume inspect html
[
    {
        "CreatedAt": "2024-02-25T17:00:17+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/html/_data",
        "Name": "html",
        "Options": null,
        "Scope": "local"
    }
]

MountPoint则是对应宿主机中的目录路径

可以在宿主机cd到对应的目录中

[root@localhost ~]# cd /var/lib/docker/volumes/html/_data

[root@localhost _data]# ls
50x.html  index.html

发现经典两文件 这时候可以通过宿主机上的编辑器对映射文件进行修改,或者是新增静态资源。操作完毕之后可以再次通过docker exec进入容器内部,会发现挂载目录下资源或文件已经修改完成

你可能感兴趣的:(docker,docker,容器,运维)