Docker 初级使用

安装一些必要的系统工具:

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

添加软件源信息:

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

 

更新 yum 缓存:

yum makecache fast


安装 Docker-ce:

yum -y install docker-ce


启动 Docker 后台服务

systemctl start docker


测试运行 hello-world
 

docker run hello-world

 


Centos 6

yum install -y epel-release
yum install -y docker-io


安装后的配置文件

vim /etc/sysconfig/docker

建议阿里云的  网易的很渣


启动Docker 后台服务

service docker start

帮助命令
 

    docker version
    docker info
    docker --help

镜像命令

    docker images 
===========================================================================================
[root@instance-g0n0qkxg ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
my                  2.2                 a29a4de376a1        8 hours ago         355 MB
httpd               latest              c5b682398748        47 hours ago        131.6 MB
tomcat              latest              36b736745f36        5 days ago          462.6 MB
nginx               latest              fc6a3f930cfd        5 days ago          109.1 MB
centos              latest              ea4b646d9000        12 days ago         200.4 MB


    //列出本地的镜像

    docker search httpd


    查找镜像
    我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
    我们也可以使用

docker search 

====================================================================================

[root@instance-g0n0qkxg ~]# docker search tomcat
NAME                                  DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
tomcat                                Apache Tomcat is an open source implementa...   2094      [OK]       
tomee                                 Apache TomEE is an all-Apache Java EE cert...   58        [OK]       
dordoka/tomcat                        Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 ba...   49                   [OK]
davidcaste/alpine-tomcat              Apache Tomcat 7/8 using Oracle Java 7/8 wi...   31                   [OK]
bitnami/tomcat                        Bitnami Tomcat Docker Image                     25                   [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 applicat...   11                   
meirwa/spring-boot-tomcat-mysql-app   a sample spring-boot app using tomcat and ...   10                   [OK]
aallam/tomcat-mysql                   Debian, Oracle JDK, Tomcat & MySQL              8                    [OK]
jeanblanchard/tomcat                  Minimal Docker image with Apache Tomcat         8                    
rightctrl/tomcat                      CentOS , Oracle Java, tomcat application s...   3                    [OK]
maluuba/tomcat7-java8                 Tomcat7 with java8.                             3                    
amd64/tomcat                          Apache Tomcat is an open source implementa...   2                    
arm64v8/tomcat                        Apache Tomcat is an open source implementa...   2                    
camptocamp/tomcat-logback             Docker image for tomcat with logback integ...   1                    [OK]
jelastic/tomcat                       An image of the Tomcat Java application se...   1                    
99taxis/tomcat7                       Tomcat7                                         1                    [OK]
fabric8/tomcat-8                      Fabric8 Tomcat 8 Image                          1                    [OK]
primetoninc/tomcat                    Apache tomcat 8.5, 8.0, 7.0                     1                    [OK]
s390x/tomcat                          Apache Tomcat is an open source implementa...   0                    
picoded/tomcat7                       tomcat7 with jre8 and MANAGER_USER / MANAG...   0                    [OK]
cfje/tomcat-resource                  Tomcat Concourse Resource                       0                    
swisstopo/service-print-tomcat        backend tomcat for service-print "the true...   0                    
oobsri/tomcat8                        Testing CI Jobs with different names.           0                    
[root@instance-g0n0qkxg ~]# 

  命令来搜索镜像。比如我们需要一个httpd的镜像来作为我们的web服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。
    拖取镜像
    我们决定使用上图中的httpd 官方版本的镜像,使用命令 docker pull 来下载镜像。
    

docker pull httpd
==========================================================================================
[root@instance-g0n0qkxg ~]# docker pull httpd
latest: Pulling from httpd
e1ca9fd53bbf: Pull complete 
22c70239aff1: Pull complete 
f634d7bb8607: Pull complete 
e7db50fc1859: Pull complete 
fe431389154b: Pull complete 
b83c35b1a736: Pull complete 
70fefe5f4885: Pull complete 
eed4d080e85e: Pull complete 
4576c2187d10: Pull complete 
980f93c41065: Pull complete 
c5b682398748: Pull complete 
c5b682398748: Pulling fs layer 
2557373f5bdd: Already exists 
7905a4b7e832: Already exists 
65384c160d5c: Already exists 
Digest: sha256:58688906e168cacde8f56e8266c0f88a59d693cb21f6689e2ed2b93e20665a32
Status: Downloaded newer image for httpd:latest


    删除 镜像
 

   docker rmi 31f82d53ced4

 

    
容器
  docker启动的容器列表

  docker -ps 


    交互式
        运行
      

 docker run -it centos 


        在交互式中两种退出 
            命令:exit 容器停止退出
            按键 CTRL+P+Q 容器不停止但是退出交互式
    后台:
        运行
  

     docker run -d centos


            **docker容器后台运行,就必须有一个前台进程 容器运行的明亮如果不是那些一直挂起的命令, top tail 就是会自动退出
            
    容器日志
    

    docker logs -f -t --tail 容器ID


            -f 跟随最新的日志打印
            -t 是加入时间戳
            -- tail 数字 显示最后几行
    
    查看容器内运行的进程

        docker top 容器ID


    
    查看容器内部细节
     

   docker inspect 容器ID


            json格式的容器细节
    
    进入正在运行的容器并以命令行交互
 

       docker exec -it 容器ID bashShell(就是命令)


            在容器中执行的命令 并不进入容器
            也可以进入容器中
            是在容器中打开新的终端,并且可以启动新的进程
        重新进入

docker attach 容器ID


            直接进入容器启动命令的终端
            
    从容器内拷贝文件到主机中
  

     docker cp 容器ID:/temp/123.txt /root

 拷贝容器中/temp/123.txt 到宿主机的/root中
            也可以反向操作

 

docker 镜像原理:
            
        
    容器
  自定义端口运行

  docker run -p 8080:8080 tomcat

  随机端口运行

    docker run -P tomcat


    随机
    创建新的镜像

    docker commit -a 'stevezong' -m='info' 容器ID 新的Image名称:version


    后台运行
    加上 -d

        
docker 容器数据卷
卷就是目录或者文件 存在于一个或多个容器中,由docker 挂在到容器 单不属于联合文件系统 能过绕过 union file system 提供一些用于持续存储或共享鼠键的特性
    卷的设计目的就是数据的持久化 完全独立于容器的生存周期, docker 不会在容器删除是删除其挂在的数据卷
    数据共享 数据持久化
        数据卷可以在容器之间共享或重用数据
        卷中的更改可以直接生效
        数据卷中的更改不会包含在镜像的更新中
        数据卷的生命周期一直持续到没有容器使用它为止
    数据卷的添加 两种
        直接命令添加
        

    docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名


            查看是否成功
     

       docker inspect


                json 有一个 volumes
            容器和宿主机 数据共享
            容器亭子退出后 主机修改后数据会同步
            加权限
        

    docker run -it -v /宿主机绝对路径:/容器内目录:ro 镜像名 只读


        DockerFile 添加
            根目录 新建mydocker 文件夹并进入
      

cd / 
mkdir  mydocker


            可以再Dockerfile中使用VOLUME指令来给镜像添加一个后者多个数据卷
            File构建
            build后生成镜像, 获得一个新镜像
            run 容器ID
    数据卷容器
        容器间传递共享
  

     --volumes-from
        docker  run  -it --name dc01 centos
        docker run  -it --name dc02 --volumes-from dc01 centos


        容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止
    

docker file
    DockerFile 是用来构建Docker镜像的构建文件 是由一系列命令和参数构成的脚本
        手动编写一个dockerfile文件当然 必须要符合file的规范
        有这个文件后直接dockerbuild 命令执行 获取一个自定义的镜像
        run
    
    Centos的 docker file

        FROM scratch  ## scratch 是所有镜像的父类 类似java中Object类
        MAINTAINER The CentOS Project <cloud-ops@centos.org> # 作者 邮箱
        ADD c68-docker.tar.xz / #
        LABEL name="CentOS Base Image"  vendor="CentOS"  license="GPLv2"  build-date="2016-06-02" #标签 说明
        # Default command
        CMD ["/bin/bash"]


    
    docker file的解析过程
        每条保留字指令必须为大写字母且后面要跟随至少一个参数
        指令按照从上到下 顺序执行
        #表示注释
        每条指令都会创建一个新的镜像层,并对镜像进行提交
        
        
        docker 从基础镜像运行一个容器
        执行一条指令并对容器做出修改
        执行类似docker commit的操作提交一个新的镜像层
        docker 再基于刚提交的镜像运行一个新容器
        执行dockerfile中的下一条指令知道所有指令都执行完成
        
        
    从应用软件的角度来看Dokcerffile  docker镜像 Docker容器分别 代表软件的三个不同阶段
        Dockerfile是软件的原材料
        Docker镜像是软件的交付品
        DOcker容器则可以认为是软件的运行态
        Dockerfile面向开发Docker 镜像成为交付标准 Docker 容器则设计部署域运维 三者和1 
        
    Dockerfile 需要定义个Dockerfile DOckerfile 定义了进程需要的一切东西Dockerfile 设计的内容包括执行代码或者是文件 环境变量 依赖包    运行时环境动态链接库 操作系统的发行版服务进程和内核进程
    当应用进程需要和系统服务和内核进程打交道这是需要考虑 如何设计namespace的权限控制
    
    Docker镜像 在用Dockerfile 定义一个文件之后 docke build 时会产出一个Docker 镜像 当运行Docker镜像时 会真正开始提供服务
    
    Docker 容器容器是直接提供服务的
        
DockerFIle 保留字指令
    FROM 
        基础镜像 当前新镜像是基于那个镜像的
    MAINTAINER
        镜像的作者和邮箱
    RUN
        容器 构建是需要运行的命令
    EXPOSE
        当前容器对外暴露的端口
    WORKDIR
        指定在创建容器后 终端默认登陆的进来的工作目录
    ENV
        用来在构建镜像过程中设置环境变量
    ADD
        将宿主机目录下的文件拷贝到镜像且ADD 命令会自动处理URL和解压tar压缩包
        ADD比COPY强大 是拷贝+解压缩
    COPY
        类似ADD 拷贝文件和目录到镜像中
        将从狗酱上下文目录中原路径的文件/目录复制到新的一层的镜像内的目标路径的位置
    VOLUME
        容器数据卷,用于数据保存和持久化工作
    CMD
        指定一个容器启动时要运行的命令
        Dockerfile中可以有多个CMD指令,但是只有最后一个生效CMD 会被docker run 之后的参数替换
    ENTRYPOINT
        指定一个容器启动时要运行的命令
        ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数,但是他是追加 并不是替换
    ONBUILD
        当狗酱一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
        
        
    
        
        
    
    Base镜像(scratch)
        Docker Hub 中的99%的镜像都是通过在base镜像中安装和配置选哟的软件构建出来的
    编写Dockerfile
        
  

        FROM centos
        MAINTAINER stevezong<zong_xuan@126.com>

        ENV WORKDIRPATH /usr/local
        WORKDIR $WORKDIRPATH

        RUN yum -y install vim

        EXPOSE 80

        CMD echo "build"
        CMD echo "success......Ok"
        CMD /bin/bash


    构建
     

       docker build -f Dockerfile目录 -t 新镜像名字:TAG .
       docker build -f /mydocker/Dokcerfile -t my:2.2 .


  
        

    [root@instance-g0n0qkxg mydocker]# docker build -f /mydocker/Dokcerfile -t my:2.2 .
            Sending build context to Docker daemon 2.048 kB
            Sending build context to Docker daemon 
            Step 0 : FROM centos
             ---> ea4b646d9000
            Step 1 : MAINTAINER stevezong<zong_xuan@126.com>
             ---> Using cache
             ---> f20d26899816
            Step 2 : ENV WORKDIRPATH /usr/local
             ---> Using cache
             ---> e0e11157531d
            Step 3 : WORKDIR $WORKDIRPATH
             ---> Using cache
             ---> 0975ec751fe3
            Step 4 : RUN yum -y install vim
             ---> Using cache
             ---> 8873f1888215
            Step 5 : EXPOSE 80
             ---> Running in 2c22c6e10801
             ---> ddc073313f44
            Removing intermediate container 2c22c6e10801
            Step 6 : CMD echo "build"
             ---> Running in d16f4a16b34e
             ---> 49f0a8ec4179
            Removing intermediate container d16f4a16b34e
            Step 7 : CMD echo "success......Ok"
             ---> Running in 934d81015ccb
             ---> 0e04109c9689
            Removing intermediate container 934d81015ccb
            Step 8 : CMD /bin/bash
             ---> Running in 35f80b803e1e
             ---> a29a4de376a1
            Removing intermediate container 35f80b803e1e
            Successfully built a29a4de376a1
            [root@instance-g0n0qkxg mydocker]# 


    运行新建的镜像
      

 docker run -it my:2.2


        
    列出镜像的变更历史

        docker history a29a4de376a1
        
            [root@instance-g0n0qkxg mydocker]# docker images
            REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
            my                  2.2                 a29a4de376a1        3 minutes ago       355 MB
            tomcat              latest              36b736745f36        4 days ago          462.6 MB
            nginx               latest              fc6a3f930cfd        5 days ago          109.1 MB
            centos              latest              ea4b646d9000        11 days ago         200.4 MB
            [root@instance-g0n0qkxg mydocker]# docker history a29a4de376a1
            IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
            a29a4de376a1        3 minutes ago       /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin/b   0 B                 
            0e04109c9689        3 minutes ago       /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo \   0 B                 
            49f0a8ec4179        3 minutes ago       /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo \   0 B                 
            ddc073313f44        3 minutes ago       /bin/sh -c #(nop) EXPOSE 80/tcp                 0 B                 
            8873f1888215        4 minutes ago       /bin/sh -c yum -y install vim                   154.6 MB            
            0975ec751fe3        5 minutes ago       /bin/sh -c #(nop) WORKDIR /usr/local            0 B                 
            e0e11157531d        5 minutes ago       /bin/sh -c #(nop) ENV WORKDIRPATH=/usr/local    0 B                 
            f20d26899816        5 minutes ago       /bin/sh -c #(nop) MAINTAINER stevezong<zong_x   0 B                 
            ea4b646d9000        11 days ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0 B                 
            eb72e5beea78        11 days ago         /bin/sh -c #(nop)  LABEL org.label-schema.sch   0 B                 
            3993223e10aa        11 days ago         /bin/sh -c #(nop) ADD file:fbe9badfd2790f0747   200.4 MB            


        
        
        
备注:
批量删除当前正在运行的

 docker rm -f $(docker ps -q)    

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值