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

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 - CommunityVersion:           20.10.17API version:       1.41Go version:        go1.17.11Git commit:        100c701Built:             Mon Jun  6 23:05:12 2022OS/Arch:           linux/amd64Context:           defaultExperimental:      trueServer: Docker Engine - CommunityEngine:Version:          20.10.17API version:      1.41 (minimum version 1.12)Go version:       go1.17.11Git commit:       a89b842Built:            Mon Jun  6 23:03:33 2022OS/Arch:          linux/amd64Experimental:     falsecontainerd:Version:          1.6.8GitCommit:        9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6runc:Version:          1.1.4GitCommit:        v1.1.4-0-g5fd4c4ddocker-init:Version:          0.19.0GitCommit:        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:latest3. 运行官网镜像
# 端口映射,你才能访问到容器内的东西
# -p 28877:80   将宿主机的28877流量转发给容器内目标端口  80端口
# -d 后台运行docker实例进程,不加试试
docker run -d   -p 28877:80      nginx4. 运行容器后,会发挥当前创建的一个容器id记录号,你可以去管理它
[root@docker-01 ~]#docker run -d   -p 28877:80      nginx
f7bffe1c1854ec3c6c3c1d64a22d97a69414e07b5774bf44da494c219e2310855.查看运行的容器进程列表
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.mrgr.cn/news/68621.html

相关文章:

  • 【用Rust写CAD】第二章 第二节 markdown语法
  • 十四:java web(6)-- Spring Spring MVC
  • linux crash使用和环境部署
  • 记录学习react的一些内容
  • Linux进程通信之管道
  • 有无人机巡检为什么还会再采购巡检管理系统
  • 揭秘集装箱箱号自动识别原理,箱号识别算法
  • 智慧城市路面垃圾识别系统产品介绍方案
  • 5万加购上线即断货,双11洗衣机品类打破增长难关
  • npx创建项目时,error fetch failed.TypeError: fetch failed
  • Linux服务器修改网络配置
  • 2.1 >关于桌面环境
  • Java 上机实践1(入门)
  • CAN和CANFD的不同点
  • 【前端知识】JS模块规范
  • 【野生动物识别系统】Python+深度学习+人工智能+卷积神经网络算法+TensorFlow+ResNet+图像识别
  • go格式化时间
  • Leetcode:26. 删除有序数组中的重复项——Java快慢指针暴力解法
  • 考研人数减少,为什么考同等学力申硕的却更多?
  • Adaptive AUTOSAR ——Cryptography (在自适应AUTOSAR中的应用:概念、功能与实现)
  • java中图片加载
  • mybatis+postgresql,无感读写json字段
  • Dinky控制台:利用SSE技术实现实时日志监控与操作
  • ONLYOFFICE ——让团队合作更高效
  • Java 上机实践2(基础数据类型与数组)
  • SD-定价关于Condition is Inactive