1. docker简介

本文详细介绍了Docker的优势,包括代码一致性、开发环境与生产环境的一致性和快速部署。内容涵盖Docker的组成、使用场景、安装流程、常用命令以及镜像、容器的管理。此外,还解决了Docker tag报HTTPS错误的问题,并介绍了如何从私有仓库下载和推送镜像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.docker的优点
1 代码一致:
在没有docker之前,开发、测试、生成环境可能不一样,如发布某个服务的端口时,开发是1000,而生产是2000,这就导致配置文件不一致。然而使用docker后,我在容器内的端口都是一样的,而容器对外暴露的端口可能不一样。
2 开发环境与生产环境的一致性
我们知道,在生产环境的部署比较复杂,服务非常繁多。通过docker,我们可以单机版上通过容器来模拟生产环境的分布式环境。从而让开发人员的开发更有效率。
3 快速部署
可以将docker理解为轻量级的虚拟机,启动docker容器速度很快,启动虚拟机很慢。

  1. 使用场景

    1. 开发人员:快速开发、交付应用程序
    2. 运维人员: 降低运维成本,节约安装各种软件(搭建环境)的时间
    3. 企业: 云服务
  2. docker组成
    dockerClient客户端
    Docker Daemon守护进程: 作为服务端,接受客户请求,并处理这些请求(创建、运行、分发容器)
    Docker Image镜像
    DockerContainer容器

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

  1. docker组件关系
    主机(HOSTS):运行容器的机器
    镜像(IMAGE):文件的层次结构,以及包含如何运行容器的元数据, Dockerfile中的每条命令都会在文件系统中创建一个新的层次结构,文件系统在这些层次上构建起来,镜像就构建于这些联合的文件系统之上
    容器(CONTAINER):一个从镜像中启动,包含正在运行的程序的进程
    Registry(镜像仓库):存放镜像的地方,如Docker Hub
    Volumn(卷):将物理机的文件夹挂载到容器内部.与openstack的volumn不一样,openstack中的卷是块存储,不能共享。而这里的volumn可以共享。
    Dockerfile:用于创建镜像的脚本

  2. windows版本docker安装

    1. 下载dockertoolbox,并安装
    2. 复制上述安装目录中的boot2docker.iso到C:\Users\hasee.docker\machine\cache中
    3. 验证是否安装成功
      docker runhello-world
  3. docker服务相关命令
    docker start 启动
    docker restart 重启
    docker stop 停止
    docker version 服务对应版本
    docker info docker环境
    docker 查看所有命令
    docker command --help 查看某个特定命令的使用说明

  4. docker容器相关命令

    1. 启动一次性运行的容器:

      docker run ubuntu:14.04 /bin/echo ‘Hello world’

      docker run ubuntu echo hello docker
      docker run:docker中的启动容器命令
      Ubuntu:镜像名称
      14:04:镜像TAG,如果不指定TAG,docker使用最新的发行版TAG:latest
      /bin/echo ‘Helloworld’:在容器内执行的命令

      执行过程:
      如果本地有ubuntu这个image就从它创建容器,否则从公有仓库下载
      从image创建容器
      分配一个文件系统,并在只读的image层外面挂载一层可读写的层
      从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
      从地址池配置1个ip地址给容器
      执行你指定的程序,在这里启动一个/bin/bash
      2.启动交互模式容器
      docker run -t-i ubuntu:14.04 /bin/bash
      -t:开启一个终端
      -i:以交互模式运行

    2. 启动后台模式容器
      docker run -d ubuntu:14.04 /bin/sh -c “while true; do echo hello world; sleep 1;done”
      -d:以后台Daemon方式运行,执行成功后会返回一个该容器的ID

    3. 以映射端口方式启动一个Web容器
      docker run -d -P training/webapp python app.py
      -d:以后台Daemon方式运行,执行成功后会返回一个该容器的ID
      -P:端口映射,外部端口到容器端口的映射规则由docker负责
      -p:自己指定端口映射规则,格式为:-p 外部端口:容器端口
      通过docker ps -l,可以查看到其PORTS列的端口映射规则
      当然你也可以,手工指定端口映射规则来启动Web容器
      docker run -d -p 5000:5000 training/webapp python app.py
      docker run -d -p 8080:80 nginx
      -p 完整的参数为:-p ip:hostport:port,将当前物理机的ip的端口映射到容器的端口

       	// 复制文件到容器内部
       	docker cp index.html 容器id://usr/share/nginx/html
       	// 保存容器
       	docker commit -m 'fun' 容器id 容器名字 // 返回一个新的image
       	// 删除image
       	docker rmi imageid
       	// 删除容器
       	docker rm 容器id
      

      查看容器的端口
      docker port 容器ID或容器名称

    4. 配置镜像加速器
      docker-machine ssh default
      sudo sed -i “s|EXTRA_ARGS=’|EXTRA_ARGS=’–registry-mirror=http://fede2b1d.m.daocloud.io |g” /var/lib/boot2docker/profile
      exit
      docker-machine restart default

    5. 查看容器具体信息
      docker inspect 容器ID或容器名称: 以JSON的格式返回容器

    6. 进入容器执行命令
      docker exec -it 容器ID /bin/bash

    7. 查看容器日志
      docker logs 容器ID或容器名称
      -f:以滚动的形式查看日志,类似于linux的tail -f XXX.log

    8. 退出当前容器
      exit //在容器内部执行该命令(或crtl+D),一般在交互模式下退出当前容器(容器仍然运行着)

    9. 创建容器
      docker create --name ubuntContainer ubuntu:14.04 /bin/echo ‘Hello world’

    10. 重启容器
      docker restart 容器ID

    11. 暂停容器
      docker pause 容器ID //暂停
      docker unpause 容器ID //解除暂停

    12. 停止容器
      docker stop 容器ID或容器名称
      docker stop $(docker ps -q -a) //一次性停止所有容器,慎用

    13. 杀死容器
      docker kill 容器ID或容器名称

    14. 删除容器
      docker rm 容器ID或容器名称 //删除容器,正在运行的容器不能删除
      docker rm $(docker ps -q -a) //一次性删除所有容器,慎用

    15. 创建一个容器并不启动
      docker create --name myrunoob nginx:latest

  5. Docker镜像相关命令

    1. 镜像查看
      docker images //在本机进行镜像查看
      docker inspect 镜像ID //查看单个镜像的具体信息,以JSON格式返回

    2. 获取镜像
      docker pull centos //从DockerHub获取镜像

    3. 查询镜像
      docker search 镜像名称 //从DockerHub按照镜像名称模拟查询镜像

    4. 制作镜像

      1. 通过Dockerfile构建镜像
        cd / //来到根“/”下
        mkdir redis //创建redis文件夹
        touch Dockerfile //创建Dockerfile文件,文件内容见如下灰色部分
        “”"
        FROM ubuntu:latest
        RUN apt-get update && apt-getinstall -y redis-server
        EXPOSE 6379
        ENTRYPOINT ["/usr/bin/redis-server"]
        “”"

      2. 通过docker build制作镜像
        docker build -t redis .
        -t : tag名称
        . : 当前Dockerfile的路径,在此处表示当前文件夹下

      3. 对运行着的容器commit镜像
        docker commit -m “Added json gem” -a “fireindark” 0b2616b0e5a8 ouruser/sinatra:v2
        -m:提交注释,如此处你加了什么特别的功能
        -a:作者
        0b2616b0e5a8:运行着的容器ID
        ouruser/sinatra:v2:给当前提交的镜像起名字并打标签

    5. 给镜像打标签
      docker tag 5db5f8471261 ouruser/sinatra:devel //当commit or build后,对镜像打标签
      5db5f8471261:此处的id为镜像ID
      备注:向私有仓库push镜像也要打标签

    6. 推送镜像到公共库DockerHub(还没来得及)
      DockerHub是存放镜像的远程仓库,这里简单介绍下,如何使用
      1 注册
      首先在https://hub.docker.com/account/signup/完成帐号注册
      2 登录
      帐号注册成功后,在https://hub.docker.com/account/login/,即可登录
      除了通过登录页面,您也可以通过命令行,通过指令sudo docker login登录
      3 查询镜像
      点击“Browse Repos”(或输入https://registry.hub.docker.com/),进入镜像查询页面
      在此页面,您可以录入你感兴趣的镜像名称,进行模糊查询
      当然你也可以通过docker search XXX进行镜像查询
      4 使用Docker帐号绑定GitHub帐号,进行自动化构建

    7. 推送镜像到私有库

      1. 下载私有仓库镜像
        docker pull registry

        从DockerHub下载registry镜像,里面含私库的运行环境,

        当然你也可以自己下载源码包,自己安装

      2. 推送之前打tag
        docker tag 704ca5ad68c5 192.168.202.213:5000/newtouch/activemq

        打标签(必须先打标签,在推送)

        命令格式为:docker tag $ID IP:IP:IP:port/$name
      3. Push tag到镜像
        docker push 192.168.202.213:5000/newtouch/activemq

        将此tag推送到私有库

      4. Push到仓库后,远程查看
        curl http://192.168.202.213:5000/v1/search

        push之后,远程查看

      5. 在另外一个docker客户端,从私有仓库下载
        docker pull 192.168.202.213:5000/newtouch/activemq

      Docker tag报https错误问题解决:
      vi /etc/default/docker

      Docker Upstart and SysVinitconfiguration file

      Customize location of Dockerbinary (especially for development testing).

      #DOCKER="/usr/local/bin/docker"

      Use DOCKER_OPTS to modify thedaemon startup options.

      #DOCKER_OPTS="–dns8.8.8.8 --dns 8.8.4.4"

      是添加的部分,重启docker服务

      DOCKER_OPTS="–insecure-registry 192.168.202.213:5000"

      If you need Docker to use anHTTP proxy, it can also be specified here.

      #exporthttp_proxy=“http://127.0.0.1:3128/”

      This is also a handy place totweak where Docker’s temporary files go.

      #exportTMPDIR="/mnt/bigdrive/docker-tmp"

    8. 删除镜像
      docker rmi 镜像ID

    9. 列出镜像的变更历史
      docker history

    10. 在物理机下查看有哪些容器
      docker ps //查看有那些正在运行着的容器
      -l:最近的一个容器,有可能没有运行
      -a:查看所有的容器,包含运行和没有运行的容器

    11. 实时打印所有容器的系统事件
      docker events

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆豆orz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值