Docker安装配置

23 篇文章 0 订阅
22 篇文章 0 订阅

目录

操作系统、镜像、容器

阿里云ubuntu16.04安装Docker

Docker启动的容器中安装组件


操作系统、镜像、容器

Docker镜像和操作系统没关系,docker最大的价值就是提出了镜像打包技术。
首先你得明白什么是docker,什么是镜像,什么是容器,然后你就能明白镜像和操作系统之间的关系。
Docker整体来说是一个引擎,是基于内核的一种技术。比如Linux内核,那么它就关心是不是Linux内核,它不关心你是
Ubuntu还是CentOS。所以docker也实现了和操作系统的解耦。

镜像呢,是把服务的运行环境打成了一个包,比如tomcat,镜像里面是把除操作系统的内核以外,然后再加上tomcat的二进制包。然后通过docker引擎构建出来一个tomcat的镜像。
容器呢,比如我们想创建一个tomcat服务,之前的方式是在服务器中通过tar或者是rpm安装一个tomcat,然后在start tomcat;如果我们要安装多台的话我们需要多次手动去操作部署。现在有了tomcat镜像以后,我们可以直接利用镜像创建出多个tomcat来(关系是一个tomcat镜像可以创建出多个tomcat容器-即tomcat服务),把容器看成是tomcat的进程就行。

明白他们3个之间的关系,你应该就能明白镜像和操作系统之间的关系了吧。其实这个问题最好是换成docker和操作系统的关系,这样理解起来更容易。
docker它是基于内核的一种技术,但不是虚拟化技术!运行在windows上需要下载for windows的版本,之前么有出windows,mac版本大家都是在上面安装一个virtualbox虚拟一个linux系统来跑docker,现在docker官方专门支持了mac系统,下载对应的包就行?微软也在研发windows docker,因为windows和linux内核不一样,所以现在大家都是用在linux上,微软的docker就支持2016,2008,2012,2016,这些版本我们公司希云cSphere支持了!
Docker的镜像其实是个tar文件,只要有对应的Docker引擎(如果没有Docker引擎就自然就不行了),就可以通过镜像创建出容器来!

总结:所有的镜像都是运行在,docker引擎之上,但是docker又依赖于操作系统内核,所以docker软件自身是分操作系统部署的,但是镜像不需要,windows中也可以通过wsl来运行Linux相关程序。

阿里云ubuntu16.04安装Docker

Docker要求Ubuntu系统的内核版本高于3.10,首先确认系统内核:uname -r
查看到当前的系统内核是4.4.0-117-generic
1.由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本
sudo apt-get remove docker docker-engine docker-ce docker.io
2.更新apt包索引:
sudo apt-get update
3.安装以下包以使apt可以通过HTTPS使用存储库(repository):
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
4.添加Docker官方的GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
5.使用下面的命令来设置stable存储库:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
6.再更新一下apt包索引:
sudo apt-get update
7.安装最新版本的Docker CE:
sudo apt-get install -y docker-ce

在生产系统上,可能会需要应该安装一个特定版本的Docker CE,而不是总是使用最新版本:    
列出可用的版本:apt-cache madison docker-ce    
选择要安装的特定版本,第二列是版本字符串,第三列是存储库名称,它指示包来自哪个存储库,以及扩展它的稳定性级别。    
要安装一个特定的版本,将版本字符串附加到包名中,并通过等号(=)分隔它们:    
sudo apt-get install docker-ce=<VERSION>    
8.查看docker服务是否启动:systemctl status docker    
下图是启动场景:

若未启动,则启动docker服务:sudo systemctl start docker

9.验证Docker,经典的hello world
sudo docker run hello-world
有下图输出表示安装成功!通过命令:docker version可查看本次安装Docker版本为19.03.2,为2019/09/19最新版本

Docker服务安装->Docker镜像(为Docker装系统)->Docker容器(启动容器)->Docker容器内安装jdk、tomcat、nginx等->Docker容器打包镜像安装->安装到其它环境

Docker服务可以拉取多个镜像,构建多个Docker容器,从而出现多个运行环境            
☆☆☆https://www.cnblogs.com/findumars/p/7887605.html            
https://www.cnblogs.com/guanfuchang/p/10831426.html            
https://www.jianshu.com/p/59e0a8828b3b            
https://blog.csdn.net/u012081441/article/details/78802345            
10.Docker engine(引擎)安装完成后,下一步就是制作镜像系统            
本次在Docker引擎上制作Ubuntu16.04系统:            
docker pull ubuntu:16.04            
验证安装后的镜像:docker images,记录imageId:657d80a6401d

 

到此步骤,Docker引擎的镜像安装完毕。

11.镜像系统制作完成之后,创建并启动Docker容器    
注:由于本台阿里云服务器在安装Docker之前在宿主机已经安装好运行环境,不过没关系,Docker容器只是找安装程序,并在容器    
内安装自己的jdk、tomcat等服务,与宿主机已安装好的环境无关。所以如果服务器创建两个容器,并且宿主机自身也有运行环境,    
则两个容器环境和宿主机环境可以组成一个相当于3台机器的虚拟集群。    
由于宿主机的jdk、tomcat、nginx、mysql的安装文件在/data/目录下,所以需要把/data/目录挂载到容器的路径下/usr/local/    
所以启动容器并挂载路径命令如下:    
docker run -i -t -v /data/:/usr/local/ 657d80a6401d /bin/bash    
或docker run -i -t -v /data/installfiles:/usr/local/ ubuntu:16.04 /bin/bash    
备注:不一定要使用“镜像 ID”,也可以使用“仓库名:标签名”    
命令参数说明:    
-i:表示以“交互模式”运行容器    
-t:表示容器启动后会进入其命令行    
-v:表示需要将本地哪个目录挂载到容器中    
初始命令表示一旦容器启动,需要运行的命令,此时使用“/bin/bash”,表示什么也不做,只需进入命令行即可。    
所以,运行完以上命令就已经进入到容器当中,如图:

进入容器后,挂载到容器的路径是否有所需文件cd /usr/local/,执行ls,发现把/data/路径下所有安装文件都挂载进来了
但是实际上除了tomcat、jdk、nginx之外,其它文件不需要挂载到Docker中,所以重新整理宿主机路径,重新挂载
所以退出Docker容器执行命令exit,退出后,如图

发现当前有两个容器,一个是运行的hello-world容器,一个是创建的ubuntu容器,ubuntu的容器id为:82b3838ef522

 

把需要安装的文件整理到一个文件夹,重新把/data/installfiles/路径挂载到容器的/usr/local
首先查看运行容器:docker ps,然后再查看所有容器:docker ps -a,发现当前没有运行容器,有两个容器,都未运行
然后执行一条语句停止所有容器并删除容器(Docker引擎运行前提下):
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
Docker命令参照:https://www.cnblogs.com/q4486233/p/6482711.html
执行完此语句后,再通过docker ps -a命令查看,发现当前Docker引擎下没有容器
重新初始化一个容器:docker run -i -t -v /data/installfiles:/usr/local/ ubuntu:16.04 /bin/bash

 发现挂载到容器中目录下的只有三个需要安装的文件,接下来就在ubuntu16.04容器中安装需要的程序    
进入容器命令:docker exec -it a3f1756cb81d /bin/bash,"a3f1756cb81d"为容器ID    
停止/启动Docker容器:docker stop a3f1756cb81d(容器ID)/docker start a3f1756cb81d    
更改拉取镜像源:由于国外网站太慢,换成国内镜像源    
https://blog.csdn.net/meltsnow/article/details/92851811    
https://www.cnblogs.com/luoposhanchenpingan/p/11285392.html    
vim /etc/docker/daemon.json (如果没有daemon.json文件可手动创建)registry-mirrors之外内容可选择性添加    
{    
registry-mirrors: [    
https://kfwkfulq.mirror.aliyuncs.com,    
https://2lqq34jg.mirror.aliyuncs.com,    
https://pee6w651.mirror.aliyuncs.com,    
https://registry.docker-cn.com,    
http://hub-mirror.c.163.com    
],    
dns: ["8.8.8.8","8.8.4.4"]    
}

Docker启动的容器中安装组件

安装Docker后,首先安装整个环境的基础JDK8,本次使用java版本1.8.0_131。    
再安装支撑前后端运行的服务器nginx和tomcat,本次由于使用的是springboot2.1.3,tomcat至少8.5或以上。    
tomcat版本:apache-tomcat-8.5.27.tar.gz,nginx版本:nginx-1.14.0.tar.gz    
由于Springboot、mybatis、shiro在后端工程已配置OK,Maven及maven包已经进入到工程下,所以以上后端所需无需安装在Docker    
nginx和tomcat安装完成后,需要在Docker安装mysql,mysql的版本是mysql5.7.27,与开发环境保持一致Docker中再安装缓存数据库redis,版本为redis3.0.6(查看redis版本:redis-cli,输入密码:auth 密码,再输入info)    
前端工程的搭建顺序:    
1.下载node.js,下载完node.js后,node.js中就有npm包,里面包含巨量的包库。    
2.根据npm库安装全局vue-cli脚手架,用于于帮助搭建所需的模板框架。    
3.创建项目,初始化webpack。4.安装项目所需依赖包。5.测试前端环境是否搭建成功    
由于前端环境最后是以一个包的形式存在,把包放在nginx扫描的路径下即可,所以Dcoker中无需安装node.js等组件;所以最后确定,Docker中安装nginx、tomcat、mysql、redis,两个服务器两个数据库    
在安装其它组件之前,需要先安装编辑工具vim:apt-get update && apt-get install vim    
查看Docker容器的ip:docker inspect 容器ID(a3f1756cb81d) | grep IPAddress    
Docker想下载网上资源,需要先执行apt-get update,这个命令的作用是:    
同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。

1)安装JDK    
进入Docker容器的安装文件目录:cd /usr/local,解压jdk压缩包tar -zxvf jdk-8u152-linux-x64.tar.gz    
将解压后的jdk改名:mv jdk1.8.0_152/ jdk/    
配置环境变量:vim /etc/profile    
export JAVA_HOME=/usr/local/jdk    
export JRE_HOME=${JAVA_HOME}/jre    
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib    
export PATH=${JAVA_HOME}/bin:$PATH    
使文件生效:source /etc/profile,验证jdk:java -verison和javac,出现版本号即安装成功    
配置java开机自启,vim /etc/bash.bashrc,或vim ~/.bashrc在末尾加入    
#set jdk Start up    
export JAVA_HOME=/usr/local/jdk    
export PATH=$JAVA_HOME/bin:$PATH    
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar    
让文件生效:source /etc/bash.bashrc,退出容器,再重新进入容器,验证jdk,java -version,依然能出现jdk版本号    
证明开机自启生效    
2)安装tomcat    
解压tar -zxvf apache-tomcat-8.5.27.tar.gz,为tomcat改名:mv apache-tomcat-8.5.27/ tomcat/    
由于全程一直在使用root用户,所以无需加用户权限,不过在用root用户操作系统时,一定要注意不要误操作    
进入目录/usr/local/tomcat/bin,编辑文件vim startup.sh/shutdown.sh,在最后一行之前加入如下信息:    
#set java environment    
export JAVA_HOME=/usr/local/jdk    
export JRE_HOME=${JAVA_HOME}/jre    
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib    
export PATH=${JAVA_HOME}/bin:$PATH    
#tomcat    
export TOMCAT_HOME=/usr/local/tomcat    
配置tomcat开机自启:vim /etc/rc.local    
#set java environment    
export JAVA_HOME=/usr/local/jdk    
export JRE_HOME=${JAVA_HOME}/jre    
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib    
export PATH=${JAVA_HOME}/bin:$PATH    
/usr/local/tomcat/bin/startup.sh    
执行命令:bin/startup.sh启动后验证是否启动成功:ps -ef|grep tomcat,如果存在tomcat进程表示请求成功,如果非要用tomcat首页验证tomcat启动成功,需要制作tomcat镜像去验证,详情参照以上URL步骤。

3)安装nginx        
①如果选择在线安装比较简单:apt-get install nginx        
安装好的文件位置:        
/usr/sbin/nginx:主程序        
/etc/nginx:存放配置文件        
/usr/share/nginx:存放静态文件        
/var/log/nginx:存放日志        
开始测试Nginx前,我们需要配置防火墙,以便允许外界访问nginx服务。Nginx在安装的时候使用ufw注册自己作为一个服务,这样对nginx的访问就会变得很容易。        
显示所有ufw应用的配置:sudo ufw app list        
可以得到一个配置的输出列表:

可以看到,有三个Nginx的配置:        
Nginx Full: 这个配置打开 80端口和443端口        
Nginx HTTP: 这个配置只打开80 (普通, 未加密通信)        
Nginx HTTPS: 这个配置只打开 443 (TLS/SSL 加密通信 )

一般来说我们应该配置最严的限制,因为本文我们还没有配置SSL,所以我们只打开80端口。我们执行:        
ufw allow 'Nginx HTTP',验证修改状态:sudo ufw status        
安装完成后,Ubuntu 16.04 会自动启动 Nginx. 我们可以使用systemd 检查运行状态:systemctl status nginx        
之后就可以通过浏览器验证nginx是否安装配置成功了        
②本次采用离线安装方法        
首先安装nginx需要几个依赖库:1、gcc g++,2、pcre,3、zlib,4、ssl        
apt-get install build-essential        
apt-get install libtool        
apt-get install libpcre3 libpcre3-dev        
apt-get install zlib1g-dev        
apt-get install openssl        
安装完以上依赖库后,创建nginx目录:mkdir /usr/local/nginx        
进入路径cd /usr/local/nginx-1.14.0,执行以下命令:        
./configure --prefix=/usr/local/nginx        
make && make install        
cd /usr/local/nginx/sbin,检查nginx是否安装成功,./nginx -t正确结果显示:        
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok        
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful        
启动、重启、停止nginx:cd /usr/local/nginx,        
sbin/nginx(启动),sbin/nginx -s reload(重启),sbin/nginx -s stop(停止)        
执行命令验证nginx是否启动:ps -ef | grep nginx        
添加软连接:ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx        
删除软连接:rm -rf /usr/bin/nginx,注意:源、目标文件/目录都不要在后面加"/",否则会删掉实际目录中文件

设置nginx开机自启:        
在/etc/init.d/目录下创建名为nginx的文件:        
sudo touch /etc/init.d/nginx        
vim /etc/init.d/nginx        
#!/bin/bash        
        
set -e        
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin        
DESC="nginx daemon"        
NAME=nginx        
DAEMON=/usr/local/nginx/sbin/$NAME        
SCRIPTNAME=/etc/init.d/$NAME        
                
# If the daemon file is not found, terminate the script.        
test -x $DAEMON || exit 0        
                
d_start() {        
        $DAEMON || echo -n " already running"        
}        
                
d_stop() {        
        $DAEMON –s quit || echo -n " not running"        
}        
            
d_reload() {        
        $DAEMON –s reload || echo -n " could not reload"        
}        
                
case "$1" in        
    start)        
    echo -n "Starting $DESC: $NAME"        
    d_start        
    echo "."        
    ;;        
stop)        
    echo -n "Stopping $DESC: $NAME"        
    d_stop        
    echo "."        
    ;;        
reload)        
    echo -n "Reloading $DESC configuration..."        
    d_reload        
    echo "reloaded."        
    ;;        
restart)        
    echo -n "Restarting $DESC: $NAME"        
    d_stop        
# Sleep for two seconds before starting again, this should give the        
# Nginx daemon some time to perform a graceful stop.        
    sleep 2        
    d_start        
    echo "."        
    ;;        
*)        
    echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2        
    exit 3        
    ;;        
esac        
exit 0        
脚本授权:chmod +x /etc/init.d/nginx        
如果系统没有sysv-rc-conf服务,则先下载该服务器:apt-get install sysv-rc-conf        
命令行运行:sysv-rc-conf,出现一个页面,以下为页面说明        
设置开机自启的动作:上下键切换到nginx选项,空格选中,q保存退出

运行级别说明:    
S   表示开机后就会运行的服务    
0   表示关机    
1   表示单用户模式  (类似windows的安全模式)    
2   表示无网络服务的多用户模式    
3   表示多用户模式    
4   系统预留(暂没使用)    
5   表示多用户图形模式    
6   表示重启    
vim /etc/rc.local 添加/etc/init.d/nginx start 加入到rc.local文件中,这样开机的时候nginx就默认启动了。

4)安装mysql    
因为此Docker容器中装有ubuntu16.04的系统环境,所以可以采用在线安装mysql(首先apt-get update)    
apt-get install mysql-server,一路自动安装,中间需要输入一次root用户的密码,为了方便直接密码用户一致,之后可以    
自行修改    
安装完成后,启动mysql:service mysql start,启动后检验:ps -ef | grep mysql    
mysql -u root -p,输入密码进入    
配置mysql远程访问:vim /etc/mysql/mysql.conf.d/mysqld.cnf,把文件中的bind-address = 127.0.0.1注释掉    
grant all on *.* to root@'%' identified by '你的密码' with grant option;(开放所有ip对root访问权限高危)    
flush privileges;    
退出mysql服务,重启mysql:service mysql restart,远程配置完毕。    
修改mysql数据库存储路径:https://blog.csdn.net/buzaishihaizi/article/details/102606033    
ubuntu16.04安装mysql8参照:https://blog.csdn.net/BugOverseas/article/details/84065832    
https://blog.csdn.net/twyth1214/article/details/80983438    
构建mysql8镜像:docker pull mysql:8.0.16

参照URL:https://blog.csdn.net/qq_41463655/article/details/90136848        
初始化mysql8的容器,开启宿主机3307端口,因为宿主机3306端口已被宿主机的mysql占据        
docker run --name mysql8.0 -e MYSQL_ROOT_PASSWORD=root123456 -p 3307:3306 -d mysql:8.0.16        
在阿里云平台的安全组规则允许3307端口        
Navicat连接docker容器mysql8:        
进行授权远程连接(注意mysql 8.0跟之前的授权方式不同)        
1、授权:GRANT ALL ON *.* TO 'root'@'%';        
2、刷新权限:flush privileges;        
此时,还不能远程访问,因为Navicat只支持旧版本的加密,需要更改mysql的加密规则        
3、更改加密规则:ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;        
4、更新root用户密码:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root的密码';        
5、刷新权限:flush privileges;        
6、Navicat连接,端口输入3307,连接成功

5)安装redis    
因为组件都是在Docker的ubunt16.04容器中安装的,和ubuntu16.04系统安装步骤一样:    
直接在线安装redis:sudo apt-get install redis-server    
安装完成后,需要手动启动下:redis-server,验证启动redis-cli,输入命令:keys *    
配置远程访问:vim /etc/redis/redis.conf,#bind 127.0.0.1注释掉,配置密码:requirepass redis6379,设置密码为redis6379    
输入密码:auth 密码    
修改后重启服务:/etc/init.d/redis-server restart    
但是容器中安装后的redis,没有自动启动,且没有形成服务,设置redis开机自启:    
docker容器内服务随容器启动而自启动,参照:    
https://blog.csdn.net/qq_34661580/article/details/77771717    
https://blog.csdn.net/mcuhome/article/details/83592763    
https://blog.csdn.net/codemonkeyyyyyyy/article/details/90294222

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戰士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值