很早之前就关注Docker了,但由于实习实在是太忙了,一直没空研究,最近开始着手毕业设计,就借此机会好好研究了一下,想把毕业设计部署到Docker中。(我本身也是菜鸟,肯定有很多错误,希望各位大佬们轻喷O(∩_∩)O~~)
Docker是什么呢?官方解释是说,Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。Docker 包含三个基本概念,分别是镜像(Image)、容器(Container)和仓库(Repository)。什么是容器呢?我理解的是,容器就像是一个更轻量的虚拟机,(但是这样理解也有错误,因为容器并不虚拟硬件)。容器为镜像,例如一个Nginx镜像,一个SQL Server镜像,甚至是一个SpringBoot提供运行环境,你可以将上述应用直接部署在Docker上,仓库就是存放镜像的地方,DockerHub是docker的公共仓库,我们也可以构建自己的私有仓库。好了话不多说,让我们开始吧。
我要部署的项目是一个前端加后端的项目,前端用的Antd全家桶(基于React),后端是SpringBoot,数据库是SQL Server和MongoDB,前端页面请求后端数据,后端访问两个数据库,所以大体思路上就需要4个容器:Nginx(部署前端页面)、SpringBoot容器(后端应用)、SQLServer容器以及MongoDB容器。Nginx是一个反向代理服务器,我以前没接触过,所以配置起来格外吃力o(╥﹏╥)o,我们将前端页面部署在它上面。MongoDB是一个非关系型数据库,我利用它来存放文件。
我们利用Docker-Compose构建应用,Docker-Compose的服务编排工具,主要用来构建基于Docker的复杂应用,Docker-Compose构建应用的时候可以使用DockerHub上的镜像,也可以使用自己构建的镜像。DockerHub类似于一个仓库,上面有很多其他人已经写好的镜像,例如nginx,我们可以直接使用。
首先安装Docker:
sudo url -sSL https://get.docker.com/ | sh
如果提示url找不到先执行命令:sudo apt-get install curl libcurl3 libcurl3-dev php5-curl
安装完毕后在/etc/docker下新建daemon.json文件,添加如下代码:
{
"registry-mirrors": [
"http://9600955f.m.daocloud.io"
],
"insecure-registries": []
}
这个操作的目的是配置镜像加速,可以使镜像下载的更快,该地址可以到daocloud上免费申请。
安装完毕后使用docker -v查看是否安装成功,一切配置完毕后就可以使用了
安装配置Nginx
使用docker search搜索镜像,例如:
docker search nginx
如图第一个镜像就是官方的nginx镜像,使用sudo docker pull nginx下载镜像。
因为我已经下载了,所以不会再次下载,等待下载完成后就可以使用该镜像了。
我们使用docker run命令使用指定的镜像启动一个容器,例如:
sudo docker run -d --name mynginx -p 8080:80 nginx
-d表示让容器在后台运行,--name是起一个别名,-p是容器的80端口对应主机的8080端口,nginx就是我们刚刚pull下来的镜像。
运行完毕后,打开浏览器,输入http://127.0.0.1:8080/,显示如下页面,说明nginx已经启动成功了:
使用docker ps查看正在运行中的镜像:
使用docker ps -a查看所有镜像:
2018/5/29日更
nignx现在算是启动起来了,那么我们现在就是要往上面部署我们的页面了。
部署页面需要让nginx知道页面存放路径,我们需要修改nginx的配置文件。
nginx有两个配置文件,路径如下:
/etc/nginx/nginx.conf
/etc/nginx/conf.d
里面包含了例如配置页面存放路径、请求转发等配置,上面的路径是容器里内的路径,所以我们要用到挂载,将主机的路径挂载到容器内的目录,这样容器内的nginx可以直接访问主机的目录下的配置文件。
新建如下两个文件 ,可以自己指定路径,但要跟后文匹配。
/etc/docker/mynginx/nginx.conf
/etc/docker/mynginx/conf.d
然后打开编辑nginx.conf里面的内容
#nginx.conf
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;#容器内目录
}
这个配置文件我们主要看inculd,他后面的路径就是另一个配置文件conf.d的路径,要注意的是,这个路径不是当前主机conf.d的目录,而是挂载的容器内的路径。
另一个配置文件conf.d的内容:
#conf.d
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;#容器内目录
index index.html index.htm;
}
location /api{
proxy_pass http://192.168.1.1:9999/api;
# access_log "logs/test.log";
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
这个配置文件比较容易理解,listen监听80端口,服务名是localhost,location /后就是我们要部署的页面路径,这是nginx的路径匹配,匹配上的路径会进行相应的请求,有兴趣的可以深究,我就不多说了。
root /usr/share/nginx/html;#容器内目录
index index.html index.htm;
这一行就是配置我们页面的地址,表示页面放在了容器内的/usr/share/nginx/html目录下,同样我们也可以将本地目录挂载到上面。
创建/usr/docker/mynginx/html目录,在html目录下新建index.html,然后编辑添加如下内容:
Hello World
然后执行以下命令:
sudo docker run \
--name mynginx \
-d -p 8080:80 \
-v /usr/docker/mynginx/html:/usr/share/nginx/html \
-v /etc/docker/mynginx/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /etc/docker/mynginx/conf.d:/etc/nginx/conf.d \
nginx
注意执行以上命令时先用docker rm mynginx删除已经存在的mynginx容器,否则会报错。
该命令比之前的命令多了三行挂载的命令。:前面是主机的目录,后面是nginx容器的目录,这样容器就可以直接访问主机内的文件了。
执行命令后页面如下说明配置成功:
后面可以配置任意的页面,只需要将index页面放到html路径下即可,挂载还有两种方式,分别是用DocekrFile文件和Docker-Compose.yaml文件构建,我会在后面详细解释。
安装配置SQLServer
安装SQLServer微软给出了比较全的步骤,大家可以参考下:Get started with SQL Server 2017 on Dockerdocs.microsoft.com
首先pull镜像
sudo docker pull microsoft/mssql-server-linux:2017-latest
pull下来后可以直接使用run命令运行了,但是里面有几个参数需要注意:
sudo docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Alex@1016' \
-p 1433:1433 --name mysqlserver \
-d microsoft/mssql-server-linux:2017-latest
ACCEPT_EULA=Y表示要同意一个
执行以上命令后你应该就创建好了一个SQLServer镜像,可以直接使用了。我们可以使用
sqlcmd进行连接,也可以使用图形化界面例如DBeaver进行连接。
首先安装sqlcmd
sudo apt-get install mssql-tools
安装完毕后就可以使用了,这里需要配置一下环境变量:
sudo gedit /etc/profile
添加 export PATH="$PATH:/opt/mssql-tools/bin"
然后 source /etc/profile使配置立即生效
使用
sqlcmd -S localhost -U SA -P 'Alex@1016'
连接数据库
然后就可以操作数据库了,例如创建一个库,注意输完命令都要输入go结束
创建完毕我们插入数据
use test
create table USERS(NAME varchar(255),PASSWORD varchar(255))
insert into USERS (NAME,PASSWORD)values('alex','123');
select * from USERS
查询到了我们刚刚插入的语句。
至此,SQLserver就安装成功了,但是这并不是我们需要的,因为我们是从SpringBoot容器中访问SQLServer容器,而我们采用这种方式只能从主机访问,这就涉及到容器的通信,我们后面使用Docker-Compose构建就可以实现。
to be continued...
Ps:大佬们留个赞再走呗(๑╹∀╹๑)