谈论/理解 Docker 的常用核心部分,以下皆在 Ubuntu 操作系统下进行
1 国内源安装 Docker-ce
1.1 配置 Linux 内核流量转发
因为docker和宿主机的端口映射,本质是内核的流量转发功能,所以要对其进行配置
1.1.1 未配置流量转发
如果没有配置流量转发的话,复制一下代码即可配置
$ cat <<EOF > /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
EOF
# 加载内核防火墙模块,允许流量转发
# 加载内核防火墙功能参数1
[root@docker-01 ~]#modprobe br_netfilter
# 确认有记录,就是开启了这个流量转发功能
[root@docker-01 ~]#lsmod|grep netfilter
br_netfilter 22256 0
bridge 146976 1 br_netfilter
# nginx优化参数
#对内核tcp参数优化
# 增加默认tcp链接数等参数修改
[root@docker-01 ~]#sysctl -p /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1 # iptables的forward转发功能就没用了
1.2 配置国内源
因为下载之后我们一直都是用的国外的,没有梯子的话很慢,所以我们将配置 docker 镜像源,我一般是用阿里的
# 基础环境配置
# 把 docker 内置的一些工具包给删掉,一般不用他们
yum remove docker docker-common docker-selinux docker-engine
# 安装 yum 的一些工具包
yum install yum-utils device-mapper-persistent-data lvm2
# 2 配置yum源
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
# 3 修改参数,将 Docker CE 的 yum 仓库地址从默认的 Docker 仓库更改为清华大学开源软件镜像站的仓库
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
# 4 使用更新后的仓库地址,生成一个缓存,以便 yum 可以快速查找和安装软件包
yum makecache fast
# 5 安装docker-ce 社区版,免费版 docker
yum install docker-ce -y
# 6 启动
systemctl start docker
# 7 查看docker服务端进程
ps -ef|grep docker
# 7.1 检查docker版本
[root@docker-01 ~]#docker version
Client: Docker Engine - Community
Version: 20.10.17
API version: 1.41
Go version: go1.17.11
Git commit: 100c701
Built: Mon Jun 6 23:05:12 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.17
API version: 1.41 (minimum version 1.12)
Go version: go1.17.11
Git commit: a89b842
Built: Mon Jun 6 23:03:33 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.8
GitCommit: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
# 8 默认
docker pull 默认是在国外站点下载, 太慢
可以在 https://hub.docker.com/ #注册,然后,就会有账号密码,里面管理你自己的私有镜像。
# 解决下载太慢问题
# 方案1,执行如下脚本即可
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
========================================================================
# 方案2,用你自己的 阿里云镜像加速器
https://cr.console.aliyun.com/cn-beijing/instances/mirrors
# 在上面网址中可以登陆自己的阿里云账户,里面有配置方法
# 配置docker镜像下载加速器(去获取你自己的阿里云镜像站,别用别人的)
# 常见玩法
[root@docker-01 ~]#cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://m9gdlx6x.mirror.aliyuncs.com"]
}
目前遇到一个问题,配置源之后还是拉不到镜像,拉取超时,目前还在排查中,出了结果将在此进行更新,目前拉取不到镜像建议翻个墙
1.3 启动一个容器
简单操作走一走
# 启动一个nginx测试
# 容器,镜像的关系
# 镜像()
# 1. 搜索官网镜像
# docker search 镜像名:镜像版本 # 语法
docker search nginx # 默认最新版本 nginx:latest
# 2. 下载官网镜像
# 语法
# 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流量转发给容器内目标端口 80端口
# -d 后台运行docker实例进程,不加试试
docker run -d -p 28877:80 nginx
4. 运行容器后,会发挥当前创建的一个容器id记录号,你可以去管理它
[root@docker-01 ~]#docker run -d -p 28877:80 nginx
f7bffe1c1854ec3c6c3c1d64a22d97a69414e07b5774bf44da494c219e231085
5.查看运行的容器进程列表
docker ps
2 Docker 网络流量走向
简单点来说,在上面,我们创建了一个容器,同时对其端口进行映射,我们在本地访问这个端口时,流量将进行转发至docker内部的80端口进行访问
3 容器进程详解
# 检查这个nginx 容器进程的信息
(base) root@iZ0jlclobhru3bgbp34p4tZ:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3dc1ca333102 nginx "/docker-entrypoint.…" 21 hours ago Up 21 hours 0.0.0.0:22888->80/tcp, :::22888->80/tcp silly_shamir
# 容器进程,说白了,宿主机上的一个进程(被docker进程所管理的程序)
我们可以查看到进程如下:
[root@docker-200 ~]#ps -ef
# 这段信息,证明,容器进程,创建了容器的信息,以及名称空间,以及网络空间等
/usr/bin/containerd-shim-runc-v2
-namespace moby
-id 3dc1ca3331029f8dc5e00327151718cf1f1ba9cb1e9dd4522fbca5e97655459d
-address
root 1061329 1 0 Nov07 ? 00:00:02 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 3dc1ca3331029f8dc5e00327151718cf1f1ba9cb1e9dd4522fbca5e97655459d -address /run/containerd/container
root 1061352 1061329 0 Nov07 ? 00:00:00 nginx: master process nginx -g daemon off;
root 15180 15122 0 11:45 pts/0 00:00:00 grep --color=auto 13916
# 停止容器进程试试
(base) root@iZ0jlclobhru3bgbp34p4tZ:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3dc1ca333102 nginx "/docker-entrypoint.…" 22 hours ago Up 22 hours 0.0.0.0:22888->80/tcp, :::22888->80/tcp silly_shamir
# 你可以直接基于 容器id,完整,或者最少3位,或者容器名去管理
(base) root@iZ0jlclobhru3bgbp34p4tZ:~# docker stop 3dc
3dc
# 三选一都行
#docker stop 3dc 3dc1ca333102 silly_shamir
(base) root@iZ0jlclobhru3bgbp34p4tZ:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# docker 容器挂掉后,数据会丢失吗?(这个容器记录是否还在,是否被删除)
#答案: 不会丢,具体要看 docker ps -a 是否还能查询到该容器记录
#查看所有的容器记录,详细信息
(base) root@iZ0jlclobhru3bgbp34p4tZ:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3dc1ca333102 nginx "/docker-entrypoint.…" 22 hours ago Exited (0) 54 seconds ago silly_shamir
# 再次启动该容器
以上是关于docker的一个简单的下载配置和应用,细节我们下一节开始讲解
乾坤未定,你我皆牛马