Docker(3)具体的安装部署过程和一些简单应用(2048小游戏,nginx,ubuntu)

1.实验环境

一台rhel7.3的虚拟机server1和一台rhel7.3的物理机

主机信息 作用
server1(172.25.70.1) 搭建docker
物理机(172.25.70.250) 测试以及给server1提供资源

(1)为了保证我们的实验环境是纯净的,先在真机当中创建一个全新的快照并且开启

(2)用真机ssh连接server1,这样操作起来更方便

(3)在真机上面搭建一个共享yum源给server1,这个共享yum源要包含docker的安装包,并且开启apache,关闭防火墙,并且加载第三方yum 源仓库

真机上:

在这里插入图片描述
在这里插入图片描述

加载第三方Yum源:

[root@foundation70 ~]# createrepo -v /var/www/html/docker  #加载第三方yum 源仓库

(4)在server1上面编写docker共享yum源的文件
在这里插入图片描述
在这里插入图片描述
以上就是基本的实验环境

2.docker的部署与安装

docker-ee 企业版
docker-ce 社区版

软件包安装
软件包下载地址
安装社区版软件包地址
本实验安装的是社区版docker-ce
(1)安装docker
yum install docker-ce  -y

(2)打开docker服务

systemctl start docker.service

systemctl enable docker.service

(3)在安装好docker后,系统会为docker容器分配一个ip,利用ip addr中查看docker0的ip
这个IP是为了容器通信用的,具体后面再说
在这里插入图片描述
(4)查看docker的版本信息

[root@server1 ~]# docker --version
Docker version 18.09.7, build 2d0083d


(5)查看docker宿主机(server1)的信息
runc很重要

docker info

[root@server1 ~]# docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 18.09.7
Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: bb71b10fd8f58240ca47fbb579b9d1028eea7c84
runc version: 2b18fe1d885ee5083ef9f0838fee39b62d653e30
init version: fec3683
Security Options:
 seccomp
  Profile: default
Kernel Version: 3.10.0-862.el7.x86_64
Operating System: Red Hat Enterprise Linux Server 7.5 (Maipo)
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.796GiB
Name: server1
ID: YVMD:DMLL:RO3Y:EMAH:KSAO:V3ZK:W77N:3TFN:CVGB:R3B7:YVE7:JLJX
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine


基本的docker部署很简单,接下来要基于镜像运行容器

3.管理docker常用的基础命令

掌握这些命令是最基本的,然后才能操作docker
容器的运行是基于镜像的,这里我使用ubuntu的镜像来举例
其实这些命令我在之前已经为大家讲解过,放在这里为了帮助大家理解下面的操作
在这里插入图片描述
在这里插入图片描述

4.镜像的导入和容器的使用

说白了也就是基于镜像拉起一个容器,其实真实的服务是封装在镜像中的,不过拉起一个容器就可以使用服务了
容器类似于一个虚拟机,基于镜像拉起一个容器,就相当于部署了一个服务,快速高效
注意:所有的镜像都可以到官网去下载,为了方便起见,直接使用我下载好的 接下来举几个例子

[root@server1 ~]# ls
game2048.tar
[root@server1 ~]# docker load -i game2048.tar #导入镜像;
[root@server1 ~]# systemctl start docker
[root@server1 ~]# systemctl enable docker
[root@server1 ~]# docker images #查看导入镜像
[root@server1 ~]# docker run -d --name game1 -p 80:80 game2048 #后台运行
-d:打入后台,否则占用终端 --name:起名称 -p:端口映射,为了让外网段的人访问到,所以做了端口映射 80(物理机):80(docker)
[root@server1 ~]# docker info #查看容器信息
[root@server1 ~]# ifconfig /ip addr #查看
[root@server1 ~]# yum install -y bridge-*
[root@server1 ~]# docker inspect game1  #查看docker的ip地址;它的网关是docker0的
[root@server1 ~]# brctl show  #网桥
[root@server1 ~]# ifconfig docker #查看docker的内部ip,只有自己可以看见
[root@server1 ~]# docker ps  #查看docker信息;
volumes:卷,挂载镜像
[root@server1 ~]# docker history  ubuntu:latest #查看镜像的历史信息;
[root@server1 ~]# docker ps -a  #查看所有的docker信息;
[root@server1 ~]# docker rm game1  #删除镜像,-f:强制删除;
[root@server1 ~]# docker run -it --name vm1 ubuntu  #运行容器且进入容器

(1)在真机上面给server1传一个2048小游戏的镜像tar包
在这里插入图片描述
(2)利用docker命令导入镜像game2048.tar
在这里插入图片描述
(3)查看镜像信息

在这里插入图片描述
(4)创建容器vm1,并运行
有镜像才有容器,基于镜像把容器运行起来,容器是基于镜像的
在这里插入图片描述
上面命令的功能是创建一个名为vm1的容器,并将本机(server1宿主机)80端口映射到容器的80端口
通过本机80端口访问容器内部的80端口上运行的服务
运行容器并打入后台,这个容器是基于game2048这个镜像运行的
在这里插入图片描述
这里要提到docker的端口映射
我们使用以下命令可以看到在创建容器时有很多的参数,其中关于端口的参数有【-p】与【-P】
docker --help

当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-p或-P参数来指定端口映射。
当使用-P(大写P)标记时,Docker会随机映射一个端口到内部容器开放的网络端口(端口范围在Linux系统使用的端口之外,一般都过万)
当使用-p(小写p)可以指定要映射的端口,并且在一个指定的端口上只可以绑定一个容器。
支持的格式有:IP:HostPort:ContainerPort | IP::ContainerPort | HostPort:ContainerPort
(5)查看容器运行状态,看端口是否开启
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(6)查看容器信息
在这里插入图片描述
(7)在真机浏览器访问server1的ip,前提是只要server1的80端口没有被占用,这样就可以通过server1访问容器vm1的80端口
输入server1的ip:172.25.2.1
可以看到2048的游戏就出来了

在这里插入图片描述
可以看出:通过运行容器,2048游戏就这样轻松上线,前提只要有镜像,拉起一个容器来应用就非常的easy,其实当我们执行完【docker run】命令以后就已经完成了上线,后续的操作也只是为了查看相关信息而已
这样看来,我们上线一个应用就只用了两步,非常方便,这也是为什么如今docker这么火爆的原因

实例二:利用容器快速搭建一个nginx服务

(1)从真机给server1传送一个nginx的镜像
在这里插入图片描述

(2)导入镜像

docker load -i nginx.tar

(3)查看镜像,发现nginx的镜像版本(标签是1.16)
在这里插入图片描述

(4)给nginx镜像重新贴一个标签,其实本质上是一样的
在这里插入图片描述
(5)查看一下正在运行的容器,发现2048小游戏正在占用宿主机的80端口
通过宿主机的80端口访问容器vm1的80端口
其实容器之间是独立的,使用端口的时候并不会冲突
但是创建容器的时候端口影射不能使用宿主机的同一个端口

在这里插入图片描述
(6)运行容器vm2,基于nginx镜像,这个时候我们使用宿主机的8080端口
因为本机80端口已经被2048游戏占用,所以我们指定8080端口

在这里插入图片描述
(7)查看一下容器的运行情况
在这里插入图片描述
(8)在浏览器测试:输入server1的ip以及指定的端口来访问vm2容器上的nginx服务
输入ip:172.25.70.1:8080

在这里插入图片描述
(9)在宿主机编写一个默认发布页面,并cp到容器内部
在这里插入图片描述
在这里插入图片描述
(10)再次访问,发现乱码,但是原理正确
在这里插入图片描述
(11)也可以直接挂载本机目录到容器里
删除之前的容器vm2
在这里插入图片描述
创建挂载目录
在这里插入图片描述
在挂载目录里编辑发布内容
在这里插入图片描述
通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径;当然也可以指定挂载目录的权限
绝对路径是为了保证万无一失

docker run -d -p 8080:80 --name vm2 -v /tmp/docker/:/usr/share/nginx/html/ nginx
docker run -d -p 8080:80 --name vm2 -v /tmp/docker/:/usr/share/nginx/html/:ro nginx

在这里插入图片描述

(11)再次浏览器测试:输入server1的ip以及指定的端口来访问vm2容器上的nginx服务
输入ip:172.25.70.1:8080
在这里插入图片描述

实例三:利用docker创建一个交互式容器

(1)从真机给server1发送一个ubuntu的镜像
在这里插入图片描述

(2)导入镜像并且查看
在这里插入图片描述在这里插入图片描述

(3)运行容器

[root@server1 ~]# docker run -it --name vm3 ubuntu
##创建一个vm3的容器,-it表示打开交互式docker界面(ubuntu自带,rhel镜像需要在后面再加bash)

在这里插入图片描述

(4)查看内核信息
容器vm3的内核版本与宿主机的内核版本一致
在这里插入图片描述
在这里插入图片描述

ctrl + pq 	##退出容器但不关闭容器
[root@server1 ~]# docker attach vm3		##可以直接进入容器

ctrl + D	##退出并关闭容器,下次登陆时需要开启
[root@server1 ~]# docker start vm3		##打开关闭的容器
[root@server1 ~]# docker attach vm3		##再进入容器

docker rm vm3				删除容器
docker rm -f  vm2			强制删除容器
docker rmi ubuntu:vm3  		删除镜像
发布了124 篇原创文章 · 获赞 18 · 访问量 3106

猜你喜欢

转载自blog.csdn.net/weixin_42221657/article/details/102992982