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.lang.NoSuchMethodError:antlr.collections.AST.getLine() I
    T7 java Web day01 标签HTML
    T6 s1 day19
    T5 s5 Day18
    T5 s4 Day 17
    T5 s3 day16
    T5 s2 Day 15
    T5 s1 day14
    T4 S03 day 12
    T4 S01 day1
  • 原文地址:https://www.cnblogs.com/tjp40922/p/10701422.html
Copyright © 2011-2022 走看看