DOCKER容器

一、Docker容器的简介及其部署

1.Docker容器的简介

1.什么是Docker容器

Docker是管理容器的引擎,为应用打包、部署平台,而非单纯的虚拟化技术

2.Docker的特点及其优势:

  1. 轻量级虚拟化

    Docker 容器相较于传统的虚拟机更加轻量和高效,能够快速启动和停止,节省系统资源。
    例如,启动一个 Docker 容器可能只需要几秒钟,而启动一个虚拟机则可能需要几分钟。

  2. 一致性

    确保应用程序在不同的环境中(如开发、测试、生产)具有一致的运行表现。
    无论在本地还是云端,应用的运行环境都能保持相同,减少了因环境差异导致的问题。

  3. 可移植性

    可以轻松地将 Docker 容器从一个平台迁移到另一个平台,无需担心依赖和环境配置的差异。
    比如,在本地开发的容器可以无缝部署到云服务器上。

  4. 高效的资源利用:多个 Docker 容器可以共享主机的操作系统内核,从而更有效地利用系统资源。

  5. 易于部署和扩展:能够快速部署新的应用实例,并且可以根据需求轻松地进行水平扩展。

2.Docker与虚拟化的对比:

| 虚拟机 | docker容器 |
|------|-----------------|----------|
| 操作系统 | 宿主机上运行虚拟机OS | 共享宿主机OS |
| 存储 | 镜像较大(GB | 镜像小(MB) |
| 性能 | 操作系统额外的cpu、内存消耗 | 几乎无性能损耗 |
| 移植性 | 笨重、与虚拟化技术耦合度高 | 轻量、灵活迁移 |
| 隔离性 | 完全隔离 | 安全隔离 |
| 部署 | 慢、分钟级 | 快速、秒级 |
| 运行密度 | 一般几十个 | 单机支持上千容器 |

2.Docker的部署

1.容器的工作原理:

2.部署第一个Docker容器:

https://docs.docker.com/ (官方站点)

2.1配置软件仓库
bash 复制代码
​
cd /etc/yum.repos.d
vim docker.repo
[docker]
name=docker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable(阿里云官方镜像)
gpgcheck=0

​
2.2 安装docker-ce并启动服务
bash 复制代码
#安装docker
yum install -y docker-ce 

#编辑docker启动文件,设定其使用iptables的网络设定方式,默认使用nftables
[root@docker ~]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --
containerd=/run/containerd/containerd.sock --iptables=true

systemctl  enable --now docker
docker info
2.3 激活内核网络选项
bash 复制代码
]# echo br_netfilter > /etc/modules-load.d/docker_mod.conf
]# modprobe br_netfilter
]# vim /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1

]# sysctl --system
]# systemctl  restart docker
2.4 设定docker加速器
bash 复制代码
[root@docker-node1 ~]# vim /etc/docker/daemon.json
{
    "registry-mirrors": ["https://docker.m.daocloud.io"]
}

[root@docker-node1 ~]# systemctl restart docker
[root@docker-node1 ~]# docker info
... ...
 Registry Mirrors:
  https://docker.m.daocloud.io/
 Live Restore Enabled: false

二Docker的基本操作

1.Docker的镜像管理

1.1搜索:
bash 复制代码
[root@Docker-node1 ~]# docker search  nginx
NAME           DESCRIPTION                                      STARS     OFFICIAL
nginx          Official build of Nginx.                         20094     [OK]
@@@省略内容

参数表:

参数 说明
NAME 镜像名称
DESCRIPTION 镜像说明
STARS 点赞数量
OFFICIAL 是否是官方的
1.2拉取镜像
bash 复制代码
#从镜像仓库中拉取镜像
[root@Docker-node1 ~]# docker pull busybox
[root@Docker-node1 ~]# docker pull nginx:1.26-alpine

#查看本地镜像
[root@Docker-node1 ~]# docker images
REPOSITORY                        TAG           IMAGE ID       CREATED         SIZE
nginx                             latest        900dca2a61f5   7 weeks ago     188MB
nginx                             1.26-alpine   b32ed582bddb   7 weeks ago     43.2MB
ubuntu                            latest        35a88802559d   2 months ago    78.1MB
busybox                           latest        65ad0d468eb1   15 months ago   4.26MB
centos                            7             eeb6ee3f44bd   2 years ago     204MB
centos                            latest        5d0da3dc9764   2 years ago     231MB
gcr.io/distroless/base-debian12   latest        7273f3276b21   N/A             20.7MB
gcr.io/distroless/base-debian11   latest        2a6de77407bf   N/A             20.6MB

alpine版本是nginx镜像的最小的安装发型版本

1.3查看镜像信息
bash 复制代码
#查看系统中的镜像列表
[root@docker-node1 ~]# docker images

#查看镜像的详细信息
[root@Docker-node1 ~]# docker image inspect nginx:1.26-alpine

#查看对镜像的更改记录
[root@docker-node1 ~]# docker history  nginx:latest
1.4 导出镜像
bash 复制代码
#保存镜像
[root@Docker-node1 ~]# docker image save nginx:latest -o nginx-latest.tar.gz
[root@Docker-node1 ~]# docker image save nginx:latest nginx:1.26-alpine -o nginx.tag.gz

#保存所有镜像    
[root@Docker-node1 ~]# docker save  `docker images | awk 'NR>1{print $1":"$2}'` -o images.tar.gz
  • -o:指定导出镜像的位置;

  • 可以同时导出多个镜像到一个文件中;

  • 指定.tar.gz 可以导出并压缩。

1.5 删除镜像
bash 复制代码
[root@Docker-node1 ~]# docker rmi nginx:latest
[root@Docker-node1 ~]# docker rmi  `docker images | awk 'NR>1{print $1":"$2}'`

2.容器的常用操作

2.1 启动容器
bash 复制代码
[root@Docker-node1 ~]# docker run  -d --name mario -p 80:8080 timinglee/mario
[root@Docker-node1 ~]# docker run -it --name centos7 centos:7
[root@3ba22e59734f /]#	#进入到容器中,按<ctrl>+<d>退出并停止容器,#按<ctrl>+<pq>退出但不停止容器

#重新进入容器
[root@docker ~]# docker attach centos7
[root@3ba22e59734f /]#

#在容器中执行命令
[root@docker ~]# docker exec -it  test ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

-d #后台运行

-i #交互式运行

-t #打开一个终端

--name #指定容器名称

-p #端口映射 -p 80:8080 把容器的8080端口映射到本机的80端口

--rm #容器停止自动删除容器

--network #指定容器使用的网络

2.2 查看容器运行信息
bash 复制代码
[root@Docker-node1 ~]# docker ps					#查看当前运行容器
[root@Docker-node1 ~]# docker ps -a					#查看所有容器
[root@Docker-node1 ~]# docker inspect busybox		#查看容器运行的详细信息
2.3 停止和运行容器
bash 复制代码
[root@Docker-node1 ~]# docker stop busybox			#停止容器
[root@Docker-node1 ~]# docker kill busybox			#杀死容器,可以使用信号
[root@Docker-node1 ~]# docker start busybox			#开启停止的容器

容器内的第一个进程必须一直处于运行的状态,否则这个容器,就会处于退出状态!

2.4 删除容器
bash 复制代码
[root@Docker-node1 ~]# docker rm centos7			#删除停止的容器
[root@Docker-node1 ~]# docker rm -f busybox			#删除运行的容器
[root@Docker-node1 ~]# docker container prune -f	#删除所有停止的容器
2.5 容器内容提交

默认情况下,容器被删除后,在容器中的所有操作都会被清理,包括要保存的文件

如果想永久保存,那么我们需要把动作提交,提交后会生成新的镜像

当我们在运行新镜像后即可看到我们提交的内容

此方法不利于企业审计,所以不推荐使用,在企业中我们多用Dockerfile来构建镜像

bash 复制代码
[root@Docker-node1 ~]# docker run -it --name test busybox
/ # touch leefile											#在容器中建立文件
/ # ls
bin      etc      leefile  lib64    root     tmp      var
dev      home     lib      proc     sys      usr
/ #
[root@Docker-node1 ~]# docker rm test	#删掉容器后	
test
[root@Docker-node1 ~]# docker run -it --name test busybox #删掉容器后开启新的容器文件则会不存在	
/ # ls
bin    dev    etc    home   lib    lib64  proc   root   sys    tmp    usr    var
/ #

[root@Docker-node1 ~]# docker commit -m "add leefile" test  busybox:v1
sha256:c8ff62b7480c951635acb6064acdfeb25282bd0c19cbffee0e51f3902cbfa4bd
[root@Docker-node1 ~]# docker images
REPOSITORY                        TAG           IMAGE ID       CREATED          SIZE
busybox                           v1            c8ff62b7480c   12 seconds ago   4.26MB

[root@Docker-node1 ~]# docker image history busybox:v1
IMAGE          CREATED         CREATED BY                          SIZE      COMMENT
c8ff62b7480c   2 minutes ago   sh                                  17B       add leefile
65ad0d468eb1   15 months ago   BusyBox 1.36.1 (glibc), Debian 12   4.26MB
2.6 系统中的文件和容器中的文件传输
bash 复制代码
[root@Docker-node1 ~]# docker cp  test2:/leefile /mnt		#把容器中的文件复制到本机
Successfully copied 1.54kB to /mnt
[root@Docker-node1 ~]# docker cp /etc/fstab  test2:/fstab	#把本机文件复制到容器中
2.7 查询容器内部日志
bash 复制代码
[root@Docker-node1 ~]# docker logs web

这次先做到这,之后再补上Docker的镜像构建,其镜像仓库的管理,Docker网络,Docker 数据卷管理及优化,以及Docker的安全优化

相关推荐
wanhengidc2 小时前
双线服务器的优势有哪些?
运维·服务器·网络·网络协议·智能手机
翼龙云_cloud2 小时前
阿里云代理商:部署OpenClaw 多 Agent 协同实战指南
运维·人工智能·阿里云·云计算·cloudwatch
Hns.2 小时前
自建K8S集群对接阿里云SLS
阿里云·容器·kubernetes
Cyber4K2 小时前
【Nginx专项】基础入门篇-日志格式、日志分类、日志缓存及日志轮转
运维·服务器·nginx·缓存
RisunJan2 小时前
Linux命令-nfsstat(显示 NFS(Network File System)客户端和服务器统计信息)
linux·运维·服务器
如鹿觅水3 小时前
OpenWrt 如何通过简单设置启用AP路由模式的图文教程
运维·服务器
何中应3 小时前
服务器主机时钟未同步告警解决
linux·运维·服务器
johnny2333 小时前
K8s管理面板:Rancher、Lens、KubeSphere、K8s Dashboard、Kite
容器·kubernetes·rancher
爱学习的小囧3 小时前
VM硬件版本20与17核心区别(ESXi 8.0适配+实操指南)
运维·服务器·网络·数据库·esxi·vmware·虚拟化