一.初识Docker
首先,我先说一下什么是Linux容器?
Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离,就像是给正常的进程外面套了一个保护层,对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。它相比虚拟机来说,因为是进程级别的,所以有很多优势:启动快、资源占用少、体积小;
那么Docker和Linux容器是什么关系?
Docker属于Linux容器一种封装,提供简单易用的容器使用接口;它将应用程序与该程序的依赖打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机运行一样;总体来说,Docker的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器,另外,它还可以进行版本管理、复制、分享、修改就像管理普通的代码一样;
一个完整的Docker有以下几个部分组成:
dockerClient客户端
Docker Daemon守护进程
Docker Image镜像
DockerContainer容器
二.实验环境(rhel7.3版本)
1.selinux和firewalld状态为disabled
2.各主机信息如下:
主机 | ip |
---|---|
物理机(Docker)(采用物理机的原因是,测试比较方便,因为,虚拟机没有浏览器) | 172.25.83.83/172.25.254.83 |
三.Docker的安装部署
1.首先在官网上下载如下的软件包及依赖包,并进行安装
[root@foundation83 docker]# yum install * -y
2.启动docker服务
[root@foundation83 ~]# systemctl start docker
- 查看版本号信息:
四.Docker的简单应用之2048小游戏的部署
1.下载game2048.tar(2048游戏包),并加载game2048镜像
[root@foundation83 ~]# docker load -i game2048.tar
2.查看加载的game2048镜像
[root@foundation83 ~]# docker images game2048
REPOSITORY TAG IMAGE ID CREATED SIZE
game2048 latest 19299002fdbe 2 years ago 55.5MB
3.使用docker镜像game2048以后台模式启动一个容器,并将容器命名为game
[root@foundation83 ~]# docker run -d --name game game2048
139574b015095337bcab9bb0cdab3a23e9140e989ba6be01f2a499c8f804ff93
[root@foundation83 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
139574b01509 game2048 "/bin/sh -c 'sed -i …" 6 seconds ago Up 5 seconds 80/tcp, 443/tcp game
通过"docker ps"命令,我们可以看到,该容器game对应的端口是80和443。
- ip addr查看docker(其中的172.17.0.1是网关)
虚拟机上安装软件,以支持brctl命令的操作过程。
[root@foundation83 Desktop]# which brctl #物理机上的操作
/usr/sbin/brctl
[root@foundation83 Desktop]# rpm -qf /usr/sbin/brctl
bridge-utils-1.5-9.el7.x86_64
[root@server1 ~]# yum install bridge-utils-1.5-9.el7.x86_64 -y #安装软件,支持brctl命令
- brctl show
- ping
4.获取容器game的元数据
[root@foundation83 ~]# docker inspect game
注:对于容器而言,它的IP数是随着容器的数目而递增的;如,如果我先创建了容器vm1,它的IP为172.17.0.2;那么再创建一个容器vm2,它的IP将会为172.17.0.3;依次类推......
5.测试:访问172.17.0.2——>game2048小游戏界面
五.Docker端口映射(续四)
上面演示了Docker的简单应用(2048小游戏的部署)。我们会发现一个问题,当访问2048游戏时,只能通过本机的172.17.0.2(容器本身的ip地址)访问。
如果我们想通过物理机的172.25.83.83/172.25.254.83来访问2048游戏的界面,或者让别的机器,也能访问该容器。那么该怎么办呢?
答案是:通过端口映射
删除上面建立的容器game,为下面的实验做好准备
[root@foundation83 ~]# docker stop game #停止正在运行的容器game
[root@foundation83 ~]# docker rm game #删除容器game
1.绑定容器的80端口,并将其映射到本地主机的8080端口上(因为本地主机的httpd服务占用80端口,所以映射到80端口以外的8080端口)。
[root@foundation83 ~]# docker run -d --name game -p 8080:80 game2048
- 列出nat表中所有链的所有规则
2.测试:访问172.17.0.2——>game2048小游戏界面;访问172.25.83.83:8080/172.25.254.83:8080——>game2048小游戏界面