docker文档

一、docker概述

1、java项目通过docker打包成镜像(包含了所有的环境)放到docker仓库中,只需要下载发布的镜像直接运行即可;

2、虚拟机技术的缺点:
在这里插入图片描述
资源占用多、冗余步骤多、启动很慢

容器化技术:

在这里插入图片描述

比较docker和虚拟机技术的不同:

  • 传统虚拟机,虚拟出一套硬件,运行一个完整的操作系统,然后在系统上安装和运行软件
  • 容器内的应用直接运行在宿主主机的内容。容器是没有自己的内核的也没有虚拟我们的硬件,所以轻便
  • 每个容器都是相互隔离的,每个容器内核都有一个属于一个自己的而文件系统,互不影响;

在一个物理机上可以运行多个容器实例;

3、docker基本组成

在这里插入图片描述

镜像(image):

docker镜像就好比一个模板,可以通过这个模板来创建容器服务,tomcat镜像==》run==》tomcat1(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中)

容器(container):

docker利用容器技术,独立运行一个或者一个组应用通过镜像来创建的,

启动,停止,删除,基本命令;

目前可以吧这个容器理解为一个建议的linux系统

仓库(repository):

仓库就是存放镜像的地方;

仓库分为公有仓库和室友仓库;

Docker Hub(默认是国外的)

阿里云…都有对应的容器服务器(配置镜像加速!)

二、docker安装

uname -r   
// 查看系统内核  
3.10.0-1127.el7.x86_64
cat /etc/os-release
// 查看系统版本
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

安装

步骤一:卸载旧的docker版本

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

步骤二:需要的安装包

yum -y install gcc

yum -y install gcc-c++

yum install -y yum-utils

步骤三:设置镜像的仓库


yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    // 默认是国外仓库
    
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    // 国内

#更新yum软件包索引

yum makecache fast

步骤四:安装docker相关的docker-ce社区版 ee企业版

yum install docker-ce docker-ce-cli containerd.io

步骤五:启动docker

systemctl start docker

在这里插入图片描述

步骤6:使用docker version是否安装和启动成功

步骤7:hello world

找不到hello-world这和镜像,所以去仓库下载

docker run hello-world

在这里插入图片描述

步骤8,查看一下下载的hello-world镜像;

在这里插入图片描述

卸载docker

#卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#删除资源, 下面这个路径是docker的默认路径
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

阿里云镜像加速器配置,需要购买阿里云然后利用对应的加速器地址;

docker整个流程:

在这里插入图片描述

三、工作原理

docker是怎么工作的?

docker是一个client-server结构的系统,docker的守护进程运行在主机上,通过socket从客户端访问。

dockerServer接受到docker-client的指令,就会执行这个命令!

在这里插入图片描述

docker为什么比vm块?

1、docker拥有着比虚拟机更少的抽象层;

2、docker利用的是宿主机的内核,vm需要的是guest os

在这里插入图片描述

新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导性的操作。

虚拟机级别的,而docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级;

四、docker的常用命令

docker version  # 显示docker版本信息
docker info  # 显示docker的系统信息,包括镜像和容器
docker --help  # 查看命令指令
docker 命令 --help  # 查看命令帮助文档
docker ps -aqf "name=容器名字" #根据容器名字查询容器id

镜像命令

docker images  # 查看本机主机上的所有镜像
repository 是镜像的仓库源

docker images -a 显示所有镜像
docker images -q 显示所有镜像的id

在这里插入图片描述

docker search 搜索docker hub上的镜像

docker search mysql
# 可选项
--filter=STARS=3000  搜索出来的镜像就是STARS大于3000的

在这里插入图片描述

docker pull 下载镜像

docker pull mysql
等价于 docker pull docker.io/library/mysql:latest

Using default tag: latest
latest: Pulling from library/mysql
a10c77af2613: Pull complete
b76a7eb51ffd: Pull complete
258223f927e4: Pull complete
2d2c75386df9: Pull complete
63e92e4046c9: Pull complete
f5845c731544: Pull complete
bd0401123a9b: Pull complete
3ef07ec35f1a: Pull complete
c93a31315089: Pull complete
3349ed800d44: Pull complete
6d01857ca4c1: Pull complete
4cc13890eda8: Pull complete
Digest: sha256:aeecae58035f3868bf4f00e5fc623630d8b438db9d05f4d8c6538deb14d4c31b
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

删除命令

docker rmi -f  容器id   # 删除指定的容器
docker rmi -f 容器id 容器id  # 删除多个容器
docker rmi -f  $(docker images -aq)  #删除全部的镜容器

在这里插入图片描述

容量命令

有了镜像才可以创建容器,下载一个centos镜像来测试

docker pull centos

新建容器并启动

docker run [可选参数] image
#参数说明
--name="Name"  容器名字tomcat01,tomcat02 用来区分容器
-d 后台运行
-it  使用交互式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
   -p 主机端口:容器端口 (常用)
   -p 容器端口

# 启动并进入容器 ,此容器实际上就是一个系统容器
docker run -it centos /bin/bash
# 从容器中退回主机
exit  

# 在dockerfile中这样可以让容器内的8080端口开放
EXPOSE 8080 

#该EXPOSE指令通知Docker容器在运行时监听指定的网络端口。EXPOSE不会使主机可以访问容器的端口。为此,您必须使用该-p标志来发布一系列端口,或者使用该-P标志来发布所有公开的端口。您可以公开一个端口号,然后将其发布到另一个端口号的外部。
docker run -p 8765:8080  image_id
#这样就将容器内部的8080映射到宿主机的8765端口

在这里插入图片描述

列出所有运行的容器

docker ps   列出正在运行的容器
docker ps -a 列出当前正在运行的容器包括历史运行的容器的信息
docker ps -n=? 显示最近创建的容器  ?是个数
docker ps -aq  显示容器的编号

在这里插入图片描述

退出容器

exit #直接退出容器并且停止
ctrl +p+q  # 容器不停止退出

在这里插入图片描述

删除容器

docker rm 容器id   # 删除指定的容器
docker rm -f $(docker ps -aq)  # 删除所有的容器
docker ps -a -q|xargs docker rm|   # 删除所有容器

启动和停止容器

docker start 容器id   # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id #强制停止当前容器

其他常见命令

后台启动命令
后台运行
docker run -d centos
# 如果docker发现容器中没有应用会自动停止
# nginx容器启动后,如果没有服务,也会停止,除非有对应的正常运行的进程
#tomcat就不会。
日志命令
docker logs --help
docker logs -f -t --tail ? 容器id  #?是输出日志的数量

后台运行并启动一个shell脚本
docker run -d centos /bin/sh -c "while true;do echo chwchw;sleep 1;done"

#显示日志
docker logs -tf --tail 10 b1c950bcae92  显示指定行数的日志
docker logs -tf b1c950bcae92  显示所有的日志
查看容器中进程信息
docker top 容器id

uid 用户id , PID父进程id PPID当前进程id

在这里插入图片描述

docker inspect 容器id  # 查看容器的详细信息

[
    {
        "Id": "b1c950bcae92fe15b193f542bf93f6fd6633f2254e78797b60dc7692af023366",
        "Created": "2021-11-22T03:29:21.430035131Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true;do echo chwchw;sleep 1;done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 121458,
   
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值