上传已经制作好的go语言程序(网站)go+html+mysql+redis.zip
[root@docker ~]# ls
anaconda-ks.cfg go+html+mysql+redis.zip[root@docker ~]# mkdir /Dockerfile
[root@docker ~]# cp go+html+mysql+redis.zip /Dockerfile/
[root@docker ~]# cd /Dockerfile/
[root@docker Dockerfile]# ls
go+html+mysql+redis.zip
安装unzip并解压
[root@docker Dockerfile]# yum install unzip -y
[root@docker Dockerfile]# unzip go+html+mysql+redis.zip[root@docker Dockerfile]# ls
go+html+mysql+redis.zip go.mod go.sum info.sql Readme.md server.go static templates
简要说明:
server.go 核心go语言程序代码
Readme.md 了解程序,包括安装和核心解析
info.sql 数据库里的表和基础数据
static 存放了网站的js和css代码
templates 存放了网站的静态页面
go.mod 定义当前项目的模块路径和依赖关系
go.sum 记录项目依赖项的哈希值
[root@docker Dockerfile]# tree
.
├── go+html+mysql+redis.zip
├── go.mod
├── go.sum
├── info.sql
├── Readme.md
├── server.go
├── static
│ ├── add_student.js
│ ├── login.js
│ ├── search_student.js
│ └── styles.css
└── templates
├── add_student.html
├── guid.html
├── login.html
└── search_student.html
云服务器中启动MySQL容器
******是设置的容器密码
[root@aliyun-guangzhou ~]# docker run -d -p 3316:3306 --name go-mysql-1 -e MYSQL_ROOT_PASSWORD='******' mysql:5.7.41
测试MySQL能否访问
123.45.67.89为云服务器的公网ip
[root@docker Dockerfile]# mysql -h 123.45.67.89 -uroot -p'******' -P 3316
出现以下界面说明测试连接成功
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.41 MySQL Community Server (GPL)Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.02 sec)MySQL [(none)]>
修改server.go核心程序的数据库配置
[root@docker Dockerfile]# vim server.go
const (
DB_USER = "root"
DB_PASSWORD = "******"
DB_NAME = "sanchuang"
DB_HOST = "tcp(123.45.67.89:3316)/"
REDIS_HOST = "123.45.67.89:6379"
)
将go代码编译成二进制程序
[root@docker Dockerfile]# yum install epel-release -y
[root@docker Dockerfile]# yum install golang -y
[root@docker Dockerfile]# mv go.mod go.sum /root
[root@docker Dockerfile]# ls
go+html+mysql+redis.zip info.sql Readme.md server.go static templates
配置一个国内的go语言下载库的代理网站
[root@docker Dockerfile]# go env -w GOPROXY=https://goproxy.cn,direct
产生go.mod 生成网站所需要的依赖的库,写到go.mod文件里
[root@docker Dockerfile]# go mod init web
[root@docker Dockerfile]# ls
go+html+mysql+redis.zip go.mod info.sql Readme.md server.go static templates
执行go mod tidy后产生go.sum
[root@docker Dockerfile]#go mod tidy
[root@docker Dockerfile]# ls
go+html+mysql+redis.zip go.mod go.sum info.sql Readme.md server.go static templates
编译网站成一个二进制程序
[root@docker Dockerfile]# go build -o server server.go
[root@docker Dockerfile]# ls
go+html+mysql+redis.zip go.mod go.sum info.sql Readme.md server server.go static templates
编写Dockerfile
Dockerfile 是制作镜像的配置文件
#指定容器里使用的微型的系统是centos7 -->基础镜像
FROM centos:7
#进入容器时会进入这个工作目录,在执行镜像的时候会自动创建 -->家目录 --> docker exec
WORKDIR /go
#复制宿主机当前目录下的所有的内容到容器的/go目录下 --> docker cp
COPY . /go
#容器启动运行的时候执行的命令,使用的是绝对路径执行/go/server程序
ENTRYPOINT ["/go/server"]
#command 命令
CMD ["/go/server"]
[root@docker Dockerfile]# mkdir docker
[root@docker Dockerfile]# cd docker/
[root@docker docker]# ls
[root@docker docker]# vim Dockerfile
FROM centos:7.9
WORKDIR /go
COPY . /go
ENTRYPOINT ["/go/server"]
CMD ["/go/server"][root@docker docker]# ls
Dockerfile
复制二进制程序+static+templates文件夹到目录下
[root@docker docker]# cp /Dockerfile/server .
[root@docker docker]# cp /Dockerfile/static/ . -r
[root@docker docker]# cp /Dockerfile/templates/ . -r
[root@docker docker]# ls
Dockerfile server static templates
制作镜像
[root@docker docker]# docker build -t scweb:1.0 .
查看镜像
[root@docker docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
scweb 1.0 162f3d33f84e 34 seconds ago 464MB
nginx latest bc649bab30d1 9 months ago 187MB
mysql 5.7.41 0018a8d83892 16 months ago 455MB
redis alpine 5130e5ba7d24 17 months ago 29.9MB
centos 7 eeb6ee3f44bd 2 years ago 204MB