前言

  1. 众所周知,作为一名开发者,有一台趁手的笔记本电脑是必不可少的,而我…今天不得不跟陪伴我六年的笔记本说再见了… ,最近全国范围内都在下大雨,想必大家都感受到,今天我骑着车去另一个项目组时,路过一个桥梁过道不怎么平稳,不小心把斜跨的双肩包掉积水里了,事实再一次说明,买双肩包要买一个防水的!!!!然后,当我把我的小破包捞起来的时候,里面已经全部灌满了,好不容易到了项目组,一堆人围着跟了我六年的笔记本尸体,纷纷提出了各种解决进水的方案…可惜最后还是无济于事,只好花了六千大洋又买了个拯救者的本子…
  2. 现在的话不得不重新弄一套开发环境了,还是按照我最喜欢的docker先来,在使用中加深理解!

谈谈docker是什么

  1. 用了这么多年了,docker的官方说法就是一个开源的容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源(没深入研究过Go)。
  2. Docker 可以打包应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
  3. Docker 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
  4. Docker通俗的讲是服务器中高性能的虚拟机,可以将一台物理机虚拟N多台虚拟机的机器,互相之间隔离,互不影响

什么是沙箱?

  1. 沙箱是一种用于隔离和管理网络环境的虚拟环境。它模拟网络中的真实场景,并提供对网络资源的限制和监控。
  2. 沙箱可以提供一些虚拟的硬件和软件资源,如文件系统、网络、操作系统等,使应用程序或进程可以在这个虚拟环境中运行,而不会对计算机系统产生任何不良影响
  3. 在沙箱中,如果应用程序或进程试图访问沙箱之外的资源或执行危险操作,沙箱会拦截这些请求并采取相应的安全措施,例如禁止该操作或中止应用程序或进程。

沙箱的功能

  1. 隔离性:沙箱提供了⼀个完全隔离的环境,使用户可以安全地运行不受信任的应用程序或文件。任何在沙箱中运行的应用程序或文件都无法访问主机操作系统或其他应用程序的敏感数据。
  2. 临时性:每次启动沙箱时,都会创建⼀个全新的操作系统实例。这意味着任何在沙箱中进行的更改、下载的文件或安装的应用程序都将在关闭沙箱后被完全删除,不会对主机系统产生任何影响。
  3. 安全性:沙箱中的操作系统实例是在主机操作系统的基础上创建的,因此可以利用主机操作系统的安全功能和更新机制来提供更高的安全性。
  4. 快速启动:沙箱的启动非常迅速,几乎可以立即进⼊隔离环境,无需等待长时间的系统启动过程。
  5. 兼容性:沙箱可以运行几乎任何应用程序,包括浏览器、办公套件、开发工具等。用户可以在沙箱中进行各种测试、评估和试验,而无须担心对主机系统的影响。

沙箱组件

  1. 虚拟化引擎:用于创建和管理虚拟环境,包括虚拟化硬件、操作系统和应用程序等。
  2. 安全隔离机制:用于隔离不同的用户或应用程序,并提供安全访问控制和审计功能。
  3. 网络资源管理:用于限制和监控用户或应用程序对网络资源的访问,包括网络带宽、IP地址、端口和服务等。
  4. 安全监控和分析:用于对用户或应用程序的网络行为进行监控和分析,以发现潜在的威胁和攻击。

docker 基本概念

  1. 宿主机:安装Docker守护进程的服务器,称之为宿主机(我这里用的是windows server 环境的服务器);
  2. 镜像(Image):Docker 镜像,就相当于是一个 root 文件系统。除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数
  3. 容器(Container):镜像运行之后的实体,镜像和容器的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  4. 仓库(Repository):仓库可看成一个镜像控制中心,用来保存镜像。

Docker常用命令

  1. 查看镜像:docker images

    PS C:\Users\Administrator> docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    mysql               latest              3218b38490ce        2 years ago         516 MB
    PS C:\Users\Administrator>
    
  2. 搜索镜像 :docker search imageName

    PS C:\Users\Administrator> docker search mysql
    NAME                                    DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    mysql                                   MySQL is a widely used, open-source relati...   15219     [OK]
    mariadb                                 MariaDB Server is a high performing open s...   5789      [OK]
    phpmyadmin                              phpMyAdmin - A web interface for MySQL and...   1004      [OK]
    percona                                 Percona Server is a fork of the MySQL rela...   629       [OK]
    bitnami/mysql                           Bitnami container image for MySQL               113                  [OK]
    ubuntu/mysql                            MySQL open source fast, stable, multi-thre...   64
    linuxserver/mysql                       A Mysql container, brought to you by Linux...   41
    circleci/mysql                          MySQL is a widely used, open-source relati...   30
    rapidfort/mysql                         RapidFort optimized, hardened image for MySQL   25
    google/mysql                            MySQL server for Google Compute Engine          25                   [OK]
    rapidfort/mysql-official                RapidFort optimized, hardened image for My...   9
    rapidfort/mysql8-ib                     RapidFort optimized, hardened image for My...   9
    bitnami/mysqld-exporter                 Bitnami container image for MySQL Server E...   7
    cimg/mysql                                                                              3
    newrelic/mysql-plugin                   New Relic Plugin for monitoring MySQL data...   1                    [OK]
    elestio/mysql                           Mysql, verified and packaged by Elestio         0
    newrelic/k8s-nri-mysql                  New Relic Infrastructure MySQL Integration...   0
    airbyte/normalization-mysql                                                             0
    hashicorp/mysql-portworx-demo                                                           0
    bitnami/percona-mysql                   Bitnami container image for Percona MySQL       0
    airbyte/destination-mysql                                                               0
    percona/percona-server-mysql-operator                                                   0
    airbyte/source-mysql                                                                    0
    bitnamicharts/mysql                                                                     0
    airbyte/source-mysql-strict-encrypt                                                     0
    PS C:\Users\Administrator>
    
  3. 拉取镜像: docker pull imageName:version,不写版本号默认拉去是最新的

    PS C:\Users\Administrator> docker pull jdk8
    
  4. 按镜像ID删除镜像,docker rmi 镜像ID

    docker images -q #查看所有镜像的ID
    docker rmi `docker images -q` #批量删除镜像
    
  5. 查看正在运行的容器: docker ps,此时没有运行任何容器

    PS C:\Users\Administrator> docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    PS C:\Users\Administrator>
    
    1. 查看所有容器(包括正在运行的和已经停止运行的):docker ps -adocker ps -all
  6. 查看最后一次运行的容器

    PS C:\Users\Administrator> docker ps -l
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
    5192790464d1        mysql               "docker-entrypoint..."   2 minutes ago       Up 2 minutes        3306/tcp, 33060/tcp   friendly_elion
    PS C:\Users\Administrator>
    
  7. 查看已经停止的容器:docker ps -f status=exited

    PS C:\Users\Administrator> docker ps -f status=exited
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
    fc920014bb52        mysql               "docker-entrypoint..."   6 minutes ago       Exited (1) 6 minutes ago                        laughing_lewin
    6096aaf82fd4        mysql               "docker-entrypoint..."   12 minutes ago      Exited (1) 12 minutes ago                       sleepy_poitras
    c9c7993e8d5f        mysql               "docker-entrypoint..."   22 hours ago        Exited (0) 20 hours ago                         mysql-test
    PS C:\Users\Administrator>
    

创建与启动容器

  1. 创建一个容器 : docker run -itd mysql -name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

    PS C:\Users\Administrator> docker run -itd mysql -name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
    5192790464d1823934a67b88b0332d6f1e34e239cfaef25b8b64564b821b8c5d
    PS C:\Users\Administrator> docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
    5192790464d1        mysql               "docker-entrypoint..."   22 seconds ago      Up 21 seconds       3306/tcp, 33060/tcp   friendly_elion
    
  2. docker run -itd mysql -name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql ,这个命令的格式是:docker run 命令参数 镜像名称:镜像标签 ,命令参数:
    1. -i:表示运行容器,如果不加该参数那么只是通过镜像创建容器,而不启动。
    2. -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端(如果只加it两个参数,创建后就会自动进去容器)。
    3. -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。
    4. --name :为创建的容器命名。
    5. -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
    6. -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射,例如:可以将Docker中Tomcat容器的8080端口映射到宿主机上的某一个端口8080,那么以后访问tomcat只需要:http://宿主机的IP:8080/

交互式容器

  1. 使用交互式运行容器,容器运行后直接进入到容器内部,退出容器内部后,容器直接关闭,只有第一次才会这样,以后再启动容器就是一个守护式的。

    PS C:\Users\Administrator> docker run -it mysql -name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
    2024-07-12 06:27:01+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started.
    Enter password:
    

守护式容器

  1. docker run -di --name=容器名称

    PS C:\Users\Administrator> docker run -di mysql -name mysql
    6462a2709abf141a392adefd8eb2341d566a42be6025db2f9bf087056670ba57
    
  2. 登录容器/进入容器的目录,注意:这里的登陆容器之后执行的脚本/bin/bash必须写

    docker exec -it 容器名称 (或者容器ID) /bin/bash
    
  3. 停止容器:docker stop 容器名称(或者容器ID)

    PS C:\Users\Administrator> docker stop 5192790464d1
    5192790464d1
    PS C:\Users\Administrator> docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    PS C:\Users\Administrator>
    
  4. 启动容器:docker start 容器名称(或者容器ID)

    PS C:\Users\Administrator> docker start mysql-test
    mysql-test
    PS C:\Users\Administrator>
    
  5. 查看容器IP地址 :docker inspect 容器名称(容器ID)

    PS C:\Users\Administrator> docker inspect mysql-test
    ........
    "Networks": {
                    "bridge": {
                        "IPAMConfig": null,
                        "Links": null,
                        "Aliases": null,
                        "NetworkID": "314a2b4838fa222950b2cda21ffd28875e2b55989167c684ee7e36e2dbd4a9de",
                        "EndpointID": "5d6feec4ead7d32ae94224cdb02cff514860863300aa6858b623ec41dbe9e4e3",
                        "Gateway": "172.17.0.1", 网关地址 
                        "IPAddress": "172.17.0.2", IP地址
                        "IPPrefixLen": 16,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
                        "MacAddress": "02:42:ac:11:00:02" MAC地址
                    }
                }
    
  6. 删除容器,正在运行的容器无法删除:

    #删除容器
    docker rm 容器名称(容器ID)
    #删除镜像
    docker rmi 镜像ID(镜像名称)
    

Windows 下部署docker

安装 Hyper-V

  1. Hyper-V 是微软开发的虚拟机,类似于 VMWare 或 VirtualBox,仅适用于 Windows 10。这是 Docker Desktop for Windows 所使用的虚拟机
  2. Hyper-V 虚拟机一旦启用,QEMU、VirtualBox 或 VMWare Workstation 15 及以下版本将无法使用!如果你必须在电脑上使用其他虚拟机(例如开发 Android 应用必须使用的模拟器),请不要使用 Hyper-V!

开启 Hyper-V

  1. 找到应用和功能
    1.
  2. 找到程序和功能,找到启动或关闭Windows 功能,选中Hyper-V

在这里插入图片描述

docker 的安装

  1. 找个docker的安装包,然后一路Next ,点击Finish 完成安装
    在这里插入图片描述
    安装完毕以后,会有一个docker的小图标,这个情况就是安装成功了
    在这里插入图片描述

双击运行即可,此时呢,运行ok了可以看到右下角有一个 docker标志,在这里插入图片描述
也可以通过cmd进入命令行,查看一下docker 版本信息:docker --version
在这里插入图片描述

docker 部署jdk

  1. 指定版本的tag镜像的jdk: docker pull primetoninc/jdk:1.8

  2. 启动jdk容器(其中,– name=后的jdk1.8是为容器指定了一个别名,而最后的primetoninc/jdk:1.8那个指的是下载镜像时的名称。)该命令的意思为:使用docker镜像primetoninc/jdk:1.8以后台模式启动一个容器,并将容器命名为jdk1.8:docker run -it --name jdk1.8 -d primetoninc/jdk:1.8

  3. 进入jdk容器,查看是否安装正确(即查看安装之后的目录)

    PS C:\Users\Administrator> docker exec -it jdk1.8 /bin/bash
    [root@598e430fbee5 /]# java -version
    java version "1.8.0_152"
    Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
    Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
    [root@598e430fbee5 /]#
    

docker 部署mysql

  1. docker 安装成功后,首先就是安装mysql 喽,可以使用 docker search mysql 命令来查看可用版本

在这里插入图片描述

  1. 我这边跟随项目组mysql版本,在本地部署 mysql 8.0.18 版本的mysql,拉去命令为:docker pull mysql:8.0.18,默认是从docker官方的镜像仓库拉取docker,出现如下界面表示拉取失败

在这里插入图片描述

  1. 为docker 更换阿里云docker 镜像源头,我这里使用的阿里云的镜像源,找到 setting 如下图
    在这里插入图片描述

  2. 这个阿里云镜像源地址:需要登录阿里云官网,搜索容器镜像服务,找到容器加速器 ,即可获得(如果没有,自行注册一个)

在这里插入图片描述

  1. 使用 docker images 查看是否安装了mysql ,能看到有mysql 就表示OK了

    PS C:\Users\Administrator> docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    mysql               latest              3218b38490ce        2 years ago         516 MB
    PS C:\Users\Administrator>
    
  2. 安装完成后,测试运行 mysql 容器:docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

    1. -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
    2. MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
    PS C:\Users\Administrator> docker run -itd mysql -name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
    c9c7993e8d5feb2f3622ecb7d9c71939d6059f59dccddb4f861a54ed0e499561
    PS C:\Users\Administrator>
    
  3. 通过 docker ps 命令查看是否运行成功:

    PS C:\Users\Administrator> docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                               NAMES
    c9c7993e8d5f        mysql               "docker-entrypoint..."   About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp, 33060/tcp   mysql-test
    PS C:\Users\Administrator>
    
  4. 此时可以通过连接工具开始使用mysql了,也可以通过 docker exec -it mysql /bin/bash 命令操作mysql

    PS C:\Users\Administrator> docker exec -it mysql /bin/bash
    root@1421d99469ae:/# show databases;
    bash: show: command not found
    root@1421d99469ae:/# mysql -uroot -p123456
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 8
    Server version: 8.0.27 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2021, Oracle and/or its affiliates.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>
    

docker 部署Tomcat

  1. 搜索tomcat 镜像:docker search tomcat

    PS C:\Users\Administrator> docker search tomcat
    NAME                                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    tomcat                                          Apache Tomcat is an open source implementa...   3680      [OK]
    tomee                                           Apache TomEE is an all-Apache Java EE cert...   115       [OK]
    bitnami/tomcat                                  Bitnami container image for Tomcat              50                   [OK]
    lucee/lucee                                     Lucee application engine running on Apache...   31
    lucee/lucee52-nginx                             Lucee 5.2 with NGINX running on Apache Tom...   11                   [OK]
    lucee/lucee4-nginx                              Lucee 4.5 with NGINX running on Apache Tom...   11                   [OK]
    eclipse/rdf4j-workbench                         Dockerfile for Eclipse RDF4J Server and Wo...   9
    lucee/lucee4                                    Lucee 4.5 application engine running on Ap...   8                    [OK]
    lucee/lucee52                                   Lucee 5.2 application engine running on Ap...   3                    [OK]
    rancher/haproxy-tomcat                                                                          1
    openidentityplatform/openam-j2ee-agent-tomcat   OpenAM Java EE Policy Agent for Apache Tomcat   1
    jumpserver/tomcat                               Apache Tomcat is an open source implementa...   0
    chainguard/tomcat                               Build, ship and run secure software with C...   0
    rapidfort/tomcat10-openjdk17-ib                                                                 0
    samply/tomcat-common                                                                            0
    wnprcehr/tomcat                                                                                 0
    paketobuildpacks/apache-tomcat                                                                  0
    hivdb/tomcat-with-nucamino                                                                      0
    openeuler/tomcat                                                                                0
    bitnamicharts/tomcat                                                                            0
    library123/tomcat                                                                               0
    vulhub/tomcat                                                                                   0
    secoresearch/tomcat-varnish                     Tomcat and Varnish 5.0                          0                    [OK]
    rapidfort/tomcat9-openjdk11-ib                  RapidFort optimized, hardened image for To...   0
    semoss/docker-tomcat                            Tomcat, Java, Maven, and Git on top of debian   0                    [OK]
    
  2. 拉取tomcat 镜像:docker pull tomcat:8-jdk8

    PS C:\Users\Administrator> docker pull tomcat:8-jdk8
    8-jdk8: Pulling from library/tomcat
    0e29546d541c: Pull complete
    9b829c73b52b: Pull complete
    cb5b7ae36172: Pull complete
    6494e4811622: Pull complete
    668f6fcc5fa5: Pull complete
    c0879393b07e: Pull complete
    bef50c41a74d: Pull complete
    0bcabf45ee90: Pull complete
    6e2e221e1126: Pull complete
    57f0208b026f: Pull complete
    Digest: sha256:8e0b9f9bc861047193a763404317a704902737f9a4b32a305f22c180709aa9ce
    Status: Downloaded newer image for tomcat:8-jdk8
    PS C:\Users\Administrator>
    
  3. 创建容器,设置端口映射 :docker run -itd --name=tomcat -p 8080:8080 tomcat:8-jdk8

    1. -p 8080:8080:将容器的8080端口映射到主机的8080端口

docker 部署Nginx

  1. 搜索 Nginx 镜像:docker search Nginx

    PS C:\Users\Administrator> docker search Nginx
    NAME                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    nginx                              Official build of Nginx.                        19996     [OK]
    bitnami/nginx                      Bitnami container image for NGINX               192                  [OK]
    nginxinc/nginx-unprivileged        Unprivileged NGINX Dockerfiles                  154
    nginxproxy/nginx-proxy             Automated nginx proxy for Docker container...   140
    nginxproxy/acme-companion          Automated ACME SSL certificate generation ...   134
    ubuntu/nginx                       Nginx, a high-performance reverse proxy & ...   114
    nginx/nginx-ingress                NGINX and  NGINX Plus Ingress Controllers ...   92
    nginx/unit                         This repository is retired, use the Docker...   63
    nginx/nginx-prometheus-exporter    NGINX Prometheus Exporter for NGINX and NG...   42
    bitnami/nginx-ingress-controller   Bitnami container image for NGINX Ingress ...   34                   [OK]
    unit                               Official build of NGINX Unit: Universal We...   32        [OK]
    nginxproxy/docker-gen              Generate files from docker container meta-...   17
    kasmweb/nginx                      An Nginx image based off nginx:alpine and ...   8
    nginxinc/nginx-s3-gateway          Authenticating and caching gateway based o...   6
    bitnami/nginx-exporter             Bitnami container image for NGINX Exporter      5
    nginxinc/ingress-demo              Ingress Demo                                    4
    nginx/nginx-ingress-operator       NGINX Ingress Operator for NGINX and NGINX...   2
    rancher/nginx                                                                      2
    nginxinc/amplify-agent             NGINX Amplify Agent docker repository           1
    nginx/nginx-quic-qns               NGINX QUIC interop                              1
    nginxinc/ngx-rust-tool                                                             0
    nginxinc/mra_python_base                                                           0
    nginxinc/mra-fakes3                                                                0
    nginx/unit-preview                 Unit preview features                           0
    
  2. 拉取Nginx 镜像:docker pull nginx

  3. 创建容器,设置端口映射:docker run -di --name=mynginx -p 80:80 nginx

docker 部署 redis

  1. 搜索redis镜像:docker search redis

    PS C:\Users\Administrator> docker search redis
    NAME                                    DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    redis                                   Redis is the world’s fastest data platform...   12898     [OK]
    redis/redis-stack                       redis-stack installs a Redis server with a...   111
    redislabs/redisinsight                  RedisInsight - The GUI for Redis                103
    redis/redis-stack-server                redis-stack-server installs a Redis server...   77
    redislabs/redisearch                    Redis With the RedisSearch module pre-load...   66
    redislabs/rejson                        RedisJSON - Enhanced JSON data type proces...   53
    redislabs/redismod                      An automated build of redismod - latest Re...   48                   [OK]
    redislabs/redis                         Clustered in-memory database engine compat...   40
    redislabs/redisgraph                    A graph database module for Redis               27                   [OK]
    redislabs/rebloom                       A probablistic datatypes module for Redis       27                   [OK]
    redislabs/redistimeseries               A time series database module for Redis         12
    redis/redisinsight                      Redis Insight - our best official GUI for ...   10
    redislabs/operator                                                                      7
    redislabs/redisai                                                                       6
    redislabs/redis-webcli                  A tiny Flask app to provide access to Redi...   5                    [OK]
    redislabs/redis-py                                                                      5
    redislabs/redisgears                    An automated build of RedisGears                4
    redislabs/k8s-controller                                                                2
    redislabs/operator-internal             This repository contains pre-released vers...   1
    redislabs/olmtest                       Test artefact for OLM CSV                       1
    redislabs/ng-redis-raft                 Redis with redis raft module                    0
    redislabs/k8s-controller-internal                                                       0
    redislabs/pcf-redis-enterprise-tester                                                   0
    redislabs/memtier_benchmark             Docker image to run memtier_benchmark           0
    redislabs/olm-bundle                                                                    0
    PS C:\Users\Administrator>
    
  2. 拉取redis镜像:docker pull redis

  3. 创建容器,设置端口映射:docker run -id --name=myredis -p 6379:6379 redis

docker 数据卷

  1. 数据卷是宿主机中的一个目录或文件,当容器目录和数据卷目录绑定后,对方的修改会立即同步。一个数据卷可以被多个容器同时挂载,一个容器也可以被挂载多个数据卷。
  2. 数据卷本质其实是共享文件夹,是宿主机与容器间数据共享的桥梁
  3. 数据卷作用就是用于容器数据持久化,外部机器和容器间接通信以及容器之间数据交换

docker 文件拷贝

  1. 继续写写docker文件是怎么回事,首先,docker 是安装在宿主机中的,但是宿主机的文件是需要拷贝到容器内才能被docker 识别到的,拷贝进入容器的命令:docker cp 需要拷贝的文件或目录 容器名称:容器目录

    D:\docker>docker cp docker_tomcat_test.html f7a0ef59e755:/usr/local/tomcat/webapps
    
    D:\docker>docker exec -it c_tomcat /bin/bash
    root@f7a0ef59e755:/usr/local/tomcat# ls
    BUILDING.txt     LICENSE  README.md      RUNNING.txt  conf  logs            temp     webapps.dist
    CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin          lib   native-jni-lib  webapps  work
    root@f7a0ef59e755:/usr/local/tomcat# cd webapps
    root@f7a0ef59e755:/usr/local/tomcat/webapps# ls
    docker_tomcat_test.html
    root@f7a0ef59e755:/usr/local/tomcat/webapps#
    
  2. 拷贝出来的命令:docker cp 容器名称:容器目录 需要拷贝的文件或目录

目录挂载

  1. 文件拷贝操作起来也是比较简单的,但是呢,通常情况下,我还是使用目录挂载的方式民间宿主机的目录与容器内的目录进行映射,这样就可以通过修改宿主机某个目录的文件从而去影响容器

  2. 目录挂载命令:创建容器 添加-v参数 后边为 宿主机目录:容器目录 例如:docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=c_tomcat tomcat

    D:\docker>docker run -itd --name=centos -v \docker\centos\centos_data:/root/centos_data centos:7 /bin/bash
    8806e76921d5cd0b1134051828fda833468e3257e4dcdd6e08ff0dfbd78cfe25
    

查看容器已挂载的数据卷

  1. 查看容器中挂载的数据卷:docker inspect 容器名称(容器ID)

    D:\docker>docker inspect centos
    ..........
    "Mounts": [
                {
                    "Type": "bind",
                    "Source": "/docker/centos/centos_data",
                    "Destination": "/root/centos_data",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
            ],
            "Config": {
    

一个容器挂在多个数据卷

D:\docker>docker run -di --name=centos2 -v /centos1/centos_data1:/root/centos_data1 -v /centos1/centos_data2:/root/centos_data2 centos:7 /bin/bash
f5cae7dde50b9115804514f355ed2965482100ad27d60456c2166b1bba66131c

多个容器挂载1个数据卷实现数据共享

docker run -di --name=c2 -v /root/host_data_common:/root/c2_data centos:7
docker run -di --name=c3 -v /root/host_data_common:/root/c3_data centos:7
##创建启动c3数据卷容器,使用 –v 参数 设置数据卷
docker run -di --name=c3 -v /root/host_data_common:/root/c3_data centos:7 /bin/bash
##创建启动 c1 c2 容器,使用 –-volumes-from 参数 设置数据卷
docker run -di --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -di --name=c2 --volumes-from c3 centos:7 /bin/bash

docker 迁移与备份

  1. 将本地开发环境下的Docker中对应的容器持久化为镜像
  2. 将镜像保存为一个压缩包,发送到生产环境服务器中
  3. 生产环境中需要将压缩包–>镜像–>容器

将容器保存为镜像

  1. 保存命令:docker commit {正在运行容器名称/容器ID} {镜像名称}:{镜像标签}

    D:\docker>docker commit mysql-test mysql-test:version_1.0
    sha256:04ee31d8a90541d3a9acca06f5e35db60c6fa487ed748cb1f0fe58d77d2adf93
    
    D:\docker>docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    mysql-test          version_1.0         04ee31d8a905        39 minutes ago      516 MB
    nginx               latest              605c77e624dd        2 years ago         141 MB
    tomcat              8-jdk8              bb364d522f0c        2 years ago         545 MB
    mysql               latest              3218b38490ce        2 years ago         516 MB
    centos              7                   eeb6ee3f44bd        2 years ago         204 MB
    primetoninc/jdk     1.8                 f4b4fccc65bb        6 years ago         657 MB
    
    D:\docker>
    

镜像备份

  1. 可以将将镜像保存为tar 文件:docker save -o {压缩包存放路径} {镜像名称/镜像ID}

    docker save -o mysql-test.tar mysql-test:version__1.0 #压缩包在生产环境下会还原为一个
    image,还原之后的name和tag
    # -o :输出到的文件
    

镜像恢复与迁移

  1. 首先删除掉 mysql-test镜像 然后执行此命令进行恢复

    docker load -i {备份的镜像文件}
    # 举例
    docker load -i mysql-test.tar
    # -i :指定导入的文件
    
  2. 执行后再次查看镜像,可以看到镜像已经恢复,可以再次运行测试

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐