docker

发布于:2025-06-23 ⋅ 阅读:(20) ⋅ 点赞:(0)

一 . docker概述

1 docker是什么

(1)背景:一个应用从开发、到测试、到部署、涉及环境问题,经常出现不兼容情况,导致项目跑不起来。这个问题怎么解决?

(2)一次封装,到处运行(带环境的软件打包)。

https://www.docker.com/

2 docker组成

(1)客户端:向服务器发起命令请求,pull search run push load…

(2)docker主机: docker服务器

(3)docker仓库:存放镜像的地方。中央仓库。镜像仓库。

(4)镜像:类似软件安装包。是一个特殊的文件系统。由很多层组成。层可以重复利用。

(5)容器:由镜像创建一个一个运行环境。例如:mysql容器。redis容器。

(6)docker守护进程:用来管理镜像和运行容器。

3 docker安装

docker 从 17.03版本之后分为 CE(Community Edition:社区版)和 EE (Enterprise Edition: 企业版),CE版本是免费的,EE版本是收费的。我们用社区版就可以。

docker的安装和卸载可以参考官方文档: https://docs.docker,com/engine/install/centos/

#确定是Cent0S7.x 及其以上版本

cat /etc/redhat-release

第一步 安装依赖

检查环境,安装gcc和g++

yum -y install gcc 

yum -y install gcc-c++

第二步 安装系统工具

yum install -y yum-utils device-mapper-persistent-data lvm2

第三步 设置阿里云镜像地址

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

第四步 更新yum源,开始下载安装

yum makecache fast

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

第五步 启动docker

#查看docker服务的运行状态  systemctl status docker

systemctl start docker

第六步 配置国内docker的镜像地址
第七步 重启docker

systemctl restart docker

4 docker安装

卸载命令:
sudo yum remove docker \
                              docker-client \
                              docker-client-latest \
                              docker-common \
                              docker-latest \
                              docker-latest-logrotate \
                              docker-logrotate \
                              docker-engine 

二 . docker镜像操作(命令操作)

1、搜索镜像

2、拉取镜像

  • 使用命令 docker pull 镜像名称:版本号
  • 如果不指定版本号,默认最新版本
  • 示例

docker pull redis

docker pull redis:7.0.11

3、查看镜像

  • docker images

4、删除镜像

  • docker rmi -f 镜像id  

【-f是强制删除,镜像没关联容器时删除可以不使用-f,删除并不影响容器】

5、帮助命令

docker --help

docker pull --help

docker images --help    查询images命令的使用文档

三 . docker容器操作(命令操作)

1、查看容器

docker ps

docker ps -a

2、创建容器

交换式创建方式: 首次创建并登录到容器,退出容器,容器会自动停止。

  • 示例:
  • docker run -it --name=myredis -p 6388:6379 -v /redis-data:/data redis:7.0.10 /bin/bash

守护式创建方式:启动后不进行交互,需要交互通过docker exec登录容器,退出容器,容器不会停止运行。

  • 示例
  • docker run -d --name=myredis -p 6388:6379 -v /redis-data:/data redis:7.0.10

3、容器管理

  • docker start 容器名/id
  • docker stop 容器名/id
  • docker restart 容器名称/id

4、删除容器

  • docker rm -f 容器名称/id

5、进入容器内部

  • docker exec -it myredis /bin/bash

6、其他命令

  • docker logs 容器名称
  • docker inspect 容器名称
  • docker --help
  • docker version
  • docker cp 宿主机文件:容器名称:/路径
  • docker cp 容器名称:/路径/文件 宿主机目录

7、备份和迁移

  • 把容器保存镜像

    docker commit 容器名称 镜像名称

  • 把镜像制作tar文件

    docker save -o 文件.tar 镜像名称

  • 把tar包恢复镜像

  • docker load -i 文件.tar

四 . docker数据卷

  • 数据卷是什么?是一个docker管理的虚拟的路径,对应真实物理的路径,用于挂载容器路径,持久化容器数据,避免容器删除数据丢失。数据卷可以被多个容器共享数据。
  • 查看数据卷 : docker volume ls
  • 创建数据卷: docker volume create 名字
  • 查看数据卷信息:docker volume inspect 名称
  • 删除数据卷:docker volume rm 名字

五 . Portainer工具

搜索portainer

docker search portainer

拉取镜像

docker pull portainer/portainer

启动服务

docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

六 . Spring Boot项目部署

手动SpringBoot容器部署:

1、创建mysql容器 8.0.30

docker run -di --name mysql -p 3306:3306 -v mysql_data:/var/lib/mysql -v mysql_conf:/etc/mysql --privileged=true -e MYSQL_ROOT_PASSWORD=1234 mysql:8.0.30

①不要登录容器insert中文,有乱码问题

②mysql升级到8连接认证规则发生变化,低版本客户端连接不上(要么升级客户端,要么依然使用之前认证规则)

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;

2、将springboot项目打包(maven打包插件)

3、编写dockerfile文件

​ 将ebuy-docker-1.0-SNAPSHOT.jar包上传到linux某个目录下,和dockerfile文件放在一起

4.进入dockerfile所在目录,执行构建镜像命令

docker build -t ebuy-docker:v3.0 .

七 . Maven的docker插件

手动SpringBoot容器部署:

  • 第一步 在springboot项目pom.xml文件引入插件
            <plugin>

                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.2.2</version>

                <!--将插件绑定在某个phase执行-->
                <executions>
                    <execution>
                        <id>build-image</id>
                        <!--将插件绑定在package这个phase(阶段)上。也就是说,用户只需执行mvn package,就会自动执行mvn docker:build-->
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>

                <configuration>

                    <!--指定生成的镜像名-->
                    <imageName>${project.artifactId}</imageName>

                    <!--指定标签,也就是版本号,可以自定义-->
                    <imageTags>
                        <imageTag>v2.0</imageTag>
                    </imageTags>

                    <!--指定远程 docker api地址 也就是服务器ip+docker的端口号-->
                    <dockerHost>http://192.168.6.100:2375</dockerHost>

                    <!-- 指定 dockerfile 路径-->
                    <dockerDirectory>${project.basedir}</dockerDirectory>

                    <!-- 是否跳过docker构建 -->
                    <!--  <skipdockerBuild>false</skipdockerBuild>-->

                </configuration>

            </plugin>
  • 第二步 docker服务端开启远程访问
#修改该文件
vim /lib/systemd/system/docker.service

#找到ExecStart行,修改成如下内容
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock

systemctl daemon-reload				#重启守护进程
systemctl restart docker			#重启docker

注意防火墙。防火墙修改,docker重启。

  • 第三步 创建dockerfile文件,和pom.xml在同一个目录下
FROM centos7-jdk17
MAINTAINER atguigu
EXPOSE 8081
ADD target/ebuy-docker-1.0-SNAPSHOT.jar /ebuy-docker-1.0-SNAPSHOT.jar

WORKDIR /
ENTRYPOINT ["java" , "-jar" , "ebuy-docker-1.0-SNAPSHOT.jar"]
  • 第四步 使用命令进行打包和镜像制作,自动完成
maven package

在打包过程中,执行了docker build操作,将项目制作成镜像,上传远程docker服务器中。


网站公告

今日签到

点亮在社区的每一天
去签到