一文读懂运维虚拟化之Docker详解

本文概览

一、Docker简介
  (一)、三大核心概念
    1、Docker镜像
    2、Docker容器
    3、Docker仓库
  (二)、Docker安装配置
    1、CentOS7下安装Docker
    2、Docker搭建本地私有仓库
    3、配置一个CentOS基本镜像
  (三)、Docker bridge网络(单主机通信)

二、容器基本命令
  (一)、获取容器信息
    1、获取正常Up状态容器信息
    2、获取所有状态的容器信息
    3、获取Exited终止状态的容器信息
  (二)、获取容器ID
    1、获取正常Up状态容器ID
    2、获取所有状态的容器ID
    3、获取Exited终止状态的容器ID
  (三)、根据容器ID批量删除Exited终止状态容器
  (四)、构建镜像image
    1、docker container commit(docker commit)
    2、docker image build(docker build)
  (五)、容器常用命令
    1、服务级别命令
    2、容器级别命令

三、Dockerfile的基本使用
  1、基本指令
  2、Shell格式和Exec格式的区别
  3、CMD指令详解
  4、Dockerfile实战

四、Docker Compose
  (一)、Docker Compose简介
  (二)、Docker Compose的安装和基本使用
    1、Docker Compose的安装
    2、Docker Compose的基本使用
    3、水平扩展和负载均衡

五、Docker Swarm集群
  (一)、简介
    1、基本架构图
    2、关键概念
    3、工作模式
    4、调度策略
    5、集群模式特性
  (二)、Docker Swarm集群部署
    1、准备工作
    2、安装docker
    3、Manager节点创建Swarm集群
    4、Worker节点加入集群
  (三)、Docker Swarm集群部署服务
    1、部署nginx服务
    2、扩容副本数
    3、缩容副本数
    4、多服务编排部署
  (四)、集群常用命令
    1、Docker Swarm(集群管理命令)
    2、docker service(服务管理命令)
    3、docker node(节点管理命令)
    4、docker network(网络管理命令)
    5、docker volume(挂载管理命令)
    6、docker stack(多服务部署)

一、Docker简介

(一)、三大核心概念

1、Docker镜像

        Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。例如,一个镜像可以包含一个基本的操作系统环境,里面仅安装了 Apache 应用程序(或用户需要的其他软件)。可以把它称为一个 Apache 镜像。镜像是创建Docker 容器的基础。

2、Docker容器

        容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是彼此相互隔离的、互不可见的。可以把容器看做是一个简易版的 Linux 系统环境(包括 root 用户权限、进程空间、用户间和网络空间等)以及运行在其中的应用程序打包而成的盒子。

3、Docker仓库

        Docker仓库类似于代码仓库,它是 Docker 集中存放镜像文件的场所。Docker仓库和仓库注册服务器( Registry)不能混为一谈,仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库,每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签( tag )来进行区分。

        Docker仓库可以分为公开仓库(Public)和私有仓库(Private)两种形式。目前,最大的公开仓库是官方提供的 Docker Hub。

        用户如果不希望公开分享自己的镜像文件 ,Docker 也支持用户在本地网络内创建只能自己访问的私有仓库。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到指定的公有或者私有仓库。

(二)、Docker安装配置

1、CentOS7下安装Docker

系统版本

配置普通用户具有sudo权限

# vi /etc/sudoers 

加入如下内容:

## Allow root to run any commands anywhere

root    ALL=(ALL)       ALL

docker  ALL=(ALL)NOPASSWD:ALL

步骤一:卸载旧版本

$ sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

步骤二:安装所需的软件包:yum-utils提供了yum-config-manager,并且device mapper存储驱动程序需要device-mapper-persistent-data和lvm2。

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

步骤三:设置Docker仓库(可以从仓库安装和更新Docker)

官方源地址:https://download.docker.com/linux/centos/docker-ce.repo

阿里云源地址:http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

清华:https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

此处使用阿里源地址

$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

步骤四:安装Docker Engine-Community

$ sudo yum install docker-ce docker-ce-cli containerd.io

提示接受GPG密钥,请选是。

步骤五:启动docker

$ sudo systemctl start docker

步骤六:运行hello-world 映像来验证是否正确安装了Docker Engine-Community 

$ sudo docker run hello-world

安装完成!

2、Docker搭建本地私有仓库

注册服务器

系统环境:CentOS Linux release 7.7.1908 (Core)

IP:192.168.31.82

Docker客户端服务器

系统环境:CentOS Linux release 7.7.1908 (Core)

IP:192.168.31.81

步骤一:安装docker服务

详细安装过程参考上述“CentOS7下安装Docker

步骤二:安装registry镜像

[docker@localhost docker]$docker run -d -p 5000:5000 --name=testRegistry --restart=always --privileged=true -v /docker/registry:/registry registry

参数说明:

-d:守护进程

-v:将仓库创建在容器的/registry目录下;将镜像文件存放在本地的/docker/registry目录下

-p:映射宿主机的5000端口到registry容器的5000端口-p 5000:5000 端口

--name=testRegistry:运行的容器名称

--restart=always:自动重启

--privileged=true:centos7中的安全模块selinux把权限禁止了,加上这行是给容器增加执行权限

Registry:镜像名称

步骤三:登录容器查看相关信息

[root@localhost docker]# docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES

f25d60b02ae5        registry            "/entrypoint.sh /etc…"   13 minutes ago      Up 13 minutes       0.0.0.0:5000->5000/tcp   testRegistry

[root@localhost docker]# docker exec -it f25d60b02ae5 /bin/sh

步骤四:在客户端(192.168.31.82)设置私有仓库位置

[root@localhost ~]# vim /etc/docker/daemon.json

{

"insecure-registries":["192.168.31.82:5000"]

"registry-mirrors":["https://almtd3fa.mirror.aliyuncs.com"]

}

3、配置一个CentOS基本镜像

步骤一:使用centos:latest镜像来创建一个名为CentOS-Base的容器

[docker@localhost ~]$ docker run -itd --name CentOS-Base --privileged=true centos:latest /usr/sbin/init

参数说明:

-i:交互式操作

-t:终端

-d:默认不会进入容器

--name:指定该容器的名称

步骤二:进入容器CentOS-Base

[docker@localhost ~]$ docker exec -it -u root CentOS-Base /bin/bash

步骤三:修改时区

[root@9907fa1e4a71 /]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 

cp: overwrite '/etc/localtime'? y

[root@9907fa1e4a71 /]# echo Asia/Shanghai > /etc/timezone

步骤四:安装常用程序

[root@9907fa1e4a71 /]# yum install -y net-tools

[root@9907fa1e4a71 /]# yum -y install vim* sudo wget expect lsof psmisc

步骤五:开启ssh服务

1、安装openssh-server

[root@9907fa1e4a71 /]# yum install -y openssl openssh-server

2、修改配置文件

[root@9907fa1e4a71 /]# vim /etc/ssh/sshd_config

打开22端口

允许root登录

允许账号+密码登录

3、启动ssh服务

[root@1363be18e445 /]# systemctl start sshd.service

4、设置ssh开机启动

[root@1363be18e445 /]# systemctl enable sshd.service

步骤六:退出容器,保存镜像

[root@1363be18e445 /]# exit

exit

[docker@localhost ~]$ docker commit CentOS-Base centos-base:1.0

sha256:41a0cc267caf8e0fed5ec6443adcc9f8106e98d5d82799803f3499fd29619a04

[docker@localhost ~]$ docker images

步骤7:使用centos-base:1.0镜像启动容器

[docker@localhost ~]$ docker run -itd -p 10022:22 --name sshd --privileged=true centos-base:1.0 /usr/sbin/init 

731b76296d3d17e40ec158f22d28a0ab7c0e4d1fa9a5abdba89f648d8febf6d2

[docker@localhost ~]$ docker exec -it sshd /bin/bash

[root@731b76296d3d /]#

(三)、Docker bridge网络(单主机通信)

  • 创建两个容器

[root@localhost ~]# docker ps

[root@localhost ~]# docker exec -it test2 /bin/sh

[root@localhost ~]# docker exec -it test1 /bin/sh

  • 查看主机网络

[root@localhost ~]# docker network ls

  • 根据bridge网络ID查看详细信息

可以看到,容器test1和容器test2的网络均挂在bridge网络下

[root@localhost ~]# docker network inspect 614710520a97

  • 查看 bridge网络的接口对

可见容器test1和容器test2连接在docker0上的接口分别是veth2bf5abavethc7f5207

[root@localhost ~]# brctl show

[root@localhost ~]# ip addr

二、容器基本命令

(一)、获取容器信息

1、获取正常Up状态容器信息

(1)、方式一docker ps

(2)、方式二:docker container ls

2、获取所有状态的容器信息

(1)、方式一docker ps -a

(2)、方式二:docker container ls -a

3、获取Exited终止状态的容器信息

(1)、方式一docker ps -a -f "status=exited"

(2)、方式二:docker container ls -a -f "status=exited"

(二)、获取容器ID

1、获取正常Up状态容器ID

(1)、方式一:docker ps -q

(2)、方式二:docker container ls -q

2、获取所有状态的容器ID

(1)、方式一:docker ps -aq

(2)、方式二:docker container ls -aq

3、获取Exited终止状态的容器ID

(1)、方式一:docker ps -aq -f "status=exited"

(2)、方式二:docker container ls -aq -f "status=exited"

(三)、根据容器ID批量删除Exited终止状态容器

1、方式一:docker rm $(docker ps -aq -f "status=exited")

2、方式二:docker rm $(docker container ls -aq -f "status=exited")

(四)、构建镜像image

1、docker container commit(docker commit)

使用正在运行的容器来构建镜像

步骤一:使用centos创建容器

[root@localhost docker]# docker run -it centos:1.0 /bin/bash

步骤二:在容器中安装vim命令

[root@f2f0c5db5a24 /]# yum install -y vim

步骤三:安装完成后,退出容器

[root@localhost docker]# docker ps -a

步骤四:commit镜像

[root@localhost docker]# docker commit strange_lumiere 192.168.110.131/benjun_public/centos-vim:1.0

其中192.168.110.131/benjun_public为harbor镜像仓库

  • 35
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值