docker的基础,安装与使用

概念

微服务环节指不在是以完整的以物理机为基础的服务软件,而是借助于宿主机的性能,以小量的形式,单独部署的应用。
docker是一个开源的应用容器引擎,基于go语言开发的,使用时apache2.0的协议。
docker是在linux里面运行的容器化的开源工具。是一种轻量级的虚拟机。
在这里插入图片描述

鲸鱼是宿主机
集装箱:一个个独立的应用。每个应用之间都是互相隔离和独立的。

docker的设计的宗旨

  1. 封装
  2. 发布
  3. 部署
  4. 运行
  5. 销毁

容器的生命周期:达到一次封装,多次运行的目的。
可移植,可扩展,兼容性的目的,随时随地都可以快速的部署和使用docker的应用。

docker是在linux上运行,与其他的容器共享主机的内核,包括其他的资源(çpu,内存,硬盘),但是每个docker应用都是独立的进行

为什么能做到独立进行

  • linux的命名空间 namespace可以实现资源的隔离。
  • cgroup 可以实现对docker应用程序的资源限制。

namespace

namespace是linux内核的一种特性,允许将一组系统资源进行隔离,使得一个命名空间中的进程看起来像在系统重拥有独立的资源。

namespace有6个命名空间

  1. UTS 系统调用的参数 clone_newuts
    隔离的内容:主机名和域名,在每个应用中,都能看到自己的主机名和域名,与其他进程分隔开。
  2. PID 进程隔离
    隔离内容:进程编号,当运行应用之后,每个应用都有自己的独立的进程编号的空间,每个程序之间不会发生冲突
  3. network 网络隔离
    隔离内容:每个应用启动之后,都有自己的独立的网络空间,隔离网络设备,端口,和网络栈
  4. mount 隔离文件系统
    隔离内容:隔离文件系统,每个应用挂载之后都有自己独立的文件系统挂载点,这些挂载点互不冲突,也不会互相干扰
  5. IPC 隔离通信资源
    隔离内容:隔离的是信号量,消息队列和共享内存,在ipc隔离当中,每个进程之间都有独立的通信资源。
  6. user 隔离用户和用户组
    隔离内容:用户和用户组,每个用户和组都是独立的命名空间,不同的用户和组之间是隔离开的。

docker的核心概念

  • 仓库:docker的仓库是用来保存镜像的地方,也是获取镜像和上传镜像的目的地
  • 镜像:docker的镜像是创建容器基础,一个镜像就类似于一个可执行的,包含源码的二进制包,包括容器运行的参数,设置,环境变量和配置文件。打包好的可运行程序。
  • 容器:容器是基于镜像创建的运行的实例

安装和基本的使用方法

安装

# step 1: 安装必要的一些系统工具
apt-get install ca-certificates curl gnupg

# step 2: 信任 Docker 的 GPG 公钥
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

# Step 3: 写入软件源信息
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 
# Step 4: 安装Docker
apt-get update
apt -y install docker-ce=5:24.0.1-1~ubuntu.22.04~jammy docker-ce-cli=5:24.0.1-1~ubuntu.22.04~jammy containerd.io docker-buildx-plugin docker-compose-plugin

root@u1:~# vim /etc/docker/daemon.json
root@u1:~# systemctl daemon-reload
root@u1:~# systemctl restart docker

root@u1:~# docker pull nginx:1.22
1.22: Pulling from library/nginx
f1f26f570256: Pull complete 
fd03b214f774: Pull complete 
ef2fc869b944: Pull complete 
ac713a9ef2cc: Pull complete 
fd071922d543: Pull complete 
2a9f38700bb5: Pull complete 
Digest: sha256:fc5f5fb7574755c306aaf88456ebfbe0b006420a184d52b923d2f0197108f6b7
Status: Downloaded newer image for nginx:1.22
docker.io/library/nginx:1.22

root@u1:~# docker pull ubuntu:22.04
22.04: Pulling from library/ubuntu
6414378b6477: Pull complete 
Digest: sha256:0e5e4a57c2499249aafc3b40fcd541e9a456aab7296681a3994d631587203f97
Status: Downloaded newer image for ubuntu:22.04
docker.io/library/ubuntu:22.04

docker的基本命令

docker images:查看当前已经下载到本地的镜像
在这里插入图片描述

  • REPOSITORY:应用的名称
  • TAG:标签,镜像的标签,应用的版本
  • IMAGE ID:镜像在本地的唯一标识
  • CREATED:发布在镜像仓库的时候
  • SIZE:镜像的大小

docker inspect 镜像id:查看镜像的详细信息
在这里插入图片描述
镜像下载完之后保存在/var/lib/docker

  • overlay2:镜像的联合文件系统
  • lowerDir:镜像的底层文件系统,整个镜像根文件系统(运行载体)
  • upperDir:可写层,用户可以自定义的在底层文件系统上进行修改,但是这些修改又不影响根文件系统,容器可以实现读写
  • mergedDir:合并目录,就是用户看到容器的内的一个视图,
  • WorkDir:工作目录,进行写操作,可以使overlay2更新和跟踪对于文件系统的修改。

docker tag nginx:1.22 nginx:test1
给nginx:1.22做了一个副本。
镜像的组成:
nginx:1.22
镜像名 标签

docke rmi -f nginx:1.22 删除镜像-----慎用

docker save -o /opt/centos.tar centos:7
把本地镜像导出到指定位置,保存为指定名称(.tar)

docker load -i centos.tar
把镜像导入本地

容器

如何基于镜像创建容器
docker run -itd ubuntu:22.04

run:如果本地不存在指定的镜像,他会自动取仓库拉取指定的镜像然后再创建容器
-i:表示容器开启标准输入,接受用户输入的指定
-t:生成一个伪终端tty,用户可以进入容器的内部
-d:容器创建完之后进入后台运行。

docker ps:查看状态是running的容器
docker ps -a:查着所有状态的容器,包括运行和停止以及报错的容器。
出现exit的原因:
容器启动之后,都会有一个执行的命令,如果该命令执行完毕之后没有其他的可执行内容,那么容器会立刻退出进入终止状态。

进入容器内部操作
  • docker exec -it 容器id/名称 /bin/bash
  • docker exec -it 容器id/名称 bash
#自定义容器名称
docker run -itd --name nginx1 nginx:test1

docker exec -it nginx1 bash 
#都会自定义容器的名称,用指定的名称已进入容器,容器的名字在本机是唯一的

容器本质:基于镜像的配置和环境,创建了一个基于linux系统的,在这个系统当中安装了指定应用的小型的虚拟机。

容器和宿主机之间的交换
#容器的文件复制到宿主机
docker cp nginx1:/var/log/nginx/access.log /opt/


#宿主机的文件复制到容器内部
docker cp sources.list nginx1:/etc/apt

#查看容器的标准输出:查看容器的日志
docker logs -f nginx1
#-f 动态查看容器的日志
端口映射

-P:指定宿主机的随机端口和容器内的端口进行映射,从32768开始–65535
-p:需要人工指定宿主机的端口和容器进行映射 只要指定端口宿主机没有被占用都可以使用。

docker run itd --name test2 -P nginx:test1

docker run -itd --name nginx2 -p 82:80 nginx:test1

其它命令

docker rm -f
#强制删除容器
容器是基于镜像创建的,但是容器一旦运行,镜像不再是依赖条件,镜像可以删除,不影响部署的容器。

#查看容器ip
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nginx1

#查看容器的pid号
docker inspect -f '{{.State.Pid}}' centos2

批量删除所有容器
docker ps -a | awk 'NR>=2{print $1}' | xargs docker rm -f

#批量清理所有后台已经停止的容器
docker rm $(docker ps -a -q)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值