一.环境准备,安装Docker

  1. # 关闭防火墙
  2. systemctl stop firewalld
  3. systemctl disable firewalld
  4. # 关闭selinux
  5. # 临时
  6. setenforce 0
  7. # 永久
  8. sed -i 's/enforcing/disabled/' /etc/selinux/config
  9. # 关闭swap
  10. # 临时
  11. swapoff -a
  12. # 永久
  13. sed -ri 's/.*swap.*/#&/' /etc/fstab
  14. # 时间同步
  15. yum install ntpdate -y
  16. ntpdate time.windows.com
  17. yum install wget
  18. wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
  19. #安装docker
  20. yum -y install docker-ce-18.06.1.ce-3.el7
  21. #设置docker开机启动
  22. systemctl enable docker && systemctl start docker
  23. #查看版本
  24. docker --version
  25. # 提示如下表示成功:Docker version 18.06.1-ce, build e68fc7a
  26. #设置阿里云镜像
  27. cat > /etc/docker/daemon.json << EOF
  28. {
  29. "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
  30. }
  31. EOF
  32. #重启docker
  33. systemctl restart docker
  34. #添加阿里云YUM软件源
  35. cat > /etc/yum.repos.d/kubernetes.repo << EOF
  36. [kubernetes]
  37. name=Kubernetes
  38. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
  39. enabled=1
  40. gpgcheck=0
  41. repo_gpgcheck=0
  42. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  43. EOF

二.docker-compose的安装

https://www.yuque.com/ttvq3f/zw1yu6/msk1p8
Docker Compose 是 Docker 的独立产品,因此需要安装 Docker 之后在单独安装 Docker Compose .
方法一:

  1. #下载
  2. 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
  3. #安装
  4. chmod +x /usr/local/bin/docker-compose
  5. #查看版本
  6. docker-compose version

如果速度慢可以使用(有效):

  1. #下载
  2. 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

注意:

  1. 通过命令下载安装可能比较慢,推荐把二进制文件下载后上传服务器,再安装
  2. 访问https://github.com/docker/compose/releases,选择你需要的版本(最新稳定版就像)的linux二进制文件 docker-compose-Linux-x86_64
  3. 上传二进制文件到服务器/usr/local/bin/目录下,改名为docker-compose
  4. 运行安装命令:chmod +x /usr/local/bin/docker-compose

方法二:

  1. #安装pip
  2. yum -y install epel-release
  3. yum -y install python-pip
  4. #确认版本
  5. pip --version
  6. #更新pip
  7. pip install --upgrade pip
  8. #安装docker-compose
  9. pip install docker-compose
  10. #查看版本
  11. docker-compose version

推荐使用方法一进行安装,安装成功后输入docker-compose version会返回 docker-compose 的版本信息,如下:

  1. [root@localhost ~]# docker-compose version
  2. docker-compose version 1.19.0, build 9e633ef
  3. docker-py version: 2.7.0
  4. CPython version: 2.7.13
  5. OpenSSL version: OpenSSL 1.0.1t 3 May 2016

出现以上信息,表明 docker-compose 安装成功

三.安装mysql

拉取镜像:

  1. docker pull mysql:8.0.18

在/root/dockerfiles下新建mysql文件夹,新建docker-compose.yml文件,写入如下内容:

  1. version: '3.5'
  2. services:
  3. mysql1:
  4. image: mysql:8.0.18
  5. container_name: mysql1
  6. hostname: mysql1
  7. ports:
  8. - 3306:3306
  9. volumes:
  10. - /etc/localtime:/etc/localtime:ro
  11. - /home/data/mysql:/var/lib/mysql
  12. environment:
  13. - SET_CONTAINER_TIMEZONE=true
  14. - CONTAINER_TIMEZONE=Asia/Shanghai
  15. - MYSQL_ROOT_PASSWORD=MVyUqF3Gz6VrFnb6
  16. restart: always

参数说明:

  1. ports:
  2. - 9000:3306 #将mysql的默认端口3360,映射到9000端口
  3. environment:
  4. - SET_CONTAINER_TIMEZONE=true #设置时区
  5. - CONTAINER_TIMEZONE=Asia/Shanghai #设置时区
  6. - MYSQL_ROOT_PASSWORD=MVyUqF3Gz6VrFnb6 #root密码
  7. restart: always #关机重开自动重启

启动mysql容器(注意:执行下面命令,需要在docker-compose.yml文件目录下):

  1. docker-compose up -d

查看是否启动成功:

  1. docker ps -a
  2. # status字段显示为up即可

进入mysql容器:

  1. docker exec -it mysql1 bash
  2. #进入容器后,ll等命令不起作用;不要怀疑,因为,docker容器使用操作系统是最小的,不带很多的工具,使用ls或者自己安一个ll;
  3. mysql -u 用户名 -p
  4. #输入命令,末尾一定要加分号;
  5. show databases;

退出容器:

  1. exit

停止并删除某个进程:

  1. docker stop 6ed5
  2. docker rm 6ed5

关于mysql8.0以上版本,相较于5.0版本插入速度慢的解决办法:

  1. set global sync_binlog = 2000;
  2. show variables like '%sync_binlog%';
  3. set global innodb_flush_log_at_trx_commit = 2;
  4. show variables like '%innodb_flush_log_at_trx_commit%';

四.部署SpringBoot

1.拉取java镜像

  1. docker pull openjdk:8u212-jre

2.创建空文件夹,在文件夹下新建:Dockerfile 和 docker-compose.yml 文件,填入内容
注意:如果出现ERROR: .UnicodeDecodeError: ‘utf-8’ codec can’t decode错误,需将两个文件下的中文删除

Dockerfile内容:

  1. # 创建镜像【docker build -t factoryinfo:v1 .】
  2. FROM openjdk:8u212-jre
  3. MAINTAINER factory
  4. VOLUME /tmp
  5. # jar包
  6. ADD factoryInfo-0.0.1-SNAPSHOT.jar /app.jar
  7. RUN bash -c 'touch /app.jar'
  8. # 时区
  9. RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  10. RUN echo 'Asia/Shanghai' >/etc/timezone
  11. ENTRYPOINT ["java", "-server", "-Xms512M", "-Xmx512M", "-Djava.security.egd=file:/dev/./urandom", "-Dfile.encoding=UTF-8", "-XX:+HeapDumpOnOutOfMemoryError", "-jar", "/app.jar" ]

docker-compose.yml内容:

  1. version: "3"
  2. services:
  3. # 指定服务名称
  4. factoryinfo:
  5. # 镜像名:版本
  6. image: factoryinfo:v1
  7. container_name: factoryinfo
  8. restart: always
  9. # 指定服务运行的端口
  10. ports:
  11. - "8084:8084"
  12. volumes:
  13. - ./jar/factoryInfo-0.0.1-SNAPSHOT.jar:/app/app.jar
  14. networks:
  15. - mysql_default
  16. networks:
  17. mysql_default:
  18. external: true

说明:networks: 将springboot加入之前mysql创建的默认网络中,这样可以使springboot在配置application.yml数据库连接时,不用使用Ip,而是用mysql1容器名称代替host

3.将项目打jar包,放入与Dockerfile同级目录下

4.创建镜像

  1. docker build -t factoryinfo:v1 .

5.启动容器(需进入到含有docker-compose.yml文件的目录下执行)

  1. docker-compose up -d

查看Springboot后台日志

  1. docker logs -f factoryinfo

删除容器(需进入到含有docker-compose.yml文件的目录下执行)

  1. docker-compose down

自动执行脚本(在Windows写的脚本,需要转换成Unix格式才能在Linux中正确运行):
factoryinfo.sh

容器网络

  1. #查询docker网络列表
  2. docker network ls
  3. #查看容器所在的网络network,假设容器名为c1
  4. docker inspect c1 -f "{{json .NetworkSettings.Networks }}"
  5. #要断开容器与第一个网络的连接(假设第一个网络称为 test-net
  6. docker network disconnect test-net c1
  7. #然后将其重新连接到另一个网络(假设它称为 test-net-2
  8. docker 网络连接 test-net-2 c1
  9. #要检查两个(或更多)容器是否一起在网络上:
  10. docker network inspect test-net -f "{{json .Containers }}"

docker-compose在新版本可以使用以下方法,在所有yml中加入,使所有容器都处在同一网络中
https://www.codenong.com/38088279/

  1. version:"3.5"
  2. services:
  3. proxy:
  4. image: hello-world
  5. ports:
  6. -"80:80"
  7. networks:
  8. - proxynet
  9. # docker-compose up -d将加入一个名为" custom_network"的网络。如果不存在,它将被创建!
  10. networks:
  11. proxynet:
  12. name: custom_network