走进docker,走完docker

一、docker的简单介绍

docker的三个基本概念:镜像(Image),容器(Container)和仓库(Repository)

Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像(Image)就是一堆只读层(read-only layer)的统一视角。

容器 (container) 的定义和镜像 (image) 几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。实际上,容器 = 镜像 + 读写层。

Docker 仓库是集中存放镜像文件的场所。镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry (仓库注册服务器)就是这样的服务。有时候会把仓库 (Repository) 和仓库注册服务器 (Registry) 混为一谈,并不严格区分。Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。实际上,一个 Docker Registry 中可以包含多个仓库 (Repository) ,每个仓库可以包含多个标签 (Tag),每个标签对应着一个镜像。所以说,镜像仓库是 Docker 用来集中存放镜像文件的地方类似于我们之前常用的代码仓库。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签.。

二、docker的安装

sudo yum -y install docker,安装完成后,运行docker info或者docker version来查看安装是否成功。

三、镜像的常用操作

1.获取镜像     docker pull <域名>/<namespace>/<repo>:<tag>

如果不显示的指定tag,默认Latest。默认是官方的,只有官方的可以不增加命名空间直接进行下载。

2.查看镜像列表  docker images   

显示仓库,标签,镜像id,创建时间,镜像大小

3.查看镜像信息  docker inspect <image_id>

返回的是一个JSON的格式消息,如果我们只要其中的一项内容时,可以通过-f参数来指定

docker inspect -f {{.Os}} 231d40e811cd             linux

docker inspect -f {{.Config.Cmd}} 231d40e811cd     [nginx -g daemon off;]

 

4.查找镜像  docker search <image_name>

5.删除镜像  docker rmi <image>:<tag> 

image可以为标签或者ID,当同一个镜像拥有多个标签,docker rmi只是删除该镜像多个标签中的指定标签而已,而不影响镜像文件。当有该镜像创建的容器存在时,镜像文件默认是无法被删除的。如果一个镜像就有一个tag的话,删除tag就删除了镜像的本身。

1)一个镜像做一个tag  docker tag 231d40e811cd gankcloud/nginx:test

 执行删除操作:docker rmi gankcloud/nginx:test

 删除镜像操作:docker rmi nginx,如果镜像里面有容器在运行,删除镜像会报错,-f 可以强制删除(不建议,强制删除镜像,容器没有删除,导致混乱)

  docker run nginx echo "gankcloud"   

  docker ps -a

  docker rmi (-f) nginx :Error response from daemon: conflict: unable to remove repository reference "nginx" (must force) - container 9be599eff3df is using its referenced image 231d40e811cd

6.创建镜像   docker commit <options> <container_id><repository:tag>

参数说明:

    -a , --author : 作者信息

    -m , --meassage : 提交消息

    -p , --pause=true : 提交时暂停容器运行

操作命令:

docker run -ti nginx bash

touch test.txt

echo "gankcloud" >> test.txt

exit

docker ps -a 

docker commit -a 'gankcloud' -m 'first commit' CONTAINER_ID REPOSITORY

 7.迁出镜像   docker save -o <image>.tar  <image>:<tag>

 8.载入镜像   docker load --input <image>.tar 或 docker load < <image>.tar

 9.上传镜像   docker push <域名>/<namespace>/<repo>:<tag> 

    docker save -o nginx.tar 8814a8c26da7

    docker rmi 8814a8c26da7

    docker load --input nginx.tar   docker images   (8814a8c26da7)

    doker tag 8814a8c26da7 gankcloud/nginx:test

    docker run -ti 8814a8c26da7 bash(确认下修改是否还在)

    docker push gankcloud/nginx:test  改成跟你的dockerhub上同一个用户名即可

四、容器的常用操作

1.创建容器 docker create 创建一个状态为Created的容器 可以使用docker start启动

docker create --name eee -ti nginx

 2.新建并启动容器:docker run

 docker run -i –t ubuntu  /bin/bash:

   -t : 让docker分配一个伪终端并绑定到容器的标准输入上。

   -i : 让容器的标准输入保持打开。

在交互模式下,用户可以通过所创建的终端来输入命令,exit命令退出容器。

 

守护台运行:

    更多的时候,需要让Docker容器运行在后台以守护态(daemonized)形式运行。用户可以通过

添加-d参数来实现。

Example:

    docker run –d nginx /bin/sh -c "while true;do echo hello world;sleep 1;done"

    docker logs -f <container_id>

3.停止容器  docker stop<container_id>

 

当容器中的应用终结时,容器也会自动停止。

    查看终止的容器:docker ps -a

    查看运行的容器:docker ps

    重新启动容器:docker start<container_id>

 

4.进入容器 docker exec <options> <container_id> <command>

    docker exec -i –t<container_id> bash

5.删除容器 docker rm (-f)  <container_id>

    如果删除正在运行的容器,需要停止容器在进行删除

6.导出容器     docker export <container_id>

bookdeMacBook-Pro:~ book$ docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES

f035836cee4a        nginx               "nginx -g 'daemon of…"   26 minutes ago      Up 26 minutes       80/tcp              ddd

bookdeMacBook-Pro:~ book$ docker export ddd>nginx.rar

7.导入容器

    导出的文件又可以使用docker import命令导入,成为镜像。

    cat nginx.tar | docker import - gankcloud/nginx:latest

五、创建和使用私有仓库

1.使用registry镜像创建私有仓库

命令:

docker run -eSEARCH_BACKEND=sqlalchemy -eSQLALCHEMY_INDEX_DATABASE=sqlite:////tmp/docker-registry.db -d --name registry -p 5000:5000 registry

-e设定环境变量

-d从后台启动的方式镜像启动

-name 启动的容器起个名字

-p 暴露端口,容器内部的5000绑定到宿主机的5000端口上。

registry镜像本身

SEARCH_BACKEND=sqlalchemy默认索引是可以查询的

解决Get https://10.100.81.34:5000/v2/: Service Unavailable的问题,修改下面的文件

bookdeMacBook-Pro:.docker book$ docker tag e8ee9509c106 127.0.0.1:5000/gankcloud/nginx

bookdeMacBook-Pro:.docker book$ docker push 127.0.0.1:5000/gankcloud/nginx

 

docker run -d --name registry_ui -p 8080:8080 -e REG1=http://127.0.0.1:5000/v1/ atcol/docker-registry-ui

 

访问地址:

IP:8080

 

  

    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2019-12-30 14:40  Java架构学习  阅读(219)  评论(0)    收藏  举报