docker 技术相关命令

Docker技术简介

概述

Docker是一个虚拟化平台( 官网https://www.docker.com/),诞生于 2013 年初,基于 Google 公司的 Go 语言进行实现。可以通过虚拟化方式,为应用提供可运行的容器。基于这种方式,可更快地打包、测试以及部署应用程序。

现阶段,很多应用软件的安装都在向基于docker方式的安装进行实现。例如mysql,那么为什么不直接在操作系统中安装一个mysql,而是用容器呢?因为,安装MySql过程并不简单,要配置安装源,安装依赖包,对mysql进行配置…如果要在多台主机上安装,每台主机都要进行这些繁琐的操作,万一服务器挂了,这一系列操作还要再重来一遍,但有了docker,一个安装配置好的mysql容器,可以直接拿到另一台主机上启动,而不必重新安装mysql。另外,docker还有一重要的用处,就是可以保证开发,测试和生产环境的一致.

版本说明
Docker分成了两个版本:Docker EE (企业版)和Docker CE(社区版本),其中,Docker EE由公司支持,可在经过认证的操作系统和云提供商中使用。Docker CE是免费的Docker产品的新名称,Docker CE包含了完整的Docker平台,非常适合开发人员和运维团队构建容器APP。

Docker 核心对象
镜像(Image)
Docker 镜像是一个特殊的文件系统(https://hub.docker.com/),镜像可以打包应用的运行环境以及应用程序,可以通过 Docker 启动这个镜像,进而将应用程序在一个容器中启动运行起来。在 Docker 镜像中,操作系统是高度精简的,镜像中的操作系统还不包含内核,容器都是共享所在的宿主机的内核。所以有时会说容器仅包含必要的操作系统(通常只有操作系统文件和文件系统对象),容器中查看到的 Linux 内核版本与宿主机一致。假如现在理解镜像有些抽象,可以暂时先将其理解为一个安装程序。

容器(Container)
Docker容器可以将其理解为一个运行镜像的载体,镜像(Image)和容器(Container)的关系,就像是光盘和光驱。容器基于镜像创建、启动,然后运行镜像的中的文件。我们常常说使用镜像打包应用程序,使用 Docker 发布、部署应用程序,那么当你的应用成功在 Docker 上运行时,称这个应用就是容器化应用( containerized applications)。

离线安装Docker系统

第一步:下载docker离线包

https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz
1
说明,也可以从https://download.docker.com/linux/static/stable/网址下载指定版本

第二步:下载离线安装工具

https://github.com/Jrohy/docker-install/

第四步:在linux环境下,创建/root/setup/docker目录,然后拷贝下载好的资源到此目录(可通过MobaXterm工具直接上传到linux目录),例如

# 进入/root/setup/docker 文件夹

cd /root/setup/docker # 为 install.sh添加执行权限

chmod +x install.sh # 安装 ./install.sh -f docker-20.10.6.tgz

安装成功以后,检查安装状态

docker info

在线安装

在线安装Docker(自己玩)
第一步:安装一组工具

sudo yum install -y yum-utils 
1
第二步:设置 yum 仓库地址

1、sudo yum-config-manager \
  2  --add-repo \
   3 https://download.docker.com/linux/centos/docker-ce.repo


  1sudo yum-config-manager \
   2  --add-repo \
    3 http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1
2
3
第三步:更新 yum 缓存

sudo yum makecache fast #yum 是包管理器
1
第四步:安装新版 docker

sudo yum install -y docker-ce docker-ce-cli containerd.io
1
总结(Summary)
77

Docker服务基本操作

启动docker服务

 systemctl start docker
  • 1

查看Docker状态

查看docker是否启动了,是否是运行状态.

systemctl status docker

设置Docker开机自启
systemctl enable docker
1
禁用Docker开机自启
systemctl disable docker
1
重新启动Docker服务
 systemctl restart docker
1
查看Docker信息
docker info

查看docker info中具体key的信息,例如:

docker info | grep 'Docker Root Dir:'

停止docker服务

systemctl stop docker

Docker镜像加速
由于国内网络问题,需要配置加速器来加速。修改配置文件 /etc/docker/daemon.json

下面命令直接生成文件 daemon.json

cat <<EOF > /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com"
  ],
  "max-concurrent-downloads": 10,
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
    },
  "data-root": "/var/lib/docker"
}
EOF


说明:在执行如上指令时,保证你的登录用户为root管理员用户,并且设置好以后重启docker服务.

Docker镜像操作实践

下载镜像

语法:docker pull 镜像名
案例:

docker pull hello-world

 

查看镜像详情
语法:docker inspect 镜像名或镜像id

docker inspect hello-world
1
查看镜像历史
一个镜像是由多个层(layer)组成的,那么,我们要如何知道各个层的具体内容呢?通过 docker history 命令,可以列出各个层(layer)的创建信息,例如:

docker history hello-world
1
导出镜像文件
镜像导出(linux系统中的镜像文件下载到本地-例如window),导出后给他人使用

docker save  hello-world | gzip > hello-world.tar.gz  
1
删除镜像文件
语法:docker image rm 镜像名或镜像id

docker image rm hello-world
1
导入镜像操作
镜像导入(要在hello-world.tar.gz 文件所在目录下执行)

docker load < hello-world.tar.gz  
1
运行镜像文件
基于镜像,启动容器运行。

docker run hello-world
————————————————
 

Docker 容器操作实践

本次以CentOS镜像为例,讲解容器的基本操作。

下载镜像(Image)
通过docker pull指令下载CentOS镜像,例如:

docker pull centos:7
1
说明,官方镜像仓库地址为https://hub.docker.com/

下载完以后,查看centos7镜像文件。

docker images
1
创建并启动容器(Container)
基本语法解析:

docker run -it xxxx bash
1
其中:
1)xxxx - 镜像名, 或 image id 的前几位,
2)-it 这是两个参数(-i表示交互式操作, -t 表示终端)
3) bash 表示进入操作终端,基于交互式进行相关操作(例如执行linux相关指令)。

案例:通过docker启动运行 centos7镜像

docker run -it centos:7 bash
1


查看Docker中的容器(Container)
查看docker运行中的容器(要在宿主机执行docker指令)

docker ps
1
说明,假如在容器中执行docker指令会出现如下问题,例如:

查看docker运行中的所有容器

docker ps -a
1
其中,-a表示全部(all)。

查看容器日志(logs)信息
查看容器启动运行日志时,这个指令非常重要,假如容器没有启动,要通过此指令去看一下错误日志。

docker container logs 802  #802为自己的容器id(一般写前三位即可)
1
说明,查看容器的运行日志时,容器应该处于一种运行状态.

停止(stop)或重启(Restart)容器(Container)
停止运行的容器,代码如下:

docker container stop 802  #802为容器自己的id
1
重新启动容器,代码如下:

docker container restart 802 #802位容器自己的id
1
进入(exec)指定容器(Container)
当容器处于运行状态,要进入容器,可以使用 docker exec 命令,例如:

docker exec -it 802 bash #802为容器id
1
说明,假如容器处于一种非运行状态,此时你执行docker exec进入容器会出现如下问题:

从容器(Container)中退出(exit)
假如从宿主机进入了启动的容器,退出容器需要使用exit指令,例如:

exit
1
删除(rm)容器(Container)
假如容器不用了,可执行删除操作,例如:

docker container rm 802 #802为容器id
1
说明,假如容器正在运行执行删除,会出现如下问题,例如:


其中,如果删除运行中的容器,需要添加 -f 参数执行强制删除,例如:

docker container rm -f 802 #802为容器id
1
清理所有处于终止状态容器,例如:

docker container prune
1
说明,执行完这个指令以后,可以通过docker ps -a 再查看容器,看看是否有删除.

总结(Summary)
本章节重点讲解了容器的基本操作,例如容器的启动、运行、停止、删除等基本操作。
 

Docker数据管理实践

概述

在容器中管理数据主要有两种方式:

  • 数据卷(Volumes)
  • 挂载主机目录 (Bind mounts)
  • 数据卷
    数据卷是一个可供一个或多个容器使用的特殊目录,可以在容器之间共享和重用,默认会一直存在,即使容器被删除。

    数据卷操作
    第一步:创建数据卷,例如:

    docker volume create container-vol
    1
    第二步:查看所有数据卷,例如:

    docker volume ls
    1
    查看指定 数据卷 的信息

    docker volume inspect container-vol
    1
    查询的结果:

    [
        {
            "Driver": "local",
            "Labels": {},
            "Mountpoint": "/var/lib/docker/volumes/container-vol/_data",
            "Name": "container-vol",
            "Options": {},
            "Scope": "local"
        }
    ]
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    第三步:启动挂载数据卷的容器,例如:

    docker run -it --mount source=container-vol,target=/root centos:7 bash
    1
    或者采用如下简写方式

    docker run -it -v container-vol:/root centos:7 bash
    1
    -v container-vol:/root 把数据卷 container-vol 挂载到容器的 /root 目录

    第四步:删除数据卷(如果数据卷被容器使用则无法删除),例如

    docker volume rm container-vol
    1
    清理无主数据卷

    docker volume prune
    1
    挂载主机目录
    我们还可以在启动容器时,以目录直接挂载的方式进行数据操作,例如:

    docker run -it -v /usr/app:/opt/app centos:7 bash
    1
    其中:
    1)/usr/app:为宿主机目录
    2)/opt/app: 为启动容器的一个目录
    3)-v 用于指定挂载目录,如果本地目录(宿主机目录)不存在, Docker 会自动为你按照挂载目录进行目录的创建。

    例如:

    查看挂载目录信息

    docker inspect 91a #91a 为容器id
    1
    显示结果:

    ...

    "Mounts": [
        {
            "Type": "bind",
            "Source": "/usr/app",
            "Destination": "/opt/app",
            "Mode": "",
            "RW": true,
            "Propagation": "rprivate"
        }
    ],

    ...
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    总结(Summary)
    本章节重点讲解了容器中的数据管理操作,例如数据卷操作,目录的挂在操作。

  • Dockerfile及镜像制作实践

    背景

    我们从基于docker pull指令可以从远程仓库下载我们需要的一些镜像(image),但是镜像仓库中的镜像是从哪里来的呢,假如镜像仓库中没有我们需要的镜像呢,所以本小结我们会讲解我们自己如何制作镜像.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值