使用docker部署springboot项目以及常用命令

本文详细介绍了如何在CentOS8.0系统上安装Docker20.10.12,包括检查内核版本、卸载旧版本、设置存储库、安装、启动和配置Docker,以及配置镜像加速器。此外,还提供了Docker镜像和容器的常用命令,如拉取、删除镜像和新建、管理容器的方法。
摘要由CSDN通过智能技术生成

docker的安装(基于centos8.0)

本次安装版本环境
Linux版本:CentOS Linux release 8.0.1905 (Core)
docker版本: 20.10.12

1、查看系统内核版本(Docker 要求 CentOS 系统的内核版本高于 3.10uname -r

2、如果已经安装,先卸载旧版本(出现complete代表卸载完成)
yum remove docker \
           docker-client \
           docker-client-latest \
           docker-common \
           docker-latest \
           docker-latest-logrotate \
           docker-logrotate \
           docker-engine
                  
3、安装 yum-utils 软件包(出现 Complete! 代表安装成功)
yum install -y yum-utils

4、设置存储库
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

如果第四步报错,执行下面命令(因为没有配置正确的语言环境)
echo "export LC_ALL=en_US.UTF-8"  >>  /etc/profile 
source /etc/profile

5、安装最新版本的docker和容器
yum install docker-ce docker-ce-cli containerd.io

6、启动docker并测试
systemctl start docker		## 启动 Docker
systemctl stop docker		## 停止 Docker
systemctl status docker		## 查看 Docker 运行状态
systemctl restart docker	## 重启 Docker
docker info  ## 查看docker信息----->Server Version: 20.10.12
# 如果启动过程中报错
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.
# 在/etc/docker文件目录下,找到daemon.json,更改名称即可
mv daemon.json daemon.conf

7、配置docker镜像加速器
浏览器登录阿里云账户,搜索“容器镜像服务”,“镜像工具”--->“镜像加速器”,操作文档选择CentOS
复制全部“配置镜像加速器”给出的命令,粘贴到命令行运行窗口,回车键执行
执行 docker info  在倒数第二行可查看配置后的加速器地址

8、设置docker开机自启
systemctl enable docker

docker 镜像 常用命令

#列出docker下镜像命令
docker images
REPOSITORY:  镜像所在的仓库名称
TAG:         镜像标签(其实就是版本)
IMAGE ID:    镜像ID
CREATED:     镜像的创建日期(不是获取该镜像的日期)
SIZE:        镜像大小


# 搜索镜像命令
docker search 镜像名称
NAME:         仓库名称
DESCRIPTION:  镜像描述
STARS:        用户评价,反应一个镜像的受欢迎程度
OFFICIAL:     是否官方
AUTOMATED:    自动构建,表示该镜像由Docker Hub自动构建流程创建的


# 拉取(下载)镜像
docker pull 镜像名称:tag
其中:tag可以省略,省略时下载镜像最新版本(lastest)


# 删除镜像
docker rmi $IMAGE_ID
docker rmi $REPOSITORY:TAG

docker 容器 常用命令

可以把容器看成简易版的Linux环境(包括root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序。

# 新建容器:方式一
docker create [options] 镜像名字或者ID [COMMAND] [ARG...]

下面命令中

--name是容器名字。名称随意
MYSQL_ROOT_PASSWORD:root用户的密码
最后的mysql是镜像,没有tag时表示:lastest最新版本。
示例:docker create -p 3306:3306 --name suiyi -e MYSQL_ROOT_PASSWORD=123456 mysql:8

# 新建容器:方式二
docker create -p 3306:3306 --name mysql_new -e MYSQL_ROOT_PASSWORD=root \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
mysql:8

# 参数解读:
--name:  给容器起一个新名字。为容器指定一个名称
-i:      以交互模式运行容器,通常与-t连用
-t:      为容器重新分配一个伪终端,通常与-i连用
-P:      随机端口映射
-p:      指定端口映射,hostPost:containerPort
-e:      配置信息
-d:      后台执行
-v:      主机和容器的目录映射关系,":"前为主机目录,之后为容器目录


# 新建容器并启动
docker run [options] 镜像名字或者ID  [COMMAND] [ARG...]
# 示例:
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
# 示例:
docker run -p 3306:3306 --name mysql_new -e MYSQL_ROOT_PASSWORD=root \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-d mysql


# 可用参数说明
docker run --help

-d, --detach=false         指定容器运行于前台还是后台,默认为false
-i, --interactive=false    打开STDIN,用于控制台交互
-t, --tty=false            分配tty设备,该可以支持终端登录,默认为false
-u, --user=""              指定容器的用户
-a, --attach=[]            登录容器(必须是以docker run -d启动的容器)
-w, --workdir=""           指定容器的工作目录
-c, --cpu-shares=0         设置容器CPU权重,在CPU共享场景使用
-e, --env=[]               配置信息
-m, --memory=""            指定容器的内存上限
-P, --publish-all=false    指定容器暴露的端口
-p, --publish=[]           指定容器暴露的端口
-h, --hostname=""          指定容器的主机名
-v, --volume=[]            给容器挂载存储卷,挂载到容器的某个目录
--volumes-from=[]          给容器挂载其他容器上的卷,挂载到容器的某个目录
--cap-add=[]               添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cap-drop=[]              删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cidfile=""               运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
--cpuset=""                设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
--device=[]                添加主机设备给容器,相当于设备直通
--dns=[]                   指定容器的dns服务器
--dns-search=[]            指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
--entrypoint=""            覆盖image的入口点
--env-file=[]              指定环境变量文件,文件格式为每行一个环境变量
--expose=[]                指定容器暴露的端口,即修改镜像的暴露端口
--link=[]                  指定容器间的关联,使用其他容器的IP、env等信息
--lxc-conf=[]              指定容器的配置文件,只有在指定--exec-driver=lxc时使用
--name=""                  指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
--net="bridge"             容器网络设置:
	                          bridge 使用docker daemon指定的网桥
	                          host    //容器使用主机的网络
	                          container:NAME_or_ID>//使用其他容器的网路,共享IP和PORT等网络资源
	                          none 容器使用自己的网络(类似--net=bridge),但是不进行配置
--privileged=false         指定容器是否为特权容器,特权容器拥有所有root权限
--restart="no"             指定容器停止后的重启策略:
	                          no:容器退出时不重启
	                          on-failure:容器故障退出(返回值非零)时重启
	                          always:容器退出时总是重启
--rm=false                 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
--sig-proxy=true           设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理


# 列出启动容器
docker container ls
docker container 别名命令  ls  ps  list

docker ps
# 参数说明
-l:显示最近创建的容器
-n 数字:显示最近n个创建的容器
-a:列出所有的运行过的容器
-q:列出容器id


# 与运行中的容器交互
docker exec -it mysqld bash
# 参数说明
-i:以交互模式运行容器,通常与-t连用
-t:为容器重新分配一个伪终端,通常与-i连用


# 停止容器
docker stop 容器ID


# 启动容器
docker start 容器ID


# 强制停止容器(不推荐使用,容易造成容器服务不正常关闭,影响后续使用。)
docker kill 容器ID


# 删除所有停止的容器
docker container prune


# 重启容器
docker restart 容器ID|容器名


# 删除容器(要删除的容器,必须是关闭状态的)
docker rm 容器ID


# 查看容器日志
docker logs -f -t --tail 行数 容器ID
# 参数说明
-f 持续查看
-t 增加额外的时间戳
-n 或者 --tail 查看末尾多少行。默认是all,所有行


# 查看容器中运行的进程
docker top 容器ID


# 查看容器或镜像内部详情
docker inspect 容器ID|镜像ID


# 复制容器数据到宿主机(复制宿主机数据到容器)---cp 后面,谁在后面表示拷贝到谁里。
docker cp 容器ID:容器内路径 宿主机路径
docker cp 宿主机路径 容器ID:容器内路径 
# 示例:复制MySQL配置到宿主机(docker cp mysql:/etc/mysql ~/tmp/conf)

DockerFile构建镜像

# DockerFile指令参数
FROM     # 基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER  # 镜像维护者的姓名混合邮箱地址
RUN      # 容器构建时需要运行的命令
EXPOSE    # 当前容器对外保留出的端口
WORKDIR    # 指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
ENV      # 用来在构建镜像过程中设置环境变量
ADD      # 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY     # 类似ADD,拷贝文件和目录到镜像中!
VOLUME    # 容器数据卷,用于数据保存和持久化工作
CMD      # 指定一个容器启动时要运行的命令,dockerFile中可以有多个CMD指令,但只有最
后一个生效!
ENTRYPOINT  # 指定一个容器启动时要运行的命令!和CMD一样
ONBUILD    # 当构建一个被继承的DockerFile时运行命令,父镜像在被子镜像继承后,父镜像的
ONBUILD被触发

# 示例
# 基础镜像
FROM openjdk:8
# 环境变量
ENV APP_HOME=/apps
# 创建容器默认进入的目录
WORKDIR $APP_HOME
# 复制jar包到容器中
COPY ./test-1.0.0.jar ./test-1.0.0.jar
# 暴露端口
EXPOSE 8080
# 启动命令,有其他参数的话继续添加即可
ENTRYPOINT ["java","-jar","-Dspring.profiles.active=test","-Xms64m","-Xmx64m"]
CMD ["test-1.0.0.jar"]

编写Dockerfile文件

与pom文件在同一级目录下,此处使用上述示例

# 基础镜像
FROM openjdk:8
# 环境变量
ENV APP_HOME=/apps
# 创建容器默认进入的目录
WORKDIR $APP_HOME
# 复制jar包到容器中
COPY ./test-1.0.0.jar ./test-1.0.0.jar
# 暴露端口
EXPOSE 8080
# 启动命令,有其他参数的话继续添加即可
ENTRYPOINT ["java","-jar","-Dspring.profiles.active=test","-Xms64m","-Xmx64m"]
CMD ["test-1.0.0.jar"]

上传服务器,该文件与jar在同一级目录下

#docker build –f (dockerfile文件路径) –t 镜像名称:版本  .
docker build -f ./Dockerfile -t test:1.0.0 .

创建容器

#docker run --name 新建容器的名称 -p 对外端口:容器暴漏的端口 -id 镜像名称:版本
docker run --name testdocker -p 8080:8080 -id test:1.0.0

maven插件自动部署步骤

# 修改宿主机的docker配置,开放2375端口,让其可以远程访问
vim /usr/lib/systemd/system/docker.service

# 在ExecStart变量末尾,增加下述配置:
-H unix:///var/run/docker.sock -H 0.0.0.0:2375
# 如果是centos7以下修改为
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375

在这里插入图片描述

# 刷新配置,重启docker服务
systemctl daemon-reload		//加载docker守护线程
systemctl restart docker 	//重启docker
# pom文件添加插件
<!--docker的maven插件-->
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.2.2</version>
    <configuration>
    	<!--此处artifactId对应创建项目时的项目名称,务必使用全小写,否则构建镜像失败-->
        <imageName>${project.artifactId}:${project.version}</imageName>
        <!--指定基础镜像-->
        <baseImage>openjdk:8</baseImage>
        <!-- 指定服务器仓库地址 改成你自己服务器的IP和docker开放的端口 -->
        <dockerHost>http://IP:端口</dockerHost>
        <!-- 容器启动执行的命令 -->
        <entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint>
        <resources>
            <resource>
                <targetPath>/</targetPath> <!-- 指定要复制的目录路径,这里是当前目录 -->
                <directory>${project.build.directory}</directory> <!-- 指定要复制的根目录,这里是target目录 -->
                <include>${project.build.finalName}.jar</include> <!-- 指定需要拷贝的文件,这里指最后生成的jar包 -->
            </resource>
        </resources>
    </configuration>
</plugin>
# idea中运行命令,构建镜像并推送到服务器
mvn clean package docker:build
# 根据自己创建的镜像,创建容器并启动
# 示例
docker run --name test -p 8080:8080 -e TZ=Asia/Shanghai -id test:1.0.0
# 参数解读
docker run : 创建并运行一个容器
–name : 给容器起一个名字, 比如叫做 test
-p : 将宿主机端口与容器端口映射, 冒号左侧是宿主机端口, 右侧是docker容器端口
-e : 指定时区
-d : 后台运行容器
test:1.0.0 : 镜像名称,例如自己刚刚构建的 镜像:TAG test:1.0.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值