zoukankan      html  css  js  c++  java
  • linux运维、架构之路-Docker快速入门

    一、Docker介绍

           Docker是Docker.lnc公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在Github上,基于Go语言并遵从Apache2.0协议开源。 
      Docker是通过内核虚拟化技术(namespaces及cgroups等)来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率。

    二、Docker是什么?

    Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
    Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
    总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

    三、Docker 的用途

    1、提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
    2、提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
    3、组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构

    四、Docker改变了什么?

    面向产品:产品交付
    面向开发:简化环境配置
    面向测试:多版本测试
    面向运维:环境一致
    面向架构:自动化扩容(微服务)

    五、Docker安装

    1、环境

    [root@docker01 ~]# cat /etc/redhat-release 
    CentOS Linux release 7.2.1511 (Core) 
    [root@docker01 ~]# uname -r
    3.10.0-327.el7.x86_64
    [root@docker01 ~]# systemctl status firewalld.service 
    ● firewalld.service - firewalld - dynamic firewall daemon
       Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
       Active: inactive (dead)
    [root@docker01 ~]# getenforce 
    Disabled

    2、添加yum源

    wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
    sed -i 's#download.docker.com#mirrors.ustc.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
    

    3、安装docker

    Docker官网:http://www.docker.com/    
    yum install docker-ce -y
    

    4、启动docker并设置成开机启动 

    systemctl start docker.service
    systemctl enable docker.service
    #查看docker进程是否正常#
    [root@docker01 ~]# ps -ef|grep docker
    root       4376      1  0 14:16 ?        00:01:22 /usr/bin/dockerd
    root       4380   4376  0 14:16 ?        00:00:14 docker-containerd --config /var/run/docker/containerd/containerd.toml
    root       5745   5696  0 18:28 pts/0    00:00:00 grep --color=auto docker

    5、查看docker版本

    [root@docker01 ~]# docker version
    Client:
     Version:      18.03.1-ce
     API version:  1.37
     Go version:   go1.9.5
     Git commit:   9ee9f40
     Built:        Thu Apr 26 07:20:16 2018
     OS/Arch:      linux/amd64
     Experimental: false
     Orchestrator: swarm
    
    Server:
     Engine:
      Version:      18.03.1-ce #docker1.8版本只能安装在CentOS7
      API version:  1.37 (minimum version 1.12)
      Go version:   go1.9.5
      Git commit:   9ee9f40
      Built:        Thu Apr 26 07:23:58 2018
      OS/Arch:      linux/amd64
      Experimental: false

    如果做监控的话,可以使用 docker info

     六、Docker基础命令

    1、拉取镜像

    docker pull centos
    docker pull docker
    docker pull tomcat
    docker pull java
    

    2、查看当前镜像

    [root@docker01 ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    docker              latest              40c6c282d58f        11 hours ago        133MB
    tomcat              latest              df50c9d355cf        6 days ago          463MB
    centos              latest              49f7960eb7e4        4 weeks ago         200MB
    java                latest              d23bdf5b1b1b        17 months ago       643MB

    ①导出镜像

    docker save -o [镜像名称] [镜像]
    
    [root@docker01 ~]# docker save -o centos.tar centos
    [root@docker01 ~]# ls
    anaconda-ks.cfg  centos.tar
    需要将docker导出为tar,后面为镜像名称

    ②导入镜像

    [root@docker01 ~]#docker load --input centos.tar   
    #使用input导入
    [root@docker01 ~]# docker load < nginx.tar       #使用重定向导入

    ③删除镜像

    docker镜像删除可以使用docker rmi 后面加上docker的ID 

    3、搜索镜像

    [root@docker01 ~]# docker search tomcat
    NAME                                  DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    tomcat                                Apache Tomcat is an open source implementati…   1909                [OK]                
    tomee                                 Apache TomEE is an all-Apache Java EE certif…   51                  [OK]                
    dordoka/tomcat                        Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base…   49                                      [OK]
    davidcaste/alpine-tomcat              Apache Tomcat 7/8 using Oracle Java 7/8 with…   26                                      [OK]
    bitnami/tomcat                        Bitnami Tomcat Docker Image                     17                                      [OK]
    consol/tomcat-7.0                     Tomcat 7.0.57, 8080, "admin/admin"              16                                      [OK]
    cloudesire/tomcat                     Tomcat server, 6/7/8                            15                                      [OK]
    tutum/tomcat                          Base docker image to run a Tomcat applicatio…   10                                      
    meirwa/spring-boot-tomcat-mysql-app   a sample spring-boot app using tomcat and My…   9                                       [OK]
    jeanblanchard/tomcat                  Minimal Docker image with Apache Tomcat         8                                       
    aallam/tomcat-mysql                   Debian, Oracle JDK, Tomcat & MySQL              7                                       [OK]
    rightctrl/tomcat                      CentOS , Oracle Java, tomcat application ssl…   3                                       [OK]
    amd64/tomcat                          Apache Tomcat is an open source implementati…   2                                       
    maluuba/tomcat7-java8                 Tomcat7 with java8.                             2                                       
    fabric8/tomcat-8                      Fabric8 Tomcat 8 Image                          2                                       [OK]
    camptocamp/tomcat-logback             Docker image for tomcat with logback integra…   1                                       [OK]
    99taxis/tomcat7                       Tomcat7                                         1                                       [OK]
    primetoninc/tomcat                    Apache tomcat 8.5, 8.0, 7.0                     1                                       [OK]
    swisstopo/service-print-tomcat        backend tomcat for service-print "the true, …   0                                       
    jelastic/tomcat                                                                       0                                       
    oobsri/tomcat8                        Testing CI Jobs with different names.           0                                       
    trollin/tomcat                                                                        0                                       
    s390x/tomcat                          Apache Tomcat is an open source implementati…   0                                       
    picoded/tomcat7                       tomcat7 with jre8 and MANAGER_USER / MANAGER…   0                                       [OK]
    awscory/tomcat                        tomcat                                          0                      

    参数:

    --automated   #只列出automated build类型的镜像
    --no-trunc    #显示完整的镜像描述
    -s            #列出收藏数不小于指定值的镜像 

    4、启动一个容器并进入到容器查看系统版本

    [root@docker01 ~]# docker run -i -t centos /bin/bash
    [root@eccc3e4c6f27 /]# cat /etc/redhat-release 
    CentOS Linux release 7.5.1804 (Core)
    [root@docker01 ~]# docker run -it java java -version
    openjdk version "1.8.0_111"
    OpenJDK Runtime Environment (build 1.8.0_111-8u111-b14-2~bpo8+1-b14)
    OpenJDK 64-Bit Server VM (build 25.111-b14, mixed mode)
    

    5、Docker exec

    Docker exec 是docker 官方提供的技术
    docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    -d 在后台执行命令
    -e 设置环境变量
    -i 即使没有连接,也要保持STDIN打开
    --privileged 给命令赋予扩展权限
    -t 分配一个TTY
    -u 设置用户名
    

    6、Docker Create

    #以前我们docker 都是用run,新的版本可以使用creare。
    create                  #仅仅生成一个容器,但是不启动它
    docker create           #创建容器
    --name                  #容器名称
    -e                      #代表环境变量,docker的配置文件大部分写在环境变量中
    -p                      #端口映射,映射容器中的3307到物理机的3307端口
    docker start Name       #启动容器
    docker stop Name        #停止容器
    

    7、Docker ps

    [root@docker01 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    511474a7d51c        centos              "/bin/bash"         5 seconds ago       Up 3 seconds                            suspicious_vaughan

    8、Docker rm

    删除一个或多个容器
    docker rm [OPTIONS] CONTAINER [CONTAINER...]
    -f  [--force]   #强制删除正在运行的容器
    -l  [--link]    #删除指定的连接
    -v  [--volumes] #删除与容器关联的卷
    例子
    取出一个容器
    这将删除链接中引用的容器 /redis。
    $ docker rm /redis
    /redis
    删除--link在默认网桥上指定的链接
    这将删除 默认网桥网络/webapp与/redis容器之间的基础链接,从而移除两个容器之间的所有网络通信。这--link与用户指定的网络一起使用时不适用。
    $ docker rm --link /webapp/redis
    /webapp/redis
    强制删除正在运行的容器
    该命令将强制删除正在运行的容器。
    $ docker rm --force redis
    redis
    链接下引用的容器内的主进程redis将收到 SIGKILL,然后该容器将被删除。
    删除所有停止的容器
    $ docker rm $(docker ps -a -q)
    该命令将删除所有停止的容器。该命令 docker ps -a -q将返回所有现有的容器ID并将它们传递给rm将删除它们的命令。任何正在运行的容器都不会被删除。
    取出容器及其容量
    $ docker rm -v redis
    redis
    该命令将删除容器及与其相关的任何卷。请注意,如果卷是使用名称指定的,则不会被删除。
    取出容器并选择性地移除卷
    $ docker create -v awesome:/foo -v /bar --name hello redis
    hello
    $ docker rm -v hello
    在本例中,音量/foo将保持不变,但音量 /bar将被删除。同样的行为适用于继承的卷 --volumes-from
    

      

    成功最有效的方法就是向有经验的人学习!
  • 相关阅读:
    List数据去重的五种有效方法
    select 1 from ... sql语句中的1代表什么意思?
    gitlab 创建一个空的分支 将本地代码推到特定分支
    Error running 'dt-assets-monitor [clean]': Cannot run program "C:Program Files (x86)Javajdk1.8.0_73injava.exe" (in directory "E:codedt-assets-monitor")
    Git SSH Key 生成步骤
    Git,GitHub与GitLab的区别
    聊聊TCP Keepalive、Netty和Docker
    centos7设置非图形界面
    PHP mysqli 使用预处理语句防注入
    用传纸条讲 HTTPS
  • 原文地址:https://www.cnblogs.com/yanxinjiang/p/9260024.html
Copyright © 2011-2022 走看看