linux部署开发环境
一、安装jdk,配置1.8java环境
1、自动安装
1.直接yum直接拉取 yum install -y java-1.8.0-openjdk-devel.x86_64
2.看版本 java -version
2、手动安装
1.这里使用的是 jdk1.8.0_161,将该压缩包放在/usr/local/java目录下(java需要自己创建),
然后解压:
tar zxvf jdk1.8.0_161.tar.gz
2.配置环境变量
vi /etc/profile
文件尾部添加
JAVA_HOME=/usr/local/java/jdk1.8.0_161
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
按esc加:wq保存退出
3.刷新环境
source /etc/profile
4.测试是否成功
java -version
二、安装docker容器环境
# 环境查看,查看系统内核是哪个版本
uname -r
# 系统版本
cat /etc/os-release
1.可直接使用centos 7自带的yum源
2.配置国内yum源
不建议使用CentOS 7自带的yum源,因为安装软件和依赖时会非常慢甚至超时失败。使用阿里云的源予以替换,执行如下命令:
mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
yum -y update
安装docker,把18.09前版本的删掉。
# 卸载老版本的 docker 及其相关依赖
yum remove -y docker docker-common container-selinux docker-selinux docker-engine
# 官网卸载老版本命令
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装 yum-utils,它提供了 yum-config-manager,可用来管理yum源
yum install -y yum-utils
a. 设置镜像仓库
# 默认是国外的
yum-config-manager --add-repo https://download.docker.com/linux/docker-ce.repo
# 使用国内阿里云的
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
b. 安装合适的docker版本
由于k8s支持的docker版本存在一定的滞后,要选择好合适的docker版本
此次,选择安装的docker版本为18.09
选择查看docker-ce各版本 ce社区版 ee企业版
yum list docker-ce --showduplicates | sort -r
# 可安装最新的版本
yum install docker-ce-cli containerd.io
# 也可安装指定版本的docker-ce
yum -y install docker-ce-18.09.9
启动docker服务并激活开机启动
systemctl start docker & systemctl enable docker
查看docker版本
docker version
运行第一个docker容器
docker run hello-world
先是没有找到镜像
远程拉取官方library/hello-world
签名信息代表拉取成功,并运行ok了
hello from docker就证明你安装docker成功了
docker images查看镜像
# 设置阿里云镜像加速:
1.登录阿里云找到容器镜像服务
2.找到镜像加速器地址(每个人都有一个加速器地址)下面的地址是我自己的
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://26g2lirm.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# 安装docker-compose
Docker-compose是docker的服务编排工具,主要是用来构建多个服务,一般是构建构建多个有关联的服务,比如要部署一个Spingboot项目,那么一般都需要关系型数据库,有可能还需要NOSQL,比如redis;如果利用dockerfile来构建,就需要编写三个dockerfile,构建镜像,运行容器;但是使用docker-compose,就可以将这三个服务都包含在一个docker-compose.yml文件中,最后使用命令:docker-compose up 命令 就可以构建一整套完整的服务体系。
yum install python3-pip
pip3 install --upgrade pip
pip3 install docker-compose
安装过程报错:
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-jmx38jpw/cryptography/
解决办法:
先运行pip3 install --upgrade pip
再pip3 install docker-compose
# 如果要卸载docker
1.卸载依赖
# 如果安装的是最新的版本
yum remove docker-ce docker-ce-cli containerd.io
# 安装的是指定版本
yum remove docker-ce-18.09.9
2.删除资源
rm -rf /var/lib/docker
Docker是怎么工作的?
Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Sockert从客户端访问
DockerServer接收到Docker-Client的指令,就会执行这个指令
Docker为什么比VM快?
1.Docker有着比虚拟机更少的抽象层
2.Docker利用的是宿主机的内核,vm需要的是Guest OS
新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导,虚拟机是加载Guest OS,分钟级别的。docker是利用的是宿主机的内核,是秒级的。
# Docker帮助命令
docker version # 显示版本信息
docker info # 显示系统信息,包括镜像和容器的数量
docker 命令 --help # 帮助命令
文档地址:https://docs.docker.com/engine/reference/commandline/
# Docker镜像命令
docker images # 查看所有本地的主机上的镜像-a列出所有镜像 -q显示所有id
REPOSITORY TAG IMAGE ID CREATED SIZE
镜像的仓库源 镜像的标签 镜像的id 镜像的创建时间 镜像的大小
docker search *** # 搜索镜像--filter=STARS=3000过滤STARS3000以上的
docker pull *** # 下载镜像,不写:tag默认就是latest
docker rmi -f 容器id # 删除单个镜像
docker rmi -f $(docker images -aq) # 循环删除所有镜像
# Docker容器命令
有了镜像才可以创建容器!
docker run [可选参数] image
--name="Name"容器名字
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-P 随机指定端口
docker ps 列出当前正在运行的容器
-a 列出当前正在运行的容器+历史运行的容器
-n=? 显示最近创建的容器
-q 只显示容器的编号
docker rm 容器id 删除指定容器,若运行中的容器加-f可以删除
docker rm -f $(docker ps -aq) 删除所有容器
docker ps -a -q|xargs docker rm 删除所有容器
docker start 容器id 运行容器
docker restart 容器id 重启容器
docker stop 容器id 停止容器
docker kill 容器id 强制停止当前容器
# 常用其他命令
后台启动容器
docker run -d 容器
常见的坑:docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
查看日志
docker logs -tf --tail 10 容器id
-tf 显示日志
-tail number 要显示的日志条数
查看容器中进程信息
docker top 容器id
查看镜像的元数据
docker inspect 容器id
进入当前正在运行的容器
1.docker exec -it 容器id /bin/bash 进入容器后开启一个新的终端,可以在里面操作
2.docker attach 容器id 进入容器正在执行的终端,不会启动新的进程
从容器内拷贝
dockers cp 容器id:容器内路径 母的的主机路径
1.进入docker容器内部
2.在容器内新建一个文件
3.将文件拷贝出来到主机上
拷贝是一个手动过程,后面可以使用-v卷的技术实现
可视化面板安装Portainer
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
记得在阿里云上开放公网.
进入Portainer后选本地local的
# commit镜像
Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部。
这一层就是我们通常说的容器曾,容器之下的都叫镜像层。
docker commit 提交容器成为一个新的副本
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
实战测试:
1.启动一个默认的Tomcat
2.发现这个默认的Tomcat是没有webapps应用,镜像的原因,官方的镜像默认没有文件
3.自己拷贝进去基本的文件
4.将我们操作过的容器通过commit提交为一个镜像!以后就使用我们修改过的镜像即可
说明:如果你想要保存当前容器的状态,就可以通过commit来提交,获得一个镜像,就跟快照一样
三、配置nginx容器
1.搜索nginx镜像
docker search nginx
2.拉取nginx镜像
docker pull nginx
3.创建容器,设置端口映射、目录映射
# 在/root目录下创建nginx目录用于存储nginx数据信息
mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf
# 在~/nginx/conf/下创建nginx.conf文件,粘贴下面内容
vim nginx.conf(可直接用默认配置)
4.启动容器
docker run --name=c_nginx -p 80:80 -v $PWD/logs:/var/log/nginx(自己创建的位置) -d nginx:latest
-p 80:80 : 将容器的80端口映射到主机的80端口
-v $PWD/logs:/var/log/nginx:将主机当前目录下的 logs 目录挂载到容器的/var/log/nginx。日志目录
# 进入容器就可以看见conf目录
docker exec -it c_nginx /bin/bash;
whereis nginx;
cd /etc/nginx;
vi nginx.conf;
四、配置redis容器
1.搜索redis镜像
docker search redis
2.拉取redis镜像
docker pull redis
3.启动镜像,数据持久化存方式启动
docker run -p 6379:6379 -v $PWD/data:/data(自己设置的位置) --name redis -d redis redis-server --appendonly yes
命令说明:
-p 6379:6379 : 将容器的6379端口映射到主机的6379端口
-v $PWD/data:/data : 将主机中当前目录下的data挂载到容器的/data
redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置
docker inspect 容器id
找到mounts挂载双向绑定
source是主机挂载地址
destination是容器地址
五、配置mysql容器
1.搜索mysql镜像
docker search mysql
2.拉取mysql镜像
docker pull mysql
3.启动镜像,数据持久化存方式启动
docker run -p 3306:3306 --name c_mysql -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
可以多重挂载挂载conf和data
-v /home/mysql/conf:/etc/mysql/conf.d
v $PWD/data:/var/lib/mysql:将主机当前目录下的data目录挂载到容器的
/var/lib/mysql (data目录为mysql配置的数据文件存放路径,这个还是建议挂载,是存储数据的,容器down掉,还能再次挂载数据。)
-e MYSQL_ROOT_PASSWORD=123456 初始化 root 用户的密码
六、配置tomcat容器
1.搜索tomcat镜像
docker search tomcat
2.拉取mysql镜像
docker pull tomcat
3.启动运行
docker run -d -p 8080:8080 --name c_tomcat
# 测试访问有没有问题
docker exec -it c_tomcat /bin/bash
# 发现webapps无内容,需要将webapps.dist内容赋值到webapps内容中去
cp -r webapps.dist/* webapps
webapps部署项目用的。
# 进入容器太麻烦了,可以在容器外部提供一个映射路径,我们在外部部署项目,自动同步到内部。
七、配置es+kibana
# 占内存,es里面数据需要挂载
# 需要加一个 --net somenetwork 网络配置
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
自动下载,会很卡,耗内存.
docker stats查看容器占用资源的情况cpu
# 测试es是否成功
curl localhost:9200
# 增加内存的限制,修改配置文件,-e 环境配置修改
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300
-e "discovery.type=single-node"
-e ES_JAVA_OPTS="-Xms64m -Xmx512m(根据服务器内存大小更改)" elasticsearch:7.6.2
# 使用kibana连接es,网络如何连接过去
八、容器数据卷
容器的持久化和同步操作,容器间可以共享数据!
命令挂载 -v 主机目录,容器内目录
以后修改只需要在本地修改即可(如数据库数据,redis数据可以直接本地添加即可),容器内即可同步
# 具名和匿名挂载
匿名挂载
docker run -d -p --name nginx01 -v /etc/nginx nginx
在-v只写了容器内的路径未写容器外的路径
具名挂载
docker run -d -p --name nginx01 -v juming-nginx:/etc/nginx nginx
所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxx/_data
拓展
ro 只读设置了容器权限,只能通过宿主机来操作
rw 默认rw
docker run -d -p --name nginx01 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -p --name nginx01 -v juming-nginx:/etc/nginx:rw nginx
初识Dockerfile
Dockerfile就是用来构建docker镜像的构建文件!命令脚本
# 创建一个dockerfile文件,名字随机
# 指令大写
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----end----"
CMD /bin/bash
数据卷容器
为了给别的容器共享数据
结论
容器之间配置信息的传递,数据卷容器的声明周期一直持续到没有容器使用为止
持久化到本地,本地的数据是不会删除的