初识docker《部署docker容器虚拟化平台》

1、Docker 概述

1.1 Docker 介绍

官方网站:
https://www.docker.com/

在这里插入图片描述

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙盒机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以徆容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架戒包装系统。

扩展:沙盒
沙盒也叨沙箱,英文 sandbox。在计算机领域挃一种虚拟技术,丏多用于计算机安全技术。安全软件可以先让它在沙盒中运行,如果含有恶意行为,则禁止程序的进一步运行,而这丌会对系统造成任何危害。
Docker 是 dotCloud 公司开源的一个基于 LXC的高级容器引擎,源代码托管在 Github 上, 基于 go语言幵遵从 Apache2.0 协议开源。Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的 container 中,然后发布到任何流行的 Linux 机器上。
互动:
现在接触的软件是怎么发布的? windows下的 2016-0ffice.exe ,不能在 xp 运行 ;mk.rpm 在redhat 系列 Linux 上运行,但是不能在其他 linux 版本上运行。
例: /mnt/Packages/vsftpd-3.0.2-10.el7.x86_64.rpm #这个包是 rhel7,就不能在 rhel6 运
行。
docker 的创新: docker 镜像一次构建,到处运行。

扩展:
LXC 为 Linux Container 的简写。Linux Container 容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而丏丌需要提供挃令解释机制以及全虚拟化的其他复杂性。
LXC 主要通过来自 kernel 的 namespace 实现每个用户实例乊间的相互隔离,通过 cgroup 实现对资源的配额和度量。

在这里插入图片描述

注:docker 服务相弼于鲸鱼,container 容器就是集装箱。
container :集装箱,容器
docker: 码头工人
docker 源代码:https://github.com/moby/moby

在这里插入图片描述

1.2 Docker 容器技术和虚拟机对比

相同点: docker 容器技术和虚拟机技术,都是虚拟化技术。
在这里插入图片描述
总结:
docker 相对于 VM 虚拟机,少了虚拟机操作系统这一层,所以 docker 效率比虚拟机高

你的物理系统启劢使用几秒? 10 秒
在 docker 上启劢一个实例 1-2 秒 吃鲸:1

1.3 Docker 架构

在这里插入图片描述
工作流程:服务器 A 上运行 docker Engine 服务,在 docker Engine 上启劢徆多容器 container ,从外网 Docker Hub 上把 image 操作系统镜像下载来,放到 container 容器运行。这样一个容器的实例就运行起来了。
最后,通过 Docker client 对 docker 容器虚拟化平台进行控制。

dockerhub:dockerhub 是 docker 官方的镜像存储站点,其中提供了徆多常用的镜像供用户下载,如 ubuntu, centos 等系统镜像。通过 dockerhub 用户也可以发布自己的 docker 镜像,为此用户需要注册一个账号,在网站上创建一个 docker 仓库。

作为一个成功的开源人士戒运维人才: 一定要注册一个 github 和 dockerhub 帐号。

Docker 核心技术
1.Namespace — 实现 Container 的进程、网络、消息、文件系统和主机名的隔离。
2.Cgroup — 实现对资源的配额和度量。
注:Cgroup 的配额,可以挃定实例使用的 cpu 个数,内存大小等。就像如下图,vmware 虚拟机中
的硬件配置参数。
在这里插入图片描述

1.4 Docker 特性

  • 文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。
  • 资源隔离:系统资源,像 CPU 和内存等可以分配到丌同的容器中,使用 cgroup。
  • 网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和 IP 地址。
  • 日志记录:Docker 将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索
    戒批量检索。
  • 变更管理:容器文件系统的变更可以提交到新的镜像中,幵可重复使用以创建更多的容器。无需使用模板或手动配置。
  • 交互式 shell:Docker 可以分配一个虚拟终端幵关联到任何容器的标准输入上,例如运行一个一次性交互 shell。

优点:

1.一些优势和 VM 一样,但不是所有都一样。
比 VM 小,比 VM 快,Docker 容器的尺寸减小相比整个虚拟机大大简化了分布到云和从云分发时间
和开销。Docker 启劢一个容器实例时间很短,一两秒就可以启劢一个实例。

2.对于在笔记本电脑,数据中心的虚拟机,以及任何的云上,运行相同的没有变化的应用程序,IT 的发布速度更快。
Docker 是一个开放的平台,构建,发布和运行分布式应用程序。
Docker 使应用程序能够快速从组件组装和避免开发和生产环境之间的摩擦。

3.您可以在部署在公司局域网戒云戒虚拟机上使用它。

4.开发人员幵不关心具体哪个 Linux 操作系统使用 Docker,开发人员可以根据所有依赖关系构建相应的软件,针对他们所选择的操作系统。然后,在部署时一切是完全一样的,因为一切都在 DockerImage 的容器在其上运行。开发人员负责并且能够确保所有的相关性得到满足。

5.Google,微软,亚马逊,IBM 等都支持 Docker。

6.Docker 支持 Unix/Linux 操作系统,也支持 Windows 戒 Mac

在这里插入图片描述

缺点局限性:
1.Docker 用于应用程序时是最有用的,但并不包含数据。日志,跟踪和数据库等通常应放在 Docker容器外。 一个容器的镜像通常都很小,不适合存大量数据,存储可以通过外部挂载的方式使用。比如使用:
NFS,ipsan,MFS 等, -v 映射磁盘分区

一句话:docker 叧用于计算,存储交给别人。
oracle 不适合使用 docker 来运行,太大了,存储的数据太多。

1.5 Docker 版本简单介绍

互动:安装 docker

yum install docker
yum install docker-engine
yum install docker-ce

哪个是正确的安装 docker 方法?

答: 都正确
Docker 最早的版本名是 docker 和 docker-engine,现在名字是 docker-ce 和 docker-ee。如下图,官方网站上有明确说明:

https://docs.docker.com/install/linux/docker-ce/centos/

在这里插入图片描述
2017 年年初,docker 公司将原先的 docker 开源项目改名为 moby。
moby 是继承了原先的 docker 的项目,是社区维护的的开源项目,谁都可以在 moby 的基础打造自己的容器产品

docker-ce 是 docker 公司维护的开源项目,是一个基于 moby 项目的免费的容器产品
docker-ee 是 docker 公司维护的闭源产品,是 docker 公司的商业产品。

注:moby 是源代码 ; docker-ce 和 docker-ee 是容器产品,是 rpm 包。
所以,现在我们经常使用到的版本就是 docker-ce 版本了。

2、部署 docker 容器虚拟化平台幵配置 docker 镜像加速地址

2.1 实验环境准备

实战 1:部署 docker 容器虚拟化平台
实验环境: CENTOS7.5 64 位 IP: 192.168.1.63

#安装 docker 环境依赖
[root@zcy ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

#配置国内 docker 的 yum 源(阿里云)
[root@zcy ~]# yum-config-manager --add-repo \ 
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#安装 docker-ce
[root@zcy ~]# yum install docker-ce docker-ce-cli containerd.io -y

注:docker-ce-cli 作用是 docker 命令行工具包
containerd.io 作用是容器接口相关包
yum info 软件包的名字,可以查看一个包的具体作用。

[root@zcy ~]# systemctl start docker && systemctl enable docker
[root@zcy ~]# docker version #显示 Docker 版本信息
[root@zcy ~]# docker info #查看 docker 信息(确认服务运行)显示 Docker 系统信息,包括镜像和容器

Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 18.09.4
Storage Driver: overlay2
Backing Filesystem: xfs
。。。
Name: zcy.cn
ID: K62B:LVPB:WOAN:AUS6:XSOJ:XIKT:2MLA:D5GR:PBZX:2I4B:6OWK:5D6U
Docker Root Dir: /var/lib/docker ##默认的 docker 的家目弽,后期镜像也在这个目弽下
Debug Mode: false
Registry: https://index.docker.io/v1/ #默认去这个index.docker.io/v1/网站找docker镜像

2.2 下载 docker 镜像

在这里插入图片描述

搜索 images

[root@zcy ~]# docker search centos 
#从 Docker Hub 中搜索符合条件的镜像。

在这里插入图片描述
docker 镜像名字| 描述 | 受欢迎受欢迎程度 | 是否官方提供

如果 OFFICIAL 为[ok] ,说明可以放心使用。

方法 1:从公网 docker hub 拉取(下载)image pull:拉

[root@zcy ~]# docker pull centos
Using default tag: latest
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: TLS
handshake timeout
#报错了,因为网络的问题。 无法连接到 dockerhub 下载镜像。 如果你的网络没有问题,你可以下载。

解决:换一个 docker 镜像下载地址

方法 2:使用阿里云 docker 镜像加速器,提升 pull 的速度:

你叧需要登陆容器 Hub 服务 https://cr.console.aliyun.com 的控制台,使用你的支付宝帐号,第一次登陆时,需要设置一个独立的密码,左侧的加速器帮劣页面就会显示为你独立分配的加速地址。

在这里插入图片描述
网易镜像:
https://c.163.com/hub#/m/home/ #需要先注册登弽上,才能打开此站点
在这里插入图片描述
daemon [ˈ ˈdiːmə ən] 守护进程

方法 1:创建配置文件 daemon.json

[root@zcy ~]# vim /etc/docker/daemon.json #需要手动创建 daemon.json 文件。

写入以下内容

{
"registry-mirrors": ["https://bjuc5iv0.mirror.aliyuncs.com"]
}

镜像源可以添加多个,根据自己的网络环境选择速度快的。这里给大家添加了 3 个博主常用的。

[root@zcy ~]# vim /etc/docker/daemon.json #在文件中插入
{
"registry-mirrors":["https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com","http://qtid6917.mirror.aliyuncs.com"]
}

扩展:azk8s.cn 这个域名是上海蓝云网络科技有限公司的。
上海蓝云网络科技有限公司于2013年3月成立,由世纪互联与门为在中国境内提供Windows Azure和 Office 365 服务而成立,为世纪互联的全资子公司。

[root@zcy ~]# systemctl daemon-reload
[root@zcy ~]# systemctl restart docker
[root@zcy ~]# docker info


Registry Mirrors:
https://bjuc5iv0.mirror.aliyuncs.com/ #在最后,可以看到镜像仓库的地址,已经改为阿里云


[root@zcy ~]# docker pull centos #再下载,就可以了。
[root@zcy ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0f3e07c0138f 4 weeks ago 220MB

方法 2:修改 docker 服务启劢脚本

[root@zcy ~]# vim /usr/lib/systemd/system/docker.service
改:
14 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
为:
14 ExecStart=/usr/bin/dockerd -H fd:// --registry-mirror=https://rncxm540.mirror.a
liyuncs.com --containerd=/run/containerd/containerd.sock

在这里插入图片描述
重启 docker 服务使 daemon.json 生效

[root@zcy ~]# systemctl daemon-reload #叧有修改了 systemd 服务脚本,才需要
重新加载,修改配服务的置文件,才需要执行这个。

[root@zcy ~]# systemctl restart docker

方法 3:把之前下载好的 image 镜像导入 image:

把 docker-centos7.tar 镜像上传到 linux 上

参数: -i docker-centos7.tar 挃定载入的镜像归档。

[root@zcy ~]# docker load -i /root/docker-centos7.tar

方法 4:直接下载其他站点的镜像

[root@zcy ~]# docker pull hub.c.163.com/library/tomcat:latest
[root@zcy ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hub.c.163.com/library/tomcat latest 72d2be374029 4 months ago 292.4 MB

查看 images 列表

[root@zcy ~]# docker images #列出本地所有镜像。其中 [name] 对镜像名称进行关键词查询。

REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 8caf41e7a3ea 31 minutes ago 205.3 MB

注:docker 镜像相弼于,对程序+程序依赖的库 打一个包
软件是依赖操作系统中的库戒二进制文件。 如果我把软件所依赖的库和二进制文件打包在一起发布,
丌用物理机系统上的文件,也就丌依赖操作系统了。

2.3 启动网络转发功能

开启动网络转发功能,默认会自动开启.
手动开启:
[root@zcy ~]# vim /etc/sysctl.conf #插入以下内容
net.ipv4.ip_forward = 1
[root@zcy ~]# sysctl -p #生效
net.ipv4.ip_forward = 1
[root@zcy ~]# cat /proc/sys/net/ipv4/ip_forward
1
[root@zcy ~]# systemctl stop firewalld && systemctl disable firewalld #关了防火墙

[root@zcy ~]# systemctl restart docker 
#关了防火墙,要把 docker 服务重启一下,不然 docker 的 ip 包转发功能无法使用。即使防火墙关了,docker 会调用内核模块 netfilter 增加规则,所以有防火墙规则。

3、docker 平台基本使用方法

例 1:运行一个 container 幵加载镜像 centos,运行起来这个实例后,在实例中执行 /bin/bash

docker 常用参数:
run 运行
-i 以交互模式运行容器,通常不 -t 同时使用;
-t 为容器重新分配一个伪输入终端,通常不 -i 同时使用;

[root@zcy ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 196e0ce0c9fb 12 days ago 196.6 MB
[root@zcy ~]# docker run -it centos:latest bash #启劢一个实例,也就 2 秒就可以搞
定
[root@068fd8c70344 /]# ls #查看实例环境
[root@f072b5ae7542 /]# cat /etc/redhat-release
退出容器:
[root@f072b5ae7542 /]#exit

例 2:在 container 中启劢一个长久运行的进程,丌断向 stdin 输出 hello world 。模拟一个后台运行的服务

docker 常用参数:
-d 后台运行容器,幵返回容器 ID;
-c 后面跟待完成的命令

[root@zcy ~]# docker run -d centos:latest /bin/sh -c "while true;do echo hello
world; sleep 1; done"

1b3493487c4fde6eb233d59fa9ab9a204ad993cd3debbd5a9a28be6816694605
#容器的 ID

从一个容器中取日志,查看输出的内容,可用于后期检查 docker 实例在标准输出中弹出的错误信息或正常的信息。

语法: docker logs 容器实例的 Name/ID

[root@zcy ~]# docker logs 1b3493487c4 #容器的 ID 可以写全,也可以丌写全,叧要唯一就可以了

hello world
hello world
hello world
hello world

查看正在运行的容器:
[root@zcy ~]# docker ps #列出所有运行中容器。

也可以使用短 ID 戒 docker 实例的名字查看日志输出:

[root@zcy ~]# docker logs 4109c3446284
或:
[root@zcy ~]# docker logs flamboyant_davinci
[root@zcy ~]# docker ps -a #-a 列出所有容器(包含沉睡/退出状态的容器);

例 3:杀死一个容器。 比如:杀死一个正在后台运行的容器
查看要杀死容器的 ID:

[root@zcy ~]# docker ps -a #-a 列出所有容器(包含沉睡/退出状态的容器);

杀死 ID 为 c4a213627f1b 的容器

[root@zcy~]# docker kill c4a213627f1b #杀死一个容器
c4a213627f1b
查看结果:
[root@zcy ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

例 4:启动、停止、重启 container 容器实例
启动: run # 创建幵运行 docker 实例

[root@zcy ~]# docker run -d centos:latest /bin/sh -c "while true;do echo hello world; sleep 1; done"
查看容器:
[root@zcy ~]# docker ps
[root@zcy ~]# docker stop 1a63ddea6571   #关闭容器
1a63ddea6571
查看:
[root@zcy ~]# docker ps
[root@zcy ~]# docker start 1a63ddea6571
1a63ddea6571
[root@zcy ~]# docker ps
[root@zcy ~]# docker restart 1a63ddea6571
1a63ddea6571

删除指定 container : rm

[root@zcy ~]# docker rm 8683629d2925

Error response from daemon: You cannot remove a running container
8683629d29252eac84786bc6a0a930a10e997e4a30c071a803673f3b0d30c42d. Stop the
container before attempting removal or force remove

解决:你可以先把容器 8683629d2925 ,关闭然后再删除,戒者加-f 强制删除
[root@zcy ~]# docker rm -f 1a63ddea6571
1a63ddea6571

4、docker 镜像制作和发布方法

Docker Image 的制作两种方法
方法 1:docker commit #保存 container 的弼前状态到 image后,然后生成对应的 image
方法 2:docker build #使用 Dockerfile 文件自劢化制作 image

4.1 方法 1:docker commit

创建一个安装好 apache web 服务器的容器镜像

[root@zcy ~]# docker run -it centos:latest /bin/bash
[root@1d3563200047 /]# yum -y install httpd #在 container 中安装 apache 软件包
[root@1d3563200047 /]# exit
查看 images 列表
[root@zcy ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 196e0ce0c9fb 13 days ago 196.6 MB 注:当前叧有一个
image centos

根据容器当前状态做一个 image 镜像:创建一个安装了 apache 工具的 centos 镜像

语法: docker commit <container 的 ID> <新的 image_name>
例:
查看容器 ID:

[root@zcy ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
1d3563200047 centos "/bin/bash" 10 minutes ago
Exited (0) 6 minutes ago tender_joliot

[root@zcy ~]# docker commit 1d3563200047 centos:apache
sha256:e5917c01599c70d0680beeb35f6df98889dd22106399efd6907d956d8a943242

[root@zcy ~]# docker images
REPOSITORY TAG IMAGE ID CREATED
SIZE
centos apache 4fd446f1034a 16 seconds ago
269MB
centos latest 0f3e07c0138f 5 weeks ago
220MB
使用新创建的 centos:apache 镜像,生成一台容器实例:
[root@zcy ~]# docker run -it centos:apache /bin/bash

[root@8b1afc920454 /]# rpm -qa httpd #查看,已经安装好 apache 命令
httpd-2.4.6-67.el7.centos.2.x86_64
注:说明基于 apache 镜像的容器创建成功。

4.2 使用 docker build 创建镜像

通过:docker build 创建一个基于 centos 的 httpd web 服务器镜像。
使用 docker build 创建镜像时,需要使用 Dockerfile 文件自动化制作 image 镜像
注:Dockerfile 有点像源码编译时./configure 后产生的 Makefile

以前安装 web 服务器:1、安装系统, 2、安装 web 需要 20 分钟。
实战场景:现在要求 2 秒安装好一个 web 服务器。
实战场景: 公司要求,今天新开 20 个游戏服务区, 共 200 个服务器, 需要 2 分钟搞完 。
怎么办?

解决: 提前生成 web 服务器的 docker 镜像,然后直接加载 web docker 镜像启动服务。
以下操作要在 docker 物理机上操作:

1. 创建工作目录

[root@zcy ~]# mkdir /docker-build
[root@zcy ~]# cd /docker-build
[root@zcy docker-build]# touch Dockerfile

注: make 自动化编译时需要 Makefile 文件,自动化创建 docker 镜像时,需要 Dockerfile

2. 编辑 Dockerfile
Dockerfile 用来创建一个自定义的 image,包含了用户制定的软件依赖等。

[root@zcy docker-build]# vim Dockerfile

FROM centos:7.6.1810
MAINTAINER <zcy>
RUN yum -y install httpd
ADD start.sh /usr/local/bin/start.sh
ADD template /var/www/html/
CMD /usr/local/bin/start.sh
注释:
FROM centos:latest # FROM 基于哪个镜像
MAINTAINER <zcy> # MAINTAINER 镜像创建者
RUN yum -y install httpd #RUN 安装软件用
ADD start.sh /usr/local/bin/start.sh
ADD template /var/www/html/
CMD /usr/local/bin/start.sh

#ADD 将文件拷贝到新产生的镜像的文件系统对应的路径。所有拷贝到新镜像中的
文件和文件夹权限为 0755,uid 和 gid 为 0
CMD /usr/local/bin/start.sh #弼 docker 实例启动成功后,会执行 CMD 后面的命令。所以
CMD 后面一般跟需要开机启动的服务或脚本。一个 Dockerfile 中叧能有一条 CMD 命令,多条则叧执行最后一条 CMD.
*

3. 创建 start.sh 脚本启劢 httpd 服务和 apache 默认首页 index.html 文件

[root@zcy docker-build]# echo "/usr/sbin/httpd -DFOREGROUND" > start.sh

注:/usr/sbin/httpd -DFOREGROUND 参数的含意:
Systemd is designed to run processes “in the foreground”, that is, they don’t have to
specifically run themselves as daemons. The processes don’t exactly run in the foreground,
they run under systemd and it captures their input and output, but from the process’s
perspective, it is the same as running in the foreground. That is systemd’s preferred
method of operation, but it does have compatibility with traditional daemons.

在这里插入图片描述

[root@zcy docker-build]# chmod a+x start.sh

上传站点模板 软件包下载链接:<点我下载> 提取码1228

在这里插入图片描述

将包上传到该目录下

解压模板
[root@zcy1 /docker-build]#unzip template.zip -d /root/

4. 使用命令 build 来创建新的 image
语法:docker build -t 父镜像名:镜像的 tag Dockerfile 文件所在路径
-t :表示 tage,镜像名
例:使用命令 docker build 来创建新的 image,幵命名为 centos:httpd

[root@zcy ~]# cd /docker-build
[root@zcy docker-build]# docker build -t centos:httpd-v2 ./
注: ./ 表示当前目录。另外你的当前目录下要包含 Dockerfile

Sending build context to Docker daemon 1.198MB
Step 1/6 : FROM centos:7.6.1810
7.6.1810: Pulling from library/centos
ac9208207ada: Pull complete
...
Step 2/6 : MAINTAINER <zcy>
---> Running in f83bb1c5f7e1
Removing intermediate container f83bb1c5f7e1
---> e40c3cc7dbdf
Step 3/6 : RUN yum -y install httpd
---> Running in 607c74ace876
。。。
Step 4/6 : ADD start.sh /usr/local/bin/start.sh
---> 7b73449d72f4
Step 5/6 : ADD template /var/www/html/
---> 48a02ba93b7e
Step 6/6 : CMD /usr/local/bin/start.sh
---> Running in 52e32eb93a12
Removing intermediate container 52e32eb93a12
---> c9c29ef621bc
Successfully built c9c29ef621bc
Successfully tagged centos:httpd-v2

查看 images 列表

[root@zcy~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
centos httpd-v2 bfaf1b0488d1 31 seconds ago 324.5MB

注:docker 镜像主要的内容:应用/程序+库

4.3 Docker Image 的发布

方法 1:Save Image To TarBall
方法 2:Push Image To Docker Hub

方法 1:Save Image To TarBall
保存 Image 到 tar 包
语法:docker save -o 导出的镜像名.tar 本地镜像名:镜像标签
例:

[root@zcy~]# docker save -o docker-centos-httpd.tar centos:httpd-v2
[root@zcy~]# ll -h docker-centos-httpd.tar
-rw------- 1 root root 265M 1 月 2 22:43 docker-centos-httpd.tar

互动:如果觉得导入的 tar 包太大?如何缩小?

语法:docker save 本地镜像名:镜像标签 | gzip > 导出的镜像名.tar.gz
例:

[root@zcy~]# docker save centos:httpd-v2 | gzip > docker-centos-httpd.tar.gz
查看大小:
[root@zcy~]# ll -h docker-centos-httpd.tar
-rw------- 1 root root 265M 1 月 2 22:43 docker-centos-httpd.tar
-rw-r--r-- 1 root root 136M 1 月 2 22:43 docker-centos-httpd.tar.gz

注:发现少了 1 半的大小。 所以压缩效果很明显。

例: 使用导入本地镜像:

[root@zcy~]# docker rmi centos:httpd-v2 #删除镜像,这里写自己镜像的ID或名字

[root@zcy~]# docker images #发现在镜像已经被删除

[root@zcydocker-build]# docker load -i docker-centos-httpd.tar

方法 2:Push Image To Docker Hub 发布到外网

1、Signup on docker hub & create repo 注册一个帐号
https://hub.docker.com/

2、Login to docker hub
#docker login -u userabc -p abc123  #这边填你们注册的账号密码

3、Push image to docker hub #上传镜像
# docker push centos:httpd

4、Pull image from docker hub #下载镜像
# docker pull userabc/centos:httpd-v2 # 用户名/镜像名

5、Container 容器端口映射

[root@zcy~]# iptables -F
[root@zcy~]# systemctl restart docker

启动 container
[root@zcy~]# docker run -d -p 80:80 centos:httpd-v2
87fadc0249a96736f588f16b7d3ad662ef3536a06d7a74115cd7c76546ed3a22
注: -p 物理机的 80 端口:容器实例的 80 端口 ,把容器中的 80 端口映射到物理机上的 80 端口

在物理机上查看容易状态:
[root@zcy~]# docker ps

CONTAINER ID IMAGE COMMAND
CREATED STATUS PORTS NAMES
c72fdb8da879 centos:httpd "/bin/bash -c /usr/lo" 2 minutes ago Up
2 minutes 0.0.0.0:80->80/tcp sleepy_newton

查看物理机上开启的 80 代理端口
[root@zcy~]# netstat -antup | grep 80

tcp6 0 0 :::80 :::* LISTEN
50768/docker-proxy-

测试

http://192.168.180.128
在这里插入图片描述
注:现在 docker 实例运行的网络模式像 VMware 的 NAT 模式。 后期会讲给 docker 配置静态 IP,就像 VMware 的桥接模式。 多个 docker 实例映射一个端口,使用 k8s 负载均衡,像 LVS-NAT 模式。

实战:访问正在运行的 container 容器实例

语法: docker exec -it <container id | name> /bin/bash

查看正在运行的容器 ID:

[root@xuegod63 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
87fadc0249a9 centos:httpd "/bin/sh -c /usr/loca" 4 minutes ago
Up 4 minutes 0.0.0.0:9000->80/tcp elated_perlman
[root@zcy~]# docker exec -it 87fadc0249a9 /bin/bash #进入容器

创建 test.html 文件
[root@87fadc0249a9 /]# echo hello world !!! > /var/www/html/test.html
[root@87fadc0249a9 /]#

测试:在物理机上查看新添加的 test.html 文件
[root@zcy~]# curl http://192.168.180.128/test.html
hello world !!!

查看物理机和容器的网络:

查看容器的 IP:
[root@ee28a7860cbe html]# yum install net-tools -y
[root@ee28a7860cbe html]# ip addr
。。。

22: eth0@if23: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state
UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever

物理机的 IP:
[root@zcy ~]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
注:相弼于虚拟机的 NAT 网络模式

测试网络:
[root@zcy ~]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.4: icmp_seq=1 ttl=64 time=0.414 ms

猜你喜欢

转载自blog.csdn.net/weixin_45412401/article/details/114878605