1.docker介绍:

        Docker是一种虚拟化技术,它允许你在一台机器上运行多个应用程序,每个应用程序都运行在一个独立的虚拟器中,互相之间不会干扰。这些容器使用了操作系统级别的虚拟化技术,课可以在同一物理机器上运行多个应用程序,同时每个容器又拥有自己独立的文件系统和资源管理。Docker可以让你快速地创建、部署、和复制和移动应用程序,应为它能够在不同的环境中保持应用程序的一致性和可移植性,通过使用Docker,你可以更加轻松的构建、打包和发布运行应用程序。

2.docker的优点

        启动速度快(秒级),由于祛除了管理程序的开销,docker容器拥有很高的性能,同一台宿主机可以运行更多的容器,有效的利用了资源

        能够开发,测试和部署提供一致性的环境,避免了在开发或者测试时一切正常,但在生产环境中却不能运行的问题

        鼓励面向服务架构,docker推荐的那个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型

3.docker 的用途

        提供一次性的环境,比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境

        提供弹性的云服务,应为docker容器可以随开随关,很适合动态扩容和缩容

        组建微服务架构,通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构

4.doker与虚拟机器的区别

        vm(vmware)在宿主机器,宿主机器操作系统的基础上创建虚拟层。虚拟化的操作系统,虚拟化的仓库,然后再安装应用

        docker 在宿主机器的操作系统上创建docker引擎,直接通过宿主机的操作系统调用硬件资源,而不是虚拟化操作系统和硬件资源,所以占用资源更少,性能更高

二、docker的三大核心组件

        1.docker 的三大要素

                镜像:docker镜像是一个特殊的文件系统,除了提供容器运行时所有需的程序、库、资源、配置等文件外、还包含了一些为运行时准备的配置参数,镜像不包含任何动态数据,其内容在构建之后也不会改变,镜像可用来创建dockerd容器,用户可以使用设备上已有的镜像来安装多个相同的docker容器

                容器:镜像创建的运行实例,docker利用容器来运行应用,每个容器都是相互隔离的,保证安全的平台,我们可以把容器看做是一个轻量级的linux运行环境。

                镜像仓库:集中存放镜像文件的地方,用户创建玩镜像后,可以将其上传到公共仓库或私有仓库,需要在另一台主机上使用该镜像时,只需要重仓库上下载即可

docker容器的运行逻辑,docker使用客户端、服务端(c/s)架构模式,docker守护进程(docker daemon) 作为server端接受docker客户端的请求,并负责创建,运行分发docker容器,docker守护进程一般在docker主机后台运行,用户使用docker客户端直接跟docker守护进程信息交互

        2 .docker运行过程

        docker 客户端,用户和docker守护进程(docker daemon)建立通信的客户端,docker客户端只需要像docker服务器或者守护进程发出请求(docker 构建、docker拉取和docker启动等指令),服务器或者守护进程将完成所有工作并且换回结果

        docker 主机:一个物理机或者虚拟的机器用户执行docker 守护进程和容器

        Docker守护进程:接收并处理Docker客户端发送的请求,监测Docker API的请求和管理Docker对 象,比如镜像、容器、网络和数据卷。

注意:在 Docker 中,Docker 客户端和 Docker 主机可以在不同的机器上,甚至可以通过网络远 程连接。这意味着你可以在本地的机器上安装 Docker 客户端,然后通过 Docker 客户端与远程的 Docker 主机进行通信和操作,而 Docker 主机可以部署在不同的机器上,例如云服务器、虚拟 机、物理机等。 这种分离的架构使得 Docker 可以实现分布式部署和管理,方便在不同的环境中管理和运行容器化 应用程序。例如,你可以在本地的开发机器上使用 Docker 客户端构建和测试容器镜像,然后将镜 像推送到远程的 Docker 主机上进行部署和运行

三、安装

安装docker时需要一些基本的前提条件: 1. 运行64位cpu架构的机器(x86_64, amd64),不支持32位机器 2. 运行linux3.8或更高的内核(可以使用uname -a 命令查看系统内核) 3. 内核必须支持一种合适的存储驱动:Device Messager,AUFS,vfs等,默认为Device Messager。 4. 内核支持cgroup和命名空间 注:cgroups,其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限 制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)

1. 卸载旧版本的 Docker(如果有)

sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

2.安装docker依赖包

首先,需要设置 Docker CE 的仓库。可以使用以下命令:

sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

注意:Could not fetch/save url https://download.docker.com/linux/centos/docker-ce.repo to file /etc/yum.repos.d/docker-ce.repo: [Errno 14] problem making ssl connection

这是因为国内访问不到docker官方镜像的缘故,通过阿里源进行设置

sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.安装 Docker CE

使用以下命令安装 Docker CE:

sudo yum install -y docker-ce

注意:如果安装了多个docker仓库,使用 yum install 或者 yum update 命令时后面不跟版本信息的 话,将始终安装最高版本的docker! 安装指定版本的docker CE,需要指定完整的包名称,例如安装仓库中的这个版本 18.03.0.ce1.el7.centos ,其命令为

sudo yum install -y docker-ce-18.03.0.ce

4.操作 Docker

        1.启动docker服务

sudo systemctl start docker

        2.查看docker服务状态

sudo systemctl status docker

        3.停止docker服务

sudo systemctl stop docker

5.移除docker

        1.删除docker程序包:

sudo yum remove docker -ce docker -ce-cli containerd.io

注意:

        docker-ce:docker社区版,即docker的核心引擎和cli工具

        docker-ce-cli:docker的cli工具

        containerd.io :docker容器运行时,用于管理容器生命周期的核心组件

        2.删除docker镜像,容器的数据卷

sudo rm -rf /var/lib/docker

        3.删除docker配置文件和日志

sudo rm -rf /etc/docker
sudo rm -rf /var/log/docker

完成以上操作后,docker就被完全卸载了

四、常用操作

        1.镜像相关的操作

docker images

        2.删除本地镜像

docker rmi 镜像名称:标签

eg: docker rmi tomcat:9.0

注意:docker rmi  = docker image rm,标签可以理解为指定版本,可有可无,根据实际情况而定,不写的话默认最新版本的镜像

      3.从仓库拉取镜像

        

docker pull 镜像名称:标签

eg:docker pull tomcat:8.0

        4.把本地镜像推送到仓库

docker push tomcat:9.0

注意:

        1.想要推送必须先登录到目标仓库

        2.镜像名称可以在docker images中查看,docker hub是docker 官方提供的共用镜像仓库,如果是第三方仓库也可以在指定仓库中搜索,如果是通过dockerfile构建的镜像,可以使用from 指定镜像名称,如果是docker compose,可以在compose文件中使用image来指定镜像名称

2.容器相关操作

        1.查看运行的容器

docker ps

        2.查看全部容器(包括正在运行的)

docker ps -a

参数
-a 查看全部,不跟参数时,只显示运行的容器

注意:不同的docker版本可能有不同的状态,上述状态是常见的状态

up :表示容器正在运行

exited : 表示容器已经停止运行,如果容器以正常方式退出,则状态exited,并且在容器退出后可以使用docker start  命令重启容器

created :表示容器一斤干杯创建,但是尚未启动

restarting : 表示容器正在重新启动

paused:表示容器当前处于暂停状态

dead :表示容器的进程已经死亡

3.启动容器

        1.参数启动方式

docker run -d 镜像名称

        参数: -d 表示容器后台运行

第一次启动之后就会生成容易id ,可以通过docker ps 查看

docker run --name my-redis-container -p 6379:6379 -d 镜像名称

参数:
    --name 表示启动后的容器名称
    -p 6379:6379 端口映射:前表示主机部分,:后表示容器部分
    redis 表示启动的镜像名称

2.默认启动方式

docker start 容器id

3.配置文件启动方式

docker -compose -f mariadb.yml up -d

参数

        -d 后台启动服务,如果没有 -d ,就是直接前台输出启动日志信息,ctrl+c后,服务就停了

        -f 指定yml文件

        up 创建和启动容器

version:'3.1'
services:
    #数据库服务名称
    mariadb
        #镜像名称
        image:mariadb:10.5.5
        container_name:"mariadb"
        #总是重启后启动
        restart:slways
        #设置访问账号密码
        environment:
            MYSQL_USER:"root"
            MYSQL_PASSWORD:"123456"
            TZ:"Asia/Shanghai"
        #端口映射
        ports:
            -"3306:3306"
        #挂载
        volumes:
        -/data/mysql:/var/lib/mysql
        -/var/log/mysql:/var/log/mysql
        -/etc/mysql:/etc/mysql

4.停止服务

        

docker stop 容器名

eg:docker stop 64028b3163

或者停止服务并删除容器

docker -compose -f mariadb.yml down

参数:
    -f 指定yml文件
    -down 停止和删除容器、网络、镜像、卷

5.重启服务

docker resatart 容器id

6.删除停止的容器

docker rm 容器id

7.强制删除运行的容器

docker rm -f 容器id

8查看服务日志

docker logs -f --tail=100 容器id 或者服务名

参数:
    -f 时实查看日志
    --tail = 100 显示最新的100行

9 . 进入容器

docker exec -it 容器id bash 


参数:
    exec 正在运行的容器中执行命令
    -it 开启交互模式终端
    Bash 模式
 退出:exit

10.修改镜像名称或者tag

docker tag tomcat:9.0 tomcat_new:9.0.0

相当于另存为一个镜像,名称和tag随便起,但是经常的id 是一样的

11.把镜像打成tar包

docker save -o tomcat.tar tomcat:9.0

参数:
    -o 写入文件

12.把镜像tar包恢复到本地

docker load -i tomcat.tar

参数:
     -i 从tar 归档文件中读取

13.复制容器内文件到本地目录下,也可以吧容器里目录下文件复制出来到本地

docker cp d2d5sdf2sf2ds :/etc/mysql/my.cnf /home/
09-26 10:39