Docker生态架构及部署

Docker生态架构及部署

一、生态架构

Docker Host

用于安装Docker daemon的主机,即为Docker Host,并且该主机中可基于容器镜像运行容器.

Docker daemon

用于管理Docker Host中运行的容器、容器镜像、容器网络等,管理由Containerd.io提供的容器

Registry

容器镜像仓库,用于存储已生成容器运行模板的仓库,用户使用时,可直接从容器镜像仓库中下载容器镜像,即容器运行模板,就可以运行容器镜像中包含的应用了。例如: Docker Hub,也可以使用Harbor实现企业私有的容器镜像仓库。

Docker client

Docker Daemon客户端工具,用于同Docker Daemon进行通信,执行用户指令,可部署在Docker Host上,也可以部署在其它主机,能够连接到Docker Daemon即可操作。

lmage

把应用运行环境及计算资源打包方式生成可再用于启动容器的不可变的基础设施的模板文件,主要用于基于其启动个容器。

Container

由容器镜像生成,用于应用程序运行的环境,包含容器镜像中所有文件及用户后添加的文件,属于基于容器镜像生成的可读写层,这也是应用程序活跃的空间。

Docker Dashboard

*仅限于MAC与Windows操作系统上安装使用。

Docker Dashboard 提供了一个简单的界面,使您能够直接从您的机器管理您的容器、应用程序和映像,而无需使用 CLI 来执行核心操作。

二、Docker部署

1、环境要求

2、YUM安装

阿里云Docker CE镜像

perl 复制代码
[root@VM-3-8-centos ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
​
[root@VM-3-8-centos ~]# ls /etc/yum.repos.d/
CentOS-Epel.repo              CentOS-Stream-Extras.repo            CentOS-Stream-RealTime.repo
CentOS-Stream-AppStream.repo  CentOS-Stream-HighAvailability.repo  CentOS-Stream-ResilientStorage.repo
CentOS-Stream-BaseOS.repo     CentOS-Stream-Media.repo             CentOS-Stream-Sources.repo
CentOS-Stream-Debuginfo.repo  CentOS-Stream-PowerTools.repo        docker-ce.repo
​
[root@VM-3-8-centos ~]# yum repolist
repo id                                     repo name
appstream                                   CentOS Stream 8 - AppStream
baseos                                      CentOS Stream 8 - BaseOS
docker-ce-stable                            Docker CE Stable - x86_64
epel                                        EPEL for redhat/centos 8 - x86_64
extras                                      CentOS Stream 8 - Extras
​
[root@VM-3-8-centos ~]# yum -y install docker-ce
#安装Docker-ce
​
[root@VM-3-8-centos ~]# vim /usr/lib/systemd/system/docker.service 
#编辑配置文件
#13 ExecStart=/usr/bin/dockerd
#14 ExecStartPost=/sbin/iptables -P FORWARD ACCEPT
​
​
[root@VM-3-8-centos ~]# systemctl start docker
[root@VM-3-8-centos ~]# systemctl enable docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
#配置自启动
​
[root@VM-3-8-centos ~]# docker version
#验证安装版本

卸载Docker

perl 复制代码
[root@VM-3-8-centos ~]# systemctl stop docker
Warning: Stopping docker.service, but it can still be activated by:
  docker.socket
#停止服务 
[root@VM-3-8-centos ~]# yum remove docker-ce containerd.io docker-ce-cli
#依次卸载docker社区版&依赖,客户端
​
[root@VM-3-8-centos ~]# docker version
bash: /usr/bin/docker: No such file or directory
#验证卸载完成

3、二进制安装

不支持更新Docker版本,不建议 官方文档:docs.docker.com/engine/inst...

csharp 复制代码
[root@VM-3-8-centos ~]# tar xzvf /root/docker-20.10.9.tgz
#解压二进制文件
[root@VM-3-8-centos ~]# ls docker
containerd       containerd-shim-runc-v2  docker   docker-init   runc
containerd-shim  ctr                      dockerd  docker-prox
#解压结果
[root@VM-3-8-centos ~]# cp docker/* /usr/bin/
#将二进制文件移动到可执行路径上的目录
[root@VM-3-8-centos ~]# dockerd &
#启动 Docker 守护进程
[root@VM-3-8-centos ~]# docker version
#验证安装 
[root@VM-3-8-centos ~]# docker run hello-world
#验证运行

三、使用容器运行Nginx应用及Docker命令

1、使用容器运行Nginx应用

1.观察下载容器镜像过程

csharp 复制代码
[root@VM-3-8-centos ~]# docker run -d nginx:latest
#运行一个以nginx:latest为模版的容器,-d本机后台执行
Unable to find image 'nginx:latest' locally
#没有找到镜像,去镜像仓库拉取镜像
latest: Pulling from library/nginx
​
[root@VM-3-8-centos ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
7968d5bcd0f0   nginx:latest   "/docker-entrypoint...."   5 minutes ago   Up 5 minutes   80/tcp    practical_bose
#容器ID 容器镜像 容器中运行的命令 容器创建的时间 容器状态 容器提供的访问端口 容器名称
#提示:容器无命令,自动停止

2.确认容器的IP地址

csharp 复制代码
[root@VM-3-8-centos ~]# docker inspect 7968d5bcd0f0
#容器ID可短识别,唯一即可
[root@VM-3-8-centos ~]# ip a s
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:b4:16:2d:ff brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
7: veth618cbea@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
#验证Docker网络拓扑图

3.使用curl命令访问容器

xml 复制代码
[root@VM-3-8-centos ~]# curl http://172.17.0.2
<!DOCTYPE html>
<html>
......
</html>

2、Docker命令

1.Docker命令帮助or官方文档

csharp 复制代码
[root@VM-3-8-centos ~]# docker -h

Command-line reference > Docker CLI (docker):docs.docker.com/reference/

2.docker run命令

csharp 复制代码
[root@VM-3-8-centos ~]# docker run -i -t --name cl centos:latest bash
命令解释
docker run 运行一个命令在容器中,命令是主体,没有命令容器就会消亡
-i 交互式
-t 提供终端
-d 后台运行
--name c1 把将运行的容器命名为c1
centos:latest 使用centos最新版本容器镜像
bash 在容器中执行的命令
​
[root@bc134c97bb2b /]#ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.1  0.1  12052  3304 pts/0    Ss   15:11   0:00 bash
root          17  0.0  0.1  44668  3452 pts/0    R+   15:13   0:00 ps aux
#容器内所有用户的进程信息
​
[root@bc134c97bb2b /]# pwd
/
[root@bc134c97bb2b /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
#一个虚拟的Centos系统
​
[root@bc134c97bb2b /]# ip a  
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
#两张网卡,一张host的网卡一张虚拟网卡
​
[root@VM-3-8-centos ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
7968d5bcd0f0   nginx:latest   "/docker-entrypoint...."   53 minutes ago   Up 53 minutes   80/tcp    practical_bose
#无运行的容器查询不到
​
[root@VM-3-8-centos ~]# docker ps --all
CONTAINER ID   IMAGE           COMMAND                  CREATED             STATUS                         PORTS     NAMES
bc134c97bb2b   centos:latest   "bash"                   6 minutes ago       Exited (0) 34 seconds ago                c1
#容器已经exied退出消除

3.docker exec命令

bash 复制代码
[root@VM-3-8-centos ~]# docker exec -it c2 ls /root
anaconda-ks.cfg  anaconda-post.log  original-ks.cfg

命令解释
docker exec 在容器外实现与容器交互执行某命令
-it 交互式
c2 正在运行的容器名称
ls /root 在正在运行的容器中运行相关的命令

4.docker attach命令

css 复制代码
[root@VM-3-8-centos ~]# docker attach c3
[root@de685cc0538b /]#

命令解释
docker attach 类似于ssh命令,可以进入到容器中
c2 正在运行的容器名称
提示:docker attach 退出容器时,如不需要容器再运行,可直接使用exit退出;如需要容器继续运行,可使用ctrl/control+p+q

5.docker stop命令

csharp 复制代码
[root@VM-3-8-centos ~]# docker stop c1 c2
c1
c2

6.docker start命令

csharp 复制代码
[root@VM-3-8-centos ~]# docker start c1 c2
c1
c2

7.docker rm命令

perl 复制代码
[root@VM-3-8-centos ~]# docker stop c3 ; docker rm c3
c3
c3
#先暂停再删除

[root@VM-3-8-centos ~]# docker ps --all | awk '{if(NR>=2){print $1}}' | xargs docker rm

#批量-全删除容器
awk:这是一个文本处理工具,用于对文本进行分析和处理。
'{if (NR>=2)[print $1]}':这是 AWK 命令的一部分,用于对输入进行处理。NR 是 AWK 内置的变量,表示当前行的行号。if (NR>=2) 表示如果行号大于等于2,则执行后面的操作。[print $1] 表示打印当前行的第一个字段,即容器的ID。
xargs:用于将前一个命令的输出作为参数传递给后一个命令。
相关推荐
pk_xz12345621 分钟前
Shell 脚本中变量和字符串的入门介绍
linux·运维·服务器
小珑也要变强23 分钟前
Linux之sed命令详解
linux·运维·服务器
Lary_Rock2 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
一坨阿亮6 小时前
Linux 使用中的问题
linux·运维
wclass-zhengge8 小时前
Docker篇(Docker Compose)
运维·docker·容器
李启柱8 小时前
项目开发流程规范文档
运维·软件构建·个人开发·设计规范
力姆泰克9 小时前
看电动缸是如何提高农机的自动化水平
大数据·运维·服务器·数据库·人工智能·自动化·1024程序员节
BPM_宏天低代码9 小时前
低代码 BPA:简化业务流程自动化的新趋势
运维·低代码·自动化
sun00770010 小时前
拷贝 cp -rdp 和 cp -a
linux·运维·服务器
wowocpp10 小时前
ubuntu 22.04 server 安装 anaconda3
linux·运维·ubuntu