linux系统环境:centos 5.14
安装docker和docker-compose
安装docker---------
运行命名等待安装完成 遇到选择直接输入y
yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce
安装完成后输入命令检查
docker --version
启动docker、
sudo systemctl start docker
设置开启开机启动
sudo systemctl enable docker
安装docker-compose-----------
安装docker-compose
sudo pip install docker-compose
查看版本
docker-compose version
如若报错:
Cannot uninstall ‘requests’. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
执行:
pip install docker-compose --ignore-installed requests
执行后查看版本(执行这个命令可能会报错,但是查看版本没问题)
添加镜像加速器(不添加下载镜像会很慢)
mkdir -p /etc/docker
下面---内的直接全部复制回车-----
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"]
}
EOF
------
添加后运行下面命令
systemctl daemon-reload
systemctl restart docker
添加镜像加速器完成
安装好之后就是部署spring boot 项目,我现在使用两种方法部署spring boot 项目:
第一种是直接使用dockerfile部署项目。
首先,把自己的spring boot 项目先打包成jar包。
然后创建Dockerfile文件,没有文件类型,就是没有后缀.txt,然后把Dockerfile文件和jar包放在服务器同一目录。
接着我们编辑Dockerfile文件。
# 表示使用 Jdk8 环境 为基础镜像,如果镜像不是本地的会从 DockerHub 进行下载
FROM java:8
# 作者
MAINTAINER wt
# VOLUME 指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。
# 这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar,可以使用相对路径、绝对路径,这里相对路径(前面是上传jar包的名字,后面是重命名)
ADD demo-0.0.1-SNAPSHOT.jar app.jar
# 运行jar包
RUN bash -c 'touch /app.jar'
# 设置时区-不然比当前时间慢8小时
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# 为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
编辑好Dockerfile文件后,再运行:
创建Dockerfile文件,没有文件类型,就是没有.txt,然后把Dockerfile文件和jar包放在服务器同一目录。
进入到Dockerfile文件和jar包的目录,运行
注意:后面末尾有一个空格和一个“.”,demo是创建的镜像的名字,“.”表示当前目录
docker build -t demo .
镜像就创建成功了,输入命令查看镜像
docker images
然后根据镜像创建容器
根据镜像demo:latest创建名称为dockerDemo的容器 8080:8080 外端口:内端口 把-d取消就会显示运行界面 --net=host 添加这个mysql才能正常访问
运行方式一:直接后台运行
docker run -p 8080:8080 --net=host --name dockerDemo -d demo:latest
运行方式二:先前台运行
docker run -p 8080:8080 --name dockerDemo demo:latest
没问题了在ctrl+c退出运行界面
再输入命令运行docker, 然后Dockerfile运行spring boot 项目就完成了
docker start dockerDemo
如果运行时遇到报错 library initialization failed - unable to allocate file descriptor table - out of memor
就删除容器,再删除镜像 然后加上启动参数 --ulimit nofile=1024:1024,上面运行没有报错就不用加
docker run --ulimit nofile=1024:1024 -p 8080:8080 --name dockerDemo demo:latest
docker run -d --ulimit nofile=1024:1024 -p 8080:8080 --name dockerDemo demo:latest
容器就运行就结束了
如果代码更新了,分别执行如下步骤即可
Docker 容器镜像删除
删除单个镜像:
1、停止容器 demoserver是容器名 也可以输入容器ID
docker stop demoserver
2、删除容器
docker rm demoserver
3、删除镜像 docker-demo_demoserver是镜像名
docker rmi docker-demo_demoserver
4、删除id为<None>的镜像image
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
其他:
查询运行的容器:
docker ps
查询所有容器(运行的和没运行的容器)
docker ps -a
查询所有镜像
docker images
删除全部image:
1.先停止容器,2.删除全部容器,3.再删除全部镜像
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
第二种是使用docker-compose部署项目
首先需要完成第一步的创建dockerfile文件,然后新建一个文件夹dockerfile存放Dockerfile文件和jar包。然后新建一个
docker-compose.yml文件内容。
version : '2'
services:
demoserver:
container_name: demoserver
build:
context: ./dockerfile
dockerfile: Dockerfile
ports:
- "8080:8081"
networks:
- net-spring-db
volumes:
- /data:/data
- ./dockerfile/config:/config
ulimits:
core: 0
nofile:
soft: 1024
hard: 1024
networks:
net-spring-db:
driver: bridge
下面是docker-compose.yml文件的字段解释。
version:指定版本号,默认2,不用管
services:下面的就是要构建的镜像名称。
container_name: 就是运行的服务名称,可以和镜像名称一样
build:可以指定基础镜像,也可以指定dockerfile,还可以指定dockerfile所在的目录
context: .为当前目录,当前目录下dockerfile文件夹内搜索
dockerfile: 指定dockerfile文件名称
environment:环境变量,上面的Mysql就指定了root密码和初始化数据库;
这是一个数组,用 '-'来分割
ports:映射端口 主机端口:容器端口
volumes:映射文件目录 主机目录:容器目录
如果运行时遇到报错 library initialization failed - unable to allocate file descriptor table - out of memor
ulimits:
core: 0
nofile:
soft: 1024
hard: 1024
networks:加入指定的网络模式
查询网络
docker network ls
创建网络,app_net 为网络名称
docker network create app_net
只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。
depends_on:启动依赖服务。这里是先启动mysql,在启动这个服务
links:链接到其他服务中的容器,上面的springboot就要链接到mysql
创建好yml文件后,直接进入到存放yml的目录,运行命令:
#前台运行项目,可以实时查看项目的运行状态。
docker-compose up
#如果正常运行,就按ctrl+c结束运行,再运行下面命令后台运行
docker-compose up -d
#当项目运行后,如果后面修改了yml或者jar包或者dockerfile文件,则运行命令重构:
docker-compose up -d --build
springboot 使用外部配置文件
在docker-compose.yml文件配置了路径映射,按照springboot外部配置文件使用方法,只需要在jar包同目录下新建一个config文件存放application.properties配置文件即可。
docker容器jar文件默认存放在根目录,只需要把根目录下的/config配置文件夹映射出来就可以了
volumes:
– /data:/data
– ./dockerfile/config:/config
最后附上mysql的docker-compose.yml
version : '2'
services:
my-mysql:
container_name: my-mysql
image: mysql:5.7.17
environment:
- "MYSQL_ROOT_PASSWORD=root"
- "MYSQL_DATABASE=drmTrading"
- "MYSQL_ROOT_HOST=%"
ports:
- "3306:3306"
networks:
- net-spring-db
volumes:
- /data/mysql/data:/var/lib/mysql
- /data/mysql/logs:/logs
- /data/mysql/conf:/etc/mysql
command: [
'mysqld',
'--innodb-buffer-pool-size=20M',
'--character-set-server=utf8',
'--collation-server=utf8_general_ci',
'--default-time-zone=+8:00',
'--lower-case-table-names=1'
]
networks:
net-spring-db:
driver: bridge
除了上面的一些命令,再整理哥其他常用的docker命令:
#查询容器列表
docker ps
#查询所有容器列表
docker ps -a
#查询容器日志
docker logs 容器ID或者容器name
#关闭容器
docker stop 容器ID或者容器name
#开启容器
docker start 容器ID或者容器name
#进入容器
docker exec -it 容器ID或者容器name /bin/bash
查询所有镜像
docker images
Docker 容器镜像删除
删除单个镜像:
1、停止容器 demoserver是容器名 也可以输入容器ID
docker stop demoserver
2、删除容器
docker rm demoserver
3、删除镜像 docker-demo_demoserver是镜像名
docker rmi docker-demo_demoserver
4、删除id为<None>的镜像image
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
删除全部image:
1.先停止容器,2.删除全部容器,3.再删除全部镜像
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
#操作docker-compose 必须进入到有docker-compose.yml的路径操作
#前台运行项目,可以实时查看项目的运行状态。
docker-compose up
#如果正常运行,就按ctrl+c结束运行,再运行下面命令后台运行
docker-compose up -d
#当项目运行后,如果后面修改了yml或者jar包或者dockerfile文件,则运行命令重构:
docker-compose up -d --build
书写粗糙,能用就行。
如果有什么问题,欢迎大佬指正。
最后如果对你有一点点帮助,麻烦支持一下。
全国寄快递5元起,电影票8.8折。更多优惠微信关注公众号:【折价寄件】
感谢阅读!!!!