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:用于将前一个命令的输出作为参数传递给后一个命令。
相关推荐
NiNg_1_23435 分钟前
使用Docker Compose一键部署
运维·docker·容器
萠哥啥都行40 分钟前
Linux安装Docker以及Docker入门操作
运维·docker·容器
小江湖19941 小时前
元数据保护者,Caesium压缩不丢重要信息
运维·学习·软件需求·改行学it
gopher95111 小时前
linux驱动开发-中断子系统
linux·运维·驱动开发
吃面不喝汤662 小时前
如何配置和使用自己的私有 Docker Registry
运维·docker·容器
Rookie_explorers2 小时前
Linux下go环境安装、环境配置并执行第一个go程序
linux·运维·golang
学习向前冲2 小时前
AD域控服务器
运维·服务器
hgdlip2 小时前
查看ip地址的方法有几种?探索多样方法
运维·服务器·ip地址
丶21362 小时前
【Nginx】在 Docker 上安装 Nginx 的详细指南
运维·nginx·docker
神即道 道法自然 如来3 小时前
Jenkins怎么设置每日自动执行构建任务?
运维·jenkins