当前位置:   article > 正文

Ubuntu使用Docker安装Redis和MySQL并在本机部署Go项目_ubuntu redis mysql docker

ubuntu redis mysql docker

一、Docker 安装

这里我们安装社区版

sudo apt install docker-ce
  • 1

二、镜像 下载

Golang

sudo docker pull golang
  • 1

Redis

sudo docker pull redis
  • 1

MySQL

可以访问 Docker Hub 查看 MySQL的版本

sudo docker pull mysql:8.0.31
  • 1

这里为什么拉取 8.0.31 版本的 mysql,是因为其他版本需要配置 稍微麻烦点。

具体看这篇文章吧 Docker 安装 MySQL 登录报错

三、启动容器

查看所有镜像

sudo docker images
  • 1

可以看到我们刚才拉取的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
  • 1
  • 2
  • 3
  • 4

1、Golang

创建容器

使用golang镜像启动一个golang容器

sudo docker run -it --name go-push -p 25565:25565 -v /home/itloser/dev/push:/go/push golang:latest /bin/bash
  • 1

这里的 -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#
  • 1

说明我们进入了容器的终端

先创建我们的项目路径 我们现在就是 /go路径下 直接创建push即可

mkdir push
  • 1

退出容器

直接退出容器 并销毁容器 快捷键 Ctrl+D

exit
  • 1

注意 我们这里需要退出容器 但是在后台运行

所以我们使用 Ctrl+P+Q 退出

退出后可以使用

sudo docker ps
  • 1

查看刚才创建的容器 可以看到它在后台运行中

注意

这里golang容器牵扯容器之间的端口访问限制问题(可以解决 但是配置起来有点麻烦),故采用Redis和MySQL安装在Docker,Go环境安装在本机。详情可见下面golang本机安装。

2、Redis

创建Redis容器

sudo docker run -itd --name redis-ser -p 6379:6379 redis:latest
  • 1

这里的 -itd 是 -i -t -d 和简写 这里的只说下 -d 表示 在后台运行

这个配置我们开发和测试足够用了 也就是默认配置 没密码

如果要放到生产环境或者需要自定义配置可以看其他大佬写的这一篇详细配置 这里我不再赘述

史上最详细Docker安装Redis(含每一步的图解)实战

3、进入Redis容器

sudo docker exec -it redis-ser bash
  • 1

进入redis服务

redis-cli
  • 1

设置密码

config set requirepass 1234qwer
  • 1

查看密码

config get requirepass
  • 1

校验密码

auth 1234qwer
  • 1

同步密码(若不同步可能会出现重启服务后密码失效的情况)

config rewrite
  • 1

按 ctrl+c 退出redis服务并回到容器

重启redis服务 验证密码是否生效

redis-server restart
//或者
/etc/init.d/redis-server restart
  • 1
  • 2
  • 3

配置完成后 最后按 Ctrl+P+Q 退出容器

3、MySQL

创建MySQL容器

sudo docker run -d --name mysql-ser -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234qwer mysql:8.0.31
  • 1

这里的 -e MYSQL_ROOT_PASSWORD=1234qwer 是为 mysql 的 root 设置密码

注意这里的 -d 一定要后台运行

等创建后 后先不要进入容器 等十几秒 等容器里的MySQL 初始化完成

或者进入容器后 先不要登录MySQL服务

如果这个时候登录MySQL服务 配置可能出问题 导致无法登录

进入MySQL容器

sudo docker exec -it mysql-ser bash
  • 1

查看是否初始化完成 Docker 安装 MySQL 8 版本

cd /var/run/mysqld
  • 1

如果在这个路径下能能看到 mysqld.sock 说明初始化完成 可以登录了

登录mysql服务

mysql -u root -p
  • 1

输入密码登录即可

接下来就进入到MySQL服务了

创建项目要用到的数据库

create databse db_web
  • 1

表示 创建一个叫 db_web 的数据库

添加用户

为安全起见 一个项目对于一个库 建立一个用户 避免密码泄露导致整个库GG

create user 'itloser'@'%' identified with mysql_native_password by '1234qwer';
  • 1

表示 用户 itloser 可以从任何网络 % 登录mysql服务 密码是 1234qwer

授权

需要将将刚才创建的 db_web数据库 授权给 itloser

GRANT ALL ON db_web.* TO 'itloser'@'%';
  • 1

ALL 表示 所有权限

db_web.* 表示 db_web这个库的所有表

这句话就是 将 db_web的所有权限授权给 从远程登录的itloser

退出容器

先退出MySQL服务回到容器

exit;
  • 1

到此 MySQL的容器基本配置完成

退出即可 Ctrl+P+Q

四、项目同步

Git安装

这里使用git 如果不用git ftp或者什么其他的也行 就是麻烦点 这里不赘述

安装docker时 会自动安装git 如果没有可以

sudo apt install git
  • 1

由于上面容器配置了项目路径挂载到本机 所以等于容器在使用本机路径 则本机路径是什么内容 容器里就是什么内容

拉取项目

git pull xxx
  • 1

五、运行

上面 已经用git拉取了最新的代码

进入golang容器

进入容器的项目路径

直接运行即可

go run main.go
  • 1

使用 nohup 运行

nohup go run main.go > err.log 2>&1 &
  • 1

如果 run 或者 build 失败 是你网络不行 需要切换到国内源

换源 Go换国内源

export GO111MODULE=on

export GOPROXY=https://goproxy.cn
  • 1
  • 2
  • 3

六、Docker常用命令

查看本机所有镜像

sudo docker images
  • 1

查看本机所有容器

sudo docker ps -a
  • 1

进入容器

sudo docker exec -it xxx /bin/bash

sudo docker exec -it xxx bash
  • 1
  • 2
  • 3

停止容器

sudo docker stop xxx
  • 1

删除容器

sudo docker rm xxx
  • 1

删除镜像

sudo docker rmi xxx
  • 1

本机直接安装Golang

结束进程

搜索进程名称

pgrep xxx
  • 1

列出所有进程

ps aux
  • 1

列出这个用户的进程

ps aux | grep username
  • 1

查询占用该端口的进程

lsof -i tcp:25565
  • 1

杀死进程

kill -9 pid
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/811581
推荐阅读
相关标签
  

闽ICP备14008679号