当前位置: 首页 > article >正文

Docker配置及简单应用

谈论/理解 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的一个简单的下载配置和应用,细节我们下一节开始讲解

乾坤未定,你我皆牛马


http://www.kler.cn/a/386975.html

相关文章:

  • LLM时代下Embedding模型如何重塑检索、增强生成
  • 速盾:cdn和反向代理的关系是什么?
  • 索引【MySQL】
  • 计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
  • Unity 网格模型及优化
  • 面试:TCP、UDP如何解决丢包问题
  • 探索 C++20:C++ 的新纪元
  • 智能合约在供应链金融中的应用
  • 【EFK】Linux集群部署Elasticsearch最新版本8.x
  • 常用机器人算法原理介绍
  • Flutter UT太多导致跑覆盖率报错
  • PostgreSQL 性能优化全方位指南:深度提升数据库效率
  • Flutter鸿蒙next 中的 Drawer 导航栏
  • 如何利用动态住宅IP突破亚马逊反爬虫验证码机制
  • [NewStarCTF 2023 公开赛道]逃1
  • 10. java基础知识(下)
  • mac上如何安装指定版本的python
  • 【手撕面试题】React(高频知识点二)
  • 数据科学与大数据技术专业学生的考研方向与适合专业探索
  • 【Linux-进程间通信】了解信号量 + 共享内存 + 消息队列的应用
  • MatrixOne 助力西安天能替换MySQL+MongoDB+ES打造一体化物联网平台
  • express项目中使用MySQL
  • 汽车共享服务管理:SpringBoot专业解决方案
  • SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”
  • linux rocky 9.4部署和管理docker harbor私有源
  • ctfshow-web入门-反序列化(web265-web270)