Docker简介

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: Docker简介

@[TOC]

1Docker简介

  • Docker是一个快速交付应用、运行应用的技术:
  • Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像
  • Docker应用运行在容器中,使用沙箱机制,相互隔离
  • Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此,可以在任意Linux操作系统上运行
  • 启动、移除都可以通过一行命令完成,方便快捷

    2 Docker与虚拟机的差异

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

    3 镜像和容器

  • 镜像(Image):Docker将应用程序及其所需要的依赖、函数库、环境、配置等文件打包在一起,称为镜像。即打包的文件就是镜像
  • 容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。即隔离的进程是容器

    4 DockerHub

    DockerHub是一个Docker镜像的托管平台。这样的平台称为Docker Registry。

    5 Docker基本操作

    5.1 镜像常见命令

  • 镜像名称一般分为两部分:[repository]:[tag],例如:mysql:5.7,如果tag没有指定,默认latest,代表最新版本镜像
    docker build:构建镜像
    docker pull:从服务拉取镜像
    docker images:查看镜像
    docker rmi:删除镜像 例如:docker rmi nginx:latest
    docker push:推送到服务
    docker save:保存镜像为一个压缩包 例如:docker save -o nginx.tar nginx:latest
    docker load:加载压缩包为镜像 例如:docker load -i nginx.tar
    docker --help:查看docker命令
    docker images --help:查看docker image命令的用法
    

    5.2 容器常见命令

    docker run :创建并运行一个容器
    docker pause: 暂停(挂起)容器
    docker unpause:运行容器
    docker stop:停止容器
    docker start:重新开始容器
    docker ps:查看所有运行的容器及状态 docker ps -a :查看所有容器,包含运行与不运行的
    docker logs:查看容器运行日志 docker logs -f containerName :-f -follow跟踪日志
    docker exec:进入容器执行命令
    docker rm: 删除指定容器 docker rm -f :强制删除容器
    
    创建容器运行
    docker run --name containerName -p 80:80 -d nginx
    
    命令解读:
  • docker run :创建并运行一个容器
  • --name:给容器起一个名字
  • -p:将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
  • -d:后台运行容器
  • nginx:镜像名称,例如nginx
    进入容器内部:
    docker exec -it containerName bash
    
    命令解读:
  • docker exec:进入容器内部,执行一个命令
  • -it:给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
  • containerName:要进入的容器名称
  • bash:进入容器后执行的命令,bash是一个linux终端交互命令

    5.3 数据卷的基本操作

  • 解决容器与数据耦合的问题,方便操作容器内数据,保证数据安全
  • 数据卷(volume):是一个虚拟目录,指向宿主机文件系统中的某个目录。(/var/lib/docker/volumes/数据卷文件名),容器删除后,数据卷不删除。
    数据卷操作的基本语法如下:
    docker volume[COMMAND]
    
    docker volume命令式数据卷操作,根据命令后跟随的command来确定下一步的操作:
    docker volume create   :创建一个volume
    docker volume inspect  :显示一个或多个volume的信息
    docker volume ls          :列出所有的volume
    docker volume prune    :删除未使用的volume
    docker volume rm       :删除一个或多个指定的volume
    

    5.4 挂载数据卷

  • 如果容器运行时volume不存在,会自动被创建出来
    docker run\                      # 创建并运行容器
    --name containerName\           # 给容器起名
    -v html:/usr/share/nginx/html\  # 把html数据卷挂载到容器内的/root/html这个目录中
    -p 8080:80                      # 把宿主机的8080端口映射到容器内的80端口
    nginx:latest\                   # 镜像名称
    

    5.5 目录挂载

  • -v[宿主机目录]:[容器内目录]
  • -v[宿主机文件]:[容器内文件]
    容器的配置目录:
    在这里插入图片描述
    容器的数据储存:
    在这里插入图片描述
    docker run \
    --name myMySql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -p 3306:3306 \
    -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
    -v /tmp/mysql/data:/var/lib/mysql \ 
    -d \
    myslq:laster
    

    6 Dockerfile自定义镜像

    6.1 镜像结构

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

    6.2 Dockerfile

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

    基础镜像

    FROM java:8-alpine

    author

    MAINTAINER ruoyi

挂载目录

VOLUME /home/ruoyi

创建目录

RUN mkdir -p /home/ruoyi

指定路径

WORKDIR /home/ruoyi

复制jar文件到路径

COPY ./jar/*.jar /home/ruoyi/ruoyi.jar

暴露端口

EXPOSE 8080

启动应用

ENTRYPOINT ["java","-jar","ruoyi.jar"]

* 步骤一:新建一个空文件夹docker-demo
* 步骤二:拷贝.ruoyi.jar文件到docker-demo这个目录(或者指定目录)
* 步骤三:将上面编写好的Dockerfile拷贝到docker-demo这个目录
* 步骤四:进入docker-demo
* 步骤五:运行命令 `docker build -t javaweb:1.0 .`  # -t指的是-tag版本 `.指的是dockerfile所在的目录`
## 6.3 DockerCompose
* Docker Compose可以基于Compose文件帮我们快速的部署`分布式应用`,而无需手动一个个`创建`和`运行容器
* Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。
* 部署命令:`docker-compose up -d`
* 查看日志:`docker-compose logs -f`
* 重启服务:`docker-compose restart gateway userservice orderservice`
* DockerCompose就是将docker run命令集合进来的
* 默认容器互联`docker network create some-net`
举例1:
```powershell
version : '3'
services:
  mysql:  # 容器名称
    image: mysql:5.7.25
    environment:
        MYSQL_ROOT_PASSWORD:123456
      volumes: .
          - /tmp/mysql/data:/var/lib/mysql
          - /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf
   web: # 容器名称
    build: .
    ports:
      - 8090:8090

举例2:
启动elasticsearchkinana

version : '3'
#networks:
#  es:
services:
  elasticsearch:
    container_name: elasticsearch
    image: elasticsearch:7.12.1
    ports:
      - 9200:9200
      - 9300:9300
    volumes:
      - ./es-data:/usr/share/elasticsearch/data
      - ./es-plugins:/usr/share/elasticsearch/plugins
    environment:
      ES_JAVA_OPTS: -Xms512m -Xmx512m
      discovery.type: single-node
    privileged: true
#    networks:
#      - "es"
  kinana:
    container_name: kinana
    image: kibana:7.12.1
    ports:
      - 5601:5601
#    networks:
#      - "es"
    environment:
      ELASTICSEARCH_HOSTS: http://elasticsearch:9200
#    volumes:
#    - ./kibana.yml:/usr/share/kibana/config/kibana.yml

7 Docker镜像仓库

  • Docker Hub
  • 阿里云镜像服务等
    部署私有仓库
    在这里插入图片描述
  • 镜像仓库推送钱需要把仓库地址配置到docker服务的daemon.json文件中,被docker信任
    在这里插入图片描述
  • 推送本地镜像到仓库前都必须重命名(docker tag)镜像,以镜像仓库地址为前缀。
    推送镜像到私有镜像服务必须先tag
  • 步骤一:重新tag本地镜像,名称前缀为私有仓库的地址:127.0.0.1:8080/
    docker tag nginx:latest 127.0.0.1:8080/nginx:2.0
    
  • 步骤二:推送镜像
    docker push 127.0.0.1:8080/nginx:2.0
    
  • 步骤三:拉取镜像
    docker pull 127.0.0.1:8080/nginx:2.0
    

    8 修改镜像储存位置

    ```powershell
    wsl --export docker-desktop d:\docker-desktop.tar
    wsl --export docker-desktop-data d:\docker-desktop-data.tar

    stopDocker

    wsl --unregister docker-desktop
    wsl --unregister docker-desktop-data

wsl --import docker-desktop E:\dockerimages\docker-desktop d:\docker-desktop.tar --version 2
wsl --import docker-desktop-data E:\dockerimages\docker-desktop-data d:\docker-desktop-data.tar --version 2
```

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
4月前
|
Java Go 开发者
Docker容器技术简介及其与Go语言的结合点
【2月更文挑战第23天】本文首先概述了Docker容器技术的核心概念和优势,接着探讨了Go语言与Docker容器技术的结合点。通过阐述Docker的轻量级、可移植性和版本控制等特性,以及Go语言在容器化应用中的优势,本文旨在说明两者结合能够实现更高效、灵活的应用开发和部署。
|
11月前
|
SQL 关系型数据库 数据库
SQL Server 简介与 Docker Compose 部署
SQL Server 是由微软公司开发的一款强大的关系型数据库管理系统(RDBMS),广泛应用于企业级应用程序和数据存储。使用 Docker Compose,您可以轻松地将 SQL Server 实例部署到容器化环境中,并方便地进行数据库管理。在本文中,我将简要介绍 SQL Server 的基本概念,并详细阐述如何使用 Docker Compose 部署 SQL Server 容器。
338 2
SQL Server 简介与 Docker Compose 部署
|
11月前
|
Docker 容器
01Docker简介
01Docker简介
39 0
|
2月前
|
存储 Linux 虚拟化
docker 简介
docker 简介
45 6
|
2月前
|
Java Linux 虚拟化
docker(一):docker简介
docker(一):docker简介
27 1
|
4月前
|
Linux 应用服务中间件 nginx
docker 网络简介
docker 网络简介
|
4月前
|
Java 虚拟化 Docker
Docker简介及用途,为什么要使用Docker?Docker容器和虚拟机的区别
Docker简介及用途,为什么要使用Docker?Docker容器和虚拟机的区别
|
11月前
|
Oracle 关系型数据库 数据库
Oracle 简介与 Docker Compose部署
Oracle 数据库是一款由 Oracle 公司开发的关系型数据库管理系统(RDBMS)。它被广泛应用于企业级应用程序,提供了可靠的数据存储和强大的数据管理功能。
358 1
Oracle 简介与 Docker Compose部署
|
4月前
|
NoSQL Redis Docker
[docker] Compose 简介
[docker] Compose 简介
|
4月前
|
Kubernetes Cloud Native 虚拟化
【docker】—— Docker 简介
【docker】—— Docker 简介
下一篇
云函数