目录
一、阿里云ECS初始配置及登录
- 外网访问端口设置
- SSH远程登录
二、 Docker部分
- 认识docker
- docker安装
- dokcer部署Go容器
三、mysql部分
- mysql安装
- docker部署mysql容器
- mysql设置用户权限
四、 Nginx部分
- Nginx安装
- Nginx配置反向代理
- docker部署Nginx容器
正文
一、阿里云ECS初始配置及登录
前几天发现双十一阿里云ECS打折活动,于是买了个199/年的乞丐版练练手
1. 初始配置
从阿里云服务管理控制台首次登录会生成一个远程连接密码,此密码只出现一次,注意保存。
接下来对外网访问端口进行设置,否则无法正常从公网访问。
【云服务控制台】----->【实例列表】---->【管理】---->【本实例安全组】
打开如下界面

点击【配置规则】添加3个端口的访问
- tcp 80端口
- tcp 8080端口
- mysql 3306端口

2.SSH远程登录
打开终端命令行输入ssh root@[远程ip地址]
ssh root@110.222.222.222
回车会提示输入root密码(ps:root密码需要在云控制台设置)
登录成功后,会打印出欢迎内容
Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-117-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
New release '18.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
Welcome to Alibaba Cloud Elastic Compute Service !
到此,云服务器主机已经配置好,接下来可以安装一些工具啥的开始干活了。
二、Docker部分
1.认识docker
docker是一个容器引擎,每个容器可以看做是一个隔离的虚拟主机。docker可以创建一个容器用来管理服务的运行停止等,当然作为一个“虚拟主机”,构建某类型服务时,需要依赖于服务所依赖的运行编译环境,即“镜像”。简单点理解,来一幅通俗易懂的图。

大概跑起来之后是这么个样子,因为容器与容器之间,容器与主机之间是隔离的,故不能直接私有访问。
简单理解是这么个玩意,详情请进入Docker官方渠道介绍学习docker中文社区
2.docker安装
本文以ubuntu 16.04系统介绍安装
首先,执行安装命令
sudo apt-get update
sudo apt-get install docker.io
接下来启动docker后台服务
sudo service docker start
如果在本机尝试,可能需要设置国内镜像,或者直接翻墙
设置国内镜像可在/etc/docker/daemon.json文件中加入
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
接下来可以用docker search来搜索所需镜像
docker search mysql
然后下载镜像
docker pull mysql
3.docker部署GO服务
docker部署GO服务首先需要创建Dockerfile,注意Dockerfile的名字一定要是"Dockerfile"。
进入GOPATH下某项目的根目录新建文件“Dockerfile”,写入一下内容
#源镜像
FROM golang:latest
#作者
MAINTAINER Razil "soulline13@163.com"
#设置工作目录
WORKDIR $GOPATH/src/testgo
#将服务器的go工程代码加入到docker容器中
ADD . $GOPATH/src/testgo
#go构建可执行文件
RUN go build .
#暴露端口
EXPOSE 8080
#最终运行docker的命令
ENTRYPOINT ["./testgo"]
然后保存,执行docker build命令
docker build -t testgo .
build完成后可以看到successfully日志,当然,若未编译通过,编译失败的日志也可以看到
成功后执行docker run命令创建并运行容器
docker run --name testgo -p 8080:8080 -d testgo
无论成功或失败,都会生成容器id
执行docker ps -a 命令查看所有容器
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9110c2e2cd2e testgo "./testgo" 3 seconds ago Up 3 seconds 0.0.0.0:8080->8080/tcp testgo
672ad890203c bd2282751b5f "/bin/sh -c 'go buil…" 30 hours ago Exited (1) 30 hours ago hungry_shirley
f8555c9e7450 bd2282751b5f "/bin/sh -c 'go buil…" 31 hours ago Exited (1) 31 hours ago xenodochial_wilson
状态up,表示正常运行
也可以使用docker logs查看容器日志
docker logs -f -t --since="2018-11-01" --tail=1000 testgo
二、Mysql部分
1.mysql安装
sudo apt-get install mysql-server
apt-get isntall mysql-client
注意,安装后不要着急启动mysql服务,如果已经启动
使用service mysql stop停止mysql服务。因为数据库的创建用户权限设置等都要在mysql的docker容器中进行,因为先运行则会占用3306端口和mysql docker容器冲突。
搜索并下载mysql docker进行
docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 7234 [OK]
mariadb MariaDB is a community-developed fork of MyS… 2322 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 534 [OK]
我这里是已经下载好了,如需下载,执行docker pull mysql下载镜像
2.docker部署mysql容器
sudo docker run --name mysql -p 12345:3306 -e MYSQL_ROOT_PASSWORD=12345 -d mysql:5.6.35
执行docker ps -a 查看运行情况
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9110c2e2cd2e testgo "./testgo" 1 hours ago Up 1 hours [0.0.0.0](0.0.0.0):8080->8080/tcp testgo
2e529ce89853 mysql "docker-entrypoint.s…" 3 seconds ago Up 3 seconds [0.0.0.0](0.0.0.0):3306->3306/tcp, 33060/tcp mysql
672ad890203c bd2282751b5f "/bin/sh -c 'go buil…" 30 hours ago Exited (1) 30 hours ago hungry_shirley
f8555c9e7450 bd2282751b5f "/bin/sh -c 'go buil…" 31 hours ago Exited (1) 31 hours ago xenodochial_wilson
进入mysql容器交互命令行状态,准备创建数据库设置用户权限等操作
docker exec -t -i mysql /bin/bash
3.mysql设置用户权限
使用root账号进入mysql
mysql -u root -p
输入密码
mysql>create database test;
mysql>create user 'username'@'host' IDENTIFIED BY 'password';
mysql>GRANT privileges ON databasename.tablename TO 'username'@'host';
四、Nginx部分
为何要使用nginx?我这里的需求是为了解决访问带端口号的问题。http请求默认是80端口,一般访问一个网站不带端口默认就访问了80端口。当我们的服务不在80端口时,就需要通过nginx反向代理来映射到真实的服务端口地址。当然,nginx也可以做负载均衡。
1.nginx安装
sudo apt-get install nginx
安装完成以后,文件夹如下所示
/usr/sbin/nginx:主程序
/etc/nginx:存放配置文件
/usr/share/nginx:存放静态文件
/var/log/nginx:存放日志
同样,安装完之后确保nginx服务未启动
执行 service nginx stop停止服务
接下来下载nginx docker镜像
docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 10055 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1440 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 634 [OK]
docker pull nginx
docker pull nginx下载nginx镜像备用
2.Nginx配置反向代理
首先启动一次nginx docker容器
docker run -p 8080:80 --name nginx_web -it nginx
然后,将docker中的nginx配置文件拷贝到本地主机
docker cp 65bc23f952db:/etc/nginx/ /root/nginx/etc/
完了之后将刚刚启动的nginx docker容器停止并删除
docker stop 65bc23f952db
docker rm 65bc23f952db
解释一下为何要拷贝,因为拷贝到本地是为了待会儿挂载在容器中,方便修改。
接下来配置文件添加
默认情况下nginx.conf都会指向conf.d中的子配置文件,如图

接下来在/root/nginx/etc/conf.d/创建一个反向代理配置文件gogs.conf
填入一下内容
server {
listen 80;
server_name www.test.com; # 把域名替换成你自己的
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.1.2:8080; # 这里设置你要代理的ip+端口
}
}
填好后,此时配置已完成
3.docker部署Nginx容器
执行docker run命令创建并运行nginx容器
docker run --name=nginx_p -p 80:80 -v /root/nginx/html:/usr/share/nginx/html -v /root/nginx/etc/nginx/conf.d:/etc/nginx/conf.d -d nginx
将nginx容器中的配置路径映射到本地主机的配置路径中。
执行docker ps -a 查看运行情况
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
af6599f1db77 nginx "nginx -g 'daemon of…" 3 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp nginx_p
9110c2e2cd2e testgo "./testgo" 1 hours ago Up 1 hours [0.0.0.0](0.0.0.0):8080->8080/tcp testgo
2e529ce89853 mysql "docker-entrypoint.s…" 30 minutes ago Up 30 minutes [0.0.0.0](0.0.0.0):3306->3306/tcp, 33060/tcp mysql
672ad890203c bd2282751b5f "/bin/sh -c 'go buil…" 30 hours ago Exited (1) 30 hours ago hungry_shirley
f8555c9e7450 bd2282751b5f "/bin/sh -c 'go buil…" 31 hours ago Exited (1) 31 hours ago xenodochial_wilson
接下来就可以直接使用ip或者域名不带端口(默认80端口)访问主机中8080端口的服务了
如
www.test.com -----> 192.168.1.2:8080

网友评论