day101 docker安装和流量的转发
day101 docker安装和流量转发
docker安装部署
# 1.卸载旧版本
$ sudo yum remove docker \
docker-common \
docker-selinux \
docker-engine
# 2. 使用yum安装
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# 3鉴于国内网络问题,强烈建议使用国内源执行下面的命令添加 yum 软件源
$ sudo yum-config-manager \
--add-repo \
https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
# 4. 安装Docker CE
sudo yum makecache fast
sudo yum install docker-ce
# 5. 使用脚本自动的安装
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
# 6. 启动 Docker CE
sudo systemctl enable docker
sudo systemctl start docker
# 最后测试安装是否正确
$ docker run hello-world

配置docker得镜像下载的加速器
# 默认 docker pull dockerhub 国外站点下载, 太慢
相当于python pip源一样,换源
# 方案一,是去docker的中国的分公司daocloud.io里下载 (这个一般不用)
==============================
# 方案二 用自己的阿里云镜像的加速器
阿里云地址 https://cr.console.aliyun.com/cn-beijing/instances/mirrors
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hub-mirror.c.163.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# 方案三用华为云的镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://42240640f9ff42f692a2468126dfdf90.mirror.swr.myhuaweicloud.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

启动一个容器
客户端使用Rest api和 Docker daemon 进行访问
运维牛马 用docek维护命令

# 启动一个nginx测试
# 容器,镜像的关系
# 镜像 ()
# 容器的三部曲
1, 查询官网镜像
2, 下载官方镜像
3, 运行官网镜像
4, 容器运行后,会创建一个容器id,去管理它
5, 查看运行容器的进程,
1, 搜索官方镜像
docker search 镜像名: #语法
docker search nginx # 默认最新的版本
2. 下载官网镜像
docker pull nginx
语法
# docker pull 镜像名:tag 版本
docker pull nginx:latest
# 下载过程,你会发现,拆开,一层一层下载的?为什么?镜像原理,分层原理
[root@docker-01 ~]#docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete
a9edb18cadd1: Pull complete
589b7251471a: Pull complete
186b1aaa4aa6: Pull complete
b4df32aa5a72: Pull complete
a0bcbecc962e: Pull complete
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
# 3运行官网的镜像
# 首先是端口的映射,你才能访问到容器内的东西
# -p 28877:80 这里是将宿主机的28877流量转发给容器内目标端口
# -d 后台运行docker实例进程
docker run -p 28877:80 nginx
如果不加的化就在前台运行进程,卡了不好用

docker run -d -p 28877:80 nginx
4. 运行容器后,返回一个创建的容器id,可以管理
端口的转发,容器的80端口转发到宿主机器上的288877端口
[root@docker-100 docker]# docker run -d -p 28877:80 nginx
68e2082b1f23b234d2f7cb0d2d789df260f7d84f39879df5ac31c38fdeb2f0b6
5. 查看运行的容器进程列表。
docker ps
分析容器进程查看
容器id 来自的镜像 执行命令 执行时间 运行多久 容器端口映射关系 名字


访问试试

理解docker网络流量的走向

用户访问 宿主机的10.0.0.100:28877
↓
宿主机的网卡 10.0.0.1/24
↓
转发到容器上的inet6这个虚拟的docker网卡

查看这个运行中的容器进程,创建了些什么。
## 检查nginx,容器进程的信息。
[root@docker-100 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68e2082b1f23 nginx "/docker-entrypoint.…" 38 minutes ago Up 38 minutes 0.0.0.0:28877->80/tcp, :::28877->80/tcp zen_gould
容器进程说白了,宿主机上的一个进程(docker进程所管理的程序)
ps -ef | grep 14928
root 14928 1 0 01:47 ? 00:00:00 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 68e2082b1f23b234d2f7cb0d2d789df260f7d84f39879df5ac31c38fdeb2f0b6 -address /run/containerd/containerd.sock
这段的信息,证明容器进程, 创建容器的信息,以及名称空间,网络空间等,
# 停止容器进程(三种的方法)
docker stop 68e # 进程id的前三位
docker stop 68e2082b1f23 # 进程id的全部
docker stop zen_gould # docker ps 生成的 名称
[root@docker-100 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 你看空了
面试题
容器挂掉以后数据会丢吗
知识点(这个容器记录是否还在,是否被删除)
回答,不会。主要是看 docker ps -a 是否还能查询到该容器的记录。
# 查询所有的容器记录,详细的信息
容器挂了,端口映射都被释放了,虚拟的网络接口没了

现在我们重新的启动看看
docker start 68e
[root@docker-100 docker]# docker start 68e
68e
[root@docker-100 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68e2082b1f23 nginx "/docker-entrypoint.…" 58 minutes ago Up 7 seconds 0.0.0.0:28877->80/tcp, :::28877->80/tcp zen_gould

# 用户访问
⬇️
# 宿主机器的网卡
⬇️
# docker的虚拟的交换机
⬇️
# 容器的虚拟地址 (返回数据)
撒花🌸🌸🌸🌸🌸🌸🌸🌸😘
浙公网安备 33010602011771号