后端开发程序员的docker学习笔记

 

 

概要

  众所周知,Docker是当前很是火的虚拟化容器技术,对于它的优点以及使用场景网上的资料很是多,这里我推荐你们去这个网站去学习了解docker(点我便可)html

我这里就写一下做为一名后端开发程序员,本身学习docker的笔记以及对docker在实际工做中的应用。python

开发->测试->运维的传统环境配置问题

  一开始之因此不介绍docker的安装、语法等基础知识点,是由于在实际工做中,做为一名后端开发者,咱们不只要扎实本身代码与逻辑的基本功,更要弄清楚本身的工做在整个项目流程中所处的位置、跟整个项目负责其余工做的同事协同合做,确保项目从开发到测试再到上线的顺利进行。mysql

环境配置带来的问题

  在虚拟化技术出现以前,阻挡在开发、测试与运维之间的一道横坎儿即是“环境配置”了,每台计算机的环境都不相同,应该如何确保本身的程序换一台机器能运行起来呢?linux

为了让同一程序在不一样的机器上跑起来,用户必须确保的是:git

  1. 操做系统的相同
  2. 各类平台库和组件的安装
  3. 例如python依赖包,环境变量等

若是一些低版本的依赖模块和当前环境不兼容,那就头疼了!程序员

环境配置确实是个痛苦的过程,若是实际中换一台机器,就得从新配置一下,那么在安装软件的时候,就得按照原始环境如出一辙的复制过来。github

网上有一个段子,对这个现象描述的十分生动:web

然而,开发和运维之间聊天通常是这样的~
sql

虚拟化技术解决环境配置的问题

为了解决相似这种问题,聪明的人们发明了虚拟化技术。docker

其实就是为每种开发运行环境配置对应的开发环境,开发作完后将环境迁移到测试工程师那里,测试完毕后再将同一套环境迁移到实际的生产环境中给运维工程师去维护。

虚拟化技术分为两种:一种是虚拟机,另一种就是本文要介绍的docker虚拟化容器技术

docker相比于虚拟机确实有十分强大的优点,下表就是docker与传统的虚拟机的性能对比:

下面是网上对于docker容器的优点的诠释:

更高效的利用系统资源
因为容器不须要进行硬件虚拟以及运行完整操做系统等额外开销,Docker 对系统 资源的利用率更高。
不管是应用执行速度、内存损耗或者文件存储速度,都要比传 统虚拟机技术更高效。所以,相比虚拟机技术,一个相同配置的主机,每每能够运 行更多数量的应用。
更快速的启动时间
传统的虚拟机技术启动应用服务每每须要数分钟,而 Docker 容器应用,因为直接 运行于宿主内核,无需启动完整的操做系统,所以能够作到秒级、甚至毫秒级的启 动时间。大大的节约了开发、测试、部署的时间。
一致的运行环境
开发过程当中一个常见的问题是环境一致性问题。因为开发环境、测试环境、生产环 境不一致,致使有些 bug 并未在开发过程当中被发现。
而 Docker 的镜像提供了除内 核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 “这段代码 在我机器上没问题啊” 这类问题。
持续交付和部署
对开发和运维(DevOps)人员来讲,最但愿的就是一次建立或配置,能够在任意 地方正常运行。
使用 Docker 能够经过定制应用镜像来实现持续集成、持续交付、部署。开发人员 能够经过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) 系 统进行集成测试,
而运维人员则能够直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。
并且使用 Dockerfile 使镜像构建透明化,不只仅开发团队能够理解应用运行环 境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
更轻松的迁移
因为 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 能够在 不少平台上运行,不管是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运 行结果是一致的。
所以用户能够很轻易的将在一个平台上运行的应用,迁移到另外一 个平台上,而不用担忧运行环境的变化致使应用没法正常运行的状况。

开发->测试->运维基于docker的高效协做流程

有了docker后,开发、测试与运维之间不会再为环境配置而浪费没必要要的时间了,咱们能够把更多的精力放在本身自己的技术工做中!

下图简单的诠释了利用dockerhub(docker镜像的远程存储仓库)与github程序员、测试员与运维人员之间的协做关系:

docker的三大概念

docker的三大概念是:

  1. 镜像 image
  2. 容器 container
  3. 仓库 repository

 docker的整个生命周期就是这三个概念。

镜像image

Docker镜像就是一个只读的模板。

例如:一个镜像能够包含一个完整的CentOS操做系统环境,里面仅安装了Apache或用户须要的其余应用程序。

镜像能够用来建立Docker容器。

Docker提供了一个很简单的机制来建立镜像或者更新现有的镜像,用户甚至能够直接从其余人那里下载一个已经作好的镜像来直接使用。

image的分层存储

由于镜像包含完整的root文件系统,体积是很是庞大的,所以docker在设计时按照Union FS的技术,将其设计为分层存储的架构。
镜像不是ISO那种完整的打包文件,镜像只是一个虚拟的概念,他不是一个完整的文件,而是由一组文件组成,或者多组文件系统联合组成。

容器container

imagecontainer的关系,就像面向对象程序设计中的 类和实例同样,镜像是静态的定义(class),容器是镜像运行时的实体(object)。

容器能够被建立启动中止删除暂停
Docker利用容器来运行应用。 容器是从镜像建立的运行实例。它能够被启动、开始、中止、删除。每一个容器都是相互隔离的,保证安全的平台。 能够把容器看作是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。 注意:镜像是只读的,容器在启动的时候建立一层可写层做为最上层。

仓库repository

仓库是集中存放镜像文件的场所。有时候把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上每每存放着多个仓库,每一个仓库中又包含了多个镜像,每一个镜像有不一样的标签(tag)。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,能够提供大陆用户更稳定快读的访问。

当用户建立了本身的镜像以后就可使用push命令将它上传到公有或者私有仓库,这样下载在另一台机器上使用这个镜像时候,只需须要从仓库上pull下来就能够了。

注意:Docker仓库的概念跟Git相似,注册服务器能够理解为GitHub这样的托管服务。

docker Registry

Docker Registry公开服务是开放给用户使用、容许用户管理镜像的Registry服务。通常这类公开服务容许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。

最常使用的Registry公开服务是官方的Docker Hub,这也是默认的 Registry,并拥有大量的高质量的官方镜像。

除此之外,还有CoreOS的Quay.io,CoreOS相关的镜像存储在这里;Google的Google Container Registry,Kubernetes的镜像使用的就是这个服务。
因为某些缘由,在国内访问这些服务可能会比较慢。
国内的一些云服务商提供了针对Docker Hub的镜像服务(Registry Mirror),这些镜像服务被称为加速器。常见的有阿里云加速器、DaoCloud加速器、灵雀云加速器等。
使用加速器会直接从国内的地址下载Docker Hub的镜像,比直接从官方网站下载速度会提升不少。在后面的章节中会有进一步如何配置加速器的讲解。
国内也有一些云服务商提供相似于Docker Hub的公开服务。好比时速云镜像仓库、网易云镜像服务、DaoCloud镜像市场、阿里云镜像库等。

centos7中安装docker

推荐遵循官方的安装方式

官方的安装方式:

1.卸载旧版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

2.设置存储库
sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

3.安装docker社区版
sudo yum install docker-ce
4.启动关闭docker systemctl start docker

若是你的网速不是很快,也能够用yum源安装(注意提早配置好阿里云的yum源!)

配置阿里云的yum源参考个人这篇博客:http://www.javashuo.com/article/p-mhpwtfzx-m.html

yum install docker -y 

docker版本

Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。
企业版包含了一些收费服务,我的开发者通常用不到。本文的介绍都针对社区版。

系统环境支持 

docker最低支持centos7且在64位平台上,内核版本在3.10以上
[root@oldboy_python ~ 10:48:11]#uname -r
3.10.0-693.el7.x86_64

配置docker加速器

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

这个命令是修改/etc/docker/daemon.json文件,写入一个json数据以下:

[root@s20 ~]# cat /etc/docker/daemon.json

{"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}

注意这里有一个坑:

运行完加速命令后,会提示你restart docker,而后,你在重启docker的时候可能会报错:

这条错误的出现,缘由实际上是在执行加速命令的时候,上面的那个json文件多了一个逗号~

把文件中的那个逗号删除,而后保存退出后再执行 systemctl restart docker 就能够了~

配置好docker加速器的目的是提升下载docker镜像的速度!

下载centos的docker镜像

固然你也能够下载ubuntu的镜像,咱们先拿centos的镜像来举例:

docker pull centos  

运行docker容器

咱们能够吧docker的镜像比做是面向对象的类,而docker容器就是这个“类”实例化出的对象!

查看docker镜像的命令为:

# 查看镜像
docker images

经过镜像运行出容器实例的命令为:

docker  run  镜像名/镜像id  

查看容器的命令以下:

#查看正在运行的容器进程
docker  ps  
#显示全部运行过的容器进程(正在运行的,以及挂掉的容器进程)
docker ps -a  
#同上,是旧的命令 
docker container ls -a  

进行docker容器的管理 

管理docker镜像对于程序开发者来讲十分重要,我这里单独拿出一个篇幅去详细介绍docker容器的管理!

docker容器的管理

注意如下3点:

# docker容器中必须有进程在后台运行,不然容器挂掉!!!
 # docker镜像每次运行 都会生成新的容器id记录 # 运行三次同一个镜像,会出现三次容器新的记录
docker run hello-world  
docker run hello-world
docker run hello-world

经常使用命令

##获取镜像
(1)
docker pull centos  #下载docker镜像 centos
docker pull hello-world  #获取一个hello-world镜像  

(2)从指定的地点pull docker pull 192.168.16.142:5000/s20-hello-world docker pull yuchao163/centos-entrypoint-exec ##查看全部的docker镜像 docker images 或者 docker image ls ##查看正在运行的docker实例 docker ps ##查看全部的docker实例 docker ps -a ##运行一个交互式的ubuntu容器实例 ##参数解释 -i 交互式的命令操做 -t 开启一个终端界面 /bin/bash 指定linux的解释器 docker run -it ubuntu /bin/bash ##交互式的运行一个centos容器 docker run -it centos /bin/bash ##获取一个python的flask的镜像 ## docker run的特色是,若是镜像不存在,会自动的先去docker pull docker run -d -P training/webapp python app.py -d 后台运行 -P 端口映射,随机映射 training/webapp 镜像名 python app.py 你要执行的命令 ##删除容器id记录,只能删除挂掉的容器 docker rm 容器id

 #删除本地docker镜像
  docker rmi 镜像id或者镜像名
 #强制删除镜像文件
  docker rmi -f 镜像id

##批量删除挂掉的容器记录   
##注意这不是引号,是键盘按键1左边的那个符号!
docker  rm  `docker ps -aq`  

##在容器的后台运行一个进程,运行出活着的容器
docker run -d centos /bin/sh -c "while true;do echo  'naruto'; sleep 1;done"  
    
    -d  就是daemonize 后台运行的意思
    centos  指定哪一个镜像
    /bin/sh 指定linux的解释器
    -c  指定一段shell代码
    "while true;do echo 'naruto'; sleep 1;done"     每秒打印一个naruto字符串
    
##进入容器空间内
docker exec  -it   运行着的容器id     /bin/bash    

##查看容器日志
docker logs  容器id
docker logs -f  容器id  #检测容器内的日志

仓库及容器端口映射的相关命令

#运行一个web容器的操做
获取一个python的flask的镜像
## 注意 docker run的特色是,若是镜像不存在,会自动的先去docker pull
docker run -d -P training/webapp python app.py -d 后台运行 -P 端口映射,随机映射 training/webapp 镜像名 python app.py 你要执行的命令 ##docker容器的端口映射 docker port 容器id ##容器的启停管理 docker start 容器id docker stop 容器id

docker基本命令注释:

[root@docker ~]# docker --help

Usage:
docker [OPTIONS] COMMAND [arg...]

       docker daemon [ --help | ... ]

       docker [ --help | -v | --version ]

 

A
self-sufficient runtime for containers.

 

Options:

 

  --config=~/.docker              Location of client config files  #客户端配置文件的位置

  -D, --debug=false               Enable debug mode  #启用Debug调试模式

  -H, --host=[]                   Daemon socket(s) to connect to  #守护进程的套接字(Socket)链接

  -h, --help=false                Print usage  #打印使用

  -l, --log-level=info            Set the logging level  #设置日志级别

  --tls=false                     Use TLS; implied by--tlsverify  #

  --tlscacert=~/.docker/ca.pem    Trust certs signed only by this CA  #信任证书签名CA

  --tlscert=~/.docker/cert.pem    Path to TLS certificate file  #TLS证书文件路径

  --tlskey=~/.docker/key.pem      Path to TLS key file  #TLS密钥文件路径

  --tlsverify=false               Use TLS and verify the remote  #使用TLS验证远程

  -v, --version=false             Print version information and quit  #打印版本信息并退出

 

Commands:

    attach    Attach to a running container  #当前shell下attach链接指定运行镜像

    build     Build an image from a Dockerfile  #经过Dockerfile定制镜像

    commit    Create a new image from a container's changes  #提交当前容器为新的镜像

    cp    Copy files/folders from a container to a HOSTDIR or to STDOUT  #从容器中拷贝指定文件或者目录到宿主机中

    create    Create a new container  #建立一个新的容器,同run 但不启动容器

    diff    Inspect changes on a container's filesystem  #查看docker容器变化

    events    Get real time events from the server#从docker服务获取容器实时事件

    exec    Run a command in a running container#在已存在的容器上运行命令

    export    Export a container's filesystem as a tar archive  #导出容器的内容流做为一个tar归档文件(对应import)

    history    Show the history of an image  #展现一个镜像造成历史

    images    List images  #列出系统当前镜像

    import    Import the contents from a tarball to create a filesystem image  #从tar包中的内容建立一个新的文件系统映像(对应export)

    info    Display system-wide information  #显示系统相关信息

    inspect    Return low-level information on a container or image  #查看容器详细信息

    kill    Kill a running container  #kill指定docker容器

    load    Load an image from a tar archive or STDIN  #从一个tar包中加载一个镜像(对应save)

    login    Register or log in to a Docker registry#注册或者登录一个docker源服务器

    logout    Log out from a Docker registry  #从当前Docker registry退出

    logs    Fetch the logs of a container  #输出当前容器日志信息

    pause    Pause all processes within a container#暂停容器

    port    List port mappings or a specific mapping for the CONTAINER  #查看映射端口对应的容器内部源端口

    ps    List containers  #列出容器列表

    pull    Pull an image or a repository from a registry  #从docker镜像源服务器拉取指定镜像或者库镜像

    push    Push an image or a repository to a registry  #推送指定镜像或者库镜像至docker源服务器

    rename    Rename a container  #重命名容器

    restart    Restart a running container  #重启运行的容器

    rm    Remove one or more containers  #移除一个或者多个容器

    rmi    Remove one or more images  #移除一个或多个镜像(无容器使用该镜像才能够删除,不然须要删除相关容器才能够继续或者-f强制删除)

    run    Run a command in a new container  #建立一个新的容器并运行一个命令

    save    Save an image(s) to a tar archive#保存一个镜像为一个tar包(对应load)

    search    Search the Docker Hub for images  #在docker
hub中搜索镜像

    start    Start one or more stopped containers#启动容器

    stats    Display a live stream of container(s) resource usage statistics  #统计容器使用资源

    stop    Stop a running container  #中止容器

    tag         Tag an image into a repository  #给源中镜像打标签

    top       Display the running processes of a container #查看容器中运行的进程信息

    unpause    Unpause all processes within a container  #取消暂停容器

    version    Show the Docker version information#查看容器版本号

    wait         Block until a container stops, then print its exit code  #截取容器中止时的退出状态值

 

Run 'docker COMMAND --help' for more information on a command.  #运行docker命令在帮助能够获取更多信息
docker基本命令

制做docker及使用制做好的docker镜像的简单过程

##1.获取一个centos基础镜像,运行处容器后
    docker run -it  centos /bin/bash  

##2.进入容器空间内,默认没有python3 和其余软件
    进入以后,安装一个vim
    yum install vim -y 
##3.自定义软件后,退出容器,提交这个容器,成为一个新的镜像 exit退出容器
##4.此时这个镜像文件,能够发送给其余同事了 docker commit 容器id 新的镜像的名字 docker commit 5c2 s20/centos-vim ##5.查看提交的镜像文件 docker images ##6.导出这个镜像文件,指定导出的文件名和后缀 docker save 镜像名/id > /opt/s20-centos-vim.tar.gz ##7.在本地测试导入这个镜像 ###### 能够在本地测试,先删除本来的镜像 导入命令 docker load < /opt/s20-centos-vim.tar.gz ##8.给导入的镜像,修改tag别名 docker tag 旧的镜像名 以dockerhub仓库id开头的/新的镜像名 ### 以dockerhub仓库id开头的是为了之后在推送的时候,根据这个名字在远程仓库找到对应的仓库名 docker tag 621 yuchao163/s20-centos-vim ##9.执行这个docker镜像,运行处容器后,查看是否携带了vim #语法 关键字 关键字 参数 镜像名 你要执行的命令 docker run -it yuchao163/s20-centos-vim /bin/bash

dockerfile***

dockerfile实在是过重要了,我这里也单独把它做为一个篇幅来说。

获取docker镜像的三种方式

1.去docker仓库获取的方式,一个是公网仓库,一个是私有仓库
    docker pull

2.获取别人发来的镜像,也就是自定义的镜像 3.经过dockerfile构建docker镜像

  你们能够再返回看一下上面的那张阐述了开发与测试跟运维之间解决环境配置的简图,其中最为重要的一点就是:开发把dockerfile(能够当作是docker配置环境的文件)上传至github,运维跟测试依据这个dockerfile去快速的搭建环境!

之因此利用这种方式去构建环境是由于经过dockerfile咱们能够自定制镜像。

  镜像的定制就是定制每一层所添加的配置、文件。若是能够吧每一层修改、安装、构建、操做的命令都写入到一个脚本,用脚原本构建、定制镜像,这个脚本就是dockerfile。

  Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令 构建一层,所以每一条指令的内容,就是描述该层应当如何构建。

  说白了,这个文件就是定制docker镜像的一个脚本而已,咱们须要学习里面的功能性的参数

经过dockerfile构建docker镜像的说明:

FROM scratch #制做base image 基础镜像,尽可能使用官方的image做为base image
FROM centos #使用base image
FROM ubuntu:14.04 #带有tag的base image

LABEL version=“1.0” #容器元信息,帮助信息,Metadata,相似于代码注释
LABEL maintainer=“yc_uuu@163.com"

#对于复杂的RUN命令,避免无用的分层,多条命令用反斜线换行,合成一条命令!
RUN yum update && yum install -y vim \
    Python-dev #反斜线换行
RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME”

WORKDIR /root #至关于linux的cd命令,改变目录,尽可能使用绝对路径!!!不要用RUN cd
WORKDIR /test #若是没有就自动建立
WORKDIR demo #再进入demo文件夹
RUN pwd     #打印结果应该是/test/demo

ADD and COPY 
ADD hello /  #把本地文件添加到镜像中,吧本地的hello可执行文件拷贝到镜像的/目录
ADD test.tar.gz /  #添加到根目录并解压

WORKDIR /root
ADD hello test/  #进入/root/ 添加hello可执行命令到test目录下,也就是/root/test/hello 一个绝对路径
COPY hello test/  #等同于上述ADD效果
 ADD与COPY - 优先使用COPY命令
    -ADD除了COPY功能还有解压功能
添加远程文件/目录使用curl或wget

ENV #环境变量,尽量使用ENV增长可维护性
ENV MYSQL_VERSION 5.6 #设置一个mysql常量
RUN yum install -y mysql-server=“${MYSQL_VERSION}” 

------这里须要稍微理解一下了-------中级知识--- VOLUME and EXPOSE 存储和网络 RUN and CMD and ENTRYPOINT RUN:执行命令并建立新的Image Layer CMD:设置容器启动后默认执行的命令和参数 ENTRYPOINT:设置容器启动时运行的命令 Shell格式和Exec格式 RUN yum install -y vim CMD echo ”hello docker” ENTRYPOINT echo “hello docker” Exec格式 RUN [“apt-get”,”install”,”-y”,”vim”] CMD [“/bin/echo”,”hello docker”] ENTRYPOINT [“/bin/echo”,”hello docker”] 经过shell格式去运行命令,会读取$name指令,而exec格式是仅仅的执行一个命令,而不是shell指令 cat Dockerfile FROM centos ENV name Docker ENTRYPOINT [“/bin/echo”,”hello $name”]#这个仅仅是执行echo命令,读取不了shell变量 ENTRYPOINT [“/bin/bash”,”-c”,”echo hello $name"] CMD 容器启动时默认执行的命令 若是docker run指定了其余命令(docker run -it [image] /bin/bash ),CMD命令被忽略 若是定义多个CMD,只有最后一个执行 ENTRYPOINT 让容器以应用程序或服务形式运行 不会被忽略,必定会执行 最佳实践:写一个shell脚本做为entrypoint COPY docker-entrypoint.sh /usr/local/bin ENTRYPOINT [“docker-entrypoint.sh] EXPOSE 27017 CMD [“mongod”] [root@master home]# more Dockerfile FROm centos ENV name Docker #CMD ["/bin/bash","-c","echo hello $name"] ENTRYPOINT ["/bin/bash","-c","echo hello $name”]

经过dockerfile定制一个python flask web程序,运行出容器

配置过程以下:

1.准备一个flask代码文件

touch whwflask.py
vim whwflask.py

flask的代码以下:

#coding:utf8
from flask import Flask
app=Flask(__name__)
@app.route('/')
def hello():
return "HELLO NARUTO"
if __name__=="__main__":
app.run(host='0.0.0.0',port=8080)

2.配置python2的包管理,安装flask

 

easy_install -i https://pypi.tuna.tsinghua.edu.cn/simple flask

 

3.准备Dockerfile,写入以下内容

FROM centos
COPY CentOS-Base.repo /etc/yum.repos.d/
COPY epel.repo /etc/yum.repos.d/ 
RUN yum clean all 
RUN yum install python-setuptools -y
RUN easy_install -i https://pypi.tuna.tsinghua.edu.cn/simple flask
COPY whwflask.py /opt/
WORKDIR /opt
EXPOSE 8080 #暴露容器内的8080端口
CMD ["python","whwflask.py"] #让容器执行以下命令

4.准备好齐全的文件,开始构建docker镜像

[root@s20 s20docker]# ls
CentOS-Base.repo Dockerfile epel.repo whwflask.py

5.构建docker镜像的命令,这个命令得在Dockerfile的目录下执行!!!

docker build .

6.构建镜像完成以后,查看镜像文件

docker images
# 6f0是docker镜像的id的前三个字母
docker tag 6f0 whw-flask-docker

7.运行这个镜像便可

docker run -d -p 7777:8080 6f0

docker仓库的学习

docker提供了一个相似于github的仓库dockerhub。

网址是https://hub.docker.com/须要注册使用。

公有仓库

公有仓库的使用比较简单,基本步骤以下:

#注册docker id后,在linux中登陆dockerhub
docker login #输入你的帐号密码 就能够成功登陆

#注意要保证image的tag是帐户名,若是镜像名字不对,须要改一下tag
docker tag 你的dockerhub帐号名/你的docker镜像名 本地的镜像id或名

语法是:docker tag 仓库名 huoyingwhw/仓库名

#推送docker image到dockerhub
docker push huoyingwhw/centps-cmd-exec:latest

#在dockerhub中检查镜像
https://hub.docker.com/

#删除本地镜像,测试下载pull 镜像文件
docker pull huoyingwhw/centos-entrypoint-exec

私有仓库

私有仓库的配置方法以下:

1.下载一个registry 私有仓库镜像 # 这个 \ 是换行符的意思 
# -v 是数据文件夹挂载  ,宿主机的数据文件夹:容器内的文件夹

docker run -d \
    -p 5000:5000 \
    -v /opt/data/registry:/var/lib/registry \
    registry
    
2.能够查看私有仓库的api数据地址,以下
http://10.0.0.128:5000/v2/_catalog

3.可是此时的私有仓库还无法使用,它不支持http方式的推送,修改默认的配置文件便可 1.编辑docker的配置文件
    vim /etc/docker/daemon.json  
    2.写入以下信息,地址改为你本身的ip
    {"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
        "insecure-registries":["10.0.0.128:5000"]
    }
    3.修改docker的配置文件
vim
/lib/systemd/system/docker.service 添加以下配置,在[Service]的代码区域块中,添加以下参数 [Service] EnvironmentFile=-/etc/docker/daemon.json 4.从新加载这个文件 systemctl daemon-reload 5.重启整个docker服务 systemctl restart docker 6.从新启动一个私有仓库 # 外部的9000端口映射到docker容器的5000端口 docker run --privileged=true -d -p 9000:5000 -v /opt/data/registry:/var/lib/registry registry 参数解释: --privileged=true docker容器的安全机制:设置特权级运行的容器 7.推送本地的镜像,到私有仓库中去 docker push 10.0.0.128:5000/whw-hello-world 8.其余同事就能够经过这个私有仓库的镜像地址获取你的镜像了 docker pull 10.0.0.128:5000/whw-hello-world 4.还得修改本地镜像的名字,以仓库地址为开头 #docker tag 你要修改的镜像 修改以后的镜像名 docker tag fce 10.0.0.128:5000/whw-hello-world 5.编写Dockerfile,文件名固定 touch dockerfile vim dockerfile ...
相关文章
相关标签/搜索