相關(guān)鏈接
Golang的docker嘗試https://studygolang.com/articles/11427
創(chuàng)建超小的Golang docker 鏡像https://colobu.com/2015/10/12/create-minimal-golang-docker-images/
基礎(chǔ)命令
docker ps // 查看所有正在運(yùn)行容器
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 列出終止?fàn)顟B(tài)的容器
docker container start <containerID> //重啟容器
docker build -t <name> . 編譯鏡像嘹锁,注意最后的點(diǎn)符號(hào)是指定當(dāng)前目錄
docker啟動(dòng)mysql
// 拉取
docker pull mysql
//啟動(dòng) mysql 容器( 參數(shù) -i -t 等價(jià)于 -it 表示insert , 進(jìn)入 ; /bin/bash 表示 shell 腳本交互界面 )
docker run -it mysql /bin/bash
//查看mysql版本號(hào)
mysql --version
//退出容器
exit
//想要服務(wù)一直運(yùn)行
//(參數(shù) -p 設(shè)置端口正卧,--name 取名 ,-e MYSQL_ROOT_PASSWORD=123456 設(shè)置 賬號(hào)為 root 炉擅,密碼為 sql123456 -d 表示作為一個(gè)守護(hù)進(jìn)程在后臺(tái)運(yùn)行 )
docker run -p 3306:3306 --name mysqlTest -e MYSQL_ROOT_PASSWORD=sql123456 -d mysql
//查看運(yùn)行的容器
docker ps -a
//查看容器對(duì)應(yīng)的端口號(hào)
docker port mysqlTest
//方法一赂苗、啟動(dòng)mysql(本機(jī)裝了mysql)
mysql -h 127.0.0.1 -u root -p
//方法二帆离、啟動(dòng)mysql(本機(jī)沒裝mysql)
//先進(jìn)入容器內(nèi)、再啟動(dòng)mysql
docker exec -it mysqlTest /bin/bash
mysql -u root -p
//新建數(shù)據(jù)庫(kù)
create database mysqlTest;
//查看數(shù)據(jù)庫(kù)
show databases;
//選定表
use mysqlTest;
//查看表結(jié)構(gòu)
show tables;
//查看表數(shù)據(jù)
select * from “表名”;
屏幕快照 2019-05-22 下午5.57.15.png
服務(wù)端連接數(shù)據(jù)庫(kù)
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
}
報(bào)錯(cuò):this authentication plugin is not supported
解決:這里是因?yàn)镸ySQL 8 支持新的加強(qiáng)的密碼加密僧叉,這里有兩種密碼類型
Use Strong Password Encryption
Use Legacy Password Encryption
docker啟動(dòng)mysql時(shí)默認(rèn)是第一個(gè)strong類型奕枝,但是很多終端還不支持strong的加密插件。
需要改為legacy類型
可以在mysql中查看,結(jié)果見下圖:
mysql> select host,user,plugin from mysql.user;
屏幕快照 2019-05-22 下午6.01.28.png
將里面這幾項(xiàng)逐項(xiàng)改為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';
再次查看瓶堕,結(jié)果如下
屏幕快照 2019-05-22 下午6.07.05.png
再去服務(wù)端連接數(shù)據(jù)庫(kù)隘道,發(fā)現(xiàn)OK啦
docker啟動(dòng)ETCD
相關(guān)鏈接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
下一步進(jìn)入容器進(jìn)行操作
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"