centos7 安装使用docker

0x00 前言

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。

 

社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施、容器、插件等。

社区版按照stable和edge两种方式发布,每个季度更新stable版本,如17.06,17.09;每个月份更新edge版本,如17.09,17.10。

Docker里比较重要的概念有注册服务器、仓库、镜像、容器

仓库: 注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。例如存放Ubuntu操作系统镜像的仓库,称为Ubuntu仓库,其中可能包括14.04、12.04等不同版本的镜像。

镜像: Docker镜像(Image)类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统。例如:一个镜像可以只包含一个完整的Ubuntu操作系统环境,可以把它称为一个Ubuntu镜像。

容器: 容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。可以从一个镜像创建无数个容器。平时我们主要操作的就是容器。我们也可以把容器打包成镜像以方便再次使用。镜像自身是只读的。容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身将保持不变。

0x01 安装docker

一键安装docker

比较推荐这种方式安装,在未按照过Docker的机器上,root权限执行如下命令即可一键最新版Docker

1
curl -s https://get.docker.com/ | sh 

使用系统自带的包管理工具来安装

  1. Docker 要求64位。并且当CentOS7时你的内核必须不小于3.10,查看你的CentOS 版本是否支持 Docker 。

    查看当前的内核版本

    1
    2
    # uname -r
    3.10.0-693.21.1.el7.x86_64
  2. 使用 root 权限登录 Centos。确保 yum 包更新到最新。
    1
    # yum -y update
  3. 安装和启动docker

    centos7 支持使用yum安装,省事很多

    1
    2
    3
    # yum install -y docker
    # systemctl start docker
    # systemctl enable docker
  4. 验证是否安装成功
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # docker version
    
    Client:
     Version:         1.13.1
     API version:     1.26
     Package version: docker-1.13.1-75.git8633870.el7.centos.x86_64
     Go version:      go1.9.4
     Git commit:      8633870/1.13.1
     Built:           Fri Sep 28 19:45:08 2018
     OS/Arch:         linux/amd64
    
    Server:
     Version:         1.13.1
     API version:     1.26 (minimum version 1.12)
     Package version: docker-1.13.1-75.git8633870.el7.centos.x86_64
     Go version:      go1.9.4
     Git commit:      8633870/1.13.1
     Built:           Fri Sep 28 19:45:08 2018
     OS/Arch:         linux/amd64
     Experimental:    false
  5. 测试docker是否正常运行
    1
    2
    3
    4
    # docker run hello-world
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.

    手工安装docker

    如果你使用的操作系统不支持使用一键安装脚本,也没有包管理工具,可以选择手工安装最新版Docker。

参考文档:https://docs.docker.com/engine/installation/

0x02 使用docker

  1. 常用命令
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    # 查找并拉取镜像
    docker search ubuntu
    docker pull ubuntu
    
    # 查看所有可用镜像
    docker images -a
    
    # 删除镜像
    docker rmi 容器ID 
        -f强制删除
    
    
    # 从镜像中创建容器(每运行一次便创建一个新的容器)
    docker run image
    > docker run ubuntu echo 'hellp world'  运行一个新的容器,并执行命令echo
    
    > docker run -it --name test ubuntu /bin/bash 以交互式终端运行一个新的容器,镜像ubuntu,使用bash,容器别名test
        -i 交互式界面,默认是false
        -t 伪终端,默认false
        --name 容器别名,默认随机命名
        -p 对外端口:docker内部端口
    
        进入镜像内部操作
        docker exec -it 容器别名 /bin/bash(镜像shell地址)
    
        exit 退出交互式界面,容器停止运行
        crtl + P 或Q推出交互式界面,容器在后台运行(PQ大写)
    
    # 查看容器
    docker ps 查看正在运行的容器
    docker ps -a 查看所有容器
    docker ps -l 查看最近一次运行的容器
    
    # 其他操作
    docker create 容器名或容器ID 创建容器
    docker start 容器名 启动容器
    docker run 容器名或容器ID 进入容器,相当于dcoker create + docker start
    docker attach 容器名或容器ID 进入容器的命令行
    docker stop 容器名 停止容器
    docker rm 容器名  删除容器(删除时必须是停止状态)
    docker top 容器名 查看容器的进程
    docker inspect 容器名 查看docker的底层信息
    docker commit 临时名 镜像名  保存镜像
    
    将主机/www/jy 目录拷贝到容器aaa923a806ca的/www目录下
    docker cp /www/jy aaa923a806ca:/www/
    将主机/www/jy 目录拷贝到容器aaa923a806ca中,目录重命名www
    docker cp /www/jy aaa923a806ca:/www
    将容器aaa923a806ca的/www目录拷贝到主机的/tmp目录
    docker cp aaa923a806ca:/www /tmp/
    
    
  2. 导入导出
    1
    2
    3
    4
    5
    6
    7
    8
    # 镜像导出导入
    docker save -o ubuntu_latest.tar ubuntu:latest
    docker load --input ubuntu_latest.tar
    
    # 容器导出导入
    想要导出容器必须先停止
    docker export  > 
    docker import   
  3. 将容器保存为一个新的镜像
    1
    2
    docker commit -m '注释' 容器CONTAINER ID 镜像名称:镜像版本
    docker commit 23c18d958279 opencanary_agent:v1.1
  4. 守护式容器

    我们可以使用守护式容器运行一个或者多个服务,例如运行lamp服务、redis服务、mysql服务等。

    • 能够长期运行
    • 没有交互式会话
    • 适合运行应用程序和服务

    启动守护式容器

    docker run -d image

    -d 让容器在后台运行

    查看守护进行的运行状况

    docker logs [-f] [-t] [--tail] 容器名或id

    查看容器内WEB应用程序日志

    • -f –follow=true|false,默认false,一直跟随log变化
    • -t –timestamps=true|false,默认false,加上时间戳
    • –tail=”all”,返回最新多少条日志

    在容器中启动新的进程

    docker exec [-d] [-i] [-t] 容器名 [COMMOND] [ARG...]

    停止守护式进程

    docker stop 容器名 发送停止信号,等待关闭

    docker kill 容器名 直接关闭容器

0x03 Nginx部署示例

123456789101112131415161718192021222324252627282930313233343536373839404142
# 创建映射端口为80的交互式界面:docker run -p 80 --name web -i -t ubuntu /bin/bash# 第一次使用更新源apt-get update# 安装nginxapt-get install nginx# 安装vimapt-get install vimwhereis nginxnginx: /usr/sbin/nginx /etc/nginx /usr/share/nginx# 配置文件vim /etc/nginx/conf.d/localhost.conf    server {        listen       80;        server_name  localhost;        location / {            root   /var/www/;             index  index.html index.htm;        }       }# 创建一个新目录mkdir -p /var/www/vim /var/www/index.html# 启动nginxnginx# 使用Crtl+P(即Crtl+shift+p)退出容器,并后台运行。# 查看 docker port webdocker top web

 

0x04 镜像加速器

某些站点服务器在国内访问可能存在速度慢、丢包率高等问题,导致我们拉取镜像时可能会失败、卡顿,影响正常体验,所以需要使用加速器

阿里云镜像加速器

1
2
3
4
5
6
7
8
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json 'EOF'
{
  "registry-mirrors": ["填你的地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

登陆进入管理控制台就能看到了,按照操作文档进行加速器设置

也可使用daocloud对Dockerhub进行加速

0x05 docker-compose

安装

1
pip install docker-compose

启动

1
docker-compose up -d

移除

1
docker-compose down

0x06 Failed to get D-Bus connection: Operation not permitted

想要docker化批量部署蜜罐agent,使用centos 7 镜像创建容器后,使用systemctl启动服务报错

1
2
# systemctl start rsyslog
Failed to get D-Bus connection: Operation not permitted

Docker的设计理念是在容器里面不运行后台服务,容器本身就是宿主机上的一个独立的主进程,也可以间接的理解为就是容器里运行服务的应用进程。一个容器的生命周期是围绕这个主进程存在的,所以正确的使用容器方法是将里面的服务运行在前台。

再说到systemd,这个套件已经成为主流Linux发行版(比如CentOS7、Ubuntu14+)默认的服务管理,取代了传统的SystemV风格服务管理。systemd维护系统服务程序,它需要特权去会访问Linux内核。而容器并不是一个完整的操作系统,只有一个文件系统,而且默认启动只是普通用户这样的权限访问Linux内核,也就是没有特权,所以自然就用不了!

解决方法

使用特权模式运行容器

1
2
# docker run -d --privileged=true opencanary_agent:v1.1 /usr/sbin/init
# docker exec -it ece /bin/bash

发布者:常山赵子龙,转载请注明出处:https://www.qztxs.com/archives/science/technology/11472

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年5月28日 下午10:08
下一篇 2022年5月28日 下午10:09

相关推荐

  • 洞态IAST落地实践

    IAST作为开展sdl中黑白盒测试的有效补充,还是很有必要去了解使用的。笔者为了完善公司的SDL流程,调研了开源的IAST产品进行测试和内部推广   刚开始,笔者测试百度OpenRASP的IAST功能(主动式IAST),OpenRASP的IAST通过对agent采集到的流量数据进行重放,根据hook点信息做选择性的扫描;与主动式漏扫相比,这种方式减...

    2022年6月13日
    16200
  • 短信验证码安全

    0x00 事件 短信验证码常被用于网站用户注册、账户安全登录以及忘记密码、确认下单等应用场景,特别是一些涉及到用户个人敏感行为时候,为了确认操作是用户本人执行的通常会使用短信验证码进行二次认证。 接口来源 注册登录 注册 注册成功欢迎语 登录 找回密码 操作提醒类 操作提醒 确定下单 开通xx服务   0x01 短信验证码接口没有设置下发频次 短信...

    技术 2022年5月27日
    5400
  • 又一个,时间复杂度为O(n)的排序!

    桶排序(Bucket Sort),是一种时间复杂度为O(n)的排序。 画外音:百度“桶排序”,很多文章是错误的,本文内容与《算法导论》中的桶排序保持一致。   桶排序的适用范围是,待排序的元素能够均匀分布在某一个范围[MIN, MAX]之间。 画外音:很多业务场景是符合这一场景,待排序的元素在某一范围内,且是均匀分布的。   桶排序需要两个辅助空间: (1)...

    2022年5月11日
    1500
  • AutoJS自动过某宝滑块方案

    采集淘宝数据时,请求一频繁,就会出现风控跳滑块,这里使用AutoJS自动化控制插件操控手机屏幕自动过滑块。 一、架构 整套方案一共分为三个部分,分别为生成滑块APP、自动过滑块AutoJS脚本、爬虫。 生成滑块APP: 负责生成淘宝滑块; 监听滑块相关请求,滑块验证成功后上报滑块cookie; 自动过滑块AutoJS脚本: 控制安卓手机界面,完成打开APP、...

    2022年5月7日
    81700
  • 读服务+写服务分离架构,我坚决反对!

    系统分层架构有一个迭代和演进的过程,早期,系统二层架构如下: (1)上游是业务应用; (2)下游是数据库;   随着架构的演进,可能要抽取出微服务,系统三层架构如下: (1)上游仍是业务应用; (2)中间是微服务层,提供RPC接口; (3)下游是数据库;   大家都知道,数据库可以读写分离,为了职责更清新,架构设计上,服务能否读写分离呢? 如上图,服务化读写...

    2022年5月12日
    2300

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信