zoukankan      html  css  js  c++  java
  • Docker 的基本使用

    一、简介

    Docker 是一个开源的应用容器引擎,基于 Go 语言。Docker 支持将软件编译成一个镜像,然后在镜像中为软件做好配置,将镜像发布出去,其他使用者就可以直接使用这个镜像,而不需再和以前一样配置各种环境。Docker 容器是完全使用沙箱机制,相互之间不会有任何的接口。其实它和我们使用的虚拟机很像,都采用了虚拟化的技术,不过相较于虚拟机而言,它的占用资源较少、启动更快。我们使用 Docker 安装运行的软件,其实都是运行在一个个独立的 “小型虚拟机”之上的,每个软件就是单独的容器,容器的启动和停止就对应着软件的启动和停止。

    二、核心概念

    Docker 主机(Host):安装了 Docker 程序的机器。

    Docker 客户端(Client):连接 Docker 主机进行操作的机器。

    Docker 仓库(Registry):存放了各种已经打包好的软件镜像。

    Docker 镜像(Images):软件打包而成的镜像。

    Docker 容器(Container):镜像启动后的实例称为一个容器,能够真正运行的软件。

    三、例子(含常用命令)

    我以在阿里云服务器(Cent OS 7)使用 Docker 安装 MySQL 为例来使用一些常用的命令。

    1、安装 Docker

    yum install docker
    

    2、使用 Docker 在仓库中搜索镜像

    root@xxx:~# docker search mysql
    INDEX       NAME                                                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    docker.io   docker.io/mysql                                                  MySQL is a widely used, open-source relati...   7641      [OK]       
    docker.io   docker.io/mariadb                                                MariaDB is a community-developed fork of M...   2492      [OK]       
    docker.io   docker.io/mysql/mysql-server                                     Optimized MySQL Server Docker images. Crea...   579                  [OK]
    docker.io   docker.io/zabbix/zabbix-server-mysql                             Zabbix Server with MySQL database support       158                  [OK]
    docker.io   docker.io/hypriot/rpi-mysql                                      RPi-compatible Docker Image with Mysql          103                  
    docker.io   docker.io/zabbix/zabbix-web-nginx-mysql                          Zabbix frontend based on Nginx web-server ...   84                   [OK]
    docker.io   docker.io/centurylink/mysql                                      Image containing mysql. Optimized to be li...   59     
    

    推荐去 Docker Hub 官网 上去搜索镜像,还可以看到镜像的 tags:


    3、下载 MySQL 镜像

    docker pull mysql  #默认下载最近的
    # 也可加上标签下载 docker pull mysql:5.7.24
    

    4、显示当前 Docker 中的所有镜像

    root@xxx:~# docker images
    REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
    docker.io/mysql           latest              102816b1ee7d        8 days ago          486 MB
    docker.io/redis           latest              5d2989ac9711        8 days ago          95 MB
    docker.io/rabbitmq        latest              e8261c2af9fe        2 months ago        125 MB
    docker.io/elasticsearch   latest              5acf0e8da90b        3 months ago        486 MB
    

    5、将镜像实例化成一个容器

    root@xxxx:~# docker run --name mysql01 -e MYSQL_PASSWORD=123456 -d mysql
    caa85f6d4d3e4e2ca3e5135ef63ff44393640bef0fd6254c2ef31fc29f6b7e26
    

    使用 docker run + 镜像 ID(或者名字)就可以将镜像实例化成容器,其中命令参数 --name 是给容器起名字,

    -d 是后台运行。而我上面的 -e 参数是为了能正确使用 MySQL 而设置密码。建议大家将镜像实例化的这个过程中,还是去看相应镜像的官方提供的文档,以便正确实例化镜像。


    6、查看所有的容器

    root@xxx:~# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
    caa85f6d4d3e        mysql               "docker-entrypoint..."   8 minutes ago       Exited (1) 8 minutes ago                       mysql01
    

    不加上 -a 选项的话是查看正在运行的容器。

    7、停止容器

    root@xxxx:~# docker stop mysql01
    mysql01
    

    也可以使用容器 ID 来停止,查看所有正在运行的容器:

    root@xxx:~# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    

    8、启动容器

    root@xxx:~# docker start mysql01
    mysql01
    

    查看所有正在运行的容器:

    root@xxx:~# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    

    纳尼?没有,不急,演示效果需要。

    9、查看对应容器的日志

    root@xxx:~# docker logs mysql01
    error: database is uninitialized and password option is not specified 
      You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
    error: database is uninitialized and password option is not specified 
      You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
    

    哦,都说了看官方的文档啊,还是不听!原来是上面 docker run 时的 -e 参数的值没有写对,应该是MYSQL_ROOT_PASSWORD而我写的是MYSQL_PASSWORD,-_-||,所以接下来就重新来吧。

    10、删除容器

    删除错误的容器

    root@xxx:~# docker rm mysql01
    mysql01
    

    删除镜像是 docker rmi 加上镜像 ID。实例化镜像:

    root@xxx:~# docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
    7caa8d461829cb384599aa942fc16f15b4b25a3bd57d5846597ab33028bea620
    

    查看正在运行的容器:

    root@xxx:~# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                 NAMES
    7caa8d461829        mysql               "docker-entrypoint..."   About a minute ago   Up About a minute   3306/tcp, 33060/tcp   mysql01
    

    ok,成功了。

    11、在阿里云服务器使用这个 MySQL 容器

    root@xxx:~# docker exec -it mysql01 bash
    root@7caa8d461829:/#
    

    上面命令的意思可以参考官方文档:


    也符合 Docker 沙箱隔离的原则,在 MySQL 容器里开启 shell,即相当于 MySQL 容器内部里面有一个“虚拟机”,在这里面执行相应的 MySQL 操作。使用 mysql 命令连接 MySQL 服务器:

    root@7caa8d461829:/# mysql -h 127.0.0.1 -u root -p         
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 12
    Server version: 8.0.13 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
    
    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> SHOW DATABASES;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0.01 sec)
    
    mysql> 
    
  • 相关阅读:
    Linux文件和目录的权限
    nginx的默认web目录
    SSH-keygen rsa 密钥对根据私钥生成公钥
    对ajax的理解
    开关式复选框的操作
    关于弹框和原页面的切换问题
    单选框和复选框中value值得获取
    php中明明写了类函数,却报致命错误找不到类
    python函数
    python关键字
  • 原文地址:https://www.cnblogs.com/yunche/p/10229300.html
Copyright © 2011-2022 走看看