docker

目录

docker的优势

 docker和虚拟机的区别

docker架构

docker镜像与容器

docker的安装与卸载

        docker的卸载

docker的安装

 docker服务相关命令

配置镜像加速器

配置过程 

docker镜像操作

2.4 容器远程连接失败问题解决

拉取镜像

 查看本地镜像

删除本地镜像 

删除全部镜像

帮助文档的使用

docker 容器操作

创建容器

容器服务管理 

删除容器

删除所有的容器

进入容器

备份与迁移

docker数据卷的操作

数据卷挂载

目录挂载

Portainer工具

镜像管理 

 容器管理

springboot项目部署 

6.1.1 dockerfile简介

6.1.2 入门案例

6.2 案例介绍与需求分析

docker部署Mysql

6.4 dockerfile构建镜像

6.4.1 项目打包

6.4.2 dockerfile文件

6.4.3 构建镜像

6.5 创建容器

8 docker compose

8.1 docker compose简介

8.2 下载与安装

docker 镜像仓库

9.1 镜像仓库简介

9.2 Harbor简介

9.3 下载与安装

3.2 安装

9.4 Harbor使用

9.4.1 上传镜像

9.4.2 拉取镜像


docker的优势

docker的优势包括:

1、可移植性:docker容器可以在任何支持docker的环境中运行,包括本地开发环境、测试环境和生产环境,从而提高了应用程序的可移植性。

2、可伸缩性:docker容器可以根据负载的变化进行快速扩展和收缩,从而更好地满足应用程序的需求。

3、隔离性:docker容器提供了隔离的运行环境,从而使得不同容器中运行的应用程序互相隔离,避免了应用程序之间的干扰。

 docker和虚拟机的区别

隔离性:在于隔离性上面,由于vm对操作系统也进行了虚拟化,隔离的更加彻底。而docker共享宿主机的操作系统,隔离性较差。

运行效率:由于vm的隔离操作,导致生成虚拟机的速率大大低于容器docker生成的速度,因为docker直接利用宿主机的系统内核。它们的启动速度是在数量级上的差距。

资源利用率:在资源利用率上虚拟机由于隔离更彻底,因此利用率也会相对较低。

经典名句:虚拟机已死,容器才是未来

docker架构

docker是一个客户端-服务器(C/S)架构程序。docker客户端只需要向docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。docker提供了一个命令行工具docker以及一整套RESTful API。你可以在同一台宿主机上运行docker守护进程和客户端,也可以从本地的docker客户端连接到运行在另一台宿主机上的远程docker守护进程。

docker镜像与容器

镜像:类似虚拟机镜像 , 是一个特殊的文件系统

操作系统分为内核和用户空间。对于Linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而docker镜像(Image),就相当于是一个root文件系统。

docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。

容器:类似linux系统环境,运行和隔离应用。是镜像运行时的实体

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等 。

仓库:集中存放镜像文件的地方。

镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中存储、分发镜像的地方,比如后面我们要学的,docker Registry就是这样的服务。

docker的安装与卸载

        docker的卸载

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

docker的安装

 第一步检查系统版本

 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软件包索引并安装Docker-CE

yum makecache fast

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

 docker服务相关命令

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

# 启动docker服务
systemctl start docker

# 关闭docker服务
systemctl stop docker

# 重启docker服务
systemctl restart docker

配置镜像加速器

优先使用阿里云镜像加速器

阿里云镜像加速器的使用步骤:

1、注册和登录

2、进入管理后台

3、搜索容器镜像服务

4、查看示例代码进行配置即可

 

配置过程 

创建文件daemon.json

vim  /etc/docker/daemon.json
{ 
  "registry-mirrors":["https://registry.docker-cn.com"] 
}

重启docker生效

docker镜像操作

2.4 容器远程连接失败问题解决

如果容器启动成功(状态为up)

宿主机和虚拟机的网络互相可以ping通

远程连接时等待很长时间 网络超时 连接失败

一般时网络转发的问题

vi /usr/lib/sysctl.d/00-system.conf
# 添加 地址转发
net.ipv4.ip_forward=1
# 重启网络
systemctl restart network

搜索远程镜像

# 命令:
docker search

# 格式:
docker search 镜像关键字

# 示例:搜索镜像名称中包含redis关键字的镜像
docker search redis		

1、name: 镜像仓库源名称

2、description: 镜像的描述

3、official: 是否 docker 官方发布

4、stars: 镜像的收藏数,收藏数越多表示此镜像的受欢迎程度越高

5、automated: 是否自动构建

拉取镜像

# 命令: 
docker pull

#  tag表示的镜像的标签,也可以理解为就是镜像的版本
docker pull 镜像名称[:tag]		

#  默认拉取的是最新的redis镜像
docker pull redis		

#  拉取redis7.0.10镜像,一个镜像到底存在哪些标签,需要上docker hub中进行查看
docker pull redis:7.0.10

 查看本地镜像

docker images

删除本地镜像 

docker rmi -f 镜像id #删除单个镜像

docker rmi -f redis #根据镜像名删除

docker rmi -f   镜像名1:TAG    镜像名2:TAG #删除多个镜像

删除全部镜像

docker rmi $(docker images -q) -f

帮助文档的使用

docker --help #查询docker可以使用的命令

docker images --help #查询镜像可以使用的文档

docker 容器操作

查询容器

docker ps #查看本地的容器
docker ps -a #查看本地正在运行的容器

1、container id: 容器名称

2、image: 镜像名称

3、command: 容器启动时所执行的命令

4、created: 创建时间

5、status: 容器状态

6、ports: 端口映射情况

7、names: 容器的名称

创建容器

docker run #容器运行

格式: docker run [OPTIONS] 镜像的名称:镜像标签/镜像id [COMMAND] [ARG...]

类型参数:

-i表示容器运行   

-t 表示容器启动后会进入其命令行

--name为创建的容器命名

-v表示目录映射关系

-d在run后面加上,表示创建守护容器在后台运行

-p表示端口映射

 交互式方式创建容器

docker run -it --name=mycentos centos:7 /bin/bash

run 运行容器 -i 运行当前容器 -t 进入当前容器行 -- name 指定镜像名称  centos:7 使用该镜像创建

/bin/bash 交互式方式进入容器内部 

exit退出当前容器

守护式方法创建线程

docker run -di --name=mycentos10 centos:7

容器服务管理 

docker stop 容器名称/容器id # 关闭容器
docker start  容器名称/容器id # 启动容器
docker restart 容器名称/容器id  # 重启容器

删除容器

docker rm 格式

docker rm 容器id/名称

删除所有的容器

docker rm $(docker ps -aq)

进入容器

docker exec -it mycentos10 /bin/bash
-i 把交互页面一直保留 -t分配一个虚拟机终端  /bin/bash 交互式的方法进入容器内部

 docker logs -f mycentos 查看容器内进程日志 -f 表示实时监控

docker inspect 查看容器详细信息

docker cp  完成容器和宿主机之间的文件copy

备份与迁移

对某个容器进行修改后,可以把最新的容器部署到其他环境中

docker commit mycentos10 mycentos 把docker容器保存成一个镜像
docker save -o mycentos.tar mycentos 镜像保存为tar文件

docker rmi mycentos 删除之前的镜像

docker load -i mycentos.tar 将mycentos.tar恢复成一个镜像

docker数据卷的操作

docker volume ls 查看数据卷

docker volume create redis-cli 创建数据卷

docker volume inspect redis-cli 查看数据卷详情

docker volume rm redis-cli 删除数据卷

数据卷挂载

docker run -d --name=redis02 -p 6380:6379 -v redis-data:/data redis:7.0.10  将创建好的容器挂载到某个目录

目录挂载

通过-v参数也可以将宿主机上的某一个目录挂载到容器中的某一个目录下

docker run -d --name=redis02 -p 6380:6379 -v redis-data:/data redis:7.0.10 

Portainer工具

Portainer是一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建,管理和维护docker环境,管理镜像,容器,数据卷。

docker search portainer 搜索portainer

docker pull portainer/portainer 拉取portainer

创建容器运行: portainer用来对docker的镜像容器进行管理,所以必须挂载docker引擎的文件
docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

选择portainer需要管理的环境(本地还是远程)

Portainer的首页  

镜像管理 

选择docker服务,进入到如下页面

镜像8个,数据卷11

点击镜像页签,对镜像进行相关管理

1,pull 拉取镜像 2.删除镜像 3.镜像id列表

 容器管理

点击容器页签,对容器进行相关管理

创建容器  

springboot项目部署 

6.1.1 dockerfile简介

前面我们所使用的镜像都是别人构建好的,但是别人构建好的镜像不一定能满足我们的需求。为了满足我们自己的某一些需求,此时我们就需要构建自己的镜像,怎么构建?使用dockerfile。

dockerfile就是一个文本文件,在这个文本文件中可以使用docker所提供的一些指令来指定我们构建镜像的细节,后期就可以使用这个dockerfile文件来构建自己的镜像。

dockerfile文件内容一般分为4部分:

1、基础镜像信息(必选)

2、维护者信息(可选)

3、镜像操作指令(可选)

4、容器启动时执行的指令(可选)

指令用法作用
FROMFROM image_name:tag指定一个构建镜像的基础源镜像,如果本地没有就会从公共库中拉取,没有指定镜像的标签会使用默认的latest标签,可以出现多次,如果需要在一个dockerfile中构建多个镜像。
MAINTAINERMAINTAINER user_name描述镜像的创建者,名称和邮箱
RUNRUN "command" "param1" "param2"用来执行一些命令,可以写多条
ENVENV key value设置容器的环境变量,可以写多条。
ADDADD source_dir/file将宿主机的文件复制到容器内,如果是压缩文件,则复制后自动解压
ENTRYPOINTENTRYPOINT "command" "param1" "param2"用来指定容器启动时所执行的命令

6.1.2 入门案例

需求:使用dockerfile来构建一个包含Jdk17的centos7镜像

分析:

1、基础的镜像的应该选择centos:7

2、在自己所构建的镜像中需要包含Jdk17,就需要把Jdk17添加到centos:7的基础镜像中

3、为了方便的去使用自己构建的镜像中的Jdk17,就需要去配置环境变量

4、因为Jdk17仅仅是一个开发工具,并不是一个服务进程,因此在启动容器的时候可以不指定任何的执行命令

实现步骤:

1、将Jdk17的安装包上传到linux服务器的指定目录下

2、在Jdk17所在的目录下创建一个dockerfile文件

3、使用docker build命令构建镜像

4、使用docker images查看镜像构建情况

5、使用自己所构建的镜像创建容器,测试Jdk17的安装情况

# 1、创建目录
mkdir –p /usr/local/dockerfilejdk17
cd /usr/local/dockerfilejdk17
  
# 2、下载jdk-17_linux-x64_bin.tar.gz并上传到服务器(虚拟机)中的/usr/local/dockerfilejdk17目录
# 3、在/usr/local/dockerfilejdk17目录下创建dockerfile文件,文件内容如下:
vim dockerfile

FROM centos:7
MAINTAINER atguigu
RUN mkdir -p /usr/local/java
ADD jdk-17_linux-x64_bin.tar.gz /usr/local/java/
ENV JAVA_HOME=/usr/local/java/jdk-17.0.7
ENV PATH=$PATH:$JAVA_HOME/bin

# 4、执行命令构建镜像;不要忘了后面的那个 .
docker build -t centos7-jdk17 .

# 5、查看镜像是否建立完成
docker images

# 6、创建容器
docker run -it --name atguigu-centos centos7-jdk17 /bin/bash

6.2 案例介绍与需求分析

需求:将提供的Spring Boot项目使用容器化进行部署

分析:

1、Spring Boot项目中使用到了Mysql环境,因此需要先使用docker部署mysql环境

2、要将Spring Boot项目使用docker容器进行部署,就需要将Spring Boot项目构建成一个docker镜像

实现步骤:

1、使用docker部署mysql

2、使用dockerfile构建Spring Boot镜像

  • 将Spring Boot打包成一个Jar包

  • 把Jar包上传到Linux服务器上

  • 编写dockerfile文件

  • 构建Spring Boot镜像

3、创建容器进行测试

docker部署Mysql

# 创建容器。 -e: 设置环境变量    --privileged=true 开启root用户权限
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=root mysql:8.0.30

并创建对一个的数据库和数据库表

创建数据库:docker

创建表:

create database docker;
use docker;
CREATE TABLE `tb_school` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `tb_school` VALUES (1, '北京', '北京市昌平区宏福科技园');
INSERT INTO `tb_school` VALUES (2, '上海', '上海市松江区');
INSERT INTO `tb_school` VALUES (3, '深圳', '深圳市宝安区');
INSERT INTO `tb_school` VALUES (4, '西安', '西安市雁塔区');
INSERT INTO `tb_school` VALUES (5, '成都', '成都市成华区');
INSERT INTO `tb_school` VALUES (6, '武汉', '武汉市东湖高新区');

6.4 dockerfile构建镜像

6.4.1 项目打包

具体步骤:

1、在idea中部署资料\基础项目\ebuy-docker项目,并启动项目访问:http://localhost:8081/

2、执行mvn package命令进行项目打包

3、上传jar包到linux服务器上

6.4.2 dockerfile文件

dockerfile文件的内容如下所示:

FROM centos7-jdk17
MAINTAINER shunfeng

# 声明容器内主进程所对应的端口
EXPOSE 8081
ADD ebuy-docker-1.0-SNAPSHOT.jar /ebuy-docker-1.0-SNAPSHOT.jar

# 相当于windows中的cd命令
WORKDIR /      
ENTRYPOINT ["java" , "-jar" , "ebuy-docker-1.0-SNAPSHOT.jar"]

6.4.3 构建镜像

命令如下所示:

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

6.5 创建容器

命令如下所示: docker run -d --name ebuy-docker -p 8081:8081 ebuy-docker:v1.0

访问测试: http://192.168.6.131:8081 我的虚拟机地址

8 docker compose

8.1 docker compose简介

1、Docker Compose是一个工具,用于定义和运行多容器应用程序的工具;

2、Docker Compose通过yml文件定义多容器的docker应用;

3、Docker Compose通过一条命令根据yml文件的定义去创建或管理多容器;

Docker Compose 是用来做Docker 的多容器控制,有了 Docker Compose 你可以把所有繁复的 Docker 操作全都一条命令,自动化的完成。

官网地址:https://docs.docker.com/compose/install/linux/

8.2 下载与安装

下载与安装:

  • 在安装docker时候已经完成了安装,直接查看版本号,查看是否安装成功

# 创建指定目录存储docker compose
mkdir -p /usr/local/lib/docker/cli-plugins

# 下载并移动
curl -SL https://github.com/docker/compose/releases/download/v2.14.2/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose

# 给docker-compose文件赋予可执行权限
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose

# 查看docker compose的版本
docker compose version

docker 镜像仓库

9.1 镜像仓库简介

镜像仓库作用:存储镜像,可以通过镜像仓库实现镜像的共享

镜像仓库的使用流程:

像仓库分类:

1、公有镜像仓库:可以理解成云仓库、公有仓库,是由某个组织、公司维护的仓库,对互联网开放,所有人共享。如官方的仓库docker hub。

2、私有镜像仓库:不对外开放。一般情况下只在公司内网中使用,用于加快镜像拉取速度、维护公司资产。

私有镜像仓库种类:

1、Registry是Docker自带的镜像仓库,部署运行非常简洁,非常适合在测试时使用。

2、Harbor

9.2 Harbor简介

Harbor是VMware公司开源的企业级DockerRegistry项目,其目标是帮助用户迅速搭建一个企业级的Dockerregistry服务。它以Docker公司开源的registry为基础,提供了管理UI,基于角色的访问控制(Role Based Access Control),AD/LDAP集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。

9.3 下载与安装

Harbor被部署为多个Docker容器,因此可以部署在任何支持Docker的Linux服务器上,且需要Docker和Docker Compose才能安装。

下载地址:Releases · goharbor/harbor · GitHubAn open source trusted cloud native registry project that stores, signs, and scans content. - Releases · goharbor/harboricon-default.png?t=N7T8https://github.com/goharbor/harbor/releases 这里我们下载在线安装包:

wget https://github.com/goharbor/harbor/releases/download/v2.8.0/harbor-online-installer-v2.8.0.tgz

3.2 安装

具体步骤如下所示:

1、解压并修改配置文件

cd /opt #文件目录
tar -zxvf harbor-online-installer-v2.8.0.tgz     # 解压tgz包
cp harbor.yml.tmpl harbor.yml                    # 创建一个配置文件
vim harbor.yml   

配置的文件的修改如下所示:

2、启动Harbor

# 1、 进入到Harbor的解压目录
# 2、执行安装脚本
sh install.sh

 

注意:如果安装的时候报错了,可以给docker配置多个镜像地址:

// 编辑文件
vim /etc/docker/daemon.json

// 文件内容
{
  "registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","http://f1361db2.m.daocloud.io","https://mirror.ccs.tencentyun.com","https://phtv51hj.mirror.aliyuncs.com"]
}

 3、启动关闭命令

docker compose -f docker-compose.yml up -d            启动 Harbor
docker compose -f docker-compose.yml stop             关闭 Harbor

4、访问Harbor 192.168.150.102

用户名/密码:admin/Harbor12345

 

9.4 Harbor使用

9.4.1 上传镜像

需求:将本地的ebuy-docker镜像上传到Harbor中

实现步骤:

1、在Harbor上创建一个项目

2.docker添加访问权限 

# 编辑/etc/docker/daemon.json文件
vim /etc/docker/daemon.json

# 添加安全访问权限
{
  "insecure-registries":["http://192.168.6.131"]
}

# 重启Docker
systemctl restart docker

3、推送docker镜像到该项目中

docker login -u admin -p Harbor12345 192.168.6.131         			 # 登录到Harbor
docker tag ebuy-docker 192.168.6.131/ebuy-docker/ebuy-docker:latest    # 给镜像重新打一个标签
docker push 192.168.6.131/ebuy-docker/ebuy-docker:latest               # 推送镜像到Harbor中

推送完毕以后,在ebuy-docker项目中会自动创建一个ebuy-docker的镜像仓库

9.4.2 拉取镜像

命令操作如下所示:

docker login -u admin -p Harbor12345 192.168.150.102         # 登录到Harbor
docker pull 192.168.136.142/ebuy-docker/ebuy-docker:latest   # 拉取镜像

  • 26
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值