搭建Java项目运行环境-容器化部署

docker容器

1.安装docker

官网:·https://docs.docker.com/engine/install/centos/

  1. 安装相关依赖:yum -y install gcc,yum -y install gcc-c++,yum install -y yum-utils
  2. 添加阿里云yum源库:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  3. 更新yum源库:yum makecache fast
  4. 安装DOCKER CE:yum -y install docker-ce docker-ce-cli containerd.io
  5. 启动docker:systemctl stop firewalld(关闭防火墙),systemctl start docker
  6. 测试:docker -v

配置阿里云加速器时,配置后无法启动,需要在/etc/docker/daemon.json中加上“storage-driver”: “devicemapper”,

2.相关操作

【帮助启动类命令】
启动docker: systemctl start docker
停止docker: systemctl stop docker
重启docker: systemctl restart docker
查看docker状态: systemctl status docker
开机启动: systemctl enable docker
查看docker概要信息: docker info
查看docker总体帮助文档: docker --help
查看docker命令帮助文档: docker 具体命令 --help
查看docker运行日志:journalctl -u docker.service

【镜像命令】
列出本地主机上的镜像:docker images
查看镜像库中的镜像:docker search 镜像名
下载镜像:docker pull 镜像名
查看镜像/容器/数据卷所占的空间:docker system df
删除镜像:docker rmi -f 镜像名

【容器命令】
新建+启动容器:·docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
–name=“容器新名字” 为容器指定一个名称;
-d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;也即启动交互式容器(前台有伪终端,等待交互);
-P: 随机端口映射,大写P
-p: 指定端口映射,小写p

列出当前所有正在运行的容器:docker ps
退出容器:exit,run进去容器,exit退出,容器停止;ctrl+p+q,run进去容器,ctrl+p+q退出,容器不停止
启动已停止运行的容器:docker start 容器ID或者容器名
重启容器:docker restart 容器ID或者容器名
停止容器:docker stop 容器ID或者容器名
强制停止容器:docker kill 容器ID或容器名
删除已停止的容器:docker rm 容器ID
查看容器日志:docker logs 容器ID
进入容器中:·docker exec -it 容器ID /bin/bash
从容器内拷贝文件到主机上:docker cp 容器ID:容器内路径 目的主机路径
导出容器:·docker export 容器ID > 文件名.tar
导入容器为镜像:·cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

挂载卷启动:docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
·查看数据卷是否挂载成功:docker inspect 容器ID

【网络配置】
查看网络:docker network ls
查看网络源数据:docker network inspect XXX网络名字
删除网络:docker network rm XXX网络名字

bridge模式:使用–network bridge指定,默认使用docker0
host模式:使用–network host指定
none模式:使用–network none指定
container模式:使用–network container:NAME或者容器ID指定

重设网桥:(docker0是默认网桥,在ping容器内部IP时发现网络不通)

  1. 关闭docker 服务 systemctl stop docker
  2. yum install bridge-utils,利用brctl show查看网桥
  3. 添加网桥 brctl addbr br0
  4. 添加ip范围段:ip addr add 172.16.0.1/24 dev br0
  5. 启用网桥 ip link set dev br0 up
  6. 常看br0 网桥信息 ifconfig br0
  7. 修改docker默认网桥 vim /etc/docker/daemon.json: “bridge”:“br0”,
  8. 启动docker服务, systemctl start docker, 查看网桥信息,br0已经生效

ifconfig docker0 down 关闭网桥
ifconfig docker0 up 开启网桥

docker+mysql

  1. 查看镜像库mysql镜像:docker search mysql

  2. 拉取mysql:5.7:docker pull mysql:5.7

  3. 启动mysql容器:docker run -d -p 3306:3306 --privileged=true -v /zzyyuse/mysql/log:/var/log/mysql -v /zzyyuse/mysql/data:/var/lib/mysql -v /zzyyuse/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7 #包含挂载卷(配置,日志,数据)

  4. 进入容器中:docker exec -it 容器ID /bin/bash,登录:mysql -uroot -p

docker+redis

  1. 准备并修改配置文件:redis.conf
    开启redis验证:requirepass 123(可选)
    允许redis外地连接:注释掉 # bind 127.0.0.1
    后台运行:daemonize yes
    开启redis数据持久化: appendonly yes(可选)
  2. 拉取镜像:docker pull redis:6.0.8
  3. 运行镜像:docker run -p 6379:6379 --name redis --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
  4. 进入容器登录:docker exec -it 容器ID redis-cli

dockerfile构建项目镜像

构建命令:
FROM:基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from
MAINTAINER:镜像维护者的姓名和邮箱地址
RUN:容器构建时需要运行的命令
EXPOSE:当前容器对外暴露出的端口
WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
USER:指定该镜像以什么样的用户去执行,如果都不指定,默认是root
ENV:用来在构建镜像过程中设置环境变量
ADD:将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
COPY:类似ADD,拷贝文件和目录到镜像中。 将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
VOLUME:容器数据卷,用于数据保存和持久化工作
CMD:指定容器启动后的要干的事情,Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
ENTRYPOINT:也是用来指定一个容器启动时要运行的命令,类似于 CMD 指令,但是ENTRYPOINT不会被docker run后面的命令覆盖, 而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序

docker build -t 新镜像名字:TAG . //构建镜像,dockerfile和jar都在当前目录下
docker image prune //虚悬镜像已经失去存在价值,可以删除

参考dockerfile:
FROM java:8 # 基础镜像使用java
MAINTAINER zzyy # 作者
VOLUME /tmp # VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
ADD docker_boot-0.0.1-SNAPSHOT.jar zzyy_docker.jar # 将jar包添加到容器中并更名为zzyy_docker.jar
RUN bash -c ‘touch /zzyy_docker.jar’
ENTRYPOINT [“java”,“-jar”,“/zzyy_docker.jar”] # 运行jar包
EXPOSE 6001 #暴露6001端口作为微服务

docker-compose容器编排

官网下载:https://docs.docker.com/compose/install/
安装:

  1. 下载:curl -L “https://github.com/docker/compose/releases/download/1.29.2/docker-compose- ( u n a m e − s ) − (uname -s)- (unames)(uname -m)” -o /usr/local/bin/docker-compose
  2. 赋权限:chmod +x /usr/local/bin/docker-compose
  3. 查看版本:docker-compose --version

卸载:rm /usr/local/bin/docker-compose

【编写docker-compose.yml】
参考:
version: “3”
services:
microService:
image: zzyy_docker:1.6
container_name: ms01
ports:
- “6001:6001”
volumes:
- /app/microService:/data
networks:
- atguigu_net
depends_on:
- redis
- mysql

redis:
image: redis:6.0.8
ports:
- “6379:6379”
volumes:
- /app/redis/redis.conf:/etc/redis/redis.conf
- /app/redis/data:/data
networks:
- atguigu_net
command: redis-server /etc/redis/redis.conf

mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: ‘123456’
MYSQL_ALLOW_EMPTY_PASSWORD: ‘no’
MYSQL_DATABASE: ‘db2021’
MYSQL_USER: ‘zzyy’
MYSQL_PASSWORD: ‘zzyy123’
ports:
- “3306:3306”
volumes:
- /app/mysql/db:/var/lib/mysql
- /app/mysql/conf/my.cnf:/etc/my.cnf
- /app/mysql/init:/docker-entrypoint-initdb.d
networks:
- atguigu_net
command: --default-authentication-plugin=mysql_native_password #解决外部无法访问

networks:
atguigu_net:

【常用命令】
docker-compose -h # 查看帮助
docker-compose up # 启动所有docker-compose服务
docker-compose up -d # 启动所有docker-compose服务并后台运行
docker-compose down # 停止并删除容器、网络、卷、镜像。
docker-compose exec yml里面的服务id # 进入容器实例内部
docker-compose ps # 展示当前docker-compose编排过的运行的所有容器
docker-compose top # 展示当前docker-compose编排过的容器进程

docker-compose logs yml里面的服务id # 查看容器输出日志
docker-compose config # 检查配置
docker-compose config -q # 检查配置,有问题才有输出
docker-compose restart # 重启服务
docker-compose start # 启动服务
docker-compose stop # 停止服务

docker可视化工具Portainer

官网:www.portainer.io/
安装:docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

登录:·第一次登录需创建admin,访问地址:xxx.xxx.xxx.xxx:9000

访问时出现Failure Got permission denied while trying to connect to the Docker daemon socket,解决如下:SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。

  1. 临时关闭(不用重启机器):
    setenforce 0 ##设置SELinux 成为permissive模式 ,setenforce 1 设置SELinux 成为enforcing模式
  2. 修改配置文件需要重启机器:
    修改/etc/selinux/config 文件
    将SELINUX=enforcing改为SELINUX=disabled
    重启机器即可 或者sed -i ‘s/^SELINUX=enforcing$/SELINUX=permissive/’ /etc/selinux/config
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值