Docker 学习笔记

本文详细介绍了Docker的基础知识,包括Docker的作用、安装、常用命令、镜像加载原理、容器数据卷以及网络设置。重点阐述了Docker与虚拟机的区别,强调其轻量级和快速启动的优势。此外,还提供了DockerFile的使用示例和实战部署Redis集群的教程,适合后端开发者学习Docker使用。
摘要由CSDN通过智能技术生成

文章目录

Docker 概述

常用网址

Docker 是基于 Go 语言开发的 开源项目。
官网:https://www.docker.com/

文档地址:https://docs.docker.com/ Docker文档非常详细!

仓库地址:https://hub.docker.com/

作用

虚拟机技术

在这里插入图片描述
虚拟机技术缺点:

  1. 资源占用大
  2. 冗余步骤多
  3. 启动缓慢

容器化技术

容器化技术不是模拟的一个完整操作系统
在这里插入图片描述

Docker与虚拟机技术的不同:

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

DevOps (开发、运维)

应用更快速的交付和部署
传统:一堆帮助文档,安装程序
Docker:打包镜像发布测试,一键运行
更便捷的升级和扩缩容
使用了Docker后,部署应用就和搭积木一样,很简便
项目打包为一个镜像,扩展 服务器A,服务器B
更简单的系统运维
在容器化开发后,开发和测试环境都是高度一致的!
更搞笑的计算资源利用
Docker 是内核级的虚拟化,可以在一个物理机上运行很多的容器实例!服务器的性能可以被压榨到极致

Docker安装

Docker的基本组成

在这里插入图片描述
镜像(Image)
docker镜像好比是一个模板,可以通过这个模块来创建容器服务,可以通过这个镜像创建多个容器(最终服务运行或者项目运行就是在容器中的)
容器(container)
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的
启动,停止,删除,基本命令
目前可以把这个容器理解为就是一个简易的linux系统
仓库(repository)
仓库就是存放镜像的地方
仓库分为公有仓库和私有仓库
Docker Hub(默认是国外的)
可以通过阿里云等容器父亲(配置镜像加速访问)

安装Docker

环境准备

  1. 首先需要会一些Linux基础
  2. 我使用的是CentOS7的Linux系统
  3. 使用了FinalShell远程连接服务器

环境查看

# 系统内核 3.10 以上
[root@VM-8-9-centos ~]# uname -r
3.10.0-1160.31.1.el7.x86_64
# 系统版本
[root@VM-8-9-centos ~]# 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"

安装

帮助文档https://docs.docker.com/engine/install/centos/
在这里插入图片描述

# 1. 卸载旧版本
 yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
# 2. 安装新版本
yum install -y yum-utils
# 3. 设置镜像的仓库
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/7inux/centos /docker-ce.repo

# 4. 安装docker相关内容 docker-ce 社区 docker-ee 企业版
yum makecache fast # 更新一下索引
yum install docker-ce docker-ce-cli containerd.io

# 5. 启动docker
systemctl start docker

# 6. 使用docker version查看是否安装成功
docker version

# 7. 测试运行 hello-world
docker run hello-world

# 8. docker images 查看镜像
docker images

卸载

# 1. 卸载依赖
yun remove docker-ce docker-ce-cli containerd.io

# 2。 删除资源 
rm -rf /var/lib/docker  # docker的默认工作路径

阿里云镜像加速

  1. 登录阿里云 找到 容器镜像服务

  2. 选择 镜像加速器
    在这里插入图片描述

  3. 配置使用

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://vnvb02sv.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

回顾HelloWorld流程

在这里插入图片描述
run 运行流程图
run运行图

底层原理

Docker工作方式

Docker是一个 Client-Server 结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问。
Docker-Server 接收到 Docker-Client 的指令,就会去执行这个指令。
在这里插入图片描述

Docker为什么比 虚拟机 快呢?

  1. Docker有着比虚拟机更少的抽象层。

  2. Docker 使用的是宿主机的内核!而虚拟机是需要模拟一个内核!
    在这里插入图片描述
    创建一个新的容器时,docker不需要重新加载一个操作系统内核, 避免一些引导性操作。虚拟机需要加载Guest OS,分钟级别,比较慢,而docker利用宿主机操作系统,省略该过程,秒级启动!

Docker常用命令及工具

帮助命令

docker version  #版本信息
docker info     #显示docker的系统信息,包括镜像和容器的数量
docker --help   #帮助命令

官方文档命令

镜像命令

查看本机镜像 docker images

># docker image
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE 
hello-world   latest    d1165f221234   4 months ago   13.3kB

#解释
REPOSITORY    #镜像的仓库源
TAG           #镜像的标签
IMAGE ID      #镜像的id
CREATED       #镜像的创建时间
SIZE          #镜像的大小

#OPTIONS
-a,--a;        #列出所有的镜像
-q,--quiet    #只显示镜像的id

搜索镜像 docker search

># docker search mysql
NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                            MySQL is a widely used, open-source relation…   12234     [OK]       
mariadb                          MariaDB Server is a high performing open sou…   4699      [OK]       
mysql/mysql-server               Optimized MySQL Server Docker images. Create…   907                  [OK]

# 可选项 通过搜索来过滤 
--filter=STARS=3000  #搜索出来的镜像是STARS大于3000的

拉取镜像 docker pull

在这里插入图片描述

docker pull 镜像名 [:tag]
#下载镜像
># docker pull mysql  
Using default tag: latest	#不写tag,默认下载最新版
latest: Pulling from library/mysql
b4d181a07f80: Pull complete  #采用分层下载 docker image的核心!! 联合文件系统
a462b60610f5: Pull complete 
578fafb77ab8: Pull complete 
524046006037: Pull complete 
d0cbe54c8855: Pull complete 
aa18e05cc46d: Pull complete 
32ca814c833f: Pull complete 
9ecc8abdb7f5: Pull complete 
ad042b682e0f: Pull complete 
71d327c6bb78: Pull complete 
165d1d10a3fa: Pull complete 
2f40c47d0626: Pull complete 
Digest: sha256:52b8406e4c32b8cf0557f1b74517e14c5393aff5cf0384eff62d9e81f4985d4b	#签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest    #真实地址

#等价命令
># docker pull mysql
># docker.io/library/mysql:latest

#指定下载版本
># docker pull mysql:5.7
b4d181a07f80: Already exists  #分层,只下载不同的内容,联合文件系统
a462b60610f5: Already exists 
578fafb77ab8: Already exists 
524046006037: Already exists 
d0cbe54c8855: Already exists 
aa18e05cc46d: Already exists 
32ca814c833f: Already exists 
52645b4af634: Pull complete 
bca6a5b14385: Pull complete 
309f36297c75: Pull complete 
7d75cacde0f8: Pull complete 
Digest: sha256:1a2f9cd257e75cc80e9118b303d1648366bc2049101449bf2c8d82b022ea86b7
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

删除镜像 docker rmi

># docker rmi -f 5c62e459e087 #删除指定容器
#结果
Untagged: mysql:latest
Untagged: mysql@sha256:52b8406e4c32b8cf0557f1b74517e14c5393aff5cf0384eff62d9e81f4985d4b
Deleted: sha256:5c62e459e087e3bd3d963092b58e50ae2af881076b43c29e38e2b5db253e0287
Deleted: sha256:b92a81bddd621ceee73e48583ed5c4f0d34392a5c60adf37c0d7acc98177e414
Deleted: sha256:265829a9fa8318ae1224f46ab7bc0a10d12ebb90d5f65d71701567f014685a9e
Deleted: sha256:2b9144b43d615572cb4a8fb486dfad0f78d1748241e49adab91f6072183644e9
Deleted: sha256:944ffc10a452573e587652116c3217cf571a32c45a031b79fed518524c21fd4f
Deleted: sha256:b9108f19e3abf550470778a9d91959ce812731d3268d7224e328b0f7d8a73d26


># docker rmi -f $(docker images -qa)  #删除所有镜像

删除指定的容器:docker rmi -f <ID>
删除多个容器:docker rmi -f <ID1> <ID2> ...
删除所有容器:docker rmi -f $(docker images -qa)

提交镜像 docker commit

docker commit #提交容器称为一个新的副本
docker commit -m="提交的描述" -a="作者" 容器id 目标镜像名:[TAG]

容器命令

有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习
docker pull centos
新建容器并启动

运行容器 docker run
#docker run [OPTIONS] image
#参数说明
--name="Name"   #容器名字 
,tomcat02 用来区分容器
-d				#后台运行方式
-it				#使用交互方式运行,进入容器查看内容
-p				#指定容器的端口 -p 8080:8080
        -p ip:主机端口:容器端口
        -p 主机端口:容器端口(常用)
        -p 容器端口
        容器端口
-P(大写P)		#随机指定端口
前台启动并进入容器
#启动并进入容器
[root@VM-8-9-centos ~]# docker run -it centos /bin/bash 
[root@851eb2068038 /]# ls #基础版本,很多命令都不是很完善
bin  etc   lib      lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@851eb2068038 /]# exit   #退出centos容器到主机
exit

[root@VM-8-9-centos ~]:~# docker ps  #查看当前正在运行的容器
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

后台启动容器
# 后台启动容器 docker run -d [镜像名]
[root@VM-8-9-centos ~]# docker run -d centos
599b658a7b67644cbefb08c37cffc8fd03ed0788079aabddd262b2ceccc168df
# 发现centos这个容器是停止的!
[root@VM-8-9-centos ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
# 注意:docker 容器使用后台运行,就必须要有一个前台进程

注意:docker 容器使用后台运行,就必须要有一个前台进程

查看运行的容器 docker ps
# docker ps 参数
	    	#列出当前正在与运行的容器
	-a		#列出当前正在运行的容器,并列出历史运行过的容器
	-n=?	#显示最近创建的容器
	-q		#显示容器的编号

[root@VM-8-9-centos ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@VM-8-9-centos ~]# docker ps -a
CONTAINER ID   IMAGE                     COMMAND                  CREATED         STATUS                     PORTS     NAMES
851eb2068038   centos                    "/bin/bash"              7 minutes ago   Exited (0) 4 minutes ago             bold_kepler
9c3a5dae7bf4   hello-world               "/hello"                 2 weeks ago     Exited (0) 2 weeks ago               gifted_kapitsa
d600d6322ff7   redislabs/rejson:latest   "docker-entrypoint.s…"   2 weeks ago     Exited (137) 13 days ago             redis-redisjson
c35ca3ead5d8   redislabs/rejson:latest   "docker-entrypoint.s…"   2 weeks ago     Exited (0) 13 days ago               great_dhawan
[root@VM-8-9-centos ~]# docker ps -aq
851eb2068038
9c3a5dae7bf4
d600d6322ff7
c35ca3ead5d8
退出容器
  1. exit 退出容器并退出
  2. 按下Ctrl+p+q 容器不停止,退出
删除容器 docker rm
# 不能删除正在运行的容器若需要则-rf
docker rm 容器id						#删除指定容器
docker rm 容器id -rf					#删除指定容器(强制)
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 logs

帮助文档

Usage:  docker logs [OPTIONS] CONTAINER
      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m
                       for 42 minutes)
  -n, --tail string    Number of lines to show from the end of the logs (default "all")
  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g.
                       42m for 42 minutes)

示例

# 启动docker,执行shell脚本打印"guokun"
[root@VM-8-9-centos ~]# docker run -d centos /bin/sh -c "while true;do echo guokun;sleep 1;done"
cc5f796c45d3eb66f7744dff504b9ff5ebd0325319d3dd25c921dd5df2621b30
# docker ps 找到执行的容器id
[root@VM-8-9-centos ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
cc5f796c45d3   centos    "/bin/sh -c 'while t…"   5 seconds ago   Up 4 seconds             beautiful_carver
489bfb086173   centos    "/bin/bash"              6 minutes ago   Up 6 minutes             affectionate_thompson
# 查看5条日志
[root@VM-8-9-centos ~]# docker logs -tf --tail 5 cc5f796c45d3 
2022-03-28T02:07:12.255984892Z guokun
2022-03-28T02:07:13.258016459Z guokun
2022-03-28T02:07:14.260114633Z guokun
2022-03-28T02:07:15.262239508Z guokun
2022-03-28T02:07:16.264209183Z guokun

查看容器中进程信息 docker top
[root@VM-8-9-centos ~]# docker top cc5f796c45d3
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                21597               29164               0                   11:28               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root                29164               29144               0                   10:05               ?                   00:00:01            /bin/sh -c while true;do echo guokun;sleep 1;done
[root@VM-8-9-centos ~]# docker top 489bfb086173
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                19708               19689               0                   09:59               pts/0               00:00:00            /bin/bash

查看镜像元数据

docker inspect [OPTIONS] NAME|ID [NAME|ID…]

[root@VM-8-9-centos ~]# docker inspect 489bfb086173
[
    {
   
        "Id": "489bfb086173521b043695aa0094f0f89889408b7cc03215145403db566c6ffd",
        "Created": "2022-03-28T01:59:22.236726649Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
   
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 19708,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2022-03-28T01:59:22.571708887Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
        "ResolvConfPath": "/www/server/docker/containers/489bfb086173521b043695aa0094f0f89889408b7cc03215145403db566c6ffd/resolv.conf",
        "HostnamePath": "/www/server/docker/containers/489bfb086173521b043695aa0094f0f89889408b7cc03215145403db566c6ffd/hostname",
        "HostsPath": "/www/server/docker/containers/489bfb086173521b043695aa0094f0f89889408b7cc03215145403db566c6ffd/hosts",
        "LogPath": "/www/server/docker/containers/489bfb086173521b043695aa0094f0f89889408b7cc03215145403db566c6ffd/489bfb086173521b043695aa0094f0f89889408b7cc03215145403db566c6ffd-json.log",
        "Name": "/affectionate_thompson",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
   
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
   
                "Type": "json-file",
                "Config": {
   }
            },
            "NetworkMode": "default",
            "PortBindings": {
   },
            "RestartPolicy": {
   
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值