一个项目,开发和上线两套环境,应用环境配置费时费力,而且容易出问题。为了解决这问题,所谓开发即运维,就是开发人员使用 Docker 来解决 “它在我的机器可以正常运行” 的问题,它会将运行程序的相关配置打包(打包成 一个镜像),然后直接搬移到新的机器上运行。从而保证系统稳定性,提高部署效率。
Docker的基本组成:
Docker官方建议在Ubuntu中安装,因为 Docker 是基于Ubuntu发布的,由于很多公司的环境都使用的是 CentOS ,如果安装到 CentOS 上,需要注意Docker 要求 CentOS 系统的内核版本高于 3.10 ,需要安装 64位 CentOS7.x 以上的版本。
查看当前系统的内核版本
uname -r
卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
更新yum软件包索引
yum makecache fast
安装相关插件
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
设置Docker的镜像仓库-使用阿里源
# 使用阿里源
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 清华大学源
sudo yum-config-manager \
--add-repo \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
进行安装
sudo yum install docker-ce docker-ce-cli containerd.io
安装最新版本的 Docker CE
yum install docker-ce
#安装中出现下面提示, 输入 y 然后回车
#安装docker相关的 docker-ce 社区版 而ee是企业版
yum install docker-ce docker-ce-cli containerd.io
启动与停止Docker服务
启动docker: systemctl start docker
停止docker: systemctl stop docker
重启docker: systemctl restart docker
查看docker状态:systemctl status docker
开机自动启动docker:systemctl enable docker
Docker帮助命令:docker --help
卸载Docker服务
卸载依赖 yum remove docker-ce docker-ce-cli containerd.io
删除资源 rm -rf /var/lib/docker
/var/lib/docker 是docker的默认工作路径!
1、登录阿里云找到容器服务,搜索镜像服务,找到镜像加速器
通过修改daemon配置文件/etc/docker/daemon.json来使用加速器,如果不存在则手动创建,文件加入上面的地址内容。然后重启docker服务,
#重载此配置文件 systemctl daemon-reload
#重启 docker systemctl restart docker
docker官网镜像搜索 : https://hub.docker.com
#查看所有本地主机上的镜像
docker images
#搜索镜像
docker search
#搜索出来的镜像就是STARS大于3000的mysql镜像
docker search mysql --filter=STARS=3000
#拉取镜像 (如果不写标签名,默认就是latest)
docker pull 镜像名:标签名
#删除镜像
docker rmi -f 镜像id 镜像id 镜像id 镜像id
#删除全部镜像
docker rmi `docker images -q`
#查看全部容器
docker ps -a
#查看正在运行容器:
docker ps
#查看停止的容器
docker ps -f status=exited
#启动容器
docker start 容器id
#重启容器
docker restart 容器id
#停止当前正在运行的容器
docker stop 容器id
#强制停止当前容器
docker kill 容器id
#删除指定容器
docker rm 容器id
exit #容器直接退出
ctrl +P +Q #容器不停止退出
# 语法:docker run [OPTIONS] 镜像名:标签名
# 创建容器后,马上会启动容器,并进入容器
例子:docker run -it --name=容器名 镜像名:标签名 /bin/bash
# 数据目录挂载
docker run -id -v /宿主机绝对路径目录:/容器内目录 --name=容器名 镜像名
# 目录挂载只读(Read-only)权限
docker run -id -v /宿主机绝对路径目录:/容器内目录:ro --name=容器名 镜像名
# 创建一个守护式容器(后台运行的容器)
docker run -id --name=容器名 镜像名:标签名
# 登录已经启动的容器方式
方式1 docker exec -it 容器id bashshell
方式2 docker exec -it 容器名称|容器id /bin/bash
# 将宿主机文件拷贝到容器内
docker cp 要拷贝的宿主机文件或目录 容器名称:容器文件或目录
# 从容器内文件拷贝到宿主机
docker cp 容器名称:要拷贝的容器文件或目录 宿主机文件或目录
注意:文件拷贝 docker cp 命令 均在宿主机中操作
# 查看容器中进程信息 ps
docker top 容器id
# 查看日志
docker logs -t --tail n 容器id #查看n行日志
docker logs -ft 容器id #跟着日志
# 查看镜像的元数据
docker inspect 容器id
# 查看容器IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名
# 查看当前docker运行状态 (查看CPU状态)
docker stats
# 拉取MySQL镜像
docker pull mysql:5.7
# 创建 MySQL 容器
docker run -id --name=my_mysql -p 33306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=密码 mysql:5.7
# -d 后台启动 -p 端口映射 -v 卷挂载 -e 环境变量 -name 容器名字
# 进入MySQL容器, 登陆MySQL
docker exec -it mxg_mysql /bin/bash
# docker exec -it mxg_mysql /bin/bash
# 登录Mysql
mysql -u root -p
# 拉取镜像
docker pull nginx
# 创建容器
docker run -d --name=nginx01 -p 3344:80 nginx
# 查看本机的状况
curl localhost:3344
# 进入容器,查看容器配置文件
whereis nginx
docker pull redis
docker run -id --name=mxg_redis -p 6379:6379 redis
docker pull tomcat
# 创建容器
docker run -id --name=tomcat01 -p 9095:8080 -v /usr/project:/usr/local/tomcat/webapps --
privileged=true tomcat
步骤:--privileged=true 如果映射的是多级目录,防止有可能会出现没有权限的问题,
-v 映射目录:宿主机目录:容器映射目录
docker pull elasticsearch
# 创建容器
docker run -id --name=elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
步骤:-e ES_JAVA_OPTS 增加内存限制64兆,最大是512兆
# 查看本机的状况
curl localhost:9200
提交一个镜像:
提交容器成为镜像
docker commit -m=“描述信息” -a="作者名字" 容器id 目标镜像名:[版本号]
例子:
docker commit -m=“描述” -a="yan" 7..容器ID tomcatNew:1.0
使用数据卷:
# -v 两个目录进行关联挂载
docker run -it -v 主机目录:容器内的目录
# 多个容器实现数据共享 ,创建第2个容器,引用之前创建好的容器名。
docker run --.... --volumes-form 其他容器名
dockerfile 是用来构建docker镜像文件
步骤:
例子:构建JDK镜像
# 来自基础镜像
FROM centos:7
# 指定镜像创建者信息
MAINTAINER goodyan
# 切换工作目录 /usr/local
WORKDIR /usr/local
# 创建一个存放jdk的路径
RUN mkdir /usr/local/java
# 安装vim插件
RUN yum -y install vim
# 将jdk压缩包复制并解压到容器中/usr/local/java
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java
# 配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
CMD ["/bin/bash"]
docker build -f / dockerfiel文件位置) -t 要生成的镜像名:[版本号] .
docker build -f /home/dockerdir/dockerfiel -t tomcatNew:1.0 .
# 查看是否构建成功
docker images
将本地镜像推送到阿里云镜像仓库
# 1.登录阿里云Docker Registry, 密码为开通服务时设置的密码
docker login --username=用户名 registry.cn-xxx(每个人地址不一样)
# 2.标记此镜像为阿里云仓库的镜像
docker tag [镜像id] registry.cn-xxxx.xxx.com/xxx/jdk:[镜像版本号]
# 3.提交
docker push 镜像名:[镜像版本号]
步骤1. 准备SpringBoot项目,进行打包
mvn package install
步骤2. 启动命令,进行测试是否启动成功
windows系统启动:java -jar xxx.jar
Linux系统启动:nohup java -jar xxx.jar
步骤3.创建dockerfiel文件,与jar包存在同一目录
dockerfiel文件内容:
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
步骤4.上传服务器,构建镜像
docker build -f /home/xxx/dockerfiel文件地址(如果在当前目录可省略-f)-p 端口映射 -t 镜像名:1.0 .
步骤5.查看镜像
docker images
步骤6.运行启动镜像
docker run -id --name=容器名 镜像名:标签名
或 docker run -d --name 容器名 -p 端口外:端口内 镜像名:标签名
步骤1:修改docker服务配置文件
# 修改配置文件
vim /lib/systemd/system/docker.service
# 修改内容
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
(修改ExecStart那行,并开启2375端口,0.0.0.0代表任何ip都可以访问)
# 重新加载配置文件
systemctl daemon-reload
# 重启docker
systemctl restart docker.service
# 查看端口是否开启
netstar -nlpt # 如果没有这个命令,安装插件 yum install net-tools
# 关闭防火墙 / 开发端口号的防火墙
firewall-cmd --list-ports # 查看
firewall-cmd --zone=public --add-port=2375/tcp --permanent # 设置
firewall-cmd --reload # 重启
步骤2:IDEA工具配置连接Docker
步骤3:使用 docker-maven-plugin插件 ,实现自动化部署
修改pop.xml文件
com.spotify
docker-maven-plugin
1.0.0
${docker.image.prefix}/${project.artifactId}
latest
java
[email protected]
/ROOT
["java", "-version"]
["java", "-jar", "${project.build.finalName}.jar"]
http://123.56.94.235:2375
/ROOT
${project.build.directory}
${project.build.finalName}.jar
然后我们执行打包命令,就在Docker服务生成镜像
mvn clean package docker:build
步骤4:打包自动化,自动化部署