Docker(2)--安装部署及简单应用的添加

1.部署docker的具体操作

实验所用的虚拟机IP为:172.25.76.1,hostname为server1,并且虚拟机可以上网
虚拟机上网需要配置网关和DNS域名解析

  • 1>在阿里云上下载docker镜像
yum install wget -y
cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
vim docker-ce.repo   #编辑文件,只留下稳定版本的内容

在这里插入图片描述
Docker(2)--安装部署及简单应用的添加_第1张图片Docker(2)--安装部署及简单应用的添加_第2张图片
Docker(2)--安装部署及简单应用的添加_第3张图片

  • 2>下载docker所需软件,解决依赖性,并开启docker
  • yum install docker-ce #安装软件,发现有两个错误,解决依赖性

Docker(2)--安装部署及简单应用的添加_第4张图片

  • 在站点上寻找解决依赖性所需要的包,进行下载,再传输到server1上
  • yum install docker-ce container-selinux-2.77-1.el7.noarch.rpm #下载

Docker(2)--安装部署及简单应用的添加_第5张图片在这里插入图片描述
在这里插入图片描述

  • systemctl start docker #安装完成之后,启动docker,在启动之前关闭防火墙和selinux
  • docker在启动时是初始化防火墙的,不要在docker启动之后再清除防火墙策略,因为docker本身会在防火墙内部创建相应的策略
    在这里插入图片描述
    Docker(2)--安装部署及简单应用的添加_第6张图片
  • 3>查看信息
  • docker info #查看docker宿主机的具体信息
  • 若出现warning,则需要进行桥接的相关配置
sysctl -a | grep bridge-nf-call-iptables     #查看net.bridge.bridge-nf-call-iptables = 1
若net.bridge.bridge-nf-call-iptables = 0,则需要编辑文件etc/sysctl.d/bridge.conf,即vim  etc/sysctl.d/bridge.conf
编辑内容为:
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
sysctl --system   #使更改生效

Docker(2)--安装部署及简单应用的添加_第7张图片

Docker(2)--安装部署及简单应用的添加_第8张图片

  • /var/lib/docker #存放docker容器的所有数据,并且权限为root
    Docker(2)--安装部署及简单应用的添加_第9张图片
  • yum install bash-* -y #可以使用table键补齐

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

Docker(2)--安装部署及简单应用的添加_第10张图片

  • 1>docker create
  • docker create 命令为指定的镜像(image)添加了一个可读写层,构成了一个新的容器。注意,这个容器并没有运行。
  • 2>docker start
  • Docker start命令为容器文件系统创建了一个进程隔离空间。注意,每一个容器只能够有一个进程隔离空间。
  • 3>docker run
  • docker start 和 docker run命令有什么区别
    Docker(2)--安装部署及简单应用的添加_第11张图片
docker run 命令先是利用镜像创建了一个容器,然后运行这个容器。
这个命令非常的方便,并且隐藏了两个命令的细节,但从另一方面来看,这容易让用户产生误解。
docker run命令类似于git pull命令。git pull命令就是git fetch 和 git merge两个命令的组合
同样的,docker run就是docker create和docker start两个命令的组合
  • 4>docker ps
  • docker ps 命令会列出所有运行中的容器。这隐藏了非运行态容器的存在,如果想要找出这些容器,我们需要使用下面这个命令。
  • 5>docker ps –a
  • docker ps –a命令会列出所有的容器,不管是运行的,还是停止的。
  • 6>docker images
  • docker images命令会列出了所有顶层(top-level)镜像。
  • 实际上,在这里我们没有办法区分一个镜像和一个只读层,所以我们提出了top-level镜像。
  • 只有创建容器时使用的镜像或者是直接pull下来的镜像能被称为顶层(top-level)镜像,并且每一个顶层镜像下面都隐藏了多个镜像层。
  • 7>docker images –a
  • docker images –a命令列出了所有的镜像,也可以说是列出了所有的可读层。如果你想要查看某一个image-id下的所有层,可以使用docker history来查看。
  • 8>docker stop
  • docker stop命令会向运行中的容器发送一个SIGTERM的信号,然后停止所有的进程。
  • 9>docker pause
  • docker stop和docker kill命令会发送UNIX的信号给运行中的进程,docker pause命令则不一样,它利用了cgroups的特性将运行中的进程空间暂停。
  • 但是这种方式的不足之处在于发送一个SIGTSTP信号对于进程来说不够简单易懂,以至于不能够让所有进程暂停。
  • 10>docker rm
  • docker rm命令会移除构成容器的可读写层。注意,这个命令只能对非运行态容器执行。
  • 11>docker rmi
  • docker rmi 命令会移除构成镜像的一个只读层。你只能够使用docker rmi来移除最顶层(top level layer)(也可以说是镜像),你也可以使用-f参数来强制删除中间的只读层。
  • 12>docker commit
  • docker commit命令将容器的可读写层转换为一个只读层,这样就把一个容器转换成了不可变的镜像。
  • 13>docker build
  • docker build命令非常有趣,它会反复的执行多个命令。
  • build命令根据Dockerfile文件中的FROM指令获取到镜像,然后重复地run(create和start)、修改、commit。
    在循环中的每一步都会生成一个新的层,因此许多新的层会被创建。
  • 14>docker exec
  • docker exec 命令会在运行中的容器执行一个新进程。
  • 15>docker inspect or
  • docker inspect命令会提取出容器或者镜像最顶层的元数据 。
  • 16>docker save
  • docker save命令会创建一个镜像的压缩文件,这个文件能够在另外一个主机的Docker上使用。
  • 和export命令不同,这个命令为每一个层都保存了它们的元数据。这个命令只能对镜像生效。
  • 17>docker export
  • docker export命令创建一个tar文件,并且移除了元数据和不必要的层,将多个层整合成了一个层,只保存了当前统一视角看到的内容(注expoxt后的容器再import到Docker中,通过docker images –tree命令只能看到一个镜像;而save后的镜像则不同,它能够看到这个镜像的历史镜像
  • 18>docker history
  • docker history命令递归地输出指定镜像的历史镜像。

3.容器的使用–部署nginx服务

由于在官方拉取镜像速度较慢,所以在阿里云上设置加速器来提高拉取速度
不是所有的镜像都可以用阿里云加速
Docker(2)--安装部署及简单应用的添加_第12张图片

按照官网上的操作步骤进行配置加速器:
cd /etc/docker/    
vim daemon.json
systemctl daemon-reload
systemctl restart docker

Docker(2)--安装部署及简单应用的添加_第13张图片

docker search nginx     #寻找nginx镜像
所有直接以应用的名称来命名的镜像都是官方提供的,若为其他形式则为其他用户提交的
docker pull nginx        #拉取nginx的镜像,默认从官方拉取,官方镜像站比较慢,通常拉取的都是最新版本
docker run -d --name nginx nginx     #通过镜像来运行容器,-d打入后台,--name新添加名称,再加镜像名称
docker ps   #列出所有容器
docker inspect nginx      #查看nginx容器的所有信息,查找分配的IP地址来进行访问
分配的IP地址为内网地址(分配方式为单调递增),桥接到docker0上(安装完docker之后会自动存在的docker0服务)
yum install bridge-utils    #安装桥接工具
brctl show    #显示容器的接口
curl 172.17.0.2   #访问容器

在这里插入图片描述Docker(2)--安装部署及简单应用的添加_第14张图片
Docker(2)--安装部署及简单应用的添加_第15张图片
Docker(2)--安装部署及简单应用的添加_第16张图片
Docker(2)--安装部署及简单应用的添加_第17张图片
Docker(2)--安装部署及简单应用的添加_第18张图片部署成功,此时的nginx只能内部访问
如果需要外部访问,则释放掉原nginx容器,用端口映射部署nginx

docker rm -f nginx    #释放掉原nginx容器
docker run -d --name nginx -p 80:80 nginx   #通过镜像来运行容器
-p  #指定端口映射,可以在宿主机进行访问
80:80     #宿主机的端口:容器内的端口,只要宿主机的80端口没有被占用,就可以映射
docker history nginx:latest      #查看镜像信息,显示的端口就为容器内的端口,在映射时须保持一致

Docker(2)--安装部署及简单应用的添加_第19张图片

  • 端口映射就相当于做了一个nat,访问本机80端口时转发到172.17.0.2:80上去
  • 用ps ax 或 top 或 netstat -antlp 查看 docker就是个进程
  • 网页访问虚拟机ip 可以看到nginx服务
    Docker(2)--安装部署及简单应用的添加_第20张图片Docker(2)--安装部署及简单应用的添加_第21张图片
    Docker(2)--安装部署及简单应用的添加_第22张图片

4.容器的使用–简单搭建一个2048小游戏

docker search game2048
docker pull yakexi007/game2048
若本地存在game2048的tar包,则直接使用docker load -i game2048.tar获取镜像
docker images
docker history yakexi007/game2048:latest
docker run -d --name game -p 8080:80 yakexi007/game2048     #由于宿主机的80端口被占用,因此访问8080端口
docker ps   #查看,确保容器正在运行
  • 当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-p或-P参数来指定端口映射。
  • 当使用-P(大写P)标记时,Docker会随机映射一个端口到内部容器开放的网络端口(端口范围在Linux系统使用的端口之外,一般都过万)
  • 当使用-p(小写p)可以指定要映射的端口,并且在一个指定的端口上只可以绑定一个容器。

Docker(2)--安装部署及简单应用的添加_第23张图片Docker(2)--安装部署及简单应用的添加_第24张图片

  • 在网页上访问172.25.76.1:8080
    Docker(2)--安装部署及简单应用的添加_第25张图片

你可能感兴趣的:(Docker学习)