Docker基本操作

一、镜像操作

1.镜像名称

镜像的名称组成

  • 镜名称一般分两部分组成[repository]:[tag]。
  • 在没有指定tag时默认是latest代表最新版本的镜像

如mysql5.7
mysql就是repository5.7就是tag合一起就是镜像名称代表5.7版本的MySQL镜像。

2.镜像命令

常见的镜像操作命令如图

在这里插入图片描述

1拉取、查看镜像

没有指定tag版本默认拉取latest最新版本

docker pull nginx    # 拉取nginx镜像
docker iamges        # 查看镜像

2保存、导入镜像

1保存

docker save -o [保存的目标文件名称] [镜像名称]
docker save -o nginx.tar nginx:latest

2导入

先删除本地的nginx镜像

docker rmi nginx:latest

然后运行命令加载本地文件

docker load -i nginx.tar

二、容器操作

1.容器相关命令

容器操作的命令如图

在这里插入图片描述

容器保护三个状态

  • 运行进程正常运行
  • 暂停进程暂停CPU不再运行并不释放内存
  • 停止进程终止回收进程占用的内存、CPU等资源

其中

  • docker run创建并运行一个容器处于运行状态

  • docker pause让一个运行的容器暂停

  • docker unpause让一个容器从暂停状态恢复运行

  • docker stop停止一个运行的容器

  • docker start让一个停止的容器再次运行

  • docker rm删除一个容器

2.创建并运行一个容器

创建并运行nginx容器的命令

docker run --name containerName -p 80:80 -d nginx

命令解读

  • docker run 创建并运行一个容器
  • –name : 给容器起一个名字比如叫做mn
  • -p 将宿主机端口与容器端口映射冒号左侧是宿主机端口右侧是容器端口
  • -d后台运行容器
  • nginx镜像名称例如nginx

这里的-p参数是将容器端口映射到宿主机端口。

默认情况下容器是隔离环境我们直接访问宿主机的80端口肯定访问不到容器中的nginx。

现在将容器的80与宿主机的80关联起来当我们访问宿主机的80端口时就会被映射到容器的80这样就能访问到nginx了

3.进入容器修改文件

需求进入Nginx容器修改HTML文件内容添加“新年快乐”

提示进入容器要用到docker exec命令。

步骤

1进入容器。进入我们刚刚创建的nginx容器的命令为

docker exec -it mn bash

命令解读

  • docker exec 进入容器内部执行一个命令
  • -it : 给当前进入的容器创建一个标准输入、输出终端允许我们与容器交互
  • mn 要进入的容器的名称
  • bash进入容器后执行的命令bash是一个linux终端交互命令

2进入nginx的HTML所在目录 /usr/share/nginx/html

容器内部会模拟一个独立的Linux文件系统看起来如同一个linux服务器一样。
nginx的环境、配置、运行文件全部都在这个文件系统中包括我们要修改的html文件。
查看DockerHub网站中的nginx页面可以知道nginx的html目录位置在/usr/share/nginx/html

我们执行命令进入该目录

cd /usr/share/nginx/html

该目录下有index.html文件
3修改index.html的内容

容器内没有vi命令无法直接修改我们用下面的命令来修改

sed -i -e 's#Welcome to nginx#新年快乐#g' -e 's#<head>#<head><meta charset="utf-8">#g' index.html

在浏览器访问自己的虚拟机地址即可看到结果。

4.小结

docker run命令的常见参数有哪些

  • –name指定容器名称
  • -p指定端口映射
  • -d让容器后台运行

查看容器日志的命令

  • docker logs
  • 添加 -f 参数可以持续查看日志

查看容器状态

  • docker ps
  • docker ps -a 查看所有容器包括已经停止的

三、数据卷容器数据管理

在上面的nginx案例中修改nginx的html页面时需要进入nginx内部。并且因为没有编辑器修改文件也很麻烦。

这就是因为容器与数据容器内文件耦合带来的后果。

在这里插入图片描述

要解决这个问题必须将数据与容器解耦这就要用到数据卷了。

1.什么是数据卷

**数据卷volume**是一个虚拟目录指向宿主机文件系统中的某个目录。

在这里插入图片描述

一旦完成数据卷挂载对容器的一切操作都会作用在数据卷对应的宿主机目录了。

这样我们操作宿主机的/var/lib/docker/volumes/html目录就等于操作容器内的/usr/share/nginx/html目录了

2.数据集操作命令

数据卷操作的基本语法如下

docker volume [COMMAND]

docker volume命令是数据卷操作根据命令后跟随的command来确定下一步的操作

  • create 创建一个volume
  • inspect 显示一个或多个volume的信息
  • ls 列出所有的volume
  • prune 删除未使用的volume
  • rm 删除一个或多个指定的volume

3.创建和查看数据卷

需求创建一个数据卷并查看数据卷在宿主机的目录位置

① 创建数据卷

docker volume create html

② 查看所有数据

docker volume ls

③ 查看数据卷详细信息卷

docker volume inspect html

我们创建的html这个数据卷关联的宿主机目录为/var/lib/docker/volumes/html/_data目录。

小结

数据卷的作用

  • 将容器与数据分离解耦合方便操作容器内数据保证数据安全

数据卷操作

  • docker volume create创建数据卷
  • docker volume ls查看所有数据卷
  • docker volume inspect查看数据卷详细信息包括关联的宿主机目录位置
  • docker volume rm删除指定数据卷
  • docker volume prune删除所有未使用的数据卷

4.挂载数据卷

我们在创建容器时可以通过 -v 参数来挂载一个数据卷到某个容器内目录命令格式如下

docker run \
  --name mn \
  -v html:/root/html \
  -p 8080:80
  nginx \

这里的-v就是挂载数据卷的命令

  • -v html:/root/htm 把html数据卷挂载到容器内的/root/html这个目录中

5.案例-给nginx挂载数据卷

需求创建一个nginx容器修改容器内的html目录内的index.html内容

分析上个案例中我们进入nginx容器内部已经知道nginx的html目录所在位置/usr/share/nginx/html 我们需要把这个目录挂载到html这个数据卷上方便操作其中的内容。

提示运行容器时使用 -v 参数挂载数据卷

步骤

① 创建容器并挂载数据卷到容器内的HTML目录

docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx

② 进入html数据卷所在位置并修改HTML内容

# 查看html数据卷的位置
docker volume inspect html
# 进入该目录
cd /var/lib/docker/volumes/html/_data
# 修改文件
vi index.html

6.小结

docker run的命令中通过 -v 参数挂载文件或目录到容器中

  • -v volume名称:容器内目录
  • -v 宿主机文件:容器内文
  • -v 宿主机目录:容器内目录

数据卷挂载与目录直接挂载的

  • 数据卷挂载耦合度低由docker来管理目录但是目录较深不好找
  • 目录挂载耦合度高需要我们自己管理目录不过目录容易寻找查看
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Docker