• docker基础



    友情提醒:

    先看文章目录,大致了解文章知识点结构,点击文章目录可直接跳转到文章指定位置。有用记得关注

    第一章、快速了解Docker

    1.1)先了解虚拟化和虚拟机

    虚拟化是一种资源管理技术,应用场景:

    ①虚拟机通过虚拟化技术可以创建虚拟机。指通过软件模拟的运行在一个完全隔离环境中的完整计算机系统。一台物理服务器虚拟化成多个虚拟机,每个虚拟机都可以运行一个操作系统和应用,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量,每个虚拟机都独占一定的硬件资源,无法实现资源的动态调整。

    ②云服务器也使用了虚拟化技术,将物理服务器的计算资源虚拟化成多个独立的虚拟资源。每个云服务器实例都可以运行一个操作系统和应用,云服务器采用弹性可伸缩的计算资源,用户可以根据需求调整CPU、内存和存储等资源这是虚拟机做不到的。

    ③Docker也运用了虚拟化技术:属于虚拟化技术中的操作系统层轻量级虚拟化技术。Docker是应用容器引擎让开发者可以打包他们的应用及依赖环境到一个可移植的容器中,然后可以将这个容器快速部署开发、测试或生产环境中。
    因此,虚拟化技术是一个更广泛的概念,而Docker是虚拟化技术中的一个具体实现。

    docke和虚拟机相比的优势
    1、资源消耗:Docker容器需要的资源更少,共享宿主机的操作系统,只需极少资源。

    2、启动速度:Docker容器启动速度更快,通常在数毫秒内即可完成。

    3、隔离性:Docker隔离性比虚拟机低但资源利用更加高效了,通过容器技术提供了一定程度的隔离,但仍共享同一个操作系统。

    4、可移植性:Docker容器可移植性更高,开发人员可以轻松地在本地和生产环境之间迁移应用程序。

    5、管理复杂性:Docker通过简化容器管理,降低了复杂性。

    1.2)Docker是什么

    先了解三个概念:
    ①Docker镜像:
    镜像是Docker运行容器的前提,使用镜像来构建容器,Docker镜像是一种轻量级的、可执行的独立软件包,包含了运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件等等必需的资源。镜像使得应用程序的部署和管理变得更加简单、高效和可靠。

    我们可以自己Dockerfile构建镜像,构建完成后,可以通过Docker push命令将其推送到Docker仓库中。其他用户则可以通过Docker pull命令从仓库中拉取镜像。

    ②Docker仓库:
    仓库是存放镜像的场所,Docker提供了注册服务器(Registry)来管理仓库,一个注册服务器上可以存在多个仓库,而每个仓库下可以有多个镜像。
    仓库分为公有仓库和私有仓库:

    公有仓库:公开给用户使用的,用户可以在其中上传和下载镜像,比如Docker Hub;

    私有仓库:私有仓库则是用户自行搭建的,仅供自己或指定用户使用。

    ③Docker容器:
    应用程序及其依赖项被打包成一个镜像,使用镜像来构建容器,容器是镜像的具体实例,容器与镜像的关系类似于面向对象编程中的对象与类。让应用程序及其依赖项运行在一个隔离的环境中,被称为容器。这个隔离的环境类似于一个轻量级的沙箱,每个容器都有自己的文件系统、进程、网络等,与宿主机是隔离的。

    ④Docker客户端
    Docker是客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具Docker以及一整套RESTful API。你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。

    1.3)疑问的提出

    这里是我学习过程中产生的几个疑问:
    ①Docker运行在哪里?为啥要使用Docker????
    答:操作系统上,用docker是因为方便

    ②Docker如何安装?
    答:后面有说

    ③如何创建/运行容器,容器运行在哪里
    创建和运行容器后面有说,运行位置的话:默认情况下,容器将运行在宿主机的内核中,与宿主机共享操作系统内核。

    ④Docker的常用命令和含义是什么?
    后面有说

    ⑤Docker容器运行起来了,怎么访问这些容器

    ⑥我如果打包了也给项目,可以直接在Docker中运行吗?

    好,那么好,现在开始带着疑问学习,等学完看看这些疑问解决了没,如果解决了就把这段删了

    第二章、安装Docker

    2.1)为什么使用Docker

    最大的优势是快速部署,迁移简单,管理方便。
    举例来说:
    比如我写了一个博客系统,为了让这个系统正常运行需要各种各样的外部条件支持,
    比如:JDK环境,数据库,外部软件、中间件等等各种开源软件,还要再配置相应配置文件。这些只是安装一次就已经很烦了。如果要多次安装,不仅繁琐复杂而且容易出错。

    但是有了Docker,只需要根据部署步骤编写一份Dockerfile文件,构建并发布镜像,以后只需要使用镜像就可以再任意操作系统直接部署运行。其他还有一些优势如启动快,消耗资源少等。

    2.2)安装Docker

    ①Docker在哪里安装?
    Docker是安装在操作系统上的

    1、在Windows系统,Docker安装目录通常在C:\Program Files\Docker
    2、在CentOS系统,Docker安装目录为/usr/libexec/Docker
    3、在Ubuntu系统,Docker安装目录为/usr/bin/Docker
    4、在Mac系统,Docker安装目录通常在/usr/local/bin/
    
    • 1
    • 2
    • 3
    • 4

    操作系统可以安装在哪里?

    1、自己实体电脑上,安装win10操作系统
    2、虚拟机上,安装LinuxCentOS操作系统
    3、云服务器上,安装Linux操作系统
    
    • 1
    • 2
    • 3

    所以先在自己电脑安装虚拟机,接着在虚拟机安装Linux操作系统
    这一步写在这篇文章了:VMware虚拟机官网下载安装,虚拟机中安装Linux系统CentOS7(图文详解)

    ②在Linux操作系统里安装Docker
    1、先卸载干净之前安装Docker残余的文件,如果以前没有安装过可以忽略,卸载命令:

    sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    提示没有需要卸载的包
    在这里插入图片描述
    2、安装需要的一些系统工具包,这个工具包它提供了yum-config-manager实用程序,通过这个程序我们可以设置镜像仓库。命令:

    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    
    • 1

    在这里插入图片描述
    安装完成
    在这里插入图片描述
    3、设置稳定的仓库,国外的比较慢然后还容易断开,一般我们都选择阿里的地址。命令:

    sudo yum-config-manager \
        --add-repo \
        https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    • 1
    • 2
    • 3

    应该是成功了
    在这里插入图片描述
    4、更新 yum 缓存:命令:

    sudo yum makecache fast
    
    • 1

    这一步不知道干啥的,我照做了

    5、安装Docker引擎( Docker Engine-Community),containerd,Docker Compose三个东西。命令:

    sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
    • 1

    在这里插入图片描述
    让下载文件,输入y,选择是
    在这里插入图片描述
    提示接受 GPG 密钥,选是。选y
    在这里插入图片描述
    安装完成了
    在这里插入图片描述

    2.3)启动/停止/重启Docker

    启动/停止/重启Docker命令:
    启动docker:systemctl start docker
    停止docker:systemctl stop docker
    重启docker:systemctl restart docker
    查看docker状态:systemctl status docker
    开机机启动:systemctl enable docker
    
    • 1
    • 2
    • 3
    • 4
    • 5

    启动后输入以下命令,确定是否能够运行 hello-world 镜像

    运行hello-world镜像,命令:
    sudo docker run hello-world
    
    • 1

    运行成功得到下面的反馈,说明Docker Engine-Community 安装成功。
    在这里插入图片描述

    查看安装版本命令:
    $ docker version
    # 或者
    $ docker info
    
    • 1
    • 2
    • 3

    Docker用户组存在,但里头不包含用户,所以我们每次都要sudo命令来运行Docker命令,不想每次开头都加入sudu,可以把用户加入 Docker 用户组。

    sudo usermod -aG docker $USER
    
    • 1

    现在我们可以直接docker开头了

    docker run hello-world
    
    • 1

    2.4)配置加速器

    输入以下命令编辑文件,如果该文件不存在就手动创建

    vi /etc/docker/daemon.json
    
    • 1

    在文件中输入以下配置后保存退出

    {
      "registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"]
     }
    
    • 1
    • 2
    • 3

    如图:
    在这里插入图片描述
    使配置文件生效,命令:

    systemctl daemon-reload
    
    • 1

    重启docker

    systemctl restart docker
    
    • 1

    第三章、操作Docker

    3.1)镜像相关的基本命令

    列出镜像,命令:
    docker images
    
    • 1

    在这里插入图片描述
    这里只有一个hello-world镜像,字段解释如下:
    REPOSITORY 列显示了镜像的仓库名和镜像名的组合

    REPOSITORY:镜像所在的仓库名称,Docker 镜像名称通常在 "REPOSITORY" 列中显示
    TAG:镜像标签
    IMAGE ID:镜像唯一ID
    CREATED:镜像的创建日期(不是获取该镜像的日期)
    SIZE:镜像大小
    
    • 1
    • 2
    • 3
    • 4
    • 5
    搜索网络中的镜像,命令:
    #docker search 镜像名称
    #例如:
    docker search redis
    
    • 1
    • 2
    • 3
    从Docker Hub下载镜像命令:

    下载个zookeeper试试

    docker pull zookeeper
    
    • 1

    因为之前配置过加速器,所以很快就下好了
    在这里插入图片描述

    根据IMAGE ID删除指定镜像,命令:
    #docker rmi 镜像ID
    #例如
    docker rmi d2c94e258dcb
    
    • 1
    • 2
    • 3

    报错:镜像正被停止的容器使用

    Error response from daemon: conflict: unable to delete d2c94e258dcb (must be forced) - image is being used by stopped container 584d85e88b4b
    
    
    • 1
    • 2

    所以我们得把容器删了,请看下一章节

    3.2)容器相关的基本命令

    运行镜像创建容器

    分为两种交互式和守护式。交互式了解就好因为一退出容器,容器就关了

    交互式创建:
    		docker run -it --name=mycentos1 centos /bin/bash
    -i:表示运行容器 
    -t:表示容器启动后会进入其命令行
    --name: 给容器命名
    centos:镜像名称
    /bin/bash  docker后台必须运行一个进程,否则容器就会退出,在这里表示启动容器后启
    动bash.bash是 Bourne-Again SHell 的缩写,shell是命令解释器的意思shell中可以直接调用Linux命令
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    守护式创建容器,命令
    docker run -di --name=mycentos2 centos
    
    • 1
    进入守护式容器,命令
    docker exec -it mycentos2 /bin/bash
    
    • 1
    退出容器,命令
    exit
    
    • 1
    启动容器命令
    docker start mycentos2
    
    • 1
    停止容器命令
    docker stop mycentos2
    
    • 1
    查看容器,命令:
    查看正在运行容器:docker ps
    查看所有容器:docker ps –a
    查看最后运行的容器:docker ps -l
    查看停止的容器:docker ps -f status=exited
    
    • 1
    • 2
    • 3
    • 4
    删除容器,命令

    不过尽量别把所有容器删了

    删除指定容器:docker rm 容器id
    删除所有容器:docker rm `docker ps -a -q`
    
    • 1
    • 2

    3.3)访问容器:

    3.3.1)外界访问容器

    直接使用宿主机ip地址和端口即可

    3.3.2)容器之间互相访问

    需要使用Docker为容器分配的IP地址,和设置的容器端口

    查看容器IP地址,命令

    Docker为每个容器分配一个单独的IP地址

    docker inspect mycentos2
    
    • 1
    直接输出容器IP地址,命令
    docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos2
    
    • 1
    宿主机文件拷贝到容器中,命令
    docker cp /文件路径 容器名称:/路径/
    
    docker cp /usr/local/dock.txt mycentos2:/usr/local
    
    • 1
    • 2
    • 3
    容器文件拷贝到宿主机中,命令
    docker cp 容器名称:/容器中文件路径/  /放在宿主机上文件路径
    docker cp mycentos2:/usr/local/dock.txt  dock.txt
    
    • 1
    • 2
    docker中的容器之间是禁制相互拷贝文件的
    容器目录与宿主机目录映射,命令

    创建映射后,把文件添加目标宿主机下某个文件夹下,那么容器中映射的文件路径下也会存在该文件,同时要添加参数 –privileged=true 来解决挂载的目录没有权限的问题

    创建新容器时 添加-v参数 后边为 宿主机目录:容器目录

    
    docker run -di --name=新容器名称 -v /宿主机路径:/新容器路径 镜像名称 --privileged=true centos
    docker run -di --name=mycentos2 -v /usr/local/suzhu:/usr/local/rongqi --privileged=true centos
    
    
    • 1
    • 2
    • 3
    • 4
    容器目录与宿主机目录映射,命令

    第四章、使用Docker部署应用

    -p 代表端口映射,格式为 宿主机映射端口:容器运行端口
    -e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码

    4.1)部署Tomcat

    ①首先使用搜索命令,查询tomcat镜像,找到点赞数最多的

    docker search tomcat
    
    • 1

    在这里插入图片描述
    ②使用pull命令获取tomcat镜像,同时指定版本和 jdk版本

    docker pull tomcat:8.0.52-jre8
    
    • 1

    ③创建Tomcat容器
    -di创建容器的同时使用-v映射路径,-p分配端口号,--privileged解决权限问题

    docker run -di --name=tomcat -p 9000:8080 -v /usr/local/han:/usr/local/tomcat/webapps --privileged=true tomcat:8.0.52-jre8
    
    • 1

    默认的tomcat容器创建后,会在容器的/usr/local/下存在一个tomcat文件夹,这个就是tomcat,使用docker exec -it tomcat /bin/bash命令进入tomcat容器,使用ls命令查看。
    在这里插入图片描述
    ④试一下映射路径是否有效
    在容器的/usr/local/tomcat/webapps里创建一个test.text文件,再退出容器看宿主机是否有相同文件产生
    在这里插入图片描述
    部署项目,就可以把项目war包解压以后放在当前宿主机路径/usr/local/han里会自动映射到tomcat容器下/usr/local/tomcat/webapps目录,我们访问刚刚设置的9000端口就能访问了
    在这里插入图片描述

    注意:容器之间互相访问,要注意ip地址

    我们把项目放在tomcat容器下,项目本身要访问另一个mysql的容器,我们需要在项目中修改项目访问路径的url地址:
    jdbc:mysql://xxx.xxx.xxx:3306/xxx
    这个xxx.xxx.xxx 的ip地址要使用容器的ip地址,而不是centos7宿主机的网络ip地址。
    命令查询另外一个容器(mysal)的IP地址:

    docker inspect mysql
    
    • 1

    4.2)部署MySQL

    ①拉取MySQL镜像

    docker pull mysql
    
    • 1

    ②创建MySQL容器
    命令解释:
    -p 代表端口映射。宿主机自定义端口:容器mysql运行端口
    -e 代表添加环境变量
    MYSQL_ROOT_PASSWORD=密码 是root用户的登陆密码

    docker run -di --name mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
    
    • 1

    ③进入MySQL容器

    docker exec -it mysql /bin/bash
    
    • 1

    ④在容器中登录MySQL服务
    也可以使用windows上数据库客户端navicat连接。

    mysql -uroot -p
    
    • 1

    ⑤为容器安装vim编辑器
    更新资源

    apt-get update
    
    • 1

    安装vim,安装失败的话。重新更新资源

    apt-get install vim
    
    • 1

    ⑥修改MySQL配置文件
    修改mysql容器里的配置文件etc/mysql/conf.d/mysql.cnf这个文件

    vi mysql.cnf
    
    • 1
    在此文件中添加如下字段
    在 [mysqld] 标签下加上两行
    default-character-set = utf8
    character_set_server = utf8
    
    在 [mysql] 标签下加上一行
    default-character-set = utf8
    
    在 [mysql.server]标签下加上一行
    default-character-set = utf8
    
    在 [mysqld_safe]标签下加上一行
    default-character-set = utf8
    
    在 [client]标签下加上一行
    default-character-set = utf8
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    如图:
    在这里插入图片描述
    ⑦检查字符集编码
    修改mysql容器里的配置文件etc/mysql/conf.d/mysql.cnf这个文件

    mysql>SHOW VARIABLES LIKE 'character_set_%';
    
    • 1

    在这里插入图片描述

    mysql>SHOW VARIABLES LIKE 'collation_%';
    
    • 1

    在这里插入图片描述

    4.3)Redis部署

    ①拉取Redis镜像
    docker pull redis

    ②创建Redis容器
    docker run -di --name=redis -p 6379:6379 redis

    ③容器中进入redis服务
    redis-cli

    4.4)Nginx部署

    ①拉取Nginx镜像

    docker pull nginx
    
    • 1

    ②创建nginx容器

    docker run -di --name=nginx -p 80:80 nginx /bin/bash
    
    • 1

    ③进入容器

    docker exec -it nginx /bin/bash
    
    • 1

    ④进入/usr/sbin启动nginx

    ./nginx
    
    • 1

    ⑤查看是否成功
    在这里插入图片描述
    ⑥配置文件
    在/etc/nginx/目录下的nginx.conf ,配置nginx代理tomcat容器
    注意:访问tomcat服务地址用容器的内网地址 172.17.0.3地址,端口号使用tomcat本身端口8080(容器访问容器端口即可)
    在这里插入图片描述

    第五章、备份

    5.1)容器备份为镜像

    ①使用commit命令,将容器备份为镜像。

    #nginx是容器名称,newnginx是新的镜像名称
    docker commit nginx newnginx
    
    • 1
    • 2

    5.2)镜像压缩备份

    ①将镜像打包成.tar文件进行备份

    docker save -o mynginx.tar mynginx
    
    • 1

    ②通过.tar备份文件恢复镜像

    docker load -i mynginx.tar
    
    • 1
  • 相关阅读:
    8.云原生-Kubesphere3.3.0使用DevOps部署RuoYi 微服务版(下篇)
    字符设备驱动_1:基本概念和数据结构
    C#异步和多线程
    【Rust】包和模块,文档注释,Rust格式化输出
    python日期处理
    PHP利用jsonp跨域实现
    神舟十四号航天员成功出舱
    【音乐合成】基于FPGA的音乐合成系统verilog实现
    稀土铕掺杂氧化铝发光微球/稀土元素荧光微球偶联抗体冻干粉的应用制备
    jar包的各种启动方式总结
  • 原文地址:https://blog.csdn.net/baomingshu/article/details/137342969