美文网首页
初识docker

初识docker

作者: 十六月 | 来源:发表于2019-05-22 18:17 被阅读0次

    相关链接

    Golang的docker尝试https://studygolang.com/articles/11427
    创建超小的Golang docker 镜像https://colobu.com/2015/10/12/create-minimal-golang-docker-images/

    基础命令

    docker ps // 查看所有正在运行容器
    docker ps -a                            列出所有容器
    docker ps -a -q // 查看所有容器ID
    docker stop <containerID>               停止指定ID的容器
    docker rm <containerID>                  删除指定ID的容器
    
    docker stop $(docker ps -a -q) //  stop停止所有容器
    docker  rm $(docker ps -a -q) //   remove删除所有容器
    
    docker image ls                       列出所有镜像
    docker image rm <imageID>   删除指定ID的镜像,imageID可以只写前三位
    
    docker container ls -a              列出终止状态的容器
    docker container start <containerID>  //重启容器
    
    docker build -t <name> .          编译镜像,注意最后的点符号是指定当前目录
    

    docker启动mysql

    // 拉取
    docker pull mysql  
    
    //启动 mysql 容器(  参数 -i -t 等价于 -it  表示insert , 进入 ;  /bin/bash 表示 shell 脚本交互界面 )
    docker run -it mysql /bin/bash
    
    //查看mysql版本号
    mysql --version
    
    //退出容器
    exit
    
    //想要服务一直运行
    //(参数 -p 设置端口,--name 取名 ,-e MYSQL_ROOT_PASSWORD=123456 设置 账号为 root ,密码为 sql123456  -d 表示作为一个守护进程在后台运行 )
    docker run -p 3306:3306 --name mysqlTest -e MYSQL_ROOT_PASSWORD=sql123456 -d mysql
    
    //查看运行的容器
    docker ps -a
    
    //查看容器对应的端口号
    docker port mysqlTest
    
    //方法一、启动mysql(本机装了mysql)
    mysql -h 127.0.0.1 -u root -p
    
    
    //方法二、启动mysql(本机没装mysql)
    //先进入容器内、再启动mysql
    docker exec -it mysqlTest /bin/bash
    mysql -u root -p
    
    //新建数据库
    create database mysqlTest;
    
    //查看数据库
    show databases;
    
    //选定表
    use mysqlTest;
    
    //查看表结构
    show tables;
    
    //查看表数据
    select * from “表名”;
    
    屏幕快照 2019-05-22 下午5.57.15.png

    服务端连接数据库

    func initDB() (*gorm.DB, error) {
        s := Mysql{
            UserName:     "root",
            Password:     "12345678",
            Database:     "mysqlTest",
            Address:      "tcp(localhost:3306)",
            Parameters:   "charset=utf8&parseTime=True&loc=Local",
            MaxIdle:      10,
            MaxOpen:      20,
            Debug:        true,
            MigrationDir: "",
        }
        fmt.Println("connect string", s.String())
    
        db, err := gorm.Open("mysql", s.String())
        if err != nil {
            fmt.Println("Open error", err)
    
            return nil, err
        }
    
        err = db.DB().Ping()
        if err != nil {
            fmt.Println("Ping error", err)
    
            return nil, err
        }
    
        db.DB().SetMaxIdleConns(s.MaxIdle)
        db.DB().SetMaxOpenConns(s.MaxOpen)
        db.LogMode(s.Debug)
    
         err = db.AutoMigrate(&User{}).Error
        if err != nil {
            fmt.Println("AutoMigrate error", err)
            return nil, err
        }
    
        return db, nil
    }
    

    报错:this authentication plugin is not supported
    解决:这里是因为MySQL 8 支持新的加强的密码加密,这里有两种密码类型

    Use Strong Password Encryption
    Use Legacy Password Encryption
    

    docker启动mysql时默认是第一个strong类型,但是很多终端还不支持strong的加密插件。
    需要改为legacy类型

    可以在mysql中查看,结果见下图:

    mysql>  select host,user,plugin from mysql.user;
    
    屏幕快照 2019-05-22 下午6.01.28.png

    将里面这几项逐项改为legacy类型:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '12345678';
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '12345678';
    ALTER USER 'mysql.infoschema'@'localhost' IDENTIFIED WITH mysql_native_password BY '12345678';
    ALTER USER 'mysql.session'@'localhost' IDENTIFIED WITH mysql_native_password BY '12345678';
    ALTER USER 'mysql.sys'@'localhost' IDENTIFIED WITH mysql_native_password BY '12345678';
    

    再次查看,结果如下


    屏幕快照 2019-05-22 下午6.07.05.png

    再去服务端连接数据库,发现OK啦

    docker启动ETCD

    相关链接https://github.com/etcd-io/etcd/releases

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.3.13 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.3.13 \
      gcr.io/etcd-development/etcd:v3.3.13 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new
    

    下一步进入容器进行操作

    docker exec etcd-gcr-v3.3.13 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.3.13 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.3.13 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.3.13 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.3.13 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl get foo"
    

    相关文章

      网友评论

          本文标题:初识docker

          本文链接:https://www.haomeiwen.com/subject/ipkyzqtx.html