一、Docker容器的简介及其部署
1.Docker容器的简介
1.什么是Docker容器
Docker是管理容器的引擎,为应用打包、部署平台,而非单纯的虚拟化技术
2.Docker的特点及其优势:
-
轻量级虚拟化
Docker 容器相较于传统的虚拟机更加轻量和高效,能够快速启动和停止,节省系统资源。
例如,启动一个 Docker 容器可能只需要几秒钟,而启动一个虚拟机则可能需要几分钟。 -
一致性
确保应用程序在不同的环境中(如开发、测试、生产)具有一致的运行表现。
无论在本地还是云端,应用的运行环境都能保持相同,减少了因环境差异导致的问题。 -
可移植性
可以轻松地将 Docker 容器从一个平台迁移到另一个平台,无需担心依赖和环境配置的差异。
比如,在本地开发的容器可以无缝部署到云服务器上。 -
高效的资源利用:多个 Docker 容器可以共享主机的操作系统内核,从而更有效地利用系统资源。
-
易于部署和扩展:能够快速部署新的应用实例,并且可以根据需求轻松地进行水平扩展。
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