• Dcoker学习笔记(一)


    一、 初识Docker

    1.1 简介

    Docker是一个快速交付应用,运行应用的技术:

    Docker可以解决大型项目依赖关系复杂,不同组件依赖的兼容性问题

    • docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植的镜像
    • docker应用运行在容器中,使用沙箱机制,相互隔离

    Docker如何解决开发、测试、生产环境有差异的问题

    • docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行

    在这里插入图片描述

    1.2 虚拟机和docker的区别

    在这里插入图片描述

    docker和虚拟机的差异:

    • docker是一个系统进程;虚拟机是在操作系统中的操作系统
    • docker体积小、启动速度快、性能好、虚拟机体积大、启动速度慢、性能一般

    1.3 Docker架构

    Docker架构主要有两个内容:镜像容器

    镜像(Image):docker进应用程序及其所需依赖、函数库、环境、配置等文件打包在一起,称为镜像。

    容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是docker会给容器做隔离,对外不可见

    怎么进行镜像共享?可以通过Docker Rrgistry进行镜像共享

    DockerHub:docker镜像托管平台。这样的平台称为Docker Rrgistry

    在这里插入图片描述

    1.4 安装Docker(Linux)

    首先需要大家虚拟机联网,安装yum工具

    输入如下命令

    yum install -y yum-utils \
               device-mapper-persistent-data \
               lvm2 --skip-broken
    
    • 1
    • 2
    • 3

    然后更新本地镜像源:

    # 设置docker镜像源
    yum-config-manager \
        --add-repo \
        https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
        
    sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
    
    yum makecache fast
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    然后输入命令进行安装:

    yum install -y docker-ce
    
    • 1

    等待安装完成输入

    docker-v
    
    • 1

    出现插图这表明安装成功

    在这里插入图片描述

    启动docker先关闭防火墙

    # 关闭
    systemctl stop firewalld
    # 禁止开机启动防火墙
    systemctl disable firewalld
    
    • 1
    • 2
    • 3
    • 4

    启动、停止、重启docker命令

    systemctl start docker  # 启动docker服务
    
    systemctl stop docker  # 停止docker服务
    
    systemctl restart docker  # 重启docker服务
    
    • 1
    • 2
    • 3
    • 4
    • 5

    二、 Dcoker基本操作

    2.1 镜像操作

    镜像名称规范:

    镜像名称一般分成两部分组成:【repository】:【tag】在这里插入图片描述

    操作命令
    在这里插入图片描述

    案例1:从dockerHub中拉取一个Nginx进行并查看

    1.首先去镜像仓库搜索Nginx镜像,比如
    DockerHub

    2.复制命令

     docker pull nginx #默认拉取最新版本  
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

    拉取完成后查看镜像版本

    docker images
    
    • 1

    在这里插入图片描述

    案例2:利用docker save将nginx镜像导出磁盘,然后再通过load加载回来

    步骤一:利用docker xx --help命令查看docker save,将其打包

    在这里插入图片描述
    从上面我们可以看到,假如把nginx镜像打包成一个压缩文件的命令为:
    docker save -o nginx.tar nginx:latest

    接下来我们查看是否打包成功
    在这里插入图片描述

    可以看到已经成功了,
    接下来我们把原来的镜像给删除掉:
    docker rmi nginx:latest

    在这里插入图片描述
    然后我们进行load --help命令查看load 操作命令,并加载出来

    在这里插入图片描述

    可以看出命令为:

    docker load -i nginx.tar

    接下来查看是否加载完成
    在这里插入图片描述

    可以看出已经成功被加载完成了

    2.2 容器操作

    操作容器的命令

    在这里插入图片描述

    扩展:

    docker logs -f [容器名称] #持续日志输出 
    
    • 1

    案例1:创建运行一个nginx容器

    步骤一:去docker hub 查看nginx的容器运行命令

    在这里插入图片描述
    在这里插入图片描述
    命令:
    在这里插入图片描述
    输入docker run --name mynginx -p 80:80 -d nginx

    在这里插入图片描述
    从上面可以看出,我们已经让该镜像成功运行起来了

    接着我们访问宿主机的IP和端口

    在这里插入图片描述
    访问成功!

    案例2:进入nginx容器,修改HTML文件内容,添加“chushay was best!”

    步骤一:进入容器。进入到刚才创建的nginx容器命令

    docker exec -it mynginx bash![在这里插入图片描述](https://img-blog.csdnimg.cn/6abf8bd70a1c44769d31d099aeca1a57.png)
    
    
    • 1
    • 2

    然后我们去dockerhub找到nginx的路径

    在这里插入图片描述

    步骤二:进入nginx的HTML所在目录
    /usr/share/nginx/html

    cd /usr/share/nginx/html

    步骤三:修改index.html的内容

    sed -i 's#Welcome to nginx#chushay was best!#g' index.html

    sed -i 's###g' index.html

    修改之后,我们通过浏览器验证一下
    在这里插入图片描述
    我们可以看到已经修改成功!

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

    练习

    创建并运行一个Redis容器,并支持数据持久化

    步骤一:到DdockerHub搜索Redis镜像
    在这里插入图片描述

    步骤二:查看Redis镜像文档中的帮助信息

    拉取镜像:
    docker pull redis

    步骤三:利用docker run ,命令运行一个Redis容器

    在这里插入图片描述

    #docker run --name some-redis -d redis redis-server --appendonly yes
    docker run --name myredis -p 6379:6379 -d redis redis-server --appendonly yes
    
    • 1
    • 2

    在这里插入图片描述
    从上图中我们可以看出Redis镜像已经启动称为容器,接下来我们通过Redis连接工具来测试一下

    在这里插入图片描述

    我们可以看到,连接成功!

    接下来,进入容器
    docker exec -it myredis bash

    进入Redis客户端
    redis-cli

    注 :可以直接进入到redis-cli: docker exec -it myredis redis-cli

    添加一个key

    set num 666

    接下来我们查看Redis,被成功的添加了
    在这里插入图片描述

    2.3 数据卷volume(容器数据管理)

    在这里插入图片描述

    简介

    在这里插入图片描述

    数据卷语法

    在这里插入图片描述

    实践小操:

    1.创建一个名为html的数据卷:

    docker volume create html
    在这里插入图片描述

    2.查看创建的数据卷:
    docker volume ls
    在这里插入图片描述
    3.查看创建的数据卷路径:
    docker volume inspect html
    在这里插入图片描述

    4.删除数据卷

    删除未使用的卷
    docker volume prune

    删除指定的卷
    docker volume rm [卷名]

    总结
    在这里插入图片描述

    数据卷挂载

    在这里插入图片描述

    案例1:
    创建一个nginx容器,修改容器内的html目录内的index.html内容

    在这里插入图片描述

    创建容器并挂载数据卷
    docker run --name mynginx -p 80:80 -v html:/usr/share/nginx/html -d nginx

    查看数据卷路径
    在这里插入图片描述
    进入该路径并查看数据卷
    在这里插入图片描述

    修改html内容:

    vi index.html

    总结:

    在这里插入图片描述

    案例2:
    创建并运行一个MySQL容器,将宿主机目录直接挂载到容器

    在这里插入图片描述

    在这里插入图片描述

    步骤一:拉取MySQL镜像

    docker pull mysql

    查看镜像
    在这里插入图片描述
    步骤二:创建目录

    mkdir -p mysql/data

    mkdir -p mysql/conf

    步骤三:把MySQL配置文件传到mysql/conf目录下

    在这里插入图片描述
    步骤四:去DockerHub查阅资料,创建并运行MySQL容器:要求:

    • ①挂载/tmp/mysql/data到mysql容器内数据存储目录

    • ②挂载/tmp/mysql/conf/hmy.cnf到mysql容器配置文件

    • ③设置mysql密码

        docker run --name mysql -e MYSQL_ROOT_PASSWORD=654321 -p 3306:3306 -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf -v /tmp/mysql/data:/var/lib/mysql -d mysql
      
      • 1
    docker run \ #启动
    --name mysql \ #容器名称
    -e MYSQL_ROOT_PASSWORD=654321 \  #mysql环境配置
    -p 3306:3306 \                   #mysql端口配置      
    -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \ #挂载/tmp/mysql/conf/hmy.cnf到mysql容器配置文件
    -v /tmp/mysql/data:/var/lib/mysql \#挂载/tmp/mysql/data到mysql容器内数据存储目录
    -d \                             #允许后台运行
    mysql							 #镜像名称	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    启动成功之后我们通过连接mysql数据库查看

    在这里插入图片描述

    2.4 自定义镜像

    2.4.1 镜像结构

    镜像概念:镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成的整体。

    以mysql镜像为例解析镜像结构:
    在这里插入图片描述

    总结:

    镜像是分层结构,每一层称为一个Layer

    • BaseImage层:包含基本的系统函数库、环境变量、文件系统
    • Entrypoint:入口,是镜像中应用启动的命令
    • 其他:在baseImage基础上添加依赖、安装程序、完成整个应用的安装和配置

    2.4.2 Dockerfile

    Dcokerfile就是一个文本文件,其中包含一个个指令,用来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer

    在这里插入图片描述

    更多指令语法

    案例1:基于Ubuntu镜像构建一个新镜像,运行一个Java项目

    步骤一:新建一个空文件夹docker-demo
    步骤二:拷贝课件资料中的docker-demo.jar文件到docker-demo这个目录
    步骤三:拷贝课前资料中的jdk8.tar.gz文件到docker-demo这个目录
    步骤四:拷贝课前资料提供的Dockerfile到docker-demo这个目录
    步骤五:进入docker-demo
    步骤六:运行命令
    docker build -t javaweb:1.0v .

    步骤一:新建一个空文件夹docker-demo
    在这里插入图片描述
    步骤二:拷贝课件资料中的docker-demo.jar文件到docker-demo这个目
    在这里插入图片描述

    步骤三:拷贝课前资料中的jdk8.tar.gz文件到docker-demo这个目录
    在这里插入图片描述
    步骤四:拷贝课前资料提供的Dockerfile到docker-demo这个目录

    在这里插入图片描述

    dockerfile文件内容:

    # 指定基础镜像
    FROM ubuntu:16.04
    # 配置环境变量,JDK的安装目录
    ENV JAVA_DIR=/usr/local
    
    # 拷贝jdk和java项目的包
    COPY ./jdk8.tar.gz $JAVA_DIR/
    COPY ./docker-demo.jar /tmp/app.jar
    
    # 安装JDK
    RUN cd $JAVA_DIR \
     && tar -xf ./jdk8.tar.gz \
     && mv ./jdk1.8.0_144 ./java8
    
    # 配置环境变量
    ENV JAVA_HOME=$JAVA_DIR/java8
    ENV PATH=$PATH:$JAVA_HOME/bin
    
    # 暴露端口
    EXPOSE 8090
    # 入口,java项目的启动命令
    ENTRYPOINT java -jar /tmp/app.jar
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    步骤五:进入docker-demo

    在这里插入图片描述
    步骤六:运行命令
    docker build -t javaweb:1.0v .

    在这里插入图片描述

    启动镜像:

    docker run --name javaweb -p 8090:8090 -d javaweb:1.0v
    
    • 1

    在这里插入图片描述

    访问成功!
    在这里插入图片描述

    案例2:基于Java:8-alpine镜像,将一个Java项目构建为镜像

    实现思路如下:

    • ① 新建一个空的目录,然后在,目录中新建一个文件,命名为Dockerfile
    • ②拷贝课前资料提供的docker-demo.jar到这个目录中
    • ③编写Dockerfile文件:
      • a)基于Java:8-alpine作为基础镜像
      • b)将app.jar拷贝到镜像中
      • c)暴露端口
      • d)编写入口ENTRYPOINT
    • ④使用docker build命令构建镜像
    • ⑤使用docker run创建容器并运行

    ① 新建一个空的目录,然后在,目录中新建一个文件,命名为Dockerfile
    还是使用原来的文件目录

    ②拷贝课前资料提供的docker-demo.jar到这个目录中
    还是使用原来的文件目录

    ③编写Dockerfile文件

    # 指定基础镜像
    FROM java:8-alpine
    # 配置环境变量,JDK的安装目录
    ENV JAVA_DIR=/usr/local
    
    # 拷贝java项目的包
    COPY ./docker-demo.jar /tmp/app.jar
    
    # 暴露端口
    EXPOSE 8090
    # 入口,java项目的启动命令
    ENTRYPOINT java -jar /tmp/app.jar
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    ④使用docker build命令构建镜像

    docker build -t javaweb:2.0v .

    ⑤使用docker run创建容器并运行
    在这里插入图片描述

    docker run --name web -p 8090:8090 -d javaweb:2.0v

    访问:
    在这里插入图片描述

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

    2.4 DockerCompose编排

    简介

    Docker Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Compose 是 Docker
    公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML
    格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器

    注:引用CSDN博主「山河亦问安」,原文链接点击查看原文,这也是一篇关于DockerCompose不错的文章,值得推荐!


    Compose文件是一个文本文件,在文件中通过定义集群中的每个容器如何运行

    docker-compose格式:
    在这里插入图片描述

    version: "3.8"				//compose版本
    
    service:
      mysql: 					//容器名称
      	images: mysql:5.7.25 	//镜像名称
      	environment: 			//环境名称
      	  MYSQL_ROOT_PASSWORD: 654321
      	volumes: 				//数据卷
      	  - /tmp/mysql/data:/var/lib/mysql
      	  - /tpm/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cof
      web:
      	build: .   				//从当前目录构建镜像
      	ports:     				//暴露端口
      	  - 8090: 8090  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    CentOS7安装DockerCompose:

    Linux下需要通过命令下载:

    # 安装
    curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    
    • 1
    • 2

    出现下图,表示安装成功
    在这里插入图片描述

    修改文件权限

    # 修改权限
    chmod +x /usr/local/bin/docker-compose
    
    • 1
    • 2

    查看docker-compose版本

    docker-compose --version
    
    • 1

    在这里插入图片描述
    安装成功!

    待续未完

  • 相关阅读:
    【672. 灯泡开关 Ⅱ】
    【小程序】页面跳转
    系统架构设计师【第12章】: 信息系统架构设计理论与实践 (核心总结)
    Vue实现递增年限的功能
    log_archive_dest_1 USE_DB_RECOVERY_FILE_DEST VALID_FOR
    ConfigurationManager姿势快闪
    Python字符串类型详解(二)——字符串处理函数及处理方法
    python教程(持续更新)
    【数据脱敏方案】不使用 AOP + 注解,使用 SpringBoot+YAML 实现
    Java学习笔记(十七)
  • 原文地址:https://blog.csdn.net/qq_49385719/article/details/134135161