这里我们安装社区版
sudo apt install docker-ce
sudo docker pull golang
sudo docker pull redis
可以访问 Docker Hub 查看 MySQL的版本
sudo docker pull mysql:8.0.31
这里为什么拉取 8.0.31 版本的 mysql,是因为其他版本需要配置 稍微麻烦点。
具体看这篇文章吧 Docker 安装 MySQL 登录报错
sudo docker images
可以看到我们刚才拉取的3个镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 8.0.31 05db07cd74c0 11 hours ago 565MB
golang latest 6a90a37099af 41 hours ago 777MB
redis latest 0ec8ab59a35f 46 hours ago 117MB
使用golang镜像启动一个golang容器
sudo docker run -it --name go-push -p 25565:25565 -v /home/itloser/dev/push:/go/push golang:latest /bin/bash
这里的 -it 是 -i 和 -t 合并写法 表示以交互模式启动并建立一个伪终端 我们后边启动项目是需要进入容器的终端里操作
-p 25565:25565 表示将主机的25565端口映射到容器的25565端口 你项目开在那个端口就映射哪个端口 比如80或者443等
-v /home/itloser/dev/push:/go/push 表示将主机的 项目路径 /home/itloser/dev/push 挂载到容器的 /go/push 你项目放在主机的哪里就写什么路径,容器里的路径你怎么方便怎么来
–name go-test 就是设置要创建的这个容器的名字 是 go-push
golang:latest 就是刚拉取的镜像和版本号
/bin/bash 在容器里执行 /bin/bash 表示创建容器后进入容器的终端
我们运行上面命令后 就会创建并自动进入这个容器
可以看到前面变成了
root@dsadasdsa:/go#
说明我们进入了容器的终端
先创建我们的项目路径 我们现在就是 /go路径下 直接创建push即可
mkdir push
直接退出容器 并销毁容器 快捷键 Ctrl+D
exit
注意 我们这里需要退出容器 但是在后台运行
所以我们使用 Ctrl+P+Q 退出
退出后可以使用
sudo docker ps
查看刚才创建的容器 可以看到它在后台运行中
这里golang容器牵扯容器之间的端口访问限制问题(可以解决 但是配置起来有点麻烦),故采用Redis和MySQL安装在Docker,Go环境安装在本机。详情可见下面golang本机安装。
sudo docker run -itd --name redis-ser -p 6379:6379 redis:latest
这里的 -itd 是 -i -t -d 和简写 这里的只说下 -d 表示 在后台运行
这个配置我们开发和测试足够用了 也就是默认配置 没密码
如果要放到生产环境或者需要自定义配置可以看其他大佬写的这一篇详细配置 这里我不再赘述
史上最详细Docker安装Redis(含每一步的图解)实战
sudo docker exec -it redis-ser bash
进入redis服务
redis-cli
设置密码
config set requirepass 1234qwer
查看密码
config get requirepass
校验密码
auth 1234qwer
同步密码(若不同步可能会出现重启服务后密码失效的情况)
config rewrite
按 ctrl+c 退出redis服务并回到容器
重启redis服务 验证密码是否生效
redis-server restart
//或者
/etc/init.d/redis-server restart
配置完成后 最后按 Ctrl+P+Q 退出容器
sudo docker run -d --name mysql-ser -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234qwer mysql:8.0.31
这里的 -e MYSQL_ROOT_PASSWORD=1234qwer 是为 mysql 的 root 设置密码
注意这里的 -d 一定要后台运行
等创建后 后先不要进入容器 等十几秒 等容器里的MySQL 初始化完成
或者进入容器后 先不要登录MySQL服务
如果这个时候登录MySQL服务 配置可能出问题 导致无法登录
sudo docker exec -it mysql-ser bash
查看是否初始化完成 Docker 安装 MySQL 8 版本
cd /var/run/mysqld
如果在这个路径下能能看到 mysqld.sock 说明初始化完成 可以登录了
mysql -u root -p
输入密码登录即可
接下来就进入到MySQL服务了
create databse db_web
表示 创建一个叫 db_web 的数据库
为安全起见 一个项目对于一个库 建立一个用户 避免密码泄露导致整个库GG
create user 'itloser'@'%' identified with mysql_native_password by '1234qwer';
表示 用户 itloser 可以从任何网络 % 登录mysql服务 密码是 1234qwer
需要将将刚才创建的 db_web数据库 授权给 itloser
GRANT ALL ON db_web.* TO 'itloser'@'%';
ALL 表示 所有权限
db_web.* 表示 db_web这个库的所有表
这句话就是 将 db_web的所有权限授权给 从远程登录的itloser
先退出MySQL服务回到容器
exit;
到此 MySQL的容器基本配置完成
退出即可 Ctrl+P+Q
这里使用git 如果不用git ftp或者什么其他的也行 就是麻烦点 这里不赘述
安装docker时 会自动安装git 如果没有可以
sudo apt install git
由于上面容器配置了项目路径挂载到本机 所以等于容器在使用本机路径 则本机路径是什么内容 容器里就是什么内容
git pull xxx
上面 已经用git拉取了最新的代码
进入容器的项目路径
直接运行即可
go run main.go
使用 nohup 运行
nohup go run main.go > err.log 2>&1 &
如果 run 或者 build 失败 是你网络不行 需要切换到国内源
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
sudo docker images
sudo docker ps -a
sudo docker exec -it xxx /bin/bash
sudo docker exec -it xxx bash
sudo docker stop xxx
sudo docker rm xxx
sudo docker rmi xxx
pgrep xxx
ps aux
ps aux | grep username
lsof -i tcp:25565
kill -9 pid