一.环境准备,安装Docker
# 关闭防火墙systemctl stop firewalldsystemctl disable firewalld# 关闭selinux# 临时setenforce 0# 永久sed -i 's/enforcing/disabled/' /etc/selinux/config# 关闭swap# 临时swapoff -a# 永久sed -ri 's/.*swap.*/#&/' /etc/fstab# 时间同步yum install ntpdate -yntpdate time.windows.comyum install wgetwget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo#安装dockeryum -y install docker-ce-18.06.1.ce-3.el7#设置docker开机启动systemctl enable docker && systemctl start docker#查看版本docker --version# 提示如下表示成功:Docker version 18.06.1-ce, build e68fc7a#设置阿里云镜像cat > /etc/docker/daemon.json << EOF{"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]}EOF#重启dockersystemctl restart docker#添加阿里云YUM软件源cat > /etc/yum.repos.d/kubernetes.repo << EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF
二.docker-compose的安装
https://www.yuque.com/ttvq3f/zw1yu6/msk1p8
Docker Compose 是 Docker 的独立产品,因此需要安装 Docker 之后在单独安装 Docker Compose .
方法一:
#下载sudo curl -L https://github.com/docker/compose/releases/download/1.20.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose#安装chmod +x /usr/local/bin/docker-compose#查看版本docker-compose version
如果速度慢可以使用(有效):
#下载curl -L "https://get.daocloud.io/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
注意:
通过命令下载安装可能比较慢,推荐把二进制文件下载后上传服务器,再安装访问https://github.com/docker/compose/releases,选择你需要的版本(最新稳定版就像)的linux二进制文件 docker-compose-Linux-x86_64上传二进制文件到服务器/usr/local/bin/目录下,改名为docker-compose运行安装命令:chmod +x /usr/local/bin/docker-compose
方法二:
#安装pipyum -y install epel-releaseyum -y install python-pip#确认版本pip --version#更新pippip install --upgrade pip#安装docker-composepip install docker-compose#查看版本docker-compose version
推荐使用方法一进行安装,安装成功后输入docker-compose version会返回 docker-compose 的版本信息,如下:
[root@localhost ~]# docker-compose versiondocker-compose version 1.19.0, build 9e633efdocker-py version: 2.7.0CPython version: 2.7.13OpenSSL version: OpenSSL 1.0.1t 3 May 2016
出现以上信息,表明 docker-compose 安装成功
三.安装mysql
拉取镜像:
docker pull mysql:8.0.18
在/root/dockerfiles下新建mysql文件夹,新建docker-compose.yml文件,写入如下内容:
version: '3.5'services:mysql1:image: mysql:8.0.18container_name: mysql1hostname: mysql1ports:- 3306:3306volumes:- /etc/localtime:/etc/localtime:ro- /home/data/mysql:/var/lib/mysqlenvironment:- SET_CONTAINER_TIMEZONE=true- CONTAINER_TIMEZONE=Asia/Shanghai- MYSQL_ROOT_PASSWORD=MVyUqF3Gz6VrFnb6restart: always
参数说明:
ports:- 9000:3306 #将mysql的默认端口3360,映射到9000端口environment:- SET_CONTAINER_TIMEZONE=true #设置时区- CONTAINER_TIMEZONE=Asia/Shanghai #设置时区- MYSQL_ROOT_PASSWORD=MVyUqF3Gz6VrFnb6 #root密码restart: always #关机重开自动重启
启动mysql容器(注意:执行下面命令,需要在docker-compose.yml文件目录下):
docker-compose up -d
查看是否启动成功:
docker ps -a# status字段显示为up即可
进入mysql容器:
docker exec -it mysql1 bash#进入容器后,ll等命令不起作用;不要怀疑,因为,docker容器使用操作系统是最小的,不带很多的工具,使用ls或者自己安一个ll;mysql -u 用户名 -p#输入命令,末尾一定要加分号;show databases;
退出容器:
exit
停止并删除某个进程:
docker stop 6ed5docker rm 6ed5
关于mysql8.0以上版本,相较于5.0版本插入速度慢的解决办法:
set global sync_binlog = 2000;show variables like '%sync_binlog%';set global innodb_flush_log_at_trx_commit = 2;show variables like '%innodb_flush_log_at_trx_commit%';
四.部署SpringBoot
1.拉取java镜像
docker pull openjdk:8u212-jre
2.创建空文件夹,在文件夹下新建:Dockerfile 和 docker-compose.yml 文件,填入内容
注意:如果出现ERROR: .UnicodeDecodeError: ‘utf-8’ codec can’t decode错误,需将两个文件下的中文删除
Dockerfile内容:
# 创建镜像【docker build -t factoryinfo:v1 .】FROM openjdk:8u212-jreMAINTAINER factoryVOLUME /tmp# jar包ADD factoryInfo-0.0.1-SNAPSHOT.jar /app.jarRUN bash -c 'touch /app.jar'# 时区RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeRUN echo 'Asia/Shanghai' >/etc/timezoneENTRYPOINT ["java", "-server", "-Xms512M", "-Xmx512M", "-Djava.security.egd=file:/dev/./urandom", "-Dfile.encoding=UTF-8", "-XX:+HeapDumpOnOutOfMemoryError", "-jar", "/app.jar" ]
docker-compose.yml内容:
version: "3"services:# 指定服务名称factoryinfo:# 镜像名:版本image: factoryinfo:v1container_name: factoryinforestart: always# 指定服务运行的端口ports:- "8084:8084"volumes:- ./jar/factoryInfo-0.0.1-SNAPSHOT.jar:/app/app.jarnetworks:- mysql_defaultnetworks:mysql_default:external: true
说明:networks: 将springboot加入之前mysql创建的默认网络中,这样可以使springboot在配置application.yml数据库连接时,不用使用Ip,而是用mysql1容器名称代替host
3.将项目打jar包,放入与Dockerfile同级目录下
4.创建镜像
docker build -t factoryinfo:v1 .
5.启动容器(需进入到含有docker-compose.yml文件的目录下执行)
docker-compose up -d
查看Springboot后台日志
docker logs -f factoryinfo
删除容器(需进入到含有docker-compose.yml文件的目录下执行)
docker-compose down
自动执行脚本(在Windows写的脚本,需要转换成Unix格式才能在Linux中正确运行):
factoryinfo.sh
容器网络
#查询docker网络列表docker network ls#查看容器所在的网络network,假设容器名为c1docker inspect c1 -f "{{json .NetworkSettings.Networks }}"#要断开容器与第一个网络的连接(假设第一个网络称为 test-net)docker network disconnect test-net c1#然后将其重新连接到另一个网络(假设它称为 test-net-2)docker 网络连接 test-net-2 c1#要检查两个(或更多)容器是否一起在网络上:docker network inspect test-net -f "{{json .Containers }}"
docker-compose在新版本可以使用以下方法,在所有yml中加入,使所有容器都处在同一网络中
https://www.codenong.com/38088279/
version:"3.5"services:proxy:image: hello-worldports:-"80:80"networks:- proxynet# docker-compose up -d将加入一个名为" custom_network"的网络。如果不存在,它将被创建!networks:proxynet:name: custom_network
