走进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
浙公网安备 33010602011771号