• 用了一个月的Docker,我真的是爱了


    用了一个月的Docker,我真的是爱了

    在这里插入图片描述

    前言

    博主刚来公司,领导就直接给我一个docker-compose.yml文件,真的是把我这个刚入职的小白看的一愣一愣道的。因为一些开发后的环境测试都是在Docker容器中,所以我入职以来用Docker命令真的用到吐哈哈哈。不过不得不说真的好用🐂×

    所以今天给大家带来相对应的一篇博客文章,希望能给大家带来一定的帮助嘿嘿嘿。


    Docker的概念

    • Docker 是一个开源的应用容器引擎。
    • 诞生于2013年初,基于Go语言实现,dotCloud公司出品。
    • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布任何流行的 Linux 机器上。
    • 容器时完全使用沙箱机制,相互隔离。
    • 容器性能开销极低。
    • Docker 从17.03版本之后分为 社区版企业版

    在这里插入图片描述


    安装Docker

    Docker 可以运行在MAC,Win,CentOS、UBUNTU等操作系统上。

    本次笔记是通过xshell链接服务器安装 Docker

    首先下载和配置 yum

    yum update 
    
    yum install -y yum-utils device-mapper-persistent-data lvm2 
    #设置yum源
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
    • 1
    • 2
    • 3
    • 4
    • 5

    下载 Docker

    yum install -y docker-ce
    #查看是否安装成功
    docker -v
    
    • 1
    • 2
    • 3

    Docker的架构

    在这里插入图片描述

    • 服务端:接收命令或远程请求,操作镜像或容器
    • 客户端:发送命令或者请求到Docker服务端
    • 镜像(Image): Docker 镜像,就是相当于是一个root文件系统。比如官方镜像ubuntu16.04 就是包含了一个整套的Ubuntu16.04最小系统的root文件系统。
    • 容器(Container) :镜像和容器的关系,就像是面对程序设计中的类和对象一样,镜像时静态的定义,容器时镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
    • 仓库(Repository): 仓库可看成一个代码控制中心,用来保存镜像。

    配置镜像加速器

    正常情况下在docker下载镜像太慢,一般都会配置镜像加速器。

    一般有以下几种加速器:

    • 阿里云
    • 腾讯云
    • 网易云

    本次配置就直接按照阿里云的配置来:

    我们在控制台搜索 容器镜像服务

    在这里插入图片描述

    我们可以看这个有相对应的教程进行配置。

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://自己的配置.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Docker基础命令

    在使用 Docker 的时候,一般都是回通过一些基础的操作命令来进行一个使用,接下来我们就来学习 Doceker 命令的基础使用!

    Docker镜像命令的使用

    列出镜像列表

    imges:

    我们可以使用 docker images 来列出本地主机上的镜像。

    [root@VM-12-16-centos ~]# docker images
    REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
    redis        5.0       c5da061a611a   5 months ago   110MB
    
    • 1
    • 2
    • 3

    各个选项说明:

    • REPOSITORY: 表示镜像的仓库源
    • TAG: 镜像的标签
    • IMAGE ID: 镜像ID
    • CREATED: 镜像创建时间
    • SIZE: 镜像大小

    补充:

    docker images -p #查看所用的镜像id
    
    • 1

    获取一个新的镜像

    pull:

    如果我们本机想下载一个不存在的新镜像我们可以通过命令 docker pull xxx

    Crunoob@runoob:~$ docker pull ubuntu:13.10
    13.10: Pulling from library/ubuntu
    6599cadaf950: Pull complete 
    23eda618d451: Pull complete 
    f0be3084efe9: Pull complete 
    52de432f084b: Pull complete 
    a3ed95caeb02: Pull complete 
    Digest: sha256:15b79a6654811c8d992ebacdfbd5152fcf3d165e374e264076aa435214a947a3
    Status: Downloaded newer image for ubuntu:13.10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    下载完成后,我们可以直接使用这个镜像来运行容器。

    查找镜像

    search:

    如果要查找一个镜像我们能通过 docker search 命令来寻找对我们合适的镜像源。

    [root@VM-12-16-centos ~]# docker search redis
    NAME                                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    redis                                              Redis is an open source key-value store that…   11002     [OK]       
    bitnami/redis                                      Bitnami Redis Docker Image                      221                  [OK]
    bitnami/redis-sentinel                             Bitnami Docker Image for Redis Sentinel         37                   [OK]
    bitnami/redis-cluster                                                                              32                   
    rapidfort/redis                                    RapidFort optimized, hardened image for Redi…   15                   
    rapidfort/redis-cluster                            RapidFort optimized, hardened image for Redi…   15                   
    circleci/redis                                     CircleCI images for Redis                       14                   [OK]
    ubuntu/redis                                       Redis, an open source key-value store. Long-…   10                   
    bitnami/redis-exporter                                                                             7                    
    .......
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    删除镜像

    rm:

    删除镜像,但是不能删除在运行得的镜像。

    rmi:

    如果我们需要删除我们需要删除一个镜像,我们可以通过命令 docker rmi xxx 即可删除成功。

    $ docker rmi hello-world
    
    • 1

    Docker容器相关命令

    启动容器

    run:

    一般我们能通过 docker run 参数 命令来进行容器的创建和启动。

    $ docker run -it --name=c1 ubuntu /bin/bash
    
    • 1

    参数说明:

    • -i: 保持容器运行。通常与 -t 同时使用。加入这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭。
    • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用。
    • -d: 以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用 docker exec 进入容器。退出后,容器则不会关闭。
    • -it: 创建的容器一般称为交互式容器。
    • -id: 创建的容器一般称为守护式容器。
    • -name: 为创建的容器命名。

    在这里插入图片描述

    查看所有容器

    ps -a:

    一般我们能使用以下命令:docker ps -a 用来查看所有的容器。

    $ docker ps -a
    
    • 1

    补充: 查看正在运行的镜像

    [root@VM-12-16-centos ~]# docker ps
    CONTAINER ID   IMAGE       COMMAND                  CREATED      STATUS      PORTS                                       NAMES
    a7c50732a601   redis:5.0   "docker-entrypoint.s…"   6 days ago   Up 6 days   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   c_redis
    
    • 1
    • 2
    • 3

    删除容器

    rm:

    一般我们能通过docker rm xx 来进行一个容器删除。

    $ docker rm -f 1e560fca3906
    
    • 1

    注意: 不能删除正在运行的容器。

    停止容器

    stop:

    通过以下命令来进行一个容器停止命令。

    $ docker stop <容器 ID>
    
    • 1

    启动容器

    start:

    通过以下命名可以来进行一个容器启动。

    $ docker start <容器 ID> 
    
    • 1

    进入容器

    exec:

    $ docker exec 参数 #退出容器,容器不会关闭。
    
    • 1

    查看容器信息

    inspect:

    能通过下面的命令来进行一个容器信息的查看。

    $ docker inspect 容器名称
    
    • 1

    查看容器日志

    logs:

    $ docker logs 容器名称
    
    • 1

    例如:

    [root@VM-12-16-centos ~]# docker logs mysql
    2022-06-26 03:49:59+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.36-1debian10 started.
    2022-06-26 03:49:59+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
    2022-06-26 03:49:59+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.36-1debian10 started.
    2022-06-26T03:49:59.301456Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
    2022-06-26T03:49:59.302460Z 0 [Note] mysqld (mysqld 5.7.36) starting as process 1 ...
    2022-06-26T03:49:59.304538Z 0 [Note] InnoDB: PUNCH HOLE support available
    2022-06-26T03:49:59.304556Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
    2022-06-26T03:49:59.304560Z 0 [Note] InnoDB: Uses event mutexes
    2022-06-26T03:49:59.304563Z 0 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
    2022-06-26T03:49:59.304566Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
    2022-06-26T03:49:59.304570Z 0 [Note] InnoDB: Using Linux native AIO
    2022-06-26T03:49:59.304746Z 0 [Note] InnoDB: Number of pools: 1
    2022-06-26T03:49:59.304949Z 0 [Note] InnoDB: Using CPU crc32 instructions
    2022-06-26T03:49:59.305972Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M
    ......
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    Docker数据卷

    为了实现数据持久化,使容器之间可以共享数据。可以将容器内的目录,挂载到宿主机上或其他容器内,实现同步和共享的操作。即使将容器删除,挂载到本地的数据卷也不会丢失。

    数据卷的简介

    概念:

    • 数据卷是宿主机中的一个目录或文件。
    • 当容器目录和数据卷目录绑定后,对方修改会立即同步。
    • 一个数据卷可以同时被多个容器同时挂载
    • 一个容器也可以被挂载多个数据卷。

    在这里插入图片描述

    数据卷的作用:

    • 容器数据持久化。
    • 外部机器和容器间接通信。
    • 容器之间数据交换。
    • 防止数据的误删和丢失。

    数据卷的配置

    命令:

    docker run ... -v 宿主机目录:容器目录
    
    • 1

    注意事项:

    ①目录必须是绝对路径。

    ②如果目录不存在,则会自动创建。

    ③可以挂载多个数据卷。

    我们能使用winSCP来拉去服务器上面的文件。

    使用数据卷

    docker run -it -v 主机目录:容器内目录
    
    #测试
    $ docker run -it -v /home/ceshi:/home centos /bin/bash
    
    • 1
    • 2
    • 3
    • 4

    我们可以通过数据卷在容器中使用MySQL的脚本,这样能节约很多时间和精力。

    后面我们能使用docker-compose更简便的启动数据卷哦。

    DockerFile

    Dockerfile就是用来构建docker镜像的构建文件!也就是命令脚本。

    在这里插入图片描述

    基础命令

    FROM		#基础镜像,一切从这里开始构建
    MAINTAINER	#镜像是谁写的,姓名+邮箱
    RUN			#镜像构建的时候需要运行的命令
    ADD			#步骤,tomcat镜像,这个tomcat的压缩包!添加内容
    WORKDIR		#镜像的工作目录	
    VOLUME		#挂载的目录
    EXPOSE		#暴露端口配置
    CMD			#指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
    ENTRYPOINT	#指定这个容器启动的时候要运行的命令,可以追加命令
    ONBUILD		#当构建一个被继承 Dockerfile 这个时候就会运行ONBUILD 的指令
    COPY 		#类似ADD,将我们文件拷贝到镜像中
    ENV			#构建的时候设置环境遍量
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    实战使用

    我就拿我最近部署项目使用的一个DockerFile来给大家看一下哦。

    FROM java:8
    MAINTAINER xiaobao <xiaobao@qq.com>
    ADD ./blog_api.jar /app.jar
    CMD java -jar /app.jar --spring.profiles.active=prod                                                          
    
    • 1
    • 2
    • 3
    • 4

    运行镜像docker build -f ./blog_dockerfile -t app .

    运行后我们就会有相对应的镜像,我们可以通过docker ps 来查看。

    在这里插入图片描述


    结语

    好了本次Docker介绍就到这里啦,我们下期compose见。

    在这里插入图片描述

  • 相关阅读:
    华为机试 - 完全二叉树非叶子部分后序遍历
    适用场景全新升级!扩展 Dragonfly2 作为分布式缓存系统架构 | 龙蜥技术
    Python安装教程
    Python3《机器学习实战》学习笔记(九):ANN人工神经网络基础详解
    【微服务】Hystrix的概念、作用以及使用方法
    `THREE.AudioAnalyser` 音频分析
    MySQL主从同步原理
    在标准的C++ 语法中,请问有 MyCppClass*& mycppclass 这样的变量定义方式吗?
    非零基础自学Java (老师:韩顺平) 第13章 常用类 13.8 Arrays类
    Kubernetes(K8S)是什么?
  • 原文地址:https://blog.csdn.net/m0_54355125/article/details/125703395