【黑马课程】Docker 学习笔记

一、初识Docker

(一)什么是Docker

1.项目部署遇到的问题

在这里插入图片描述

2.Docker如何解决?

Docker如何解决依赖的兼容问题?
在这里插入图片描述
因为打包程序时,肯定是在同一个系统中打包的,那对于不同环境的操作系统,Dcoker如何解决?
首先看一下操作系统的结构:

在这里插入图片描述
在这里插入图片描述

那Dcoker如何解决不同系统环境的问题?
在这里插入图片描述

3.总结

在这里插入图片描述
在这里插入图片描述

(二)Docker和虚拟机的区别

在这里插入图片描述
在这里插入图片描述
虚拟机先启动一个操作系统,然后再操作系统之上再启动应用。

Docker直接启动应用。

总结来说,两者差异如下:

在这里插入图片描述

(三)Docker的镜像和容器

在这里插入图片描述
在这里插入图片描述

这样可以保证镜像文件不被污染,以供其他容器使用,那镜像文件如何做共享呢?

在这里插入图片描述

(四)Docker架构

在这里插入图片描述
在这里插入图片描述

(五)总结

在这里插入图片描述

dockerHub官方网站为:hub.docker.com

二、Docker的基本操作

(一)Centos安装

1、卸载旧版本

yum

2.安装docker

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.启动Dcoker

因为Docker需要用到各种端口,逐一修改防火墙太麻烦,所以在学习阶段直接关闭防火墙,命令如下:

在这里插入图片描述
还可以使用如下命令查看防火墙状态,可以看到,防火墙已经关闭

systemctl status firewalld

在这里插入图片描述
启动Docker,可以使用命令查看启动状态,也可以通过查看版本的方式,看docker是否启动成功

systemctl start docker  // 启动docker
systemctl status docker // 查看docker状态
docker -v // 查看docker版本

在这里插入图片描述

4.配置镜像加速器

在这里插入图片描述

(二)镜像操作

1.镜像名称

首先来看下镜像的名称组成:

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

在这里插入图片描述

2.镜像命令

在这里插入图片描述
进入帮助文档,使用如下命令:

docker --help   // 查看所有命令
docker images --help  // 查看镜像的相关命令
3.拉取和查看镜像示例
docker pull nginx  // 默认从官网拉取最新的镜像
docker images  // 查看拉取到的镜像,如查看images镜像

在这里插入图片描述

4.保存和导入镜像示例

(1)利用docker xx --help命令查看docker save和docker load的语法,例如,查看save命令用法,可以输入命令:

docker save --help

docker save -o [保存的目标文件名称] [镜像名称]

(2)导出镜像
运行命令:

docker save -o nginx.tar nginx:latest

结果如图:
在这里插入图片描述
(3)加载镜像
先删除本地的nginx镜像:

docker rmi nginx:latest

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

docker load -i nginx.tar

结果:
在这里插入图片描述

(三)容器操作

在这里插入图片描述

容器包括三个状态:

  • 运行:进程正常运行
  • 暂停:进程暂停,CPU不再运行,并不释放内存
  • 停止:进程终止,回收进程占用的内存、CPU等资源
1.常用命令
  • docker run:创建并运行一个容器,处于运行状态
  • docker pause:让一个运行的容器暂停
  • docker unpause:让一个容器从暂停状态恢复运行
  • docker stop:停止一个运行的容器
  • docker start:让一个停止的容器再次运行
  • docker rm:删除一个容器
2.案例① 创建运行一个Nginx容器

创建并运行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了:

docker logs  // 可以查看日志
docker logs -f  mn  // 可以进行日志追踪,其中 mn是容器名称
3.总结①

在这里插入图片描述

4.进入容器,修改文件

步骤

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

查看目录下文件:
在这里插入图片描述
3)修改index.html的内容

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

sed -i -e 's#Welcome to nginx#传智教育欢迎您#g' -e 's###g' index.html
5.总结②

在这里插入图片描述

(四)数据卷(容器数据管理)

在之前的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

结果:
在这里插入图片描述

4.小结①

数据卷的作用:

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

数据卷操作:

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

在这里插入图片描述

6.给Nginx挂载数据卷

步骤:

① 创建容器并挂载数据卷到容器内的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

在这里插入图片描述

7.给MySQL挂载本地目录【宿主机可以直接与容器挂载】

容器不仅仅可以挂载数据卷,也可以直接挂载到宿主机目录上。关联关系如下:

  • 带数据卷模式:宿主机目录 --> 数据卷 —> 容器内目录
  • 直接挂载模式:宿主机目录 —> 容器内目录
    在这里插入图片描述
    语法

目录挂载与数据卷挂载的语法是类似的:

  • -v [宿主机目录]:[容器内目录] 【原来是 数据卷目录:容器内目录】
  • -v [宿主机文件]:[容器内文件]

在这里插入图片描述

8.总结②

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

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

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

  • 数据卷挂载耦合度低,由docker来管理目录,但是目录较深,不好找
  • 目录挂载耦合度高,需要我们自己管理目录,不过目录容易寻找查看

在这里插入图片描述

三、自定义镜像

(一)镜像结构

在这里插入图片描述
在这里插入图片描述

为什么分层?方便复用,比如部署5.8等

(二)Dockerdile语法

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(三)总结

在这里插入图片描述

四、DockerCompose

(一)什么是DockerCompose

  • Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!
  • Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。
    在这里插入图片描述
    DockerCompose的详细语法参考官网:https:/docs.docker,com/compose/compose-file/

(二)DockerCompose部署微服务集群

在这里插入图片描述

五、Docker镜像仓库

镜像仓库(Docker Registry)有公共的和私有的两种形式:
●公共仓库:例如Docker官方的Docker Hub,国内也有一些云服务商提供类似于Docker Hub的公开服务,比如网易云镜像服务、Daocloud镜像服务、阿里云镜像服务等。
●除了使用公开仓库外,用户还可以在本地搭建私有Docker Registry。企业自己的镜像最好是采用私有Docker Registry:来实现。

搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现。
官网地址:https:/hub.docker.com//registry.

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

六、Docker命令总结

(一)基础命令

  1. 启动docker
systemctl start docker
  1. 关闭docker
systemctl stop docker
  1. 重启docker
systemctl restart docker
  1. 查看docker运行状态
systemctl status docker
  1. 查看docker版本号信息
docker version
docker info

6.docker帮助命令

docker --help

比如忘记了拉取命令需要带哪些参数,可以查看用上面的命令查看‘’

docker pull --help

(二)docker镜像命令

  1. 查看镜像列表
docker images
  1. 拉取镜像
    不加tag(版本号) 拉取的是docker仓库中 该镜像的最新版本latest 加:tag 则是拉取指定版本
docker pull 镜像名 
docker pull 镜像名:tag
  1. 运行镜像
docker run 镜像名
docker run 镜像名:Tag
  1. 删除镜像
    当前镜像没有被任何容器使用才可以删除
#删除一个
docker rmi -f 镜像名/镜像ID

#删除多个 其镜像ID或镜像用用空格隔开即可 
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID

#删除全部镜像  -a 意思为显示全部, -q 意思为只显示ID
docker rmi -f $(docker images -aq)
  1. 强制删除镜像
docker image rm 镜像名称/镜像ID

(三)docker容器命令

  1. 查看正在运行容器列表
docker ps
  1. 查看所有容器
docker ps -a
  1. 运行一个容器
# -it 表示 与容器进行交互式启动 -d 表示可后台运行容器 (守护式运行)  --name 给要运行的容器 起的名字  /bin/bash  交互路径
docker run -it -d --name 要取的别名 镜像名:Tag /bin/bash 

# 示例:
docker run -it -d --name redis001 redis:5.0.5 /bin/bash
  1. 查看容器日志
docker logs -f --tail=要查看末尾多少行 默认all 容器ID

部分docker命令的内容参考自以下链接:https://blog.csdn.net/leilei1366615/article/details/106267225

你可能感兴趣的:(Docker,docker,分布式,容器)