zoukankan      html  css  js  c++  java
  • docker入门

    一.认识docker

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
    Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
    容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

    二.docker架构及特点

    Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
    Docker 容器通过 Docker 镜像来创建。
    容器与镜像的关系类似于面向对象编程中的对象与类


    镜像是不可变对象
    容器(相当于虚拟机)是可以改变对象
    容器可以封装成一个镜像也就是说容器和镜像是可以相互转换的

    三.docker常用操作

      1.关于镜像

    ###############查看本地镜像
    docker images
    
    
    ########删除镜像
    docker rmi 镜像名称    
    docker rmi mysql:5.6
    
    ###############从互联网上搜索镜像
    docker search python
    
    
    ###############从互联网拉取(下载)镜像
    docker pull python
    docker  pull mysql:5.6

      2.关于docker操作

    ################启动与关闭docker虚拟机
    systemctl start docker 
    systemctl restart docker 
    systemctl stop docker
    
    ##############基于镜像创建容器并启动
    -t(模拟终端)
    -i交互式
    -d后台运行
    dock run -tid   镜像id/name
    
    
    #############查看所有的创建的容器(包括运行和停止的)
    docker ps -a 
    
    
    #############查看运行的容器
    docker ps
    
    
    
    ############进入容器(当进入之后输出提示符显示容器id而不是虚拟机名称了)
    docker attach  镜像id/name
    docker exec -it 容器ID /bin/bash
    
    ############退出容器
    exit       #这种方式退出容器也会停止运行
    
    ctrl +pq      #不停止运行退出,一个一个键按下,不用同时按
    
    
    ############给容器起名字(创建容器的时候)
    docker run -tid --name  XXX  镜像id
    
    
    ############启动并进入容器
    docker start id/name
    docker exec -ti name bash
    docker exec -ti 容器名 bash -c "mysql -uroot -p123"
     docker run -d centos /bin/sh -c "while true;do echo 爱滴魔力转圈圈; sleep 1;done"
      -d # 后台运行容器
      /bin/sh # 指定使用centos的bash解释器
      -c # 运行一段shell命令
      "while true;do echo 爱滴魔力转圈圈; sleep 1;done" # 在linux后台,每秒中打印一个 爱滴魔力转圈圈
    
     
    ########停止、挂起、恢复容器 
    docker stop 容器ID或者名称 
    docker pause 容器ID 
    docker unpause 容器ID
    
    #########查看容器的信息
    docker inspect 容器名称/id
    
    
    ###########基于容器封装成镜像
    
    docker attach id/name   #进入容器
    
    在容器一些操作,安装环境等(的那个鱼给docker增加饿了东西)
    
    docker commit 容器id/name 镜像名称:tag
    
    
    ##########容器间通信
    docker run -tid  --name h1 镜像名:tag
    
    docker run -tid --name h2 --link h1 镜像名:tag(和上面的镜像是用一个)
    
    #########删除容器(删除容器之前必须先停止容器)
    docker rm 容器名称 -f
    
    #########把导出来的镜像文件还原成镜像状态
    docker load --input 文件名称
    docker load < 文件名称
    
    #########把镜像封装为文件
    docker save -o /文件名.tar 镜像id
    docker save  镜像名称 > 新文件名
    
    
    #######打印docker日志
    docker  logs  -f  容器id        # 不间断打印容器的日志信息 

    三.docker运行后额一些操作

      1.运行一个而UN不能图镜像并且查看版本

    #下载一个ubuntu镜像
    docker pull ubuntu
    #下载完成之后,查看已经下载的ubuntu镜像
    docker images
    #运行这个ubuntu镜像, 并产生一个容器实例,使用交互模式进入这个容器内部
    docker run -it ubuntu /bin/bash
    #查看这个ubuntu系统的版本
    cat /etc/os-release

      2.运行一个web服务器,并且通过ip+端口访问

    #下载webapp
    [root@instance-hrnebyqu opt]# docker pull  docker.io/training/webapp 
    Using default tag: latest
    Trying to pull repository docker.io/training/webapp ... 
    latest: Pulling from docker.io/training/webapp
    
    #查看下载下来的镜像
    [root@instance-hrnebyqu opt]# docker images
    REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
    <none>                      <none>              5c4f50b73b1b        About an hour ago   341 MB
    docker.io/ubuntu            latest              94e814e2efa8        6 weeks ago         88.9 MB
    docker.io/training/webapp   latest              6fae60ef3446        3 years ago         349 MB
    
    #创建容器并且随机指定一个端口 -P参数
    [root@instance-hrnebyqu opt]# docker run -d -P 6fae
    191bc499334d7251be4ff79810b78f7bf04c59784b6ad763b57176de6d0b5b7b
    
    #查看docker的运行状态
    [root@instance-hrnebyqu opt]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
    191bc499334d        6fae                "python app.py"     5 seconds ago       Up 4 seconds        0.0.0.0:32768->5000/tcp   mystifying_chandrasekhar
    9f1508c46ae5        94e                 "/bin/bash"         About an hour ago   Up About an hour                              heuristic_leakey
    0489cd158754        94e8                "/bin/bash"         7 hours ago         Up About an hour                              ubuntumysql

    #随机端口 参数是-P


    #指定端口运行 参数 -p 是小写的p

    [root@instance-hrnebyqu opt]# docker run -tid --name qishi_web -p 9999:5000 6fae
    92de5d945f3d483acc79366e37cde33c471bb0821ec5837fb9227833ec3c251f



    四.镜像的发布

       1.公有仓库

    1.docker提供了一个类似于github的仓库dockerhub,
    网址https://hub.docker.com/需要注册使用
    2.注册docker id后,在linux中登录dockerhub docker login #注意要保证image的tag是账户名,如果镜像名字不对,需要改一下tag
    #这样其实在修改tag后会生生一个新的镜像 语法是: docker tag 镜像名 用户名/仓库名
    docker tag image—name tjp40922/centeos
    3.推送docker image到dockerhub docker push tjp40922/centos:latest
    4.在dockerhub中检查镜像 https://hub.docker.com/
    5.删除本地镜像,测试下载pull 镜像文件 docker rmi -f d69 docker pull tjp40922/centos

       2.私有仓库

        但是这种镜像仓库是公开的,其他人也是可以下载,并不安全,因此还可以使用docker registry官方提供的私有仓库

    1#官方提供的私有仓库docker registry用法
    https://yeasy.gitbooks.io/docker_practice/repository/registry.html
    
    #一条命令下载registry镜像并且启动私有仓库容器
    docker pull registry


    #私有仓库会被创建在容器的
    /var/lib/registry下,因此通过-v参数将镜像文件存储到本地的/opt/data/registry下 端口映射容器中的5000端口到宿主机的5000端口 docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry #检查启动的registry容器 docker ps

    #测试连接容器 telnet 192.168.119.10 5000
    #修改镜像tag,以docker registry的地址+端口开头
    docker tag hello-world:latest 192.168.119.10:5000/hello-world:latest
    
    #查看docker镜像
    #Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制,这里必须写正确json数据 [root@master /]# vim /etc/docker/daemon.json {   "registry-mirrors": ["http://95822026.m.daocloud.io"],   "insecure-registries":["192.168.119.10:5000"] } #写入到docker服务中,写入到[Service]配置块中,加载此配置文件 #打开docker服务的配置文件:#写入以下内容: #写入的时候,要注意,把这个配置文件加入到[Service]代码块中
    vim /lib/systemd/system/docker.service
    EnvironmentFile=-/etc/docker/daemon.json
    #修改了docker配置文件,重新加载docker systemctl daemon-reload #重启docker systemctl restart docker # 注意,重启docker服务,所有的容器都会挂掉

    #重启了docker,刚才的registry容器进程挂掉了,因此重新启动它 docker ps -a docker start registre容器id #推送本地镜像 docker tag docker.io/ubuntu 106.12.112.139:5000/qishi_ubuntu #由于docker registry没有web节目,但是提供了API数据 官网教程:https://docs.docker.com/registry/spec/api/#listing-repositories curl http://192.168.119.10:5000/v2/_catalog
    或者浏览器访问http:
    //106.12.112.139:5000/v2/_catalog
    #删除本地镜像,从私有仓库中下载 docker rmi -f `docker images -aq` docker pull 106.12.112.139:5000/qishi_ubuntu
    
    
  • 相关阅读:
    java中的锁
    CAS机制与自旋锁
    volatile关键字的特性及证明
    java中并发下的集合类
    数据库的分库分表
    浅入理解JVM
    99乘法表
    JAVA实现简单的时间刷新使用线程
    线程的优先级
    线程礼让
  • 原文地址:https://www.cnblogs.com/tjp40922/p/10701422.html
Copyright © 2011-2022 走看看