Docker学习笔记

1 什么是Docker?

Docker 是一种用于构建、部署和运行应用程序的开源平台,它使用容器技术来实现轻量级、可移植和自包含的应用程序环境。Docker 的核心思想是将应用程序及其依赖项打包到一个称为容器的封闭单元中,从而消除了在不同环境中运行应用程序时可能出现的许多兼容性和依赖性问题。

相较于虚拟机技术而言

  • 传统虚拟机需要需要虚拟出一套完整的硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
  • Docker使用容器化技术, 每个容器是相互隔离的,且每个容器都有一个属于自己的文件系统,互不影响.容器包含应用及其所有依赖项,可以在不同的系统上直接运行.
  • 由于Docker容器共享宿主机的内核,无需额外的操作系统,占用资源较少。
  • 在这里插入图片描述

2 Docker 和 DevOps[开发/运维]

1应用更快速的交付和部署

Docker 打包成镜像发布测试,一键运行 .

2更编辑的升级和扩缩容

使用Docker后,部署应用就像搭积木一样,项目打包成惊吓过后,可以水平直接扩容到其他的服务器上

3更简单的系统运维

在容器化之后,我们的开发和测试环境是高度一致的

4更高效的计算资源利用

Docker 是内核级别的虚拟化技术,可以在一个物理机上运行很多的容器实例,服务器的性能可以被压榨到极致

3 Docker 架构

在这里插入图片描述

3.1 Docker 中术语说明

  • 镜像[Image]: 镜像是Docker中的关键概念,它是一个轻量级、独立的可执行软件包,包含运行应用程序所需的一切,包括代码、运行时、库、环境变量和配置文件。镜像是容器的基础,通过镜像可以创建并运行一个或多个容器实例。

  • 容器[Container]: 通过镜像可以实例化多个容器实例 ,这意味着容器中也包含了应用程序所需的一切.对容器的操作包括 删除 运行 启动

镜像和容器的关系 相当于Java程式中.Class 和 实例对象. 一个.Class可以new出不同的实例对象. 镜像是模版,依靠模版可以创建不同的容器

  • 仓库[Repository]: 仓库用于集中存储和管理 Docker 镜像,使得开发者和团队可以方便地访问和共享这些镜像。常用的镜像仓库为DockerHub 阿里云镜像库等.

  • 客户端:

  • 服务端:

4 Docker安装

环境说明

Centos8 [使用dnf指令来替代yum 下载依赖包]

安装步骤

  • 卸载旧版本
  sudo  yum  remove docker \
                    docker-client \
                    docker-client-latest \
                    docker-common \
                    docker-latest \
                    docker-latest-logrotate \
                    docker-logrotate \
                    docker-engine
  • 配置Docker的国内仓库地址
sudo dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo [官方文档默认是使用国外的镜像,不建议使用这个,下载慢]
  • 安装docker相关的Package
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • 启动docker
sudo systemctl start docker
docker version 

在这里插入图片描述

  • 设置Docker镜像仓库 /etc/docker/daemon.json

registry-mirrors 是一个数组,它可以包含多个镜像加速地址。添加镜像加速地址可以让 Docker 优先从这些地址拉取镜像,而不是直接从 Docker Hub 拉取,从而提高拉取速度,特别是在国内网络环境下,可以有效避免网络连接问题和拉取速度慢的问题

{
    "registry-mirrors":[ "https://docker.1ms.run", "https://doublezonline.cloud", "https://dislabaiot.xyz", "https://docker.fxxk.dedyn.io", "https://dockerpull.org", "https://docker.unsee.tech", "https://hub.rat.dev", "https://docker.1panel.live", "https://docker.nastool.de", "https://docker.zhai.cm", "https://docker.5z5f.com", "https://a.ussh.net", "https://docker.udayun.com", "https://hub.geekery.cn" ] }
  • 测试运行docker
sudo docker run hello-world

在这里插入图片描述

  • 查看镜像

    docker images
    

    在这里插入图片描述

6 Docker命令

docker命令操作手册

6.1 镜像命令

  • docker images 查询本地镜像 等价于 docker image ls
[root@hcss-ecs-b45b ~]# docker  images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    d2c94e258dcb   20 months ago   13.3kB

# 说明
REPOSITORY[镜像名]    TAG[标签]       IMAGE ID[镜像ID]       CREATED[创建时间]         SIZE[大小]

# 可选项
-a 获得所有的镜像
-q 只获得镜像的ID
  • docker image pull name[:tag] 下载镜像
[root@hcss-ecs-b45b ~]# docker pull mysql
Using default tag: latest # 当默认不写镜像的版本时,将会使用latest
latest: Pulling from library/mysql
2c0a233485c3: Pull complete  # 分层下载,这个是docker image的核心 ,与联合文件系统挂钩
cb5a6a8519b2: Pull complete 
570d30cf82c5: Pull complete 
a841bff36f3c: Pull complete 
80ba30c57782: Pull complete 
5e49e1f26961: Pull complete 
ced670fc7f1c: Pull complete 
0b9dc7ad7f03: Pull complete 
cd0d5df9937b: Pull complete 
1f87d67b89c6: Pull complete 
Digest: sha256:0255b469f0135a0236d672d60e3154ae2f4538b146744966d96440318cc822c6 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址 等价于 docker pull docker.io/library/mysql:latest
  • docker image remove / docker rmi 删除镜像
#  docker image remove 镜像ID 根据ID去删除镜像
docker image remove d2c94e258dcb -f

# docker image -aq 获得所有的镜像ID  
docker image remove $(docker image -aq ) -f 


# 可选项 
-f 强制删除

6.2 容器命令

所有的容器操作都需要依赖于镜像的存在

[root@hcss-ecs-b45b ~]# docker run -it --name centos_1  centos   /bin/bash 
[root@072e975e99e8 /]# 
# 可选项 
--name 給容器取別名
-p  设置运行端口
-it 内部交互运行
-d  后台运行 [ps:后台运行的容器存在一个坑,当容器中没有一个持续运行的服务/进程时,容器启动后将会很快退出]
  • docker ps 查询当前正在运行的容器
[root@hcss-ecs-b45b ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
ebd1e2a942ec   centos    "/bin/bash"   2 minutes ago   Up 2 minutes             centos_1
[root@hcss-ecs-b45b ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND          CREATED              STATUS                          PORTS     NAMES
a88275c5bae6   centos         "/bin/bash"      About a minute ago   Exited (0) About a minute ago             cranky_rubin
5f4ecc20b3bc   centos         "-i bin/bash"    2 minutes ago        Created                                   xenodochial_keller
0d011149522d   centos         "-it bin/bash"   3 minutes ago        Created                                   affectionate_kowalevski
9ac64e0ecfd0   d2c94e258dcb   "/hello"         9 days ago           Exited (0) 9 days ago                     elegant_grothendieck


# 可选项 
-a 查询所有的容器记录[包括已关闭的]
  • 退出容器
exit 退出并关闭容器
ctrl+q+p  退出但不关闭容器
  • 删除容器
docker rm 容器Id #根据容器ID制定删除容器
docker rm -f $(docker ps -aq)  # 根据所有的容器ID删除所有存在的容器
  • 启动和关闭容器
# docker stop 容器ID/name 停止容器
[root@hcss-ecs-b45b ~]# docker stop ebd1e2a942ec
ebd1e2a942ec
[root@hcss-ecs-b45b ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

# docker start 容器ID/name 开启容器
[root@hcss-ecs-b45b ~]# docker start ebd1e2a942ec
ebd1e2a942ec
[root@hcss-ecs-b45b ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS         PORTS     NAMES
ebd1e2a942ec   centos    "/bin/bash"   12 minutes ago   Up 4 seconds             centos_1



# docker restart 容器ID/name 重启容器
# docker kill 容器ID/name 强制停止容器

docker stop和 docker kill 关闭容器的区别:

docker stop 命令会先向容器发送一个 SIGTERM 信号,给容器内的进程一些时间来进行优雅的关闭操作(比如保存数据、关闭文件句柄等),如果一段时间后(默认等待 10 秒)容器内的进程还没有停止,就会再发送一个 SIGKILL 信号强制终止容器内的进程,从而停止容器.

docker kill 命令会向容器发送一个 SIGKILL 信号,直接强制终止容器内的所有进程,使得容器迅速停止运行。不过这种方式不建议在容器内有重要数据需要保存等情况时随意使用,因为可能会导致数据丢失或未保存完整等问题,更适合在容器出现无响应等异常情况且无法通过正常方式停止时采用.

6.3 常用其他命令

6.3.1查看日志

docker container logs/docker logs [docker logs [OPTIONS] CONTAINER]

[root@hcss-ecs-b45b ~]# docker logs centos_1
[root@ebd1e2a942ec /]#  
[root@ebd1e2a942ec /]# ls 
bi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值