zoukankan      html  css  js  c++  java
  • docker 与docker-compose 容器管理

    docker 与docker-compose 容器管理

    欢迎来到 来到大浪涛天的博客

    一、docker 与docker-compose 容器管理

    1. docker 简介

    1-1. docker诞生

    Docker 是 dotcloud 公司开源的一款产品 dotcloud 是 2010 年新成立的一家公司,主要基于 PAAS ( Platfrom as a Service ) 平台为开发者提供服务。2013 年 10 月 dotcloud 公司改名为 Docker 股份 有限公司。

    1-2. docker 的相关概念

    1. linux container是一种内核级别的虚拟化技术,可以提供轻量级的虚拟化技术,用于隔离进程和资源
    2. docker是PAAS提供商dotcloud开源基于LXC的高级容器引擎,源代码托管在github上,基于go语言并遵从apache2.0协议开源
    3. docker是设想交付环境如海运,OS如同货轮,在OS上的每一个应用件都代表一个个集装箱,用户可以通过标准化手段自由组装环境。

    1-3. docker与传统的虚拟化的区别

    docker与传统虚拟化的区别
    docker与传统虚拟化的区别

    1-4. docker的组成结构

    1. docker 仓库:https://hub.docker.com
    2. docker 的自身组件
              docker client:docker客户端
              docker server: docker的daemon的重要组成部分,接受用户client端发出的请求,并按照相应的路由规则实现路由分发
    docker 的镜像:docker的镜像运行之后就变成了容器(docker run)

    2. docker的安装与配置

    2-1. docker的安装方式

    1.  script 安装
       1) yum update -y
       2) curl -sSL https://get.docker.com/ | sh
       3) systemctl start docker
       4) systemctl enable docker
       5) docker run hello-world
    2. YUM 安装
        1) yum update
        2) cat >/etc/yum.repos.d/docker.repo <<-EOF
        [dockerrepo]
    name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/7 enabled=1
    gpgcheck=1
    gpgkey=https://yum.dockerproject.org/gpg EOF
    yum install docker
        3) yum install -y docker
        4) systemctl start docker
        5) systemctl enable docker
        6) docker run hello-world
    3. RPM包安装(推荐)
       1) yum update -y
       2) https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
       docker-ce以及docker-selinux这两个包
       3)mkdir /tools && cd /tools
       4) scp docker* root@10.211.55.200:/tools
       5) yum install -y docker*
       6) systemctl start docker
       7) systemctl enable docker
       8) docker run hello-world

    2-2. docker 的镜像加速配置

    因为每次运行docker run,如果本地没有该镜像,都会自动的从hub.docker.com下载而来,而hub.docker的官方站点在国外,所以下载镜像很慢,因此就要用到docker的加速,比如阿里的,配置完成后,我们发请求到阿里服务器,阿里服务器再请求hub.docker,然后通过阿里服务器返回给客户端,这样通过阿里的代理可以比较快速的下载镜像到本地。

    1.  cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service
    2.  chmod 777 /etc/systemd/system/docker.service
    3.  vim /etc/systemd/system/docker.service
    4.  ExecStart=/usr/bin/dockerd-current --registry-mirror=https://kfp63jaj.mirror.aliyuncs.com
    5.  [root@dockerhub tools]# systemctl daemon-reload
    6.  [root@dockerhub tools]# systemctl restart docker
    7.  [root@dockerhub tools]# ps -ef |grep docker  可以看到docker已经启用了加速配置

    2-3. docker 容器管理

    2-3-1. docker快速部署一个wordpress环境

    [root@docker tools]# docker run --name db --env MYSQL_ROOT_PASSWORD=admin123 -d mariadb
    [root@docker tools]# docker run --name wordpress --link db:mysql -p 8000:80 -d wordpress
    [root@docker tools]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                  NAMES
    449d30665b60        wordpress           "docker-entrypoint..."   4 seconds ago        Up 4 seconds        0.0.0.0:8000->80/tcp   wordpress
    95ae537a23e0        mariadb             "docker-entrypoint..."   About a minute ago   Up About a minute   3306/tcp  

    2-3-2. docker命令的基本用法

    docker + command + 参数

    2-3-2-1. docker的命令如下:
    1. docker info           查看docker守护进程的资源设置
    2. docker search nginx   docker仓库的查询
    3. docker pull nginx     从docker 仓库的下载镜像
    4. docker images         docker 本地镜像查询
    5. docker rmi            从本地删除镜像
    6. docker ps             容器的查询
    7. docker run            容器的创建启动
    8. docker start/stop     容器的开启与关闭
     
     # Docker 指令除了单条使用外,还支持赋值、解析变量、嵌套使用,如:
     [root@docker tools]# docker stop $(docker ps -q)
    449d30665b60
    95ae537a23e0
    [root@docker tools]# docker ps
    CONTAINER ID        IMAGE               COMMAND  
    [root@docker tools]# docker start $(docker ps -a -q)
    449d30665b60
    95ae537a23e0
    [root@docker tools]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
    449d30665b60        wordpress           "docker-entrypoint..."   13 minutes ago      Up 4 seconds        0.0.0.0:8000->80/tcp   wordpress
    95ae537a23e0        mariadb             "docker-entrypoint..."   14 minutes ago      Up 12 seconds       3306/tcp               db
    2-3-2-2. 单一容器的管理命令

    每一个容器被创建以后都会被分配一个唯一的标识CONTAINER ID,后续对容器的启动,停止,修改删除,等所有的操作都是通过CONTAINER ID来完成。

    1. 查看完整的容器的标识符,用得很少: docker ps --no-trunc
    2. 停止容器:docker stop/start container-name
    3. 查看容器的基本信息:docker inspect container-name
    4. 查看容器的日志:docker logs container-name
    5. 查看容器所使用的资源: docker stats container-name
    6. 查看所有容器分别使用的资源:docker stats
    7. 容器内执行命令,非交互式:docker exec container-name ls -a /
    8. 容器内执行命令,交互式:docker exec -it container-name /bin/bash
    2-3-2-3. docker run的一些使用命令

    docker run是镜像变成容器的重要工具,后面可以加一些参数可以注入到容器里,如

    1. 容器运行后自启动:--restart=always
    [root@docker tools]# docker run --name db --restart=always -d mariad
    1. 容器运行后,设置容器的主机名:-h x.x.x.x
    [root@docker tools]# docker run --name db -h testdb  --env MYSQL_ROOT_PASSWORD=admin123 -d mariadb
    c3fae40c1d26b50e8736e3cf57f40d63a9342afd38934b31049301e5e622332e
    [root@docker tools]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    c3fae40c1d26        mariadb             "docker-entrypoint..."   4 seconds ago       Up 3 seconds        3306/tcp            db
    [root@docker tools]# 
    [root@docker tools]# 
    [root@docker tools]# docker exec db hostname
    testdb
    [root@docker tools]# 
    1. 设置容器的DNS :--dns x.x.x.x
    docker run --name test --dns 10.211.55.1 -p 2200:22 -d b2ab0ed558bb
    [root@docker ~]# docker exec test cat /etc/resolv.conf
    nameserver 10.211.55.1
    1. 向容器内注入hostname <> IP 解析: --add-host hostname:ip
    [root@docker ~]# docker run --add-host test:10.211.55.1 -d b2ab0ed558bb
    [root@docker ~]# docker exec 44b40c310164 grep "test" /etc/hosts
    10.211.55.1     test
    1. 服务停止时自动删除容器
    [root@docker ~]# docker rm -f $(docker ps -q) 
    [root@docker ~]# docker ps
    CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS              PORTS               NAMES
    07bb58bd70af        hub.c.163.com/public/centos:6.7-tools   "/usr/bin/supervisord"   7 seconds ago       Up 6 seconds        22/tcp              test
    [root@docker ~]# docker stop test
    test
    [root@docker ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

    2-3-3. docker-compose 管理容器

    2-3-3-1. docker-compose 安装
    官方站点,比较慢
    curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`- `uname -m` > /usr/local/bin/docker-compose
    
    第三方站点,高速下载
     curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 或者
     curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
     
     echo "PATH=$PATH:/usr/local/bin" >>/etc/profile
     source /etc/profile
     
     docker-compose --version
    2-3-3-2. docker-compose命令管理
    1. -f 指定yaml文件的位置,这个是使用docker-compose最重要的一个参数,因为docker推荐一个进程一个容器,如果一台服务器有10多个相互依赖的容器,相互起来停止有先后顺序,那手动管理容器是很麻烦的,这样就可以写成一个yaml文件,直接-f指定该文件来完成。
      利用yaml文件来完成wordpress的容器起停。
      yaml文件如图
      yaml文件事例
    [root@docker dock]# docker-compose -f wordpress.yaml up -d       
    Creating network "dock_default" with the default driver
    Creating dock_db_1 ... done
    Creating dock_wordpress_1 ... done
    
    [root@docker dock]# docker-compose ps
          Name                    Command               State          Ports        
    --------------------------------------------------------------------------------
    dock_db_1          docker-entrypoint.sh mysqld      Up      3306/tcp            
    dock_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8000->80/tcp
    [root@docker dock]# docker-compose -f wordpress.yaml stop
    Stopping dock_wordpress_1 ... done
    Stopping dock_db_1        ... done
    1. ps 显示所有的容器信息
    [root@docker dock]# docker-compose ps
          Name                    Command               State    Ports
    ------------------------------------------------------------------
    dock_db_1          docker-entrypoint.sh mysqld      Exit 0        
    dock_wordpress_1   docker-entrypoint.sh apach ...   Exit 0        
    1. restart 重新启动容器
    [root@docker dock]# docker-compose restart
    Restarting dock_wordpress_1 ... done
    Restarting dock_db_1        ... done
    [root@docker dock]# docker-compose ps
          Name                    Command               State          Ports        
    --------------------------------------------------------------------------------
    dock_db_1          docker-entrypoint.sh mysqld      Up      3306/tcp            
    dock_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8000->80/tcp
    1. logs 查看容器的日志信息
    [root@docker dock]# docker-compose logs db
    Attaching to dock_db_1
    db_1         | 2020-10-16 21:22:21+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 1:10.5.6+maria~focal started.
    db_1         | 2020-10-16 21:22:22+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
    db_1         | 2020-10-16 21:22:22+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 1:10.5.6+maria~focal started.
    db_1         | 2020-10-16 21:22:22+00:00 [Note] [Entrypoint]: Initializing database files
    db_1         | 
    1. config -q 严重yaml文件语法是否正确
    [root@docker dock]# docker-compose config -q 
    [root@docker dock]# docker-compose config 
    services:
      db:
        environment:
          MYSQL_DATABASE: wordpress
          MYSQL_PASSWORD: admin123
          MYSQL_ROOT_PASSWORD: admin123
          MYSQL_USER: wordpress
        image: mariadb:latest
        restart: always
      wordpress:
        depends_on:
        - db
        environment:
          WORDPRESS_DB_HOST: db:3306
          WORDPRESS_DB_PASSWORD: admin123
          WORDPRESS_DB_USER: wordpress
        image: wordpress:latest
        ports:
        - 8000:80/tcp
        restart: always
    version: '2.0'
    1. start,stop启动,停止容器
    [root@docker dock]# docker-compose stop wordpress
    Stopping dock_wordpress_1 ... done
    [root@docker dock]# docker-compose start wordpress
    Starting wordpress ... done
    [root@docker dock]# docker-compose ps
          Name                    Command               State          Ports        
    --------------------------------------------------------------------------------
    dock_db_1          docker-entrypoint.sh mysqld      Up      3306/tcp            
    dock_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8000->80/tcp
    1. up -d启动一个容器项目
    [root@docker dock]# docker-compose stop wordpress db
    Stopping dock_wordpress_1 ... done
    Stopping dock_db_1        ... done
    [root@docker dock]# docker-compose -f wordpress.yaml up -d
    Starting dock_db_1 ... done
    Starting dock_wordpress_1 ... done
    [root@docker dock]# docker-compose ps
         Name                    Command               State          Ports        
    --------------------------------------------------------------------------------
    dock_db_1          docker-entrypoint.sh mysqld      Up      3306/tcp            
    dock_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8000->80/tcp
  • 相关阅读:
    李洪强经典面试题43
    李洪强经典面试题42
    李洪强经典面试题41-iOS选择题
    HTTP头部解析
    iOS
    内网安全工具之hscan扫描
    跟着百度学PHP[4]OOP面对对象编程-17-多态
    绕过注入学习笔记
    引用/别名
    跟着百度学PHP[4]OOP面对对象编程-16-switch逻辑就语句
  • 原文地址:https://www.cnblogs.com/chacha51/p/13832497.html
Copyright © 2011-2022 走看看